Development record
Twelve decisions are recorded twice, under two ids with byte-identical bodies: dcn-2609290000000011 and dcn-2609290000000020 (the Group J rulings, J12 among them), dcn-2609290000000012 and dcn-2609290000000021 (ruling J13), and ten more pairs dated 2026-09-27 to 2026-09-30. The old .abcd/work/DECISIONS.md already held each of these entries twice before c2fdca9e1 migrated every entry into a record of its own, so each duplicate became a second record. None of the twelve higher ids is cited anywhere, but abcd decide lists each ruling twice and a reader cannot tell which id is the record.
Twelve decisions are recorded twice, under two ids with byte-identical bodies: dcn-2609290000000011 and dcn-2609290000000020 (the Group J rulings, J12 among them), dcn-2609290000000012 and dcn-2609290000000021 (ruling J13), and ten more pairs dated 2026-09-27 to 2026-09-30. The old .abcd/work/DECISIONS.md already held each of these entries twice before c2fdca9e1 migrated every entry into a record of its own, so each duplicate became a second record. None of the twelve higher ids is cited anywhere, but abcd decide lists each ruling twice and a reader cannot tell which id is the record.
Frontmatter
| id | iss-2610241549052683 |
|---|---|
| type | issue |
| lifecycle | open |
| severity | minor |
.abcd/work/issues/open/iss-2610241549052683-twelve-decisions-are-recorded-twice.md
open on GitHub ↗ · commit history ↗
mentions4
- dcn-26092900000000112026-09-29 — The product thinker answered the twenty-six Group J rulings (plan or close), J1 to J26 (recorded by lane recGroupJ of autonomous run A, for orchestrator abcd-fc). The answers are kept verbatim in the local-tier file `.abcd/.work.local/scratch/reports/rulings-answered-2609-29.md`, section "Group J", dated 2026-09-29, and are restated here because that file is not committed. PLAN: the installer script becomes a minimal starter with an ownership-checked hand-over, planned as a new intent with its planning interview owed (J2, iss-377, draft itd-2609292106557115); token metering and size classes are planned as one intent (J3, iss-2608301744251874 and iss-2608301856299268), and session token accounting in the history store joins that metering intent (J4, iss-2608220150157508; all three in draft itd-2609292107351737); the sources tooling moves into abcd's core with ingest and consult as abcd verbs (J5, iss-27, whose corpus half itd-76 already delivered), and the backfill of the placeholder source entries is part of that intent (J6, iss-55; both in draft itd-2609292108089653); the grill hands off to an installed external interview skill and falls back to its own (J11, iss-165, draft itd-2609292108373494); an opt-in local-model prompt sanitiser is planned (J14, iss-2608261543489261, draft itd-2609292109005937); decision-to-transcript links are planned, with the anchor kind and the link's home settled in the planning interview owed for draft itd-171 (J16, iss-2608290819228175); the dredge synthesis, its write-ups as their own memory source class, is planned together with draft itd-25, whose planning interview is owed (J19, iss-2609211905340006); one provenance register across ingest and vendoring is planned together with draft itd-26, whose planning interview is owed (J20, iss-2609211905346507); release retention, keeping the newest release per version line, is automated by planning draft itd-70 (J21, iss-282); a rules-backend seam with an opt-in CARL adapter is planned, the native loader staying the default (J22, iss-64, draft itd-2609292109214516); core-owned managed pre-commit gates are planned with draft itd-62 (J23, iss-84); a behavioural end-to-end scenario suite per verb family is planned (J24, iss-48, draft itd-2609292109475690). Every draft stays in drafts/ until a person plans it, and each source issue links its draft and names that planning interview in its deferral. BUILD: the teaching plane, the rules-loader safety domain generated from the hazard registry, is built as a lane, the registry being the single source (J10, iss-151 and itd-103; a code lane owns it). RULED DETAILS: `source_kind` carries both, as two separate labels, one for the tool and one for the route (J13, iss-2608230752354928); the prompt router's removal signal is the full list of active domains every time, a domain's absence meaning it has stopped (J15, iss-2608261550580260); setup offers an outside AI service (for example OpenRouter) at install, skippable, once the API adapter ships (J18, iss-2609081951416843, which waits on the API adapter); the salvage-hook timeout is 120 seconds, the wait must show a counter or a message while it runs and never stall silently, and every per-event timeout is pinned in a test (J25, iss-323). J13, J15 and J25 are carried by code lanes. CLOSE: the quick-tunnel preview protocol is closed unless the need recurs (J26, iss-2608230617385431, wontfix with that reason). PARKED ON A TRIGGER: agent payment protocols are kept under watch, not now, revisited as the protocols mature (J8, iss-138); the findings-only skill waits for the skill format to be versioned and stewarded (J9, iss-139); the disposition worksheet as an intent and a site page waits until after the first study (J17, iss-2609021815529020). DECIDE LATER: the Homebrew tap stays parked (J1, iss-380); pluggable search back ends (J7, iss-26); forge-backed record numbering (J12, iss-2608210737264758).
- dcn-26092900000000122026-09-29 — Ruling J13 (the product thinker, 2026-09-29, verbatim: "iss-2608230752354928 source_kind: BOTH, two separate labels (tool + route).") is applied to the transcript store (lane sourceLabels, autonomous run A). `source_kind` carries the ROUTE, a closed set of `native` (abcd's own capture of the host's transcript) and `import` (another tool's export); a new `source_tool` carries the TOOL, an open lowercase slug with `host` reserved for the harness abcd is installed in. The tool vocabulary is open rather than closed, so a second harness needs no code change, and because it is caller-named it passes the redaction scan with the body and a label the scan would change refuses the capture. Neither label can stand in for the other: the route refuses a tool name, the tool refuses a route word and any `-import` composite, and an import never names `host`. A record stored before the split carries `source_kind` alone and reads under both labels, derived on read without rewriting it: `native` as native from `host`, `specstory-import` as import from `specstory`; the same derivation accepts the fused spelling on write. Nothing migrates on write, and only `history migrate`, rewriting a record for its own reasons, stamps the new form. The record schema version does not move: parsing is by field presence (adr-2609021016275803).
- dcn-26092900000000202026-09-29 — The product thinker answered the twenty-six Group J rulings (plan or close), J1 to J26 (recorded by lane recGroupJ of autonomous run A, for orchestrator abcd-fc). The answers are kept verbatim in the local-tier file `.abcd/.work.local/scratch/reports/rulings-answered-2609-29.md`, section "Group J", dated 2026-09-29, and are restated here because that file is not committed. PLAN: the installer script becomes a minimal starter with an ownership-checked hand-over, planned as a new intent with its planning interview owed (J2, iss-377, draft itd-2609292106557115); token metering and size classes are planned as one intent (J3, iss-2608301744251874 and iss-2608301856299268), and session token accounting in the history store joins that metering intent (J4, iss-2608220150157508; all three in draft itd-2609292107351737); the sources tooling moves into abcd's core with ingest and consult as abcd verbs (J5, iss-27, whose corpus half itd-76 already delivered), and the backfill of the placeholder source entries is part of that intent (J6, iss-55; both in draft itd-2609292108089653); the grill hands off to an installed external interview skill and falls back to its own (J11, iss-165, draft itd-2609292108373494); an opt-in local-model prompt sanitiser is planned (J14, iss-2608261543489261, draft itd-2609292109005937); decision-to-transcript links are planned, with the anchor kind and the link's home settled in the planning interview owed for draft itd-171 (J16, iss-2608290819228175); the dredge synthesis, its write-ups as their own memory source class, is planned together with draft itd-25, whose planning interview is owed (J19, iss-2609211905340006); one provenance register across ingest and vendoring is planned together with draft itd-26, whose planning interview is owed (J20, iss-2609211905346507); release retention, keeping the newest release per version line, is automated by planning draft itd-70 (J21, iss-282); a rules-backend seam with an opt-in CARL adapter is planned, the native loader staying the default (J22, iss-64, draft itd-2609292109214516); core-owned managed pre-commit gates are planned with draft itd-62 (J23, iss-84); a behavioural end-to-end scenario suite per verb family is planned (J24, iss-48, draft itd-2609292109475690). Every draft stays in drafts/ until a person plans it, and each source issue links its draft and names that planning interview in its deferral. BUILD: the teaching plane, the rules-loader safety domain generated from the hazard registry, is built as a lane, the registry being the single source (J10, iss-151 and itd-103; a code lane owns it). RULED DETAILS: `source_kind` carries both, as two separate labels, one for the tool and one for the route (J13, iss-2608230752354928); the prompt router's removal signal is the full list of active domains every time, a domain's absence meaning it has stopped (J15, iss-2608261550580260); setup offers an outside AI service (for example OpenRouter) at install, skippable, once the API adapter ships (J18, iss-2609081951416843, which waits on the API adapter); the salvage-hook timeout is 120 seconds, the wait must show a counter or a message while it runs and never stall silently, and every per-event timeout is pinned in a test (J25, iss-323). J13, J15 and J25 are carried by code lanes. CLOSE: the quick-tunnel preview protocol is closed unless the need recurs (J26, iss-2608230617385431, wontfix with that reason). PARKED ON A TRIGGER: agent payment protocols are kept under watch, not now, revisited as the protocols mature (J8, iss-138); the findings-only skill waits for the skill format to be versioned and stewarded (J9, iss-139); the disposition worksheet as an intent and a site page waits until after the first study (J17, iss-2609021815529020). DECIDE LATER: the Homebrew tap stays parked (J1, iss-380); pluggable search back ends (J7, iss-26); forge-backed record numbering (J12, iss-2608210737264758).
- dcn-26092900000000212026-09-29 — Ruling J13 (the product thinker, 2026-09-29, verbatim: "iss-2608230752354928 source_kind: BOTH, two separate labels (tool + route).") is applied to the transcript store (lane sourceLabels, autonomous run A). `source_kind` carries the ROUTE, a closed set of `native` (abcd's own capture of the host's transcript) and `import` (another tool's export); a new `source_tool` carries the TOOL, an open lowercase slug with `host` reserved for the harness abcd is installed in. The tool vocabulary is open rather than closed, so a second harness needs no code change, and because it is caller-named it passes the redaction scan with the body and a label the scan would change refuses the capture. Neither label can stand in for the other: the route refuses a tool name, the tool refuses a route word and any `-import` composite, and an import never names `host`. A record stored before the split carries `source_kind` alone and reads under both labels, derived on read without rewriting it: `native` as native from `host`, `specstory-import` as import from `specstory`; the same derivation accepts the fused spelling on write. Nothing migrates on write, and only `history migrate`, rewriting a record for its own reasons, stamps the new form. The record schema version does not move: parsing is by field presence (adr-2609021016275803).