Development record
`intent-fidelity-reviewer` Gains Its Cross-Doc And Kind-Classification Roles
Re-scoped on 2026-09-21 by the product thinker: the consistency pass only. The shape role goes to the kinds lint (itd-34) and the overlap question to the pre-pass (itd-42); the headless oracle leg this record named no longer exists. The press release and scope below are read through this paragraph and the Decisions section.
Press Release
abcd's
intent-fidelity-revieweragent grows from oneroleto three.Role 1(per-intent fidelity) grades a shipped intent's acceptance criteria against delivered reality and writesMET/MET_WITH_CONCERNS/NOT_MET/INCONCLUSIVEverdicts back into the intent's## Audit Notes. This intent shipsRole 2(cross-document consistency — surfaces terminology drift, premise contradictions, scope leakage, sequencing impossibilities, naming conflicts across the brief + intents corpus) andRole 3(kind classification — examines whether intents' declaredkindstill fits the corpus and surfaces suggested reclassifications). With all three roles live,/abcd:intent consistencyand/abcd:intent shapemove from documented command surface to working command surface. The reviewer becomes the corpus's continuous fidelity auditor."The corpus had drifted in three places I hadn't noticed," said Nia, facilitator. "itd-29 still used
epicthroughout itspress releasecopy; itd-34's discipline lifecycle said one thing and adr-9's brief amendment said another; itd-37 had been silently bundle-shaped for two intents now without anyone reclassifying./abcd:intent consistencyand/abcd:intent shapesurfaced all three in one pass. None of them were urgent. All of them would have bitten."
Why This Matters
The intent-fidelity-reviewer agent is named in docs/reference/commands.md as the engine behind three distinct review verbs on /abcd:intent:
| Verb | Role | Status |
|---|---|---|
review <itd-N> |
Role 1 — per-intent fidelity | Shipped (spc-12, predecessor store) |
consistency [<itd-N>] |
Role 2 — cross-doc fidelity | Documented, not built |
shape [<itd-N>] |
Role 3 — kind classification | Documented, not built |
A 2026-05-16 working-log entry named this gap: "No flow-next spec owns internal/core/lint or the intent-fidelity-reviewer agent" — partially addressed by spc-12 (predecessor store) for Role 1, but Roles 2 and 3 still have no owner. spc-12 (predecessor store)'s spec explicitly bounded itself to Role 1; the other two roles "are NOT in scope: they are a later Pass A/B/C agent spec" (spc-12 (predecessor store) ## Overview).
This intent ships those later epics as a standalone intent whose scope covers both roles — the two roles share substrate that should land together:
- Same agent file (
agents/intent-fidelity-reviewer.md). Roles 2 and 3 add prompt sections to the same agent, with the sameprompt_versionfamily, the same injection-canary fixture, the same itd-5 discipline gates. Shipping them separately means two agent CHANGELOG bumps two weeks apart and twice the discipline overhead. - Same oracle infrastructure. Both roles call
_build_cli_oracle()and follow the same itd-6 cascade ordering. Both ride on itd-47's autonomous-mode oracle fix. - Same command-surface conventions. Both follow the
[<itd-N>]optional-ID pattern (bare = scan corpus, with ID = scan one intent); both write findings to a structured output the facilitator can act on; both honour the bare-command-as-help convention.
The kind is standalone per itd-34: a formal bundle-member requires multiple intent files sharing a bundle: id and an spec_id, and itd-48 is one intent file. The "bundle" framing here is metaphorical — two reviewer roles bundled into one spec's scope, not the schema bundle-member kind. The capture-time suggested_kind: bundle-member advisory was a category error and is preserved as historical advisory data in the frontmatter; reclassification_history records the null → standalone correction.
The intent is project-agnostic: every abcd project that uses the intent corpus benefits from cross-doc consistency checking and kind reclassification suggestions. The reviewer's behaviour is shaped by the framework, not by any one project's subject matter.
What's In Scope
Role 2 — cross-document consistency
- Extend
agents/intent-fidelity-reviewer.mdwith a Role 2 prompt section that takes the brief + intents corpus as input and surfaces:- Terminology drift — uses of forbidden synonyms, glossary-undeclared terms, or terms used inconsistently across documents.
- Premise contradictions — two intents declaring incompatible facts/assumptions about the same surface.
- Scope leakage — an intent's
## What's In Scopeoverlapping another intent's scope in a way that creates double-coverage or contradictory coverage. - Sequencing impossibilities — intent A claims to depend on intent B, but B's scope cannot satisfy A's dependency as written.
- Naming conflicts — same noun used for different concepts; different nouns used for the same concept.
- Implement
/abcd:intent consistency [<itd-N>]routing incommands/intent.md(the row already exists in the doc but the routing is stubbed). - Findings emitted as structured records grouped by judgement category (terminology drift, premise contradictions, scope leakage, sequencing impossibilities, naming conflicts) — spc-29 (predecessor store) ships finding categories, not mechanical lint codes. Mechanical cross-doc categories (schema/state contradictions, reference rot, acknowledgement gaps) and any associated lint-code namespace are deferred to a follow-up intent.
- Reports land at
.abcd/logbook/audit/consistency-<ts>/report.{json,md}(JSON internal, MD render — per the transparency invariant).
Role 3 — kind classification review
- Extend the same agent with a Role 3 prompt section that examines whether
intents' declared
kindstill fits the corpus and surfaces suggested reclassifications. Inputs: an intent (or all intents) + the corpus the intent sits in. Outputs: on scoped runs, ascoped_verdict.verdictofKIND_OK/KIND_DRIFT/INCONCLUSIVE; on every run, a top-levelsuggestions[]list whose entries carrysuggestion_type∈{kind_change, bundle, supersession}.KIND_DRIFTpairs with an embeddedscoped_verdict.suggestionthat is also reconciled intosuggestions[](matched byfinding_signature). - Implement
/abcd:intent shape [<itd-N>]routing as an on-demand verb. Continuous pre-commit shape scanning is deferred to a follow-up intent — spc-29 (predecessor store) ships only the on-demand surface. - Pairs with
/abcd:intent reclassify(already documented) — when Role 3 surfaces a finding,reclassifyis the action verb that commits it. - Reports land at
.abcd/logbook/audit/shape-<ts>/report.{json,md}. Findings carrysuggestion_type∈{kind_change, bundle, supersession}with the matching arm fields (current_kind+suggested_kind,bundle_members, orsuperseded_by); scoped runs additionally emit theKIND_OK/KIND_DRIFT/INCONCLUSIVEscoped_verdict. spc-29 (predecessor store) does not introduce a mechanical lint-code namespace for this persona.
Shared
- Both roles share spc-12 (predecessor store)'s testing pattern: golden fixtures + at least one injection-canary per role (per itd-5).
- Both roles call
_build_cli_oracle()from itd-47's extended version, so they run in headless Ralph mode. - Pre-commit hook wiring is deferred to a follow-up intent for both
roles. spc-29 (predecessor store) ships the on-demand verbs (
/abcd:intent consistencyand/abcd:intent shape) only; the previous draft's promise of aintent-fidelity-consistencypre-commit hook and Role 3's "runs continuously in pre-commit" surface are explicitly out of scope.
What's Out Of Scope
- Role 1 modifications. spc-12 (predecessor store) shipped Role 1; this intent does not edit it.
lifeboat-oracleagent. itd-5's named reviewer; out of scope here.- Auto-fix for findings. Role 2 and Role 3 surface findings; a
human (or
/abcd:intent reclassify) acts on them. No "auto-apply-suggested-reclassification" verb. - Cross-document fidelity beyond the corpus. External docs (PRs,
external research) are out of scope; only
brief/+intents/are the inputs.
Scope Conditions
None stated.
Mechanism
We expect a whole-corpus read to find contradictions no single-record review can, because terminology drift, a premise that two records state differently and a scope that leaked are visible only with both ends in view; shown wrong if a pass over the current corpus finds nothing the ledger did not already hold.
Acceptance Criteria
- Given
abcd intent consistencyruns bare, when it completes, then a dated report exists under the reviews shelf listing each contradiction found across the brief and every intent (terminology, premise, scope, sequencing, naming), with both ends quoted and located, and the commit it read named. - Given the report's findings, when the pass files them, then each is an issue naming both ends with the report as its evidence, and a finding the ledger already holds is linked to the existing record rather than filed twice.
- Given
abcd intent consistency <itd-N>, when it runs, then the pass is scoped to that intent against the corpus and the report says so. - Given the pass has run, when the tree is inspected, then the brief and the intents are unchanged; the binary assembled the input and validated the return, and the judgement rode the host.
Decisions
Ruled by the product thinker on 2026-09-21, in the interview that gave this intent its spec:
- The consistency pass only. The shape role is the kinds lint in itd-34; the overlap question is the pre-pass in itd-42.
- A report, and a capture per finding, deduplicated against the ledger.
Open Questions
None open; the standalone-versus-two question this record carried is moot with one role left.
Routed Deferrals (spc-33, predecessor store)
spc-33 (predecessor store)'s Phase 3→4 cleanup sweep routed its cluster-A and G1 deferrals into this
intent (the routed_from frontmatter backlinks). This intent shipped the
consistency pass alone and none of the five, so they are tracked by the ledger
record iss-2609260926323349, a future-work seed that names them and hands the
Role-3 item to the kinds lint in itd-34. The list below is what was routed here,
kept as the record of that routing, not as scope this intent delivered:
spc-33:A1(predecessor store) — Role-2 mechanical half: schema/state contradictions, reference rot, acknowledgement gaps →internal/core/lint --cross-doclint codesXD002/XD006/XD007(the mechanical cross-doc categories this intent defers under "Open Questions → Mechanical Role 2 categories").spc-33:A2(predecessor store) — Role-2 pre-commit hook (blocking-vs-advisory policy) — the hook wiring this intent lists as deferred under "Shared → Pre-commit hook wiring is deferred".spc-33:A3(predecessor store) — Role-3 pre-commit scheduling: themode="pre_commit"seam exists; the hook wrapper + per-commit-cost policy is the deferred follow-up.spc-33:A4(predecessor store) — chunked corpus review. DORMANT — triggered-bybundle_overflow: true. The Role-2 collector / Role-3 classifier set abundle_overflowmanifest flag on overflow and stop; this item activates ONLY when a persisted report actually showsbundle_overflow: true. Routing it here does NOT make it active implementation scope.spc-33:G1(predecessor store) — consistency-report reconciliation key non-convergence: the R1finding_idrecipe is prose-derived and re-hashes differently across re-runs. Fix is structural-key / deterministic-decode / anaddressedreport state onconsistency_report.schema.json— owned by the predecessor store's spc-29 (this intent owns the reviewer + the consistency-report contract).
Related
- spc-12 (predecessor store) (
intent-fidelity-revieweragent — Role 1) — the foundation this intent extends, via the shared agent file. - itd-47 (autonomous-mode oracle gates) — precondition. Roles 2 and 3 need headless oracle access; itd-47 ships it.
- itd-31 (cross-document fidelity reviewer; superseded by this
intent on 2026-05-27 — file moved to
intents/superseded/itd-31-cross-document-fidelity-reviewer.md,superseded_by: itd-48) — the original intent that named Role 2 as a concept; itd-48 absorbs its substance. - itd-34 (three intent kinds) — the source of the
kindtaxonomy that Role 3 audits. - itd-5 (prompt-quality additions discipline) — applies to the agent
edits in this intent (
prompt_version, CHANGELOG, injection canaries,capability_scope). docs/reference/commands.md— the doc whoseconsistencyandshaperows this intent makes real.- a dated working-log entry (2026-05-16) — the gap entry that motivated this intent.
Grounds
- pursued: the autonomous run builds forty-eight intents against this corpus, and a contradiction between two of them is a stop condition it cannot resolve; we expect the first whole-corpus pass to find contradictions the ledger does not hold; shown wrong if it finds none
Audit Notes
Fidelity review — receipt rcp-80414ddf96b9 (verifier intent-auditor claude-fable-5-1).
Provenance: intent-auditor@claude-fable-5-1 · rubric_hash sha256:effa65b3e9e88ff29433b443ec2be159522a8b0b71cf1434526514aa61edb13e · prompt_hash sha256:420fede6b8a9ca127ff19d7173a9d26718dc6e8ee0c6d9a33022efa0451feb9c
Input attestations: diff:internal/core/intent/consistency.go, internal/core/capture/consistency.go, internal/surface/cli/intent_consistency.go, commands/intent.md (Consistency section) at BASE 4ce401c5 (tree 376356ce669156f45b423eb7858a952ffeb0f9d6); live go run ./cmd/abcd intent consistency --json on that tree on 2026-09-26@-;
Acceptance rollup: MET 4 · MET_WITH_CONCERNS 0 · NOT_MET 0 · INCONCLUSIVE 0
Per-criterion verdicts:
- ac-1 — MET: the ingest renders .abcd/work/reviews/< date>-consistency/00-summary.md with review_of_commit pinned to the commit the emit read and one row per finding with both ends quoted and located; TestConsistencyIngestWritesTheDatedReport asserts the path, the pin and the ends, and TestIntentConsistencyRunsEndToEnd drives it through the CLI evidence: internal/core/intent/consistency.go:679 — "reportRel := ReviewsShelfRelDir + "/" + dirName + "/00-summary.md"" evidence: internal/core/intent/consistency.go:1060 — "fmt.Fprintf(&b, "---\nreview_of_commit: %s\n", rv.Commit)" evidence: internal/core/intent/consistency.go:277 — "func headCommit(repoRoot string) (string, error)" evidence: internal/core/intent/consistency_test.go:276 — "TestConsistencyIngestWritesTheDatedReport" evidence: internal/surface/cli/intent_consistency_test.go:79 — "TestIntentConsistencyRunsEndToEnd"
- ac-2 — MET: capture.IngestConsistency files one issue per finding with the report as its evidence and answers Linked: true when an open record already names either end, and the intent core records the link on the row instead of filing twice; TestConsistencyIngestLinksAFindingTheLedgerHolds pins it evidence: internal/core/capture/consistency.go:22 — "func IngestConsistency(repoRoot string, payload []byte, date string) (intent.ConsistencyIngestResult, error)" evidence: internal/core/capture/consistency.go:37 — "return intent.ConsistencyFiling{IssueID: id, Linked: true}, nil" evidence: internal/core/intent/consistency.go:689 — "if filing.Linked {" evidence: internal/core/intent/consistency_test.go:330 — "TestConsistencyIngestLinksAFindingTheLedgerHolds"
- ac-3 — MET: assembleConsistency scopes to the named intent and the prompt body says so, the rubric requires every finding to have an end in that intent, and the scoped emit and ingest are tested in core and through the CLI evidence: internal/core/intent/consistency.go:315 — "if scope != ConsistencyScopeCorpus {" evidence: internal/core/intent/consistency.go:471 — "- scope: %s (%s against the rest of the corpus)" evidence: internal/core/intent/consistency.go:111 — "scoped run: when the scope is one intent, every finding has at least one end in that intent" evidence: internal/core/intent/consistency_test.go:247 — "TestConsistencyEmitScopesToOneIntent" evidence: internal/core/intent/consistency_test.go:354 — "TestConsistencyIngestScopedRun" evidence: internal/surface/cli/intent_consistency_test.go:122 — "TestIntentConsistencyScopedAndRefusals"
- ac-4 — MET: the emit assembles the corpus and writes only the local-tier request and corpus files (a live emit on the BASE tree changed nothing under git), the ingest validates the returned findings and refuses with nothing written, the tree-unchanged assertion is in the ingest test, and the judgement is a host pass over the request as the intent-audit shape is evidence: internal/core/intent/consistency.go:221 — "fsutil.WriteFileAtomic(filepath.Join(dir, rcp+".request.md"), []byte(doc), 0o644)" evidence: internal/core/intent/consistency_test.go:187 — "TestConsistencyEmitAssemblesTheCorpusAndWritesOnlyTheLocalTier" evidence: internal/core/intent/consistency_test.go:317 — "AC 4: the brief and the intents are unchanged." evidence: internal/core/intent/consistency_test.go:385 — "TestConsistencyIngestRefusesWithNothingWritten" evidence: commands/intent.md:868 — "intent consistency --json # the brief and every intent"
Gap audit:
- honoured:
- the consistency pass (Role 2) is a working command surface, on the CLI and the plugin page evidence: internal/surface/cli/intent_consistency.go:26 — "Use: "consistency [< itd-N>]"" evidence: commands/intent.md:865 — "## Consistency: where do two records contradict each other?"
- a report and a capture per finding, deduplicated against the ledger (decision 2) evidence: internal/core/capture/consistency.go:13 — "with the report as its evidence, and a finding an open record already holds"
- the report pins the commit it read and marks a dirty corpus evidence: internal/core/intent/consistency.go:504 — "- review_of_commit: %s" evidence: internal/core/intent/consistency_test.go:590 — "TestConsistencyADirtyCorpusIsMarkedDirty"
- diverged:
- the press release promised Role 3 (kind classification) and
/abcd:intent shapeas a working surface; decision 1 moved the shape role to itd-34's kinds lint, and noshapeverb exists on the CLI or the page evidence: commands/intent.md:4 — "audit [< itd-N>] | audit --owed [--max < n>] | audit --issue-drift [--strict] | consistency [< itd-N>]" evidence: .abcd/development/intents/shipped/itd-48-intent-fidelity-reviewer-roles-2-3.md:52 — "The consistency pass only." - the reviews shelf holds no report produced by this pass: the verb shipped without a first whole-corpus run, so the Mechanism's conjecture (the pass finds contradictions the ledger does not hold) is unexercised; the two consistency-named reports on the shelf predate the verb and were hand-written evidence: .abcd/work/reviews/2026-07-07-roadmap-consistency/00-summary.md:1 — "# Roadmap-Consistency Review - Consolidated Summary" evidence: internal/core/intent/consistency.go:70 — "const ReviewsShelfRelDir = ".abcd/work/reviews""
- the press release promised Role 3 (kind classification) and
- missing: (none)
Frontmatter
| id | itd-48 |
|---|---|
| type | intent |
| lifecycle | shipped |
| kind | standalone |
| severity | major |
.abcd/development/intents/shipped/itd-48-intent-fidelity-reviewer-roles-2-3.md
open on GitHub ↗ · commit history ↗
References3
Referenced by22
- adr-40Review, audit, lint, and gate are four buckets, separated by what each comparesrelated
- iss-2610262032120773itd-48 puts Role 2 in `agents/intent-fidelity-reviewer.md`; the naming register says the cross-document role belongs to the intent auditor, `agents/intent-auditor.md`related
- iss-2610262032124254itd-48 writes consistency reports under `.abcd/logbook/audit/`; the naming register says `.abcd/logbook/` is retired and must not be re-mintedrelated
- iss-2610262032131693itd-48 says `/abcd:intent shape` is now a working command surface; the brief's press release says it is designed and not yet builtrelated
- iss-2610262032133109itd-48 runs both roles through a CLI oracle in headless Ralph mode; the dependencies page says the autonomous run is not a Ralph portrelated
- iss-2610262033205781itd-48 calls the lifeboat review agent `lifeboat-oracle`; 02-disembark calls it `lifeboat-reviewer`related
- iss-2610262035033556itd-48's press release says the shape role went live as a working verb; the intent chapter says itd-48 did not build the shape rolerelated
- iss-2610262035045702itd-48 puts consistency reports under .abcd/logbook/audit/; the intent chapter puts them on the reviews shelf under .abcd/work/reviews/related
- iss-2610262035056745itd-48 calls the three-role agent intent-fidelity-reviewer (agents/intent-fidelity-reviewer.md); the intent chapter calls the same agent intent-auditorrelated
- iss-2610262040083517The agent catalog says the auditor's third role, kind classification, is a design target; shipped itd-48 announces all three roles live, /abcd:intent shape includedrelated
- iss-2610262040161220Universal patterns put the consistency pass's report on the reviews shelf under .abcd/work/reviews/; itd-48 lands it under the retired .abcd/logbook/audit/related
- iss-2610262042109861itd-48 lands its consistency and shape reports under `.abcd/logbook/audit/`; the build sequence says `.abcd/logbook/` is retired and guarded by a detector.related
- iss-2610262042115843itd-48 says Role 3 kind classification ships and `/abcd:intent shape` becomes a working surface; the verification matrix lists the shape-classification role as staged.related
- iss-2610262042125545The agent that audits intents is called `intent-fidelity-reviewer` in itd-48 and `intent-auditor` in the internals index.related
- iss-2610262043392051itd-1 calls the Role 1 fidelity agent intent-auditor; itd-48 calls the same agent intent-fidelity-reviewerrelated
- iss-2610262043436609itd-37 gives Role 1 the job of spotting spec boilerplate at plan-review; itd-48 defines Role 1 as grading a shipped intent's criteria against delivered realityrelated
- iss-2610262044513201Shipped itd-48 says Role 2 findings are only reported and a person acts on them; itd-2609291923559186 adds an automatic mode that fixes mechanical contradictions in the commitrelated
- iss-2610262045168363The agent that grades shipped intents is `intent-fidelity-reviewer` in itd-48 and 'the intent auditor' in itd-24related
- iss-2610262045327872itd-34 says shape classification runs continuously in the pre-commit hook; itd-48 defers continuous pre-commit shape scanningrelated
- itd-2609212137116617A new capture or draft is matched against the record before it is writtenrelated
- itd-2609291923559186The consistency pass runs where records are written and names each finding the same way every timebuilt on by
- spc-2609211921272106intent-fidelity-reviewer-roles-2-3implemented by
mentions26
- adr-9Phase as a product-reflection layer between brief and intent
- adr-34Intent lifecycle and phase scheduling are orthogonal axes
- dcn-26071100000000072026-07-11 — `spc-N` minting rule for slice 1: `max(N over spec-store files ∪
- dcn-26071700000000042026-07-17 — Burst 5 (M5, itd-43/spc-8): GL002 enforces a deliberate subset
- dcn-26080200000000042026-08-02 — iss-39: record-lint gains `record_schema`, the first rule that reasons ACROSS the record's stores (ADRs, intents, specs, the issue ledger) rather than inside one, and the `superseded/` exemption narrows for the intent tree: both rules that read it (`intent_lifecycle`, `intent_impact_valid`) now run there too, while the spec-store rules (`spec_lifecycle`, `spec_id_unique`) still honour it as before and the cross-store `record_schema` never consulted it at all. Four invariants, one scan: a cross-reference field names a record the corpus has; a supersession is declared from BOTH sides; a filename and the id inside it agree; and every lifecycle directory is enumerated, so an undeclared bucket is a finding rather than a state no rule reads. Scope is deliberate on two axes. (1) Cross-references are checked in the machine-readable frontmatter fields (`supersedes`, `related_adrs`, `related_intents`, `builds_on`, `blocked_by`), not in bare prose: a frontmatter handle is a claim that the record exists and is a live input, whereas prose legitimately narrates ids that do not resolve ("itd-38's id was released, not reserved"; a test fixture's `itd-9999`; adr-29's account of what ADR-6 settled) — arming prose would have cost ten false positives against one true one, the same false-positive budget that scopes GL002. (2) A handle resolves either to a file or to a `supersedes:` declaration elsewhere, because the ADR lifecycle PRUNES a superseded record and keeps the trace in its successor — that is what distinguishes adr-4/adr-8/adr-14..18 (pruned, accounted for) from adr-6 (cited, never accounted for). The exemption narrowing is the root cause of the corpus defect it exposes: `intent_lifecycle` is a schema rule, but the `superseded/` bucket exempted its own records from the one rule that checks a supersession is recorded, so itd-47 and itd-49 sat there for months with a prose blockquote and no `superseded_by` field. Being historical excuses a record from how it is WRITTEN, never from being well-formed. `superseded_by` also widens from `^itd-\d+` to `^(itd|adr)-\d+`: an ADR that redecides the question an intent rested on retires that intent as surely as a successor intent does, and refusing to spell that forced those two records to say nothing at all. Corpus repairs in the same change: adr-6 is dropped from the two `related_adrs` lists and the two brief pages that cited it re-point at adr-29 (which records the two-stage redaction model and states in its own body that adr-6's decision stands — adr-29 does not supersede it, so claiming it does would have written a falsehood to clear a finding); adr-12 and adr-32 gain the bidirectional pair the ledger-location redecision always implied, adr-12's status moving to `superseded` and the index row with it; itd-47/itd-49 gain `superseded_by: adr-22`/`adr-26` with `kind_at_supersession`, and those ADRs name them back; and the pre-existing one-way links itd-32→itd-31 and itd-31→itd-48 gain their reverse halves. CHANGELOG impact `additive`, matching iss-38's disposition on the same axis: the rule ships in the lint engine `abcd docs lint` runs, and any abcd-managed repo gains it by declaring its own `record_stores`.
- dcn-26092900000000072026-09-29 — The product thinker answered twenty-six owed rulings and the published-history question in one interview, asked one at a time by orchestrator abcd-23 of autonomous run A (recorded by lane recRulings for orchestrator abcd-cb). The answers are kept verbatim in the local-tier file `.abcd/.work.local/scratch/reports/rulings-answered-2609-29.md`, dated 2026-09-29, and are restated here because that file is not committed. Published history is left as it is, with no rewrite. The build loop's fidelity audit runs once, on the lane that closes the spec, over the whole delivery (AI). On the vendor denylist the product thinker answered, verbatim: "I think we need an allow list rather than trying to catch a deny list." The interviewer's reading of that answer, recorded as a reading and not as the product thinker's words, is that the per-provider allowlist is the control and the vendor denylist is not extended to chase spellings, with whether the bundled `anthropic/*` entry stays as a backstop left to the technical facilitator (AA(a)). Only a route the person set up on their own machine may use their paid key, and a repository's own route to it is refused, which replaces the route half of itd-2609081951381895 decision 8 (AA(b)). The live site setup, the API adapter and the decision adapter may each close on tests against a simulated service, with the live paid check recorded as owed to a person (iss-2609291925387011, iss-2609291925393913, iss-2609291925398978). itd-111's last criterion is met by an agent's timing check on macOS plus the Linux CI run, so the intent may be finished. Automated dependency updates are switched on, pushed with a personal or app token the person creates and stores as a repository secret (itd-2609221842494980; creating the token is the person's act, and the lane builds everything else and names the secret it expects). itd-6 adds a Go MCP module, proposed for the person's explicit sign-off before it is fetched; closing itd-6 on a fake server was not ruled in this interview. (A later answer the same day, H1b in the local-tier file `.abcd/.work.local/scratch/reports/rulings-answered-2609-29-b.md`, dated 2026-09-29, rules that it is not: itd-6 is finished only after running once against the real RepoPrompt app, a check owed to a person.) For itd-148: the store under the home folder wins (adr-2609091248200336); the store draft itd-2609091014076309 owns add, list and clean-up and itd-148 uses them; a session that declares itself the coordinator is exempt from the write block in the primary checkout and every other session is blocked; and the store draft is planned first, with nothing from the store draft, the merged-worktree clean-up included, built before its planning interview (Q4). itd-148's own wait is not part of that ruling: it follows from Q2, because itd-148 uses the store's verbs, and is carried by the `blocked_by` below. itd-148 and spc-42 are rewritten to match in this change, and itd-148 is now `blocked_by` the store draft. A release retrospective is seeded from a release, the intents a tag shipped (AD); itd-24 and its spec are rewritten to the release in this change. An unpointed route is refused naming the one setting to add, as built in 35100512e, so AC11 of itd-2609170822093401 is complete (BR1). A missed target becomes `next`, whatever the following release is numbered (BS1). Spec pieces keep "step" and the lane stages are renamed, a breaking change to the JSON fields `step`, `performed` and `refusal.step` that resolves iss-2609291313276243 and corrects the glossary entry `core/step.md` (BU1), and the old command spellings are removed in that same breaking release (BT1). The text board shows Later as a count only while the site and `--json` keep the full list (BV1), and an intent in progress appears only under Now (BV2). A pause of zero is allowed (BW1); drain stays in the agents' help list until it runs end to end (BX1); a managed repository must hold the drain eligibility decision in its own record, and drain refuses there until it does (BX2); a capture without a remedy is refused (BX3), which tightens the one-line capture friction `commands/capture.md` promises, so the lane that builds it reconciles that page, the principle wording and every caller that files a capture; a run's pick reason keeps the shared `pursued:` kind with its marker (BZ1); and an intent whose blocker was superseded waits on the successor, transitively (BZ2). The five itd-48 follow-ups are planned as one intent, drafted as itd-2609291923559186 (BT2), and all warn rules share one shrink-only baseline file in which a new warning fails, drafted as itd-2609291924469783 (BT3); both drafts wait on their planning interviews. Each ruling that contradicts a shipped behaviour or another record is amended in the change that builds it, not here. itd-7's planning interview stays owed.
- iss-392bughunt round-3 confirmed nitpick batch — zero-padded record-id filenames evade the id-uniqueness lint in all three families; the go-version lockstep test skips .yaml workflows; scripts/*.sh lack the eol=lf pin the repo's own policy states; agents/CHANGELOG announces lifeboat-reviewer 0.1.1 while the prompt carries 0.1.0; five live records still route to the pre-flattening commands/abcd/ and retired docs/reference pages
- iss-2609231101102072The verification matrix keeps pre-rename vocabulary for two renamed verbs: its rows read 'Intent fidelity review (Role 1)' and 'Press-release oracle audit', while the intent audit (itd-123, ac-2: brief prose moves to the audit vocabulary) and the lifeboat review (itd-125, ac-5: the brief's oracle-audit prose moves to review) each promised the brief's current-state prose would move. Found by the fidelity audit of both intents; the page is 06-delivery/02-verification-matrix.md.
- iss-2609260926323349itd-48 shipped the consistency pass (Role 2) and nothing tracks the five spc-33 deferrals it was the routed home for: spc-33:A1 (Role-2 mechanical half, cross-doc lint codes), spc-33:A2 (Role-2 pre-commit hook, blocking-vs-advisory policy), spc-33:A3 (Role-3 pre-commit scheduling, whose shape role now belongs to the kinds lint in itd-34), spc-33:A4 (chunked corpus review, dormant until a report shows bundle_overflow: true) and spc-33:G1 (a stable reconciliation key for consistency findings across re-runs). This record is their home until one is planned; A3 goes with itd-34, the rest are follow-ups of the shipped pass.
- iss-2609260935465554The brief's context page (01-product/02-context.md, the /abcd:intent bullet) lists consistency among the /abcd:intent sub-verbs remaining design targets, while itd-48 has shipped it and the press release says it ships.
- iss-2609261536147903Planned intents and disciplines still cite specs of the retired predecessor store unqualified, and such an id at or below spc-70 resolves to a live spec on another subject (spc-12, for one, is live as the disembark grounding spec): itd-48, itd-50 and itd-53 name spc-12, spc-28, spc-29, spc-31, spc-33, spc-43 and spc-52 for the fidelity reviewer, lifecycle hook and cleanup work (which of these are predecessor ids is itself the reading this record owes); itd-24 names spc-66 as the phase-audit receipt; itd-1 and itd-37 name spc-12 as the manual reviewer. The specs charter (Two spc-N Namespaces) rules that every predecessor citation carries the '(predecessor store)' qualifier; iss-239 applied it to the draft corpus only. Each site needs a reading to tell a predecessor citation from a live one, which is why the sweep was not folded into iss-239.
- iss-2609290448510918The predecessor-store qualifier sweep reaches past the six intents iss-2609261536147903 named: outside drafts/ and those six, 192 citation sites across about forty intents name a spc-N at or below spc-70 that is not the citing intent's own spec, with no '(predecessor store)' on the line. Some are live cross-references (the cold-reading family's intents cite each other's live specs), and some are the predecessor store's (itd-4, itd-6, itd-29, itd-47 and itd-49 describe pre-rebuild work in its terms), so each site needs the same reading against the live spec it collides with; the specs charter's Two spc-N Namespaces section is the rule. Found while sweeping the pattern of iss-2609261536147903 in lane drainDrift3; a census script over intents/{planned,shipped,disciplines} reproduces the count.
- iss-2610171626374131The v0.15.1 release review found the brief at .abcd/development/brief/05-internals/01-agents.md:137 out of step with the shipped code. It says: The intent-auditor 'has three roles ... Each role has its own verb ... Only the first ships.' In the code: Two roles ship: the same chapter marks role 2 (`abcd intent consistency`) as '(shipped, itd-48)' at line 162, the binary registers `intent consistency`, and agents/intent-auditor.md declares Role 2 (cross-document). Only role 3 (`intent shape`) is unshipped.
- iss-261025221421111205-intent.md:304-310, :334, :624-648 and :657 still stage an on-demand shape verb with a flock contract; itd-48:147 gave the shape role to itd-34's kinds lint, itd-34:241 leaves it out of delivery, and :639 cites the superseded itd-33. 05-internals/01-agents.md:175 and 04-universal-patterns.md:124 repeat it.
- iss-2610252215141901Four pages (press release, context, naming, mental model) still carry /abcd:intent grill (itd-27) as designed or staged and Role 3 intent shape as a third auditor role. itd-27 is superseded by itd-94 (01-build-sequence.md:99-102: 'There is no grill sub-verb'), and itd-48:19 moved the shape role to the kinds lint.
- itd-6RepoPrompt over MCP is one opt-in reviewer route, beside the host's own agents
- itd-29Domain Experts Run A Spec Autonomously And Recover From Anything Without Touching Git
- itd-37Every Spec Externalises How It Should And Shouldn't Be Modified
- itd-42Grill Reads an Intent Against the Brief and Its Siblings, Not Just the Glossary
- itd-47Oracle-Backed Gates Pass Honestly Without A Human In The Loop
- itd-80An Intent Ships Itself: `planned → shipped` Follows Its Spec Closing, With A Fidelity Audit Attached
- spc-8epic-to-spec-terminology
- spc-12disembark-grounds-a-lifeboat-s-open-questions-on-a-repo-s-to
- spc-29the-conformance-check-calls-itself-lint-abcd-audit-becomes-a
- spc-33abcd-mints-collision-proof-record-ids-across-parallel-agents
- spc-2610021456200324The consistency pass at commit time: a stable finding key, cross-document lint codes, chunked review, and a pre-commit gate