Development record
2026-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).
2026-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).
Frontmatter
| id | dcn-2609290000000021 |
|---|---|
| type | decision |
| date | 2026-09-29 |
.abcd/work/decisions/dcn-2609290000000021-ruling-j13-the-product-thinker.md
open on GitHub ↗ · commit history ↗
mentions3
- adr-2609021016275803No session holds both a reading and the ledger, and a per-run context stamp is how the record shows it
- iss-2608230752354928the history store's validKinds drops the source harness of an imported transcript
- iss-2610241549052683Twelve 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.