From 04dda383c979faa2e73edde5210cddec9f6a886b Mon Sep 17 00:00:00 2001 From: REPPL <77722411+REPPL@users.noreply.github.com> Date: Wed, 8 Jul 2026 18:22:10 +0100 Subject: [PATCH 1/9] =?UTF-8?q?docs:=20iss-16=20=E2=80=94=20itd-66=20banne?= =?UTF-8?q?r=20demoted=20to=20predecessor=20prior=20art?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The NON-CANONICAL / do-not-implement banner asserted the predecessor's spc-78 spec as implementation-authoritative, inverting the brief's delivery-state provenance doctrine (spc-N attributes, never governs) and leaving itd-65's declared blocker unimplementable. The spc-78 deltas (launch-payload.json override, directory-convention smoke) are now Prior Art design input plus an explicit spec-time Open Question; the body remains canonical per the brief's launch surface. Assisted-by: Claude:claude-fable-5 --- .../planned/itd-66-launch-payload-render-parity.md | 14 +++++++------- ...-non-canonical-do-not-implement-banner-while.md | 1 + 2 files changed, 8 insertions(+), 7 deletions(-) rename .abcd/work/issues/{open => resolved}/iss-16-itd-66-carries-a-non-canonical-do-not-implement-banner-while.md (50%) diff --git a/.abcd/development/intents/planned/itd-66-launch-payload-render-parity.md b/.abcd/development/intents/planned/itd-66-launch-payload-render-parity.md index 25806f93..426cb6d9 100644 --- a/.abcd/development/intents/planned/itd-66-launch-payload-render-parity.md +++ b/.abcd/development/intents/planned/itd-66-launch-payload-render-parity.md @@ -24,13 +24,6 @@ severity: critical # abcd Renders The Exact Public Payload, Proves The Excludes Never Leak, And Smoke-Tests The Installed Surface Before Any Snapshot -> **⚠️ HISTORICAL / NON-CANONICAL.** This is the itd-66 intent draft (press-release + acceptance sketch). The -> CANONICAL, implementation-authoritative contract for spc-78 is the native spec -> **`spc-78-launch-payload-render-parity-smoke`**. This draft still names `.abcd/launch.allow` as -> honored by render and describes manifest-declared smoke surfaces; both are SUPERSEDED (render consumes -> `.abcd/config/launch-payload.json`, not `launch.allow`; smoke discovers surfaces by directory convention). -> Where this draft and the spec disagree, the spec wins. Do NOT implement from this draft. - ## Press Release > **`/abcd:launch` gains a real payload render with a leak-proof default-deny filter, a parity diff against the previously published release, and an installed-surface smoke test — so a maintainer sees EXACTLY what would be published, provably without `.abcd/` / `.flow/` / `.work/` leaking, and with every shipped `/abcd:*` command, skill, and hook confirmed to resolve and import from the rendered snapshot.** The payload is the curated release excluding `.abcd/**` ([adr-28](../../decisions/adrs/0028-single-repo-curated-release.md)); the brief's § 2 payload manifest is default-deny (include-list + hard `.abcd/**` exclusion), but nothing yet MATERIALISES that manifest and proves the exclusions hold, diffs it against the last published release, or verifies the rendered plugin actually loads. This intent builds that: render → prove-no-leak → parity-diff → consumer-surface smoke, all read-only, so the release is trustworthy before promotion. @@ -73,8 +66,15 @@ The pre-flight gate suite ([[itd-65-launch-preflight-gate-suite]]) decides wheth - **Given** no previously published release (or an empty one), **when** parity runs, **then** it produces an all-added diff (first-launch) rather than refusing; given a wrong configured baseline, it errors clearly. - **Given** the resolved payload manifest, **when** itd-65's gate suite runs, **then** it consumes THIS render's resolution and does not independently re-resolve the payload. +## Prior Art + +- [adr-28](../../decisions/adrs/0028-single-repo-curated-release.md) — the packaging policy (`.abcd/**` never ships) this intent turns from policy into a proved assertion. +- [[itd-65-launch-preflight-gate-suite]] — sibling: its gate suite consumes this render's resolved payload and never re-resolves (render → gate). +- `spc-78-launch-payload-render-parity-smoke` — the predecessor implementation's spec for this contract, carried as design input per the brief's delivery-state provenance note. Two of its implementation decisions diverge from this repo's brief: its render consumed a `.abcd/config/launch-payload.json` config rather than the `.abcd/launch.allow` allowlist, and its smoke discovered surfaces by directory convention rather than manifest declaration. The brief (`04-surfaces/04-launch.md`) remains canonical here; the deltas are weighed at spec time (see Open Questions). + ## Open Questions +- Predecessor delta (spc-78): adopt a config-file payload override (`.abcd/config/launch-payload.json`) and directory-convention smoke discovery, or keep the brief's `.abcd/launch.allow` + manifest-declared surfaces? Adjudicate at spec time; a brief change needs its own edit, not a silent divergence. - Does the render reuse the walk/filter logic already in the native launch capability (its walk-root routine and the include/exclude sets), promoting it from preview-only to a real materialiser, or is it a fresh module the dry-run then reuses? - What is the parity baseline when there is no previously published release or it is on a different ref — treat all-added, or require a configured baseline? - How deep does the smoke test go — manifest resolution + import only, or also a minimal invocation of each command's help surface? diff --git a/.abcd/work/issues/open/iss-16-itd-66-carries-a-non-canonical-do-not-implement-banner-while.md b/.abcd/work/issues/resolved/iss-16-itd-66-carries-a-non-canonical-do-not-implement-banner-while.md similarity index 50% rename from .abcd/work/issues/open/iss-16-itd-66-carries-a-non-canonical-do-not-implement-banner-while.md rename to .abcd/work/issues/resolved/iss-16-itd-66-carries-a-non-canonical-do-not-implement-banner-while.md index 6015149c..5ef47f89 100644 --- a/.abcd/work/issues/open/iss-16-itd-66-carries-a-non-canonical-do-not-implement-banner-while.md +++ b/.abcd/work/issues/resolved/iss-16-itd-66-carries-a-non-canonical-do-not-implement-banner-while.md @@ -7,6 +7,7 @@ category: "inconsistency" source: "agent-finding" found_during: "intent-dependency-sweep" found_at: ".abcd/development/intents/planned/itd-66-launch-payload-render-parity.md" +resolution: "Banner inverted the delivery-state provenance doctrine: spc-78 is predecessor attribution, not an authoritative contract for this rebuild. Do-not-implement banner removed; spc-78 and its two implementation deltas (config-file payload override, directory-convention smoke discovery) recorded as Prior Art + an Open Question for spec time; body stays canonical per the brief (04-surfaces/04-launch.md), so itd-66 is again implementable as itd-65's blocker." --- itd-66 carries a NON-CANONICAL / do-not-implement banner while being itd-65's declared blocker; reconcile the intent body with the native spec that owns the render contract \ No newline at end of file From 73abbb5bdd450592ff9be29ee4a84929fe9c5ce6 Mon Sep 17 00:00:00 2001 From: REPPL <77722411+REPPL@users.noreply.github.com> Date: Wed, 8 Jul 2026 18:23:16 +0100 Subject: [PATCH 2/9] =?UTF-8?q?docs:=20iss-17=20=E2=80=94=20itd-50=20recon?= =?UTF-8?q?ciliation=20table=20reframed=20as=20predecessor=20prior=20art?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 'AC reconciliation (spc-52 — implementation complete)' section read as a delivery claim while itd-50 sits in planned/. Verified the Go tree carries no audit-loop implementation: the delivery is the predecessor's (spc-52), so the intent stays planned and the table becomes Prior Art design input per the brief's delivery-state provenance note, with the predecessor's open-question answers marked for spec-time re-adjudication. Assisted-by: Claude:claude-fable-5 --- .../planned/itd-50-loop-toward-acceptance.md | 10 +++++++--- ...planned-but-carries-an-implementation-complet.md | 12 ------------ ...planned-but-carries-an-implementation-complet.md | 13 +++++++++++++ 3 files changed, 20 insertions(+), 15 deletions(-) delete mode 100644 .abcd/work/issues/open/iss-17-itd-50-sits-in-planned-but-carries-an-implementation-complet.md create mode 100644 .abcd/work/issues/resolved/iss-17-itd-50-sits-in-planned-but-carries-an-implementation-complet.md diff --git a/.abcd/development/intents/planned/itd-50-loop-toward-acceptance.md b/.abcd/development/intents/planned/itd-50-loop-toward-acceptance.md index 792569ce..4c701eee 100644 --- a/.abcd/development/intents/planned/itd-50-loop-toward-acceptance.md +++ b/.abcd/development/intents/planned/itd-50-loop-toward-acceptance.md @@ -99,9 +99,13 @@ The 2026-06-02 grill (5 questions across Dialectic / Definition / Counterfactual - **itd-44** (fourth intent kind / decision) and **itd-43** (terminology) — the product-thinker / facilitator two-vocabulary split this intent leans on. - **`.work/issues.md` 2026-06-02** — the `[Design/Spec-candidate]` entry and the upstream `[Design/Decision-needed]` auto-drain recommendation that produced this intent; the auto-drainer is this intent's substrate. -## AC reconciliation (spc-52 — implementation complete) +## Prior Art -itd-50 was implemented by `spc-52-audit-loop-to-acceptance-modes` (tasks .1–.3). Each acceptance criterion above is **satisfied**; the open questions are **resolved** at plan + build time. No AC is deferred. +- `spc-52-audit-loop-to-acceptance-modes` — the predecessor implementation delivered this intent (tasks .1–.3); its AC reconciliation below is carried as design input per the brief's delivery-state provenance note. In this repo itd-50 is undelivered (nothing in the Go tree implements the audit loop) and ships only when this intent reaches `shipped/` with its own audit notes. + +### Predecessor AC reconciliation (spc-52) + +In the predecessor implementation each acceptance criterion above is satisfied and the open questions are resolved at its plan + build time; the table attributes which spc-52 task owns which behaviour. | itd-50 Acceptance Criterion | Status | Where delivered | |---|---|---| @@ -115,4 +119,4 @@ itd-50 was implemented by `spc-52-audit-loop-to-acceptance-modes` (tasks .1–.3 | `UNACHIEVABLE` / rejection seeds `/abcd:intent grill` | Satisfied | spc-52.2 / .3 — both replan blocks name the grill seed | | on-close hook stays a pure data function (no subprocess / oracle) | Satisfied | The mode logic rides the spc-43 drainer / policy layer; `intent_lifecycle` is untouched by the loop | -**Open questions (now resolved):** loop budget = one re-open+re-review cycle per iteration, default `3` (spc-52.1 § Decision context); replan surface = no `drafts/` move, a `why-unachievable` + replan block in `## Audit Notes` with the intent kept in `shipped/` (spc-52.2 R4); manual-verification sign-off = the receipt schema `{intent_id, machine_rollup, state, justification?, recorded_by_role, ts}` with the `rejected_wrong_criteria` state carrying the justification to the shared replan surface (spc-52.3 R5). +**Open questions (predecessor answers, to re-adjudicate at spec time):** loop budget = one re-open+re-review cycle per iteration, default `3` (spc-52.1 § Decision context); replan surface = no `drafts/` move, a `why-unachievable` + replan block in `## Audit Notes` with the intent kept in `shipped/` (spc-52.2 R4); manual-verification sign-off = the receipt schema `{intent_id, machine_rollup, state, justification?, recorded_by_role, ts}` with the `rejected_wrong_criteria` state carrying the justification to the shared replan surface (spc-52.3 R5). diff --git a/.abcd/work/issues/open/iss-17-itd-50-sits-in-planned-but-carries-an-implementation-complet.md b/.abcd/work/issues/open/iss-17-itd-50-sits-in-planned-but-carries-an-implementation-complet.md deleted file mode 100644 index 78fd5a16..00000000 --- a/.abcd/work/issues/open/iss-17-itd-50-sits-in-planned-but-carries-an-implementation-complet.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -schema_version: 1 -id: "iss-17" -slug: "itd-50-sits-in-planned-but-carries-an-implementation-complet" -severity: "major" -category: "inconsistency" -source: "agent-finding" -found_during: "intent-dependency-sweep" -found_at: ".abcd/development/intents/planned/itd-50-loop-toward-acceptance.md" ---- - -itd-50 sits in planned/ but carries an implementation-complete AC reconciliation table; verify actual state and move through the shipped/ audit-notes path if true \ No newline at end of file diff --git a/.abcd/work/issues/resolved/iss-17-itd-50-sits-in-planned-but-carries-an-implementation-complet.md b/.abcd/work/issues/resolved/iss-17-itd-50-sits-in-planned-but-carries-an-implementation-complet.md new file mode 100644 index 00000000..13c66144 --- /dev/null +++ b/.abcd/work/issues/resolved/iss-17-itd-50-sits-in-planned-but-carries-an-implementation-complet.md @@ -0,0 +1,13 @@ +--- +schema_version: 1 +id: "iss-17" +slug: "itd-50-sits-in-planned-but-carries-an-implementation-complet" +severity: "major" +category: "inconsistency" +source: "agent-finding" +found_during: "intent-dependency-sweep" +found_at: ".abcd/development/intents/planned/itd-50-loop-toward-acceptance.md" +resolution: "Verified: nothing in this repo's Go tree implements the audit loop (no audit_mode / loop-to-acceptance / UNACHIEVABLE hits in internal/ or cmd/) — the implementation-complete table is the predecessor's spc-52 delivery, so itd-50 correctly stays in planned/ and no shipped/ move applies. The section is reframed as Prior Art (predecessor AC reconciliation, design input per the delivery-state provenance doctrine) so it no longer reads as a delivery claim in this repo." +--- + +itd-50 sits in planned/ but carries an implementation-complete AC reconciliation table; verify actual state and move through the shipped/ audit-notes path if true \ No newline at end of file From d19f95d80e345b3b5aa96911d7f6a30a9880c568 Mon Sep 17 00:00:00 2001 From: REPPL <77722411+REPPL@users.noreply.github.com> Date: Wed, 8 Jul 2026 18:24:32 +0100 Subject: [PATCH 3/9] =?UTF-8?q?docs:=20iss-18=20=E2=80=94=20itd-37's=20itd?= =?UTF-8?q?-36=20edge=20downgraded=20to=20builds=5Fon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 0 registers the itd-37 discipline while itd-36 lands in Phase 2 — a phase-order violation only because the frontmatter declared a hard blocked_by edge. The intent's own body pins memory routing as the secondary, gracefully-deferring half and capture + enforcement as independently shippable, so the honest edge is soft: builds_on [itd-1, itd-36], with the split now stated where the fallback is argued. Assisted-by: Claude:claude-fable-5 --- .../disciplines/itd-37-modification-grammar.md | 5 ++--- ...lation-phase-0-scopes-itd-37-whose-declared-b.md | 12 ------------ ...lation-phase-0-scopes-itd-37-whose-declared-b.md | 13 +++++++++++++ 3 files changed, 15 insertions(+), 15 deletions(-) delete mode 100644 .abcd/work/issues/open/iss-18-phase-order-violation-phase-0-scopes-itd-37-whose-declared-b.md create mode 100644 .abcd/work/issues/resolved/iss-18-phase-order-violation-phase-0-scopes-itd-37-whose-declared-b.md diff --git a/.abcd/development/intents/disciplines/itd-37-modification-grammar.md b/.abcd/development/intents/disciplines/itd-37-modification-grammar.md index 88850507..3243c5ec 100644 --- a/.abcd/development/intents/disciplines/itd-37-modification-grammar.md +++ b/.abcd/development/intents/disciplines/itd-37-modification-grammar.md @@ -6,8 +6,7 @@ kind_notes: "Cross-cutting modification-grammar gate; applied at every spec plan suggested_kind: null spec_id: null reclassification_history: [] -blocked_by: [itd-36] -builds_on: [itd-1] +builds_on: [itd-1, itd-36] severity: major --- @@ -49,7 +48,7 @@ The semantic enforcement is genuine LLM-judgement work. The discipline owns the **Why all specs, no "trivial" carve-out.** "Trivial" cannot be cleanly specified without inviting loophole-driven exemptions. A `## Modification Grammar` section that says *"this spec adds a config flag with no extension surface; modifications are limited to renaming the flag; the rule is: never bind config-flag names to public API"* is **valuable** — documenting absence-of-extension-points IS modification grammar. Required for all; trivial specs produce short Modification Grammar sections, not absent ones. -**Why memory routing as secondary index, not primary store.** The dominant access pattern is "I'm modifying spec spc-N, give me spc-N's modification grammar" — that's a lookup the spec file already serves trivially. Memory routing earns its keep on the long-tail: *"how has our modification grammar of dispatch evolved across spc-1, spc-3, spc-7?"* Cheap to add (`principle-distiller` already exists post-itd-36); worth it; not load-bearing for the common case. In-spec capture is the primary store. +**Why memory routing as secondary index, not primary store.** The dominant access pattern is "I'm modifying spec spc-N, give me spc-N's modification grammar" — that's a lookup the spec file already serves trivially. Memory routing earns its keep on the long-tail: *"how has our modification grammar of dispatch evolved across spc-1, spc-3, spc-7?"* Cheap to add (`principle-distiller` already exists post-itd-36); worth it; not load-bearing for the common case. In-spec capture is the primary store. This is also why itd-36 is a `builds_on` edge, not a blocker: the capture + enforcement half (`MG001`-`MG004`, the Phase 0 discipline registration) ships independently of itd-36, and only the extraction-to-memory trigger waits on its substrate — the partial-ship fallback below is the designed behaviour, not a contingency. ## What's In Scope diff --git a/.abcd/work/issues/open/iss-18-phase-order-violation-phase-0-scopes-itd-37-whose-declared-b.md b/.abcd/work/issues/open/iss-18-phase-order-violation-phase-0-scopes-itd-37-whose-declared-b.md deleted file mode 100644 index 9078006f..00000000 --- a/.abcd/work/issues/open/iss-18-phase-order-violation-phase-0-scopes-itd-37-whose-declared-b.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -schema_version: 1 -id: "iss-18" -slug: "phase-order-violation-phase-0-scopes-itd-37-whose-declared-b" -severity: "major" -category: "inconsistency" -source: "agent-finding" -found_during: "intent-dependency-sweep" -found_at: ".abcd/development/roadmap/phases/phase-0-foundations.md" ---- - -phase-order violation: Phase 0 scopes itd-37 whose declared blocker itd-36 is Phase 2; split the hard-on-half edge (capture half vs memory-routing half) or reschedule \ No newline at end of file diff --git a/.abcd/work/issues/resolved/iss-18-phase-order-violation-phase-0-scopes-itd-37-whose-declared-b.md b/.abcd/work/issues/resolved/iss-18-phase-order-violation-phase-0-scopes-itd-37-whose-declared-b.md new file mode 100644 index 00000000..33aa1d13 --- /dev/null +++ b/.abcd/work/issues/resolved/iss-18-phase-order-violation-phase-0-scopes-itd-37-whose-declared-b.md @@ -0,0 +1,13 @@ +--- +schema_version: 1 +id: "iss-18" +slug: "phase-order-violation-phase-0-scopes-itd-37-whose-declared-b" +severity: "major" +category: "inconsistency" +source: "agent-finding" +found_during: "intent-dependency-sweep" +found_at: ".abcd/development/roadmap/phases/phase-0-foundations.md" +resolution: "Edge downgraded, not rescheduled: itd-37's own design says the capture + enforcement half (MG001-MG004, the Phase 0 discipline registration) ships independently and only the extraction-to-memory trigger waits on itd-36 (the partial-ship fallback is designed behaviour). blocked_by: [itd-36] replaced with builds_on: [itd-1, itd-36] and the rationale made explicit in the memory-routing paragraph, so Phase 0 scoping itd-37 no longer violates phase order." +--- + +phase-order violation: Phase 0 scopes itd-37 whose declared blocker itd-36 is Phase 2; split the hard-on-half edge (capture half vs memory-routing half) or reschedule \ No newline at end of file From 1a136953aa3d1e972e4bf8638ef428924ec5bb29 Mon Sep 17 00:00:00 2001 From: REPPL <77722411+REPPL@users.noreply.github.com> Date: Wed, 8 Jul 2026 18:25:34 +0100 Subject: [PATCH 4/9] =?UTF-8?q?docs:=20iss-19=20=E2=80=94=20phase-3=20itd-?= =?UTF-8?q?27/itd-42=20dependency=20direction=20corrected?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The phase doc asserted itd-27 depends on itd-42; both intents declare the reverse (itd-42 blocked_by itd-27, itd-27 'Extended by: itd-42', itd-42's press release extends the grill itd-27 built). The dependency bullet and the open-question ordering line now read itd-27 -> itd-42 — the first live catch adjudicated for the itd-78 phase-consistency lint. Assisted-by: Claude:claude-fable-5 --- .abcd/development/roadmap/phases/phase-3-intent.md | 13 +++++++------ ...serts-itd-27-depends-on-itd-42-while-itd-42-s.md | 1 + 2 files changed, 8 insertions(+), 6 deletions(-) rename .abcd/work/issues/{open => resolved}/iss-19-phase-3-doc-asserts-itd-27-depends-on-itd-42-while-itd-42-s.md (55%) diff --git a/.abcd/development/roadmap/phases/phase-3-intent.md b/.abcd/development/roadmap/phases/phase-3-intent.md index 81f0c72b..183f8b59 100644 --- a/.abcd/development/roadmap/phases/phase-3-intent.md +++ b/.abcd/development/roadmap/phases/phase-3-intent.md @@ -119,10 +119,11 @@ Phase 1 is joined here by the real `grill` sub-verb. - **Runs after Phase 1** — `/abcd:intent` is a command; a command needs the ahoy install flow and the rules loader live before its sub-verbs are wired, and the MCP front door builds on the same core the CLI front door already exposes. -- **itd-27 depends on itd-42** — the coherence-aware tiers are the grill - machinery itd-27's sub-verb invokes; itd-42 lands the tier system, itd-27 - lands the user-facing sub-verb and glossary on top of it. itd-27 also depends - on itd-1 (its own acceptance criteria pass the gate). +- **itd-42 depends on itd-27** — itd-27 lands the `/abcd:intent grill` sub-verb + and the glossary tier; itd-42 extends that grill with the coherence-aware + tiers (and renames `--with-docs` to `--glossary`). Both intents declare this + direction (itd-42 `blocked_by: [itd-27]`; itd-27 "Extended by: itd-42"). + itd-27 also depends on itd-1 (its own acceptance criteria pass the gate). - **itd-28 depends on the oracle seam** (Phase 0's itd-6) — spec-tied reviews are post-processed from what the oracle emits; itd-28 lands them in the native store. It is grouped here because the reviews this phase runs are the first @@ -135,5 +136,5 @@ Phase 1 is joined here by the real `grill` sub-verb. - Confirm the native review store's on-disk shape is settled here so Phase 4's spec engine and Phase 6's disembark can both read review artefacts without a later migration. -- itd-42 must be planned (and likely grilled) before itd-27's spec can depend on - it. Confirm the itd-42 → itd-27 ordering holds once both have specs. +- itd-27 must be planned (and likely grilled) before itd-42's spec can depend on + it. Confirm the itd-27 → itd-42 ordering holds once both have specs. diff --git a/.abcd/work/issues/open/iss-19-phase-3-doc-asserts-itd-27-depends-on-itd-42-while-itd-42-s.md b/.abcd/work/issues/resolved/iss-19-phase-3-doc-asserts-itd-27-depends-on-itd-42-while-itd-42-s.md similarity index 55% rename from .abcd/work/issues/open/iss-19-phase-3-doc-asserts-itd-27-depends-on-itd-42-while-itd-42-s.md rename to .abcd/work/issues/resolved/iss-19-phase-3-doc-asserts-itd-27-depends-on-itd-42-while-itd-42-s.md index 1bb401f7..183ef3e9 100644 --- a/.abcd/work/issues/open/iss-19-phase-3-doc-asserts-itd-27-depends-on-itd-42-while-itd-42-s.md +++ b/.abcd/work/issues/resolved/iss-19-phase-3-doc-asserts-itd-27-depends-on-itd-42-while-itd-42-s.md @@ -7,6 +7,7 @@ category: "inconsistency" source: "agent-finding" found_during: "intent-dependency-sweep" found_at: ".abcd/development/roadmap/phases/phase-3-intent.md" +resolution: "Direction adjudicated from the intents themselves: itd-42 declares blocked_by: [itd-27] and its press release corrects the grill itd-27 built (renaming --with-docs, adding --coherence); itd-27 records 'Extended by: itd-42'. The phase-3 doc's reversed dependency bullet and its open-question ordering line are corrected to itd-27 -> itd-42, citing both intents' declarations." --- phase-3 doc asserts itd-27 depends on itd-42 while itd-42's own prose asserts the reverse (it extends the grill itd-27 built); adjudicate direction — first live catch for the itd-78 phase-consistency lint \ No newline at end of file From 038f78a4555915ca777612e81e28f06c8e9331e1 Mon Sep 17 00:00:00 2001 From: REPPL <77722411+REPPL@users.noreply.github.com> Date: Wed, 8 Jul 2026 18:27:30 +0100 Subject: [PATCH 5/9] =?UTF-8?q?docs:=20iss-20=20=E2=80=94=20launch=20clust?= =?UTF-8?q?er's=20deliberate=20unscheduling=20made=20discoverable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The intent-sweep flagged itd-65/66/67/72 as a silent stall: critical and major intents in no phase Scope. adr-33 already records the decision (deepenings scheduled separately; Phase 1 owns only the release cut) but the phase index — the sole ownership source — never pointed at it. Beyond Phase 6 now names the deepening cluster explicitly, including itd-67 which rides the same tiering, so the unscheduled state reads as recorded intent, not a stall. Assisted-by: Claude:claude-fable-5 --- .abcd/development/roadmap/phases/README.md | 10 ++++++++++ .../open/iss-20-launch-cluster-unscheduled.md | 12 ------------ .../resolved/iss-20-launch-cluster-unscheduled.md | 13 +++++++++++++ 3 files changed, 23 insertions(+), 12 deletions(-) delete mode 100644 .abcd/work/issues/open/iss-20-launch-cluster-unscheduled.md create mode 100644 .abcd/work/issues/resolved/iss-20-launch-cluster-unscheduled.md diff --git a/.abcd/development/roadmap/phases/README.md b/.abcd/development/roadmap/phases/README.md index 50d5157f..2f3354c6 100644 --- a/.abcd/development/roadmap/phases/README.md +++ b/.abcd/development/roadmap/phases/README.md @@ -87,6 +87,16 @@ land in which future phase before the phase is planned would only go stale. See [intents/README.md](../../intents/README.md) for the full corpus; an intent moves into a phase's `## Scope` when the phase that bundles it is written. +One unscheduled cluster is deliberate rather than pending, and is recorded as +such: the **launch deepenings** — the pre-flight gate suite (itd-65), payload +render parity (itd-66), the installable versioned plugin (itd-67), release +retention (itd-70), tier-b publishing (itd-72), and derived versioning +(itd-73). Phase 1 owns only the curated-release cut; the deepenings enter a +phase's `## Scope` when sequenced, per +[adr-33](../../decisions/adrs/0033-launch-phase-ownership-tiered.md). Their +critical/major severities keep them at the top of the derived-priority queue +(itd-78) without a phase anchor. + ## Related Documentation - [Roadmap](../README.md) — status dashboard diff --git a/.abcd/work/issues/open/iss-20-launch-cluster-unscheduled.md b/.abcd/work/issues/open/iss-20-launch-cluster-unscheduled.md deleted file mode 100644 index 660c3c2b..00000000 --- a/.abcd/work/issues/open/iss-20-launch-cluster-unscheduled.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -schema_version: 1 -id: "iss-20" -slug: "launch-cluster-unscheduled" -severity: "major" -category: "inconsistency" -source: "agent-finding" -found_during: "intent-dependency-sweep" -found_at: ".abcd/development/roadmap/phases/README.md" ---- - -the launch cluster (itd-65/66/67 critical, itd-72 major) is scheduled in no phase Scope section — the silent-stall pattern itd-78's lint should catch; schedule or record why not \ No newline at end of file diff --git a/.abcd/work/issues/resolved/iss-20-launch-cluster-unscheduled.md b/.abcd/work/issues/resolved/iss-20-launch-cluster-unscheduled.md new file mode 100644 index 00000000..13d1258f --- /dev/null +++ b/.abcd/work/issues/resolved/iss-20-launch-cluster-unscheduled.md @@ -0,0 +1,13 @@ +--- +schema_version: 1 +id: "iss-20" +slug: "launch-cluster-unscheduled" +severity: "major" +category: "inconsistency" +source: "agent-finding" +found_during: "intent-dependency-sweep" +found_at: ".abcd/development/roadmap/phases/README.md" +resolution: "Recorded-why-not, not scheduled: adr-33 (accepted 2026-07-08) already decides the launch deepenings are deliberately unscheduled until sequenced (Phase 1 owns only the curated-release cut), and adr-9 makes no-Scope a valid implicit state. The residue was discoverability: the phase index never named the cluster. phases/README.md § Beyond Phase 6 now names the full cluster (itd-65/66/67/70/72/73, covering itd-67 which adr-33's list omitted) with the adr-33 pointer and the itd-78 derived-priority note." +--- + +the launch cluster (itd-65/66/67 critical, itd-72 major) is scheduled in no phase Scope section — the silent-stall pattern itd-78's lint should catch; schedule or record why not \ No newline at end of file From aca4e5ccf75f5b75886320fd0674ed1daef782ee Mon Sep 17 00:00:00 2001 From: REPPL <77722411+REPPL@users.noreply.github.com> Date: Wed, 8 Jul 2026 18:28:35 +0100 Subject: [PATCH 6/9] =?UTF-8?q?docs:=20iss-21=20=E2=80=94=20itd-16's=20itd?= =?UTF-8?q?-launch=20name=20reference=20re-pointed=20to=20itd-66?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The launch payload manifest, default-deny excludes, and launch.allow opt-in that itd-16's launch-integration bullet leans on are itd-66's render contract. itd-8 already reads as command-surface references with no dangling intent name, so this was the only live occurrence. Assisted-by: Claude:claude-fable-5 --- .../intents/drafts/itd-16-hash-chain-merkle-audit.md | 2 +- .../issues/{open => resolved}/iss-21-itd-launch-name-refs.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) rename .abcd/work/issues/{open => resolved}/iss-21-itd-launch-name-refs.md (51%) diff --git a/.abcd/development/intents/drafts/itd-16-hash-chain-merkle-audit.md b/.abcd/development/intents/drafts/itd-16-hash-chain-merkle-audit.md index 69651ecf..e37396e0 100644 --- a/.abcd/development/intents/drafts/itd-16-hash-chain-merkle-audit.md +++ b/.abcd/development/intents/drafts/itd-16-hash-chain-merkle-audit.md @@ -51,7 +51,7 @@ abcd doesn't need to host a separate audit service: the chain lives in `.abcd/lo - **`audit.schema.json`** — the public format for chain segments and the verification report. - **Disembark integration**: `/abcd:disembark` includes the latest chain segments in the lifeboat under `_provenance.json` `audit_chain_root`. The chain root hash anchors the lifeboat's authenticity. - **Embark integration**: `/abcd:embark` verifies the lifeboat's chain root before unpacking; mismatch aborts the unpack with the offending segment named. -- **Launch integration** (per itd-launch): launch payload manifest excludes the chain by default (sensitive); explicit opt-in via `.abcd/launch.allow` if a release should ship its own chain. +- **Launch integration** (per itd-66): launch payload manifest excludes the chain by default (sensitive); explicit opt-in via `.abcd/launch.allow` if a release should ship its own chain. - **Opt-in via `.abcd/config.json`** — `oracle.audit.chain.enabled = true | false` (default `false` to avoid surprising users; flip to `true` for compliance-sensitive projects). ## What's Out of Scope diff --git a/.abcd/work/issues/open/iss-21-itd-launch-name-refs.md b/.abcd/work/issues/resolved/iss-21-itd-launch-name-refs.md similarity index 51% rename from .abcd/work/issues/open/iss-21-itd-launch-name-refs.md rename to .abcd/work/issues/resolved/iss-21-itd-launch-name-refs.md index e5f4da86..971c9ffd 100644 --- a/.abcd/work/issues/open/iss-21-itd-launch-name-refs.md +++ b/.abcd/work/issues/resolved/iss-21-itd-launch-name-refs.md @@ -7,6 +7,7 @@ category: "inconsistency" source: "agent-finding" found_during: "intent-dependency-sweep" found_at: ".abcd/development/intents/drafts/itd-16-hash-chain-merkle-audit.md" +resolution: "itd-16's 'per itd-launch' re-pointed to itd-66 (the launch payload manifest, default-deny excludes, and launch.allow opt-in are itd-66's render contract). itd-8 carries no dangling name today — its launch references are to the /abcd:launch command surface and 'the launch payload manifest', with no itd-launch literal left in the corpus (grep clean outside the sweep note and this issue)." --- itd-8 and itd-16 cite the launch intent as itd-launch by name, not number — a dangling-reference class the itd-78 graph lint should flag; re-point to the concrete itd \ No newline at end of file From 56878989352ee40b4a2ab2cd8efac4364e3fd02b Mon Sep 17 00:00:00 2001 From: REPPL <77722411+REPPL@users.noreply.github.com> Date: Wed, 8 Jul 2026 18:29:53 +0100 Subject: [PATCH 7/9] =?UTF-8?q?docs:=20iss-22=20=E2=80=94=20itd-6=20banner?= =?UTF-8?q?=20narrowed=20to=20framing-only=20supersession?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The banner claimed itd-6 was superseded outright and preserved as historical record, while Phase 0's Scope schedules it as the oracle adapter seam — under adr-34 a scheduled intent must be planned, so the directory was right and the banner wrong. It now records precisely what ADR-25 superseded (RP as abcd's single integration) and how the body reads today (the RP adapter's contract, adapted at spec time). Assisted-by: Claude:claude-fable-5 --- .../planned/itd-6-rp-mcp-only-integration.md | 2 +- .../work/issues/open/iss-22-itd-6-lifecycle-look.md | 12 ------------ .../issues/resolved/iss-22-itd-6-lifecycle-look.md | 13 +++++++++++++ 3 files changed, 14 insertions(+), 13 deletions(-) delete mode 100644 .abcd/work/issues/open/iss-22-itd-6-lifecycle-look.md create mode 100644 .abcd/work/issues/resolved/iss-22-itd-6-lifecycle-look.md diff --git a/.abcd/development/intents/planned/itd-6-rp-mcp-only-integration.md b/.abcd/development/intents/planned/itd-6-rp-mcp-only-integration.md index aef34561..49643405 100644 --- a/.abcd/development/intents/planned/itd-6-rp-mcp-only-integration.md +++ b/.abcd/development/intents/planned/itd-6-rp-mcp-only-integration.md @@ -9,7 +9,7 @@ builds_on: [itd-2] severity: minor --- -> **⚠️ Superseded by [ADR-25](../../decisions/adrs/0025-host-delegated-llm-default.md)** (host-delegated LLM is the default; RepoPrompt is one optional oracle adapter among many, not abcd's single integration — see also [ADR-22](../../decisions/adrs/0022-bundled-deps-as-pluggable-adapters.md)). Preserved as historical record per the supersession lifecycle. +> **⚠️ Framing superseded by [ADR-25](../../decisions/adrs/0025-host-delegated-llm-default.md)** (host-delegated LLM is the default; RepoPrompt is one optional oracle adapter among many, not abcd's single integration — see also [ADR-22](../../decisions/adrs/0022-bundled-deps-as-pluggable-adapters.md)). The intent itself stays live and is scheduled in Phase 0's `## Scope` as the oracle adapter seam: read "abcd's only RP integration is MCP" below as the contract of the *RP adapter*, not of abcd — the RP-specific mechanics (MCP bridge, cascade position, `chat_id` semantics) are adapted to the adapter seam at spec time. # RP-Only Integration: abcd Talks to RepoPrompt via MCP, Period diff --git a/.abcd/work/issues/open/iss-22-itd-6-lifecycle-look.md b/.abcd/work/issues/open/iss-22-itd-6-lifecycle-look.md deleted file mode 100644 index 91f62cbe..00000000 --- a/.abcd/work/issues/open/iss-22-itd-6-lifecycle-look.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -schema_version: 1 -id: "iss-22" -slug: "itd-6-lifecycle-look" -severity: "minor" -category: "inconsistency" -source: "agent-finding" -found_during: "intent-dependency-sweep" -found_at: ".abcd/development/intents/planned/itd-6-rp-mcp-only-integration.md" ---- - -itd-6 sits in planned/ while its own banner records supersession-in-framing by ADR-25 (one optional adapter among many); lifecycle look needed \ No newline at end of file diff --git a/.abcd/work/issues/resolved/iss-22-itd-6-lifecycle-look.md b/.abcd/work/issues/resolved/iss-22-itd-6-lifecycle-look.md new file mode 100644 index 00000000..d845633d --- /dev/null +++ b/.abcd/work/issues/resolved/iss-22-itd-6-lifecycle-look.md @@ -0,0 +1,13 @@ +--- +schema_version: 1 +id: "iss-22" +slug: "itd-6-lifecycle-look" +severity: "minor" +category: "inconsistency" +source: "agent-finding" +found_during: "intent-dependency-sweep" +found_at: ".abcd/development/intents/planned/itd-6-rp-mcp-only-integration.md" +resolution: "Lifecycle look concluded: itd-6 stays in planned/. It is scheduled — Phase 0's Scope carries it as the oracle adapter seam under the ADR-25 framing, and phase-3's dependency rationale leans on it — so a superseded/ move would break adr-34's scheduled-implies-planned invariant. The banner was the defect: it asserted whole-intent supersession and historical-record status. Rewritten to say the RP-only-single-integration FRAMING is superseded (ADR-25/ADR-22) while the intent remains the live, scheduled vehicle whose RP specifics become the RP adapter's contract at spec time." +--- + +itd-6 sits in planned/ while its own banner records supersession-in-framing by ADR-25 (one optional adapter among many); lifecycle look needed \ No newline at end of file From 45a8dabb95fa4f66d975f36b6a22176fc48bf79b Mon Sep 17 00:00:00 2001 From: REPPL <77722411+REPPL@users.noreply.github.com> Date: Wed, 8 Jul 2026 18:31:36 +0100 Subject: [PATCH 8/9] =?UTF-8?q?docs:=20iss-23=20=E2=80=94=20itd-36=20body?= =?UTF-8?q?=20reconciled=20with=20adr-28's=20lifeboat=20gate=20framing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The intent still gated on /abcd:launch throughout, which adr-28 makes impossible (the curated release excludes .abcd/** wholesale, so launch never evaluates what the gate guards). Both GWT criteria, the scope bullets, and the test scenario now name the lifeboat gate per the brief's provenance-substrate § 4 vocabulary, and the banner drops its read-as translation rule now that the body says it directly. Assisted-by: Claude:claude-fable-5 --- .../intents/planned/itd-36-memory-unification.md | 16 ++++++++-------- .../open/iss-23-itd-36-adr-28-reconcile.md | 12 ------------ .../resolved/iss-23-itd-36-adr-28-reconcile.md | 13 +++++++++++++ 3 files changed, 21 insertions(+), 20 deletions(-) delete mode 100644 .abcd/work/issues/open/iss-23-itd-36-adr-28-reconcile.md create mode 100644 .abcd/work/issues/resolved/iss-23-itd-36-adr-28-reconcile.md diff --git a/.abcd/development/intents/planned/itd-36-memory-unification.md b/.abcd/development/intents/planned/itd-36-memory-unification.md index 6d4e2800..c46a7ba1 100644 --- a/.abcd/development/intents/planned/itd-36-memory-unification.md +++ b/.abcd/development/intents/planned/itd-36-memory-unification.md @@ -11,7 +11,7 @@ severity: major # Knowledge That Compounds, Not Knowledge That Re-Derives -> **Superseded in part by [adr-28](../../decisions/adrs/0028-single-repo-curated-release.md) (packaging framing; supersedes adr-18).** This intent describes the restrictive-licence gate as a `/abcd:launch` payload gate (the "launch-gate refuses to publish under `.abcd/memory/sources/`" phrasing throughout, incl. the GWT criteria below). adr-28 packages the curated release to exclude `.abcd/**` **wholesale**, so launch is **not** the gate's consumer — the gate's real consumer is the lifeboat (`/abcd:disembark`), future/inert at launch. Read every "launch-gate" / "`/abcd:launch` refuses" reference here as the **lifeboat** licence gate; the canonical current-state framing lives in the brief (`05-internals/09-provenance-substrate.md § 4`, `07-memory.md § 4`, `04-surfaces/04-launch.md § 2`). +> **Packaging framing per [adr-28](../../decisions/adrs/0028-single-repo-curated-release.md) (supersedes adr-18).** The restrictive-licence gate's consumer is the **lifeboat** (`/abcd:disembark`), future/inert at launch: the curated release excludes `.abcd/**` wholesale, so `/abcd:launch` never evaluates what the gate guards. The canonical framing lives in the brief (`05-internals/09-provenance-substrate.md § 4`, `07-memory.md § 4`, `04-surfaces/04-launch.md § 2`). ## Press Release @@ -27,20 +27,20 @@ There's a real gap: **per-project durable knowledge has multiple legitimate upst **The reframe lands cleanly because abcd doesn't need a new namespace.** `.abcd/memory/` already exists as the per-project compounding-curated artefact. Widening its upstream funnel from "vendor session memory only" to "session memory + external sources + reviews + notes + dredge synthesis + spec-extracted theory" is structurally smaller than creating a new top-level namespace — and avoids the visibility-rule violations that would come with a separate `.abcd/knowledge/` directory (per the locked decision in [`05-internals/03-configuration.md § 1`](../../brief/05-internals/03-configuration.md): "no exceptions to the visibility rule"). -**Default-no-originals is what makes ingest copyright-safe.** External sources may be paywalled, NDA'd, or under restrictive licences. Storing the original creates a copyright-laundering vector. Default-no-originals + bounded per-page quotation (≤5%, no contiguous span >150 words) + cumulative source-coverage lint (≤25% deduplicated coverage across all pages citing the same source, span-level dedup) closes the laundering vector for the common case. `--keep-original` is the explicit opt-in for sources the user owns or has clear redistribution rights for; the launch-gate then refuses to publish anything under `.abcd/memory/sources/` unless an explicit allowlist entry exists. +**Default-no-originals is what makes ingest copyright-safe.** External sources may be paywalled, NDA'd, or under restrictive licences. Storing the original creates a copyright-laundering vector. Default-no-originals + bounded per-page quotation (≤5%, no contiguous span >150 words) + cumulative source-coverage lint (≤25% deduplicated coverage across all pages citing the same source, span-level dedup) closes the laundering vector for the common case. `--keep-original` is the explicit opt-in for sources the user owns or has clear redistribution rights for; the restrictive-licence gate (consumed by the lifeboat `/abcd:disembark`, per adr-28) then refuses to surface anything under `.abcd/memory/sources/` unless an explicit allowlist entry exists. -**Loot substrate reuse compresses cost.** itd-26 `/abcd:loot` (per itd-26) and `/abcd:memory ingest` need the same machinery: licence detection, citation generation, source-hash registry, launch-gate licence gates. This intent ships the substrate as a separable component spec at [`05-internals/09-provenance-substrate.md`](../../brief/05-internals/09-provenance-substrate.md). itd-26's verb sits on top — no re-implementation, no fragile bespoke licence layer. +**Loot substrate reuse compresses cost.** itd-26 `/abcd:loot` (per itd-26) and `/abcd:memory ingest` need the same machinery: licence detection, citation generation, source-hash registry, the lifeboat's restrictive-licence gates. This intent ships the substrate as a separable component spec at [`05-internals/09-provenance-substrate.md`](../../brief/05-internals/09-provenance-substrate.md). itd-26's verb sits on top — no re-implementation, no fragile bespoke licence layer. ## What's In Scope - **`/abcd:memory` command** with sub-verbs `ingest` / `ask` / `lint`. Bare invocation renders state per the universal bare-command-as-render discipline. Surface contract: [`04-surfaces/07-memory.md`](../../brief/04-surfaces/07-memory.md). Substrate spec: [`05-internals/07-memory.md`](../../brief/05-internals/07-memory.md). - **Schema extension on `.abcd/memory/`** (NOT migration): three new conventional sibling files (`index.md` generated catalog, `log.md` append-only ingest history, `contradictions.md` curator-surfaced register) plus typed `source:` frontmatter on every memory page. Existing flat-named pages preserved; schema extends in place. - **Typed `source:` frontmatter** with closed-enum source-class taxonomy: `session_memory` / `external_pdf` / `external_transcript` / `external_article` / `oracle_review` / `work_notes` / `issue_ledger` / `dredge_synthesis` / `spec_modification_grammar` / `modification_grammar`. Every external source carries `citation` + `licence` + `source_hash` + `ingested_at`. -- **Default-no-originals + `--keep-original`**: ingest reads → distils → discards by default; flag opts into storage at `.abcd/memory/sources/.`; launch-gate refuses publish under `sources/` without explicit allowlist. +- **Default-no-originals + `--keep-original`**: ingest reads → distils → discards by default; flag opts into storage at `.abcd/memory/sources/.`; the lifeboat licence gate refuses to surface `sources/` files without an explicit allowlist entry. - **Quotation budgets, two layers**: per-page (`MQ001`: ≤5% per page, no >150-word contiguous span) + cumulative source-coverage (`MQ002`: ≤25% deduplicated coverage across all pages citing one `source_hash`, span-level dedup, configurable threshold). - **Source-class lints**: `MS001` (advisory: single-source-class synthesis is low cross-validation), `MS002` (blocks: cross-class synthesis without `weighting_note` field), `ML001` (blocks: `external_*` page missing `licence` field; `unknown` is acceptable but must be explicit). - **Curator role on `principle-distiller`** (existing agent; itd-31 precedent — agent count stays 15). Inputs extended: external-source ingest pipeline added alongside existing session-memory + reviews + work-dir + code-rescuer inputs. New output mandate: typed `source:` frontmatter on every emitted page. New lint pass: `MQ`/`MS`/`ML` codes. -- **Provenance/licence substrate** at [`05-internals/09-provenance-substrate.md`](../../brief/05-internals/09-provenance-substrate.md) — separable spec; SPDX licence detection; citation generation; source-hash registry at `.abcd/memory/.sources_index.json` (regenerable per the lifecycle taxonomy); launch-gate licence gates. Shared with itd-26 loot. +- **Provenance/licence substrate** at [`05-internals/09-provenance-substrate.md`](../../brief/05-internals/09-provenance-substrate.md) — separable spec; SPDX licence detection; citation generation; source-hash registry at `.abcd/memory/.sources_index.json` (regenerable per the lifecycle taxonomy); the lifeboat's restrictive-licence gates. Shared with itd-26 loot. - **Karpathy citation** in [`05-internals/07-memory.md`](../../brief/05-internals/07-memory.md) (component description) + [`research/related-work.md`](../../research/related-work.md#karpathy-llm-wiki--pattern-source-for-abcdmemory) (prior-art table). NOT in `01-product/03-mental-model.md` (per idea-1 R5 review: mental model is for axes, not components; six-week-old citations don't belong in the project's most-stable file). - **Brief edits**: artefact-lifecycle taxonomy added to [`05-internals/04-universal-patterns.md § 8`](../../brief/05-internals/04-universal-patterns.md#8-artefact-lifecycle-taxonomy) (regenerable / append-only / compounding-curated). Reserved-vocabulary entry in [`02-constraints/04-naming.md`](../../brief/02-constraints/04-naming.md) for `source.class` + lifecycle classes. @@ -60,7 +60,7 @@ There's a real gap: **per-project durable knowledge has multiple legitimate upst - **Given** an external source with declared SPDX licence in a `LICENSE` file, **when** the user runs `/abcd:memory ingest `, **then** the resulting memory page(s) carry `source.licence: ` AND the original is NOT stored at `.abcd/memory/sources/` AND a registry entry exists at `.abcd/memory/.sources_index.json[]` whose `consumers` map contains the `memory` key. - **Given** an external source ingested without `--keep-original`, **when** the user later runs `/abcd:memory ask ` referencing that source, **then** the answer cites the source by `(class, citation, source_hash)` but never reproduces the original; if the original is needed for re-distillation, the user is prompted to re-ingest. -- **Given** an external source ingested with `--keep-original`, **when** `/abcd:launch` runs, **then** launch refuses to publish unless `.abcd/memory/sources/.` is on the launch-payload allowlist (`.abcd/launch-allowlist.json`). +- **Given** an external source ingested with `--keep-original`, **when** `/abcd:disembark` runs the restrictive-licence gate, **then** the gate refuses to surface `.abcd/memory/sources/.` unless `.abcd/launch-allowlist.json` explicitly names it (the allowlist re-includes files into the gate's own evaluation input, never into the launch payload — adr-28). - **Given** a memory page with `source.class: external_pdf` and ≥150-word contiguous quotation, **when** `/abcd:memory lint` runs, **then** the lint emits `MQ001` and points at the offending span. - **Given** N memory pages collectively citing one `source_hash` with cumulative deduplicated coverage ≥25%, **when** `/abcd:memory lint` runs, **then** the lint emits `MQ002` and refuses any further quotation block from that source until coverage drops below the threshold (via summarisation rewrite of existing pages). - **Given** a memory page with `source.class: session_memory` only (no cross-class inputs), **when** `/abcd:memory lint` runs, **then** the lint emits `MS001` (low cross-validation; advisory only — does not block). @@ -69,7 +69,7 @@ There's a real gap: **per-project durable knowledge has multiple legitimate upst - **Given** an existing pre-itd-36 project with flat-named memory files, **when** `/abcd:ahoy` runs after itd-36 ships, **then** the existing files are NOT renamed; `index.md` is generated over them; `source.class: session_memory` is backfilled as the default. - **Given** dredge synthesis output (itd-25), **when** dredge runs, **then** the dredge agent writes its synthesised entries to `.abcd/memory/__.md` with `source.class: dredge_synthesis` AND the per-run report stays at `.abcd/logbook/dredge//`. - **Given** the same source content is ingested by both `/abcd:memory ingest` (as documentation) and `/abcd:loot` (as code, per itd-26), **when** both have run, **then** the registry has one entry with `ingest_count: 2` whose `consumers` map holds both the `memory` and `loot` keys (memory and loot share one substrate registry). -- **Given** a publish payload includes a file with `citation.licence: GPL-3.0` AND the project is being published as MIT, **when** `/abcd:launch` runs, **then** launch refuses with a licence-mismatch error AND lists the offending file. Override via `--accept-licence-risk` logs the override in the launch report. +- **Given** the lifeboat's gated payload includes a file with `citation.licence: GPL-3.0` AND the project is being published as MIT, **when** `/abcd:disembark` runs the restrictive-licence gate, **then** the gate refuses with a licence-mismatch error AND lists the offending file. Override via `--accept-licence-risk` logs the override in the disembark report. - **Given** this intent's cost-discipline boundary, **when** a promotion proposes adding `known_failure_modes` (or any other dynamic-state field) to memory frontmatter, **then** the proposal is rejected as scope creep — those fields belong to other intents (Frontier Awareness, per a separate intent, for `known_failure_modes`). ## Implementing specs @@ -88,7 +88,7 @@ Per the idea-1 R5 review: the push replaces "≥3 projects in anger" (unachievab 1. **Research-shaped project** — heavy external PDFs, papers, talks. Test: does the synthesis stay coherent across 20+ external sources? Does the cumulative coverage lint trigger correctly? Are entity/topic pages distinguishable from a stack of PDF summaries? 2. **Tooling project** (e.g., abcd itself dogfooding) — almost no external sources; mostly session memory + reviews + notes. Test: does the schema feel cluttered with `source.class: session_memory` defaults? Does `index.md` provide value when most pages are principle-shaped? -3. **Mixed-licence project** — open-source docs + proprietary internal notes + paywalled academic sources. Test: do the licence gates and quotation budgets behave correctly? Does the launch-gate correctly refuse to publish proprietary content under `--keep-original`? +3. **Mixed-licence project** — open-source docs + proprietary internal notes + paywalled academic sources. Test: do the licence gates and quotation budgets behave correctly? Does the lifeboat licence gate correctly refuse to surface proprietary content under `--keep-original`? If all three produce coherent `.abcd/memory/` outputs, this intent ships. If one produces sprawl or fails the licence gates, scope is reduced and the failed example becomes the primary debug target. diff --git a/.abcd/work/issues/open/iss-23-itd-36-adr-28-reconcile.md b/.abcd/work/issues/open/iss-23-itd-36-adr-28-reconcile.md deleted file mode 100644 index 2896808a..00000000 --- a/.abcd/work/issues/open/iss-23-itd-36-adr-28-reconcile.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -schema_version: 1 -id: "iss-23" -slug: "itd-36-adr-28-reconcile" -severity: "minor" -category: "inconsistency" -source: "agent-finding" -found_during: "intent-dependency-sweep" -found_at: ".abcd/development/intents/planned/itd-36-memory-unification.md" ---- - -itd-36 is partially superseded by adr-28 (launch-gate framing rewritten); reconcile body with the ADR before its spec plans \ No newline at end of file diff --git a/.abcd/work/issues/resolved/iss-23-itd-36-adr-28-reconcile.md b/.abcd/work/issues/resolved/iss-23-itd-36-adr-28-reconcile.md new file mode 100644 index 00000000..4042c714 --- /dev/null +++ b/.abcd/work/issues/resolved/iss-23-itd-36-adr-28-reconcile.md @@ -0,0 +1,13 @@ +--- +schema_version: 1 +id: "iss-23" +slug: "itd-36-adr-28-reconcile" +severity: "minor" +category: "inconsistency" +source: "agent-finding" +found_during: "intent-dependency-sweep" +found_at: ".abcd/development/intents/planned/itd-36-memory-unification.md" +resolution: "Body reconciled with adr-28 ahead of spec planning: every launch-gate / '/abcd:launch refuses' reference (Why This Matters, both scope bullets, two GWT criteria, the mixed-licence test scenario) now names the gate's real consumer — the lifeboat restrictive-licence gate run by /abcd:disembark, with .abcd/launch-allowlist.json re-including files into the gate's own evaluation input only. The read-every-X-as-Y banner shrank to a pure framing pointer since the body no longer needs translation." +--- + +itd-36 is partially superseded by adr-28 (launch-gate framing rewritten); reconcile body with the ADR before its spec plans \ No newline at end of file From 73a48a87fe8012767037ec6e42bb07a9ec07bed5 Mon Sep 17 00:00:00 2001 From: REPPL <77722411+REPPL@users.noreply.github.com> Date: Wed, 8 Jul 2026 18:32:14 +0100 Subject: [PATCH 9/9] chore: log adjudication decisions for iss-16..23 drain Assisted-by: Claude:claude-fable-5 --- .abcd/work/DECISIONS.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.abcd/work/DECISIONS.md b/.abcd/work/DECISIONS.md index 7f27eb03..9c6960ee 100644 --- a/.abcd/work/DECISIONS.md +++ b/.abcd/work/DECISIONS.md @@ -83,3 +83,14 @@ parallel-agent merge contention bites. stored — a minor blocker of a major intent jumps the queue while staying minor. Phases keep sequencing authority (adr-9); lint makes contradictory schedules fail. Recorded as itd-78; piloted on itd-76/77. +- 2026-07-08 — Predecessor spc-N artefacts inside intents (do-not-implement + banners, implementation-complete AC tables) are demoted to Prior Art design + input per the delivery-state provenance doctrine — never implementation + authority, never a delivery claim (iss-16 itd-66, iss-17 itd-50); their + deltas become spec-time Open Questions. +- 2026-07-08 — itd-37's itd-36 edge downgraded blocked_by → builds_on: the + capture + enforcement half ships independently (Phase 0 registration) and + only extraction-to-memory waits on itd-36 (iss-18); the launch deepenings' + unscheduled state is recorded in the phase index pointing at adr-33 + (iss-20); itd-6 stays planned/ — ADR-25 superseded its framing only, and + scheduled implies planned per adr-34 (iss-22).