Repository navigation
Walkthrough adoption path cannot succeed: 'assent run' refuses the shipped starter packs #158
Description
Severity: High — every adopter following the front door. Review finding D1 (consolidated XREV review); deferred whole by #157 (openspec/changes/p5-xrev-final-remediation/proposal.md Non-goals). Re-verified at 1c4e71e.
docs/usage/walkthrough.md:49 has adopters cp -R assent/examples/packs/topic-registry/.assent .assent. The CI job at :237 runs assent run --project … --mr … --subject … --bot-author … and promises (:254-256) "approval, and merges. Nobody was interrupted." On the shipped packs that path cannot succeed:
- Default filenames missing.
assent rundefaults to--policy .assent/merge-policy.yamland--binding .assent/ruleset-binding.yaml(cmd/assent/run.go:132-133). Each of the three packs ships onlybindings.yamlandconfig.yamlat.assent/top level (find examples/packs/*/.assent -maxdepth 1 -type f). The walkthrough passes neither flag, so the first run dies on the policy read. - Packs are test-shaped, not run-shaped. Each rule file is a standalone one-rule
kind: MergePolicydocument, the catalogue layoutassent testloads withcatalogue.LoadFromDir.--policyloads one MergePolicy document (policy.LoadMergePolicy), so pointing it at any single rule file leaves the binding's otherrequire[]obligations uncovered → REVIEW. - Multi-binding refusal. Every pack's
bindings.yamldeclares 2 bindings (dev and prod).selectBinding(cmd/assent/run.go:504-512) hard-errors whenlen > 1: "(class, environment) routing needs the Config class-matcher (not wired in this lane)".assent testhides this becauseselectBindingForTestcollapses the pair to the strictest binding. - No
--configin the recipe. Facts resolve only from--config(run.go:135, now documented that way). The walkthrough CI block still omits it, andresolveRunFactsreturns empty facts whenconf == nil(cmd/assent/provider_host.go). The packs'ownershiprule bindsfacts.author.groups→ REVIEW. - No collection-entry reconstruction on
run(found by Implement the final consolidated review remediation (D2,D3,D4,D5,D16,D17,D18; D1 deferred) #157's review).changeSetForGoverneduses document-modechange.Diff, andevaldecode.BuildEvaluationInputleavesEvalChange.Entrynil. Everyentry.*predicate therefore binds the scalar fallback, soentry.owner in …→predicate.error→ REVIEW, whatever the filenames are.
CI cannot see it: hack/dogfood-examples.sh runs only assent test / test --coverage. No gate drives assent run against a shipped pack.
Fix (spec-first lane, per #157's proposal):
- (a) DEM-S00
(class, environment)routing per D-142; - (b) collection-entry reconstruction on the run path (E1-S05/E1-S08);
- (c) make the packs run-consumable, or teach
runthe catalogue layout; - (d) add
--configand the needed flags to the walkthrough CI block; - (e) add a
check:dogfood gate that drivesassent runagainst the shipped packs through the existing fake forge (cmd/assent/run_*_test.gopattern); - (f) record the filename, format and recipe gaps against D-142.
Until then, consider marking the walkthrough's Step 5/6 promise as not yet achievable on the shipped packs.
Activity