Skip to content

Commit 3030369

Browse files
docs(spec): book.json's liveness header names the dead row, not a pair of integers (#16982)
The `_note` opened with "15 of 17 live; the two dead entries are both inline `translations` maps". Neither half survives a re-read of the ledger it describes: the file carries 13 live and 1 dead row across all nesting levels, and the gate's own report (`check-liveness.mts --json`, `types.book.byStatus`, published in `liveness/state-counts.md`) reads `live 20 … dead 1 … classified 21`. 15 and 17 appear in neither granularity, and the plural sends a reader looking for a second dead inline `translations` map the ledger does not record. The second dead entry did exist and was NOT lost. `book.translations` was seeded `dead`/`authorWarn` beside `groups[].translations` on 2026-08-01 (#4488); #4667 retired both by two deliberately different routes, stated in that PR's own commit message: the book-level key is a strict deletion, so it left the walked shape and its ledger row was deleted with it, while the group-level key is tombstoned (`retiredKey`) because `BookGroupSchema` is a plain `z.object` with no `.strict()`, where a bare delete would have zod silently strip the key. The liveness README's `book` row records that disposition in writing, and `check:liveness` reports `unclassified: 0` for the type while enforcing that no ledger row outlives its property. The ledger is complete; only the sentence had gone stale, on the day the second key was retired. The replacement states the boundary — which row is dead, and why its twin carries no row — and restates no total, per the ledger README's counting-method section ("The Notes cell is not a place to restate a number"). No `status` value moves, no schema changes, and `state-counts.md` is untouched and reported current. Claude-Session: https://claude.ai/code/session_016N6xmWt5hYm94ffVEwGH8x Co-authored-by: Claude <noreply@anthropic.com>
1 parent db4bf90 commit 3030369

2 files changed

Lines changed: 32 additions & 1 deletion

File tree

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
---
2+
'@objectstack/spec': patch
3+
---
4+
5+
Liveness ledger: `book.json`'s header names the dead row instead of restating counts
6+
that match no reading of the file.
7+
8+
The `_note` opened with *"15 of 17 live; the two dead entries are both inline
9+
`translations` maps"*. Neither half survives a re-read of the ledger it describes: the
10+
file carries **13 live and 1 dead** row across all nesting levels, and the gate's own
11+
report — `check-liveness.mts --json`, `types.book.byStatus`, published in
12+
`liveness/state-counts.md` — reads `live 20 … dead 1 … classified 21`. 15 and 17 appear
13+
in neither granularity. The plural is the half a reader acts on: it sends them looking
14+
for a second dead inline `translations` map that the ledger does not record.
15+
16+
The second dead entry did exist, and it was not lost. `book.translations` was seeded
17+
`dead` next to `groups[].translations` on 2026-08-01 (#4488), and both were retired in
18+
#4667 by two deliberately different routes: the book-level key is a strict deletion, so
19+
it left the walked shape and its ledger row was deleted with it, while the group-level
20+
key is tombstoned (`retiredKey`) because `BookGroupSchema` is a plain `z.object` with no
21+
`.strict()`, where a bare delete would have zod silently strip the key. The README's
22+
`book` row records that disposition in writing, and the gate reports `unclassified: 0`
23+
for the type — every key in the walked shape has a verdict. The ledger was complete; only
24+
the sentence had gone stale, on the day the second key was retired.
25+
26+
The replacement states the boundary — which row is dead, and why its twin carries no row
27+
— and restates no total. Counts belong to `state-counts.md`, which `check:liveness`
28+
proves fresh on every run; a fresh pair of integers in a Notes cell is the next
29+
occurrence waiting to happen.
30+
31+
No `status` value moves and no schema changes: this is the header prose only.

packages/spec/liveness/book.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"type": "book",
3-
"_note": "BookSchema (ADR-0046 §6 documentation spine). Consumers: the REST `/meta/book/:name/tree` endpoint (`packages/rest/src/rest-server.ts`, the `book/:name/tree` branch of `registerMetadataEndpointsInner`) driving the spec's pure `resolveBookTree` / `audienceAllows` (packages/spec/src/system/book.zod.ts), and objectui's console docs portal (apps/console/src/pages/book-nav.ts @940ba24 — a faithful resolver port rendering the reader UI, plus portal-only consumers for slug/icon/order). 15 of 17 live; the two dead entries are both inline `translations` maps that LOOK like the doc-level mechanism that works (`doc.translations`, resolveDocLocale) but have no resolver anywhere. Seeded 2026-08-01 (#4488). 2026-08-28 (#13003): every LOCAL citation in this file was re-anchored to its consuming symbol. The four objectui-only entries (`description`, `slug`, `icon`, `order`) are left BYTE-FOR-BYTE UNTOUCHED and undated-forward on purpose: their evidence is pinned at `objectui @940ba24`, a commit this container cannot reproduce, and the anchor grammar deliberately never collects foreign anchors — re-stamping `verifiedAt` on a call graph nobody re-closed is exactly the false confidence this ledger exists to prevent (the `tool.json` precedent).",
3+
"_note": "BookSchema (ADR-0046 §6 documentation spine). Consumers: the REST `/meta/book/:name/tree` endpoint (`packages/rest/src/rest-server.ts`, the `book/:name/tree` branch of `registerMetadataEndpointsInner`) driving the spec's pure `resolveBookTree` / `audienceAllows` (packages/spec/src/system/book.zod.ts), and objectui's console docs portal (apps/console/src/pages/book-nav.ts @940ba24 — a faithful resolver port rendering the reader UI, plus portal-only consumers for slug/icon/order). `groups[].translations` is dead: an inline map that LOOKS like the doc-level mechanism that works (`doc.translations`, resolveDocLocale) but has no resolver anywhere. Its book-level twin was the same trap and was retired in the same pass (#4667) — that one is a strict deletion, so it left the walked shape and holds no row here, while the group-level key is TOMBSTONED (`retiredKey`; BookGroupSchema is a plain z.object with no `.strict()`) and stays in the shape this ledger walks. No total is restated in this header: `state-counts.md` publishes the counts and `check:liveness` proves that artifact fresh on every run. Seeded 2026-08-01 (#4488). 2026-08-28 (#13003): every LOCAL citation in this file was re-anchored to its consuming symbol. The four objectui-only entries (`description`, `slug`, `icon`, `order`) are left BYTE-FOR-BYTE UNTOUCHED and undated-forward on purpose: their evidence is pinned at `objectui @940ba24`, a commit this container cannot reproduce, and the anchor grammar deliberately never collects foreign anchors — re-stamping `verifiedAt` on a call graph nobody re-closed is exactly the false confidence this ledger exists to prevent (the `tool.json` precedent).",
44
"props": {
55
"name": {
66
"status": "live",

0 commit comments

Comments
 (0)