M1 plan — Finish the representation migrations
State: open; rebaselined at commit 6660bd2a on 2026-08-27. Only the
Areas/Topics packet remains. Global note status and path-valued types were
resolved and guarded on 2026-08-27; text promotion and the snapshot type
pointer were resolved and guarded on 2026-08-19. See the witness
ledger.
Resolution selected
Run five independently reviewable packets rather than one correlated sweep. The governing ADRs and schemas already settle the representations, so no new design ADR is needed. Each packet inventories current consumers, explicitly historical occurrences, edits, validation, and a narrow guard against reintroducing the retired executable form.
Areas/Topics waits for the tag-contract workshop. Completed packets remain recorded outcomes until this workshop closes.
Packets
- Global note status — resolved 2026-08-27. Current guidance now describes
required path-valued
typeanddescription, plus optionaltraits,tags, anduser-verified, without a global maturity ladder. The sweep preserved ADR and article-local lifecycle fields and removed the final liveseedlingnavigation label. A schema-derived guard checks the shared note fields, scans active frontmatter for unauthorizedstatus, and rejects the retired contract only in its inventoried current guidance surfaces. - Areas and Topics. After the tag-contract workshop lands, rebuild and likely rename
areas-exist-because-useful-operations-require-reading-notes-together.mdaround its surviving claim: comparative-reading operations need a purpose-built bounded scope rather than navigation tags. Rewritestale-indexes-are-worse-than-no-indexes.mdaround tags, generated listings, scoped search, and enforced tag-README marks. Sweep the other currentareas:and Topics instructions while preserving ADR 004 as history. Usecommonplace-relocate-noteif the title/path changes. - Path-valued types — resolved 2026-08-27. Current examples now use resolvable path values with their source location made explicit where that changes resolution. A guard parses every visible active artifact's frontmatter, validates each type path, checks executable examples in the inventoried guidance, and allows the old bare enum only in ADR 012's dated history.
- Snapshot type pointer — resolved 2026-08-19. The authoritative default
in
kb/sources/types/snapshot.mdnow matches the schema's requiredtype: kb/sources/types/snapshot.md. The collection Types menu remains the extension point. A schema-derived docs test guards the type spec, menu, and snapshot skill defaults; existing CLI tests cover the X and GitHub emitters. The repair does not constrain S1's mutation boundary or I3's installed sources contract. - Text promotion — resolved 2026-08-19.
kb/types/text.mdnow requires valid note frontmatter includingdescriptionandtype: kb/types/note.md, with no implicit human verification. The root and reference guides plus the text-promotion passages in five conceptual notes match the already-correct convert skill. A focused docs test derives the schema's required fields, checks the authoritative text contract and converter template against them, and rejects retired shortcuts across those eight live consumers.
Migration manifest
| Packet | Retired form | Ground truth | Live consumers | Allowed history | Chosen edit | Verification | State |
|---|---|---|---|---|---|---|---|
| Global note status | Global maturity/status on base notes | ADR 044, note-base.schema.yaml, note.schema.yaml, and note.md |
Every visible active artifact's frontmatter plus the inventoried current guidance that taught maturity or status | ADR lifecycle values and article-local publication status remain type-local; dated decisions remain history | Replace maturity/status guidance with the actual shared fields and remove the final seedling navigation label |
All 19 changed KB artifacts validate cleanly; schema-derived tests constrain shared fields, authorized local status values, and retired current guidance; full suite and focused Ruff pass | Resolved 2026-08-27 |
| Areas and Topics | areas: plus Topics footers as current grouping |
ADR 004 and current tag contracts | Starting witnesses: areas note and stale-indexes note; full sweep after tag-contract adoption | ADR 004 retains the migration history | Pending tag-contract adoption | Pending | Open |
| Path-valued types | Bare type names and collection/global lookup fallback | collections-and-types.md, resolver, and schemas |
Every visible active artifact's frontmatter plus executable examples in the canonical type guidance and related notes | ADR 012 retains the pre-path enum in dated context | Replace live bare values with paths that resolve from the artifact or explicitly illustrated source context | Parsed frontmatter and executable-example guards resolve every current type path; the bare-value scan permits only ADR 012; all changed artifacts, the full suite, and focused Ruff pass | Resolved 2026-08-27 |
| Snapshot type pointer | type: snapshot |
snapshot.schema.yaml |
Snapshot type spec; sources Types menu; snapshot-web default and template; X and GitHub emitters | None | Replace the bare default with the schema's path-valued constant while retaining the Types-menu extension point; S1 and I3 do not alter the pointer | All 4 edited Markdown artifacts validate cleanly; schema-derived spec/menu/skill parity and existing emitter tests pass; 492-test suite and focused Ruff pass | Resolved 2026-08-19 |
| Text promotion | Description-only or arbitrary-frontmatter promotion; bare type: note; implicit verification |
note-base.schema.yaml, note.md, and cp-skill-convert |
Root README, reference README, text.md, convert-description, metadata-enforcement, why-types, directory-scoped-types, and wikiwiki notes |
Dated ADR/workshop experiment copies may retain their historical wording | Require description plus type: kb/types/note.md; leave user-verified absent; preserve the logical artifact while allowing backlink-safe rename |
All 11 edited Markdown artifacts validate cleanly; schema-derived text-contract/converter checks and the scoped retired-wording scan pass; 491-test suite and focused Ruff pass | Resolved 2026-08-19 |
Guard and verification
Maintain the migration manifest above as each packet inventories consumers and
settles its allowed history, edits, verification, and closure. Add focused
guards for load-bearing literals such as bare YAML
type: note|spec|structured-claim|snapshot, active areas:/Topics-footer
instructions, and global note maturity/status claims. Parse YAML fields and
executable examples where possible so ordinary prose occurrences do not fail.
Use explicit historical allowlists; do not build a general
semantic-contradiction engine.
Validate every changed artifact. If tests or relocation code are involved, run the full test suite and lint. M1 closes when all current procedures and examples match the schemas and every retained retired spelling is visibly historical.