Development record
2026-08-02 — iss-40: one canonical glossary, chosen as a ROUTING rule rather than a migration. `.abcd/development/brief/glossary/` keeps the name "glossary" and 04-naming.md stops claiming it; what stays behind in 04-naming.md is its ~60-row Reserved-vocabulary table, unchanged, because those rows are closed enums and spec-pinned reserved names (`dormant`, `task_classes` members, `index.json` field names) and the glossary schema's `aliases`/`forbidden_synonyms` fields mean nothing for an enum value. Folding them into term files would have invented scope and misused the schema; the defect was the false self-identification, and only that is retired. `VR001` keeps its reserved status and its two registration targets — the word "glossary" is removed from its descriptions across the brief and itd-37 so the term resolves to one place, but nothing about what the reserved lint would check is changed, since no Go code implements it. The index is made derived on the brief↔lifeboat-mapping pattern (`internal/core/glossary` renders, a test in the same package gates the committed README against it) rather than by a new schema-validation engine, which the README had been promising through a JSON-schema file and a `abcd lint terminology` verb that do not exist. Three limits are recorded rather than papered over: the drift gate checks the index against the term files, NOT each term file against the field tables, so the frontmatter shape stays a review responsibility; the banlist entry `names/record/glossary-self-identification` reaches only the docs-lint roots (`docs/`, root `README.md`), so it guards the published surface, not the brief where the retired phrase lived — adding `.abcd/development/brief` as a lint root surfaces 75 pre-existing blockers and is its own piece of work; and `05-internals/06-lint.md`'s `TM003`–`TM011`/H1 rows still claim `terminology.schema.json`-backed schema validation "Delivered" that no Go code implements — the same phantom-enforcement-claim class this change retires for the glossary README's validation section, but for TM003+ it sits outside iss-40's self-identification scope and inside iss-37 (phantom-enforcement-claims), stopped at round 13 pending maintainer disposition; left untouched here rather than pre-empting that disposition.
2026-08-02 — iss-40: one canonical glossary, chosen as a ROUTING rule rather than a migration. .abcd/development/brief/glossary/ keeps the name "glossary" and 04-naming.md stops claiming it; what stays behind in 04-naming.md is its ~60-row Reserved-vocabulary table, unchanged, because those rows are closed enums and spec-pinned reserved names (dormant, task_classes members, index.json field names) and the glossary schema's aliases/forbidden_synonyms fields mean nothing for an enum value. Folding them into term files would have invented scope and misused the schema; the defect was the false self-identification, and only that is retired. VR001 keeps its reserved status and its two registration targets — the word "glossary" is removed from its descriptions across the brief and itd-37 so the term resolves to one place, but nothing about what the reserved lint would check is changed, since no Go code implements it. The index is made derived on the brief↔lifeboat-mapping pattern (internal/core/glossary renders, a test in the same package gates the committed README against it) rather than by a new schema-validation engine, which the README had been promising through a JSON-schema file and a abcd lint terminology verb that do not exist. Three limits are recorded rather than papered over: the drift gate checks the index against the term files, NOT each term file against the field tables, so the frontmatter shape stays a review responsibility; the banlist entry names/record/glossary-self-identification reaches only the docs-lint roots (docs/, root README.md), so it guards the published surface, not the brief where the retired phrase lived — adding .abcd/development/brief as a lint root surfaces 75 pre-existing blockers and is its own piece of work; and 05-internals/06-lint.md's TM003–TM011/H1 rows still claim terminology.schema.json-backed schema validation "Delivered" that no Go code implements — the same phantom-enforcement-claim class this change retires for the glossary README's validation section, but for TM003+ it sits outside iss-40's self-identification scope and inside iss-37 (phantom-enforcement-claims), stopped at round 13 pending maintainer disposition; left untouched here rather than pre-empting that disposition.
Frontmatter
| id | dcn-2608020000000008 |
|---|---|
| type | decision |
| date | 2026-08-02 |
.abcd/work/decisions/dcn-2608020000000008-iss-40-one-canonical-glossary-chosen-as.md
open on GitHub ↗ · commit history ↗
mentions4
- iss-37Phantom enforcement claims: developer docs describe gates that do not run as described. Re-scoped by the 2026-08-03 maintainer disposition to three doc-claim instances, each a claim about the local pre-push gate or CI:
- iss-40one canonical glossary: 02-constraints/04-naming.md maintains a term registry that competes with the brief glossary/ directory; glossary/ is itself stale (contexts and terms missing from its own index, a validation command that does not exist) and is invisible to the brief — neither README.md nor 00-meta.md mention it. Detector: a single-registry rule enforced by a glossary lint — one canonical home, terms in the record resolve to it, the index derived rather than hand-kept, and a banlist entry for the retired registry location once merged. Acceptance corpus: the competing registry, the missing index entries, and the phantom validation command.
- iss-18106-lint.md section 1 (the lint-code namespace) is a catalogue of a predecessor project's Python-era implementation — the `IL001`–`RC007` code families and the class names they cite (`IntentLinter`, `BundleLinter`, `PromptLinter`, `SpecLinter`) describe code this repo does not carry. Re-filed here from iss-37 (2026-08-03 maintainer disposition), which is re-scoped to its three doc-claim instances.
- itd-37Every Spec Externalises How It Should And Shouldn't Be Modified