schema stamps: lazy v1 for chats + the graph family, honest refusal
Chat records gain version (CURRENT_CHAT_VERSION), stamped by a single writeChat choke point in the store; absence reads as v1 — existing files migrate on their next write, no mass rewrite. The graph family (four JSONL ledgers, sources.json, render-settings.json) shares one lazy sidecar, graph/format.json; positions stays unstamped (rebuildable) and jobs stay unstamped (transient). Downgrade scenario ruled honest-refusal: records stamped newer than the running build read as absent (chats, logged) or throw (graph family) — a read-modify-write store never rewrites what it doesn't understand. Golden fixtures stay the unstamped legacy shape on purpose (lazy v1 is current-valid by design); the stamped write path is pinned by tests/schema-stamps.test.ts. Reads never write — the golden byte-identical pin holds.
This commit is contained in:
Vendored
+9
@@ -36,3 +36,12 @@ core tool surface must appear in real data here.
|
||||
Run the app (`npm run dev`), exercise the feature against `data/`, then copy
|
||||
the produced record in verbatim. Do not hand-edit content; if a record needs
|
||||
pruning, re-run the flow instead.
|
||||
|
||||
## Stamps
|
||||
|
||||
These files are deliberately the UNSTAMPED legacy shape (schema-stamp wave,
|
||||
2026-10-10): lazy v1 means absence reads as current-valid, so this set pins
|
||||
the pre-stamp read path forever. Stamped writes (chat `version: 1`, the
|
||||
`graph/format.json` sidecar) are pinned by `tests/schema-stamps.test.ts`.
|
||||
New records copied in after their first post-stamp write will carry the
|
||||
stamps — that shape is equally current-valid.
|
||||
|
||||
Reference in New Issue
Block a user