@@ -98,27 +98,43 @@ the contract travels as files/clipboard/MCP, period (SPEC §1.1).
9898
9999## Acceptance (checkable)
100100
101- - [ ] Every importable envelope (all seven families) has a generated
101+ - [x ] Every importable envelope (all seven families) has a generated
102102 schema; CI fails when types change without regeneration; a
103- hand-edit fails the same check.
104- - [ ] The symmetry audit is recorded in this file: every import
105- surface listed with its UI-reachable export confirmed (or the
106- gap fixed in-goal).
107- - [ ] Exports carry a stable schema id; the id's evolution rules are
108- recorded in the same ADR that goal 0046 consumes (one
109- semantics, cross-referenced).
110- - [ ] The export-id ADR is written and implemented; a far-side-shaped
111- round trip (export → modify → reimport-as-update) passes as a
112- test through the real import path.
113- - [ ] State manifest readable via MCP and present in exports; values
114- match the build (asserted in test against build info).
103+ hand-edit fails the same check — slice 1 (ADR-0036):
104+ ` internal/contract ` , invopop/jsonschema, drift gate is
105+ ` TestContractSchemas_MatchCommitted ` (regenerate-and-compare, so
106+ local and CI enforce identically).
107+ - [x] The symmetry audit is recorded in this file: all seven
108+ families verified bidirectional 2026-08-14 (inventory pass) —
109+ every family's export AND import reachable from its own page's
110+ row menu / file picker; no gaps found, nothing to fix.
111+ - [x] Exports carry a stable schema id (` mill://schema/<family>/v1 `
112+ in every envelope's ` schema ` field); evolution rules
113+ (additive-optional within a major, breaking changes bump) are
114+ ADR-0036 Decision 2 — the single change-classification
115+ vocabulary goal 0046's entity-field ADR consumes.
116+ - [x] The export-id ADR is written and implemented (ADR-0036
117+ Decision 3; the compositionservice_export.go open question is
118+ resolved and its comment updated): all seven exports emit ` id ` ,
119+ one uniform import rule everywhere, update-not-create confirmed
120+ by the committed round-trip test through the real
121+ clipboard-apply confirm path (prior state snapshotted).
122+ Re-import of a known id now updates in place behind a
123+ confirm-first dialog on every file-picker surface.
124+ - [ ] State manifest readable via MCP; values match the build
125+ (asserted in test against build info). AMENDED by ADR-0036
126+ Decision 4: NOT stamped into entity exports — that would churn
127+ every exported file on every app upgrade, breaking the
128+ byte-identical-when-unchanged property; the envelope's schema id
129+ is the per-export versioning, the manifest travels beside the
130+ data (mill://manifest + the root document). Slice 2.
115131- [ ] A seeded workflow demonstrates the evidence-receipt node
116132 end-to-end (seeds ARE the proof).
117133- [ ] The root contract document is generated, committed,
118134 drift-checked, exposed as an MCP resource, and exportable as
119135 one file; node discovery supports type/metadata filtering; both
120136 forms derive from the same registry code paths (asserted by a
121137 test comparing them).
122- - [ ] SPEC.md gains the contract-surface section (status LOCKED for
123- the format decision, with the rejected-formats reasoning
124- pointed at this file) .
138+ - [x ] SPEC.md gains the contract-surface section — §9.6, LOCKED for
139+ the slice-1 mechanics, rejected-formats reasoning pointed at
140+ this file; remaining slices named there as not-yet-built .
0 commit comments