Skip to content

docs(spec): the field ledger's notes and the liveness README cite a commit, or say what the number stood for, in place of dead tracker numbers - #20891

Merged
os-justin merged 1 commit into
mainfrom
claude/issue-20234-liveness-dead-numbers-4b
Sep 30, 2026
Merged

os-justin merged 1 commit into
mainfrom
claude/issue-20234-liveness-dead-numbers-4b

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Part of #20234

Clause-②: no

Liveness slice 4b (claim 5913437610), the last slice of the liveness stage. In field.json (11 sites) and liveness/README.md (29), each citation of a tracker number answering 404 now names a commit in this repository or, where the number alone carried the meaning, says that meaning in words. 8 note / _note leaves in field.json and 14 README lines change, and nothing else does; no number is added, and no README table row, heading or date moves. The 16 dead numbers now occur 0 times across every ledger and the README. One @objectstack/spec patch changeset. This says Part of: the card's stage 11 (the hand-written parts of migrations/registry.ts) is still open.

Local runs at e74311d471: build 71/71; spec local 580 files pass; spec repo 42 of 46 pass; spec typecheck and the lint package's liveness test pass; 58 derived gates, 57 exit 0 (check:platform-checklist: the pre-existing auth-plugin.ts#twoFactor anchor and the picklist capability the checklist does not classify yet; neither is touched here, and the gate is not per-PR CI). Lint: ESLint's config matches none of the 3 changed files (3 "no matching configuration" results, 0 errors); type-aware linting is never enabled.


Generated by Claude Code

…ommit, or say what the number stood for, in place of dead tracker numbers

Liveness slice 4b, the last one: the 40 remaining sites that cite a
tracker number answering 404, 11 in field.json and 29 in
liveness/README.md.

field.json: the six batch re-anchoring stamps and the _note header
now read (commit 8f10a79), the commit that wrote them; the
conditionalRequired correction reads (commit e25e839); the
action.execute precedent names cae2169. Two clauses say the meaning
in words (reported separately; the anchor-adoption worklist). Only
note/_note leaves change; status, evidence, proof, verifiedAt and
evidenceScope are identical and no number is added.

README.md: only the 14 lines carrying a dead number change, each by
the number (and, where needed, the words next to it). Anchors reuse the
earlier slices' choices for the same numbers: be21955, bc56e18,
a9ee989, a3d5724, b3a63d3, cae2169, 2306a76; plus e25e839,
3fc6066 and ae31a19 (the capability seeding). Table rows, headings
and dates are unchanged.

Claude-Session: https://claude.ai/code/session_01Sfe5YjBLwB9J3y8fvm2xq1
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added documentation Improvements or additions to documentation tooling labels Sep 30, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️ 2 changed file(s) yielded no anchor (packages/spec/liveness/README.md, packages/spec/liveness/field.json), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)).

What this run could not see
  • 2 changed file(s) yielded no anchor (packages/spec/liveness/README.md, packages/spec/liveness/field.json) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.
  • a key NAME is not a key, so the hand re-read the line above prescribes can land on the wrong schema. The same spelling is authorable on one governed type and a [REMOVED] tombstone on another for each of active, aria, joins, objects, template, tools and version (censused on [finding] tools is a key on BOTH AgentSchema (tombstoned, dead) and SkillSchema (live, cloud-attested), so a name-based search attributes skill examples to the agent key — it produced a false stop-the-line alarm on PR #19059 #19093 over the liveness ledger's governed types, top-level keys); nothing in a search result distinguishes the two, so a grep hit on a LIVE example reads as evidence about the DEAD key. Measured on fix(spec): the agent.tools liveness row says dead — it claimed live on a key the schema tombstoned #19059: content/docs/ai/agents.mdx was reported as contradicting the agent.tools tombstone over its tools: example at :161, which is inside the defineSkill({ block opened at :155 — the page was already correct. Settle ownership by PARSING the value against both schemas, never by the name: that literal PASSES SkillSchema, and as an AgentSchema it FAILS at tools with the tombstone prescription. ⛔ These names are not the whole class — a key retired through a .strict() guidance map leaves no tombstone in the walked shape and none of them here (tool.category, live as AIToolDefinition.category).

Coarse fallback — 137 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 42d78b97feedf9860655aa93ca1fb32ee76526c2 → packageMentionDocs.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: e74311d47137bfe1ac883738644f258e07df3be7
Local-runs: none

Inputs read: card #20234 (body and all 64 comments, among them claim 5913437610, report 5914437728, ruling 5914481944, the liveness-stage rulings 5903816491 / 5905232957 / 5907367381 / 5909873384, and ruling C+D 5749154545 on #19123); PR #20891 (body, 3-file list, and git diff of merge-base 07356a6ab0 against the head; one commit on the branch); the head's check-runs. Read-only throughout: git fetch, git show, git grep, git diff, git log, git merge-base, git rev-parse, and unauthenticated REST GETs. No checkout, build, test, gate or ablation.

① Derived judgments

Accept set and public surface. The diff touches three paths: .changeset/20234-liveness-ledger-provenance-anchors-4b.md (added), packages/spec/liveness/field.json (8 string leaves) and packages/spec/liveness/README.md (14 lines). No .zod.ts, no export, no script, no generated artifact, nothing under packages/spec/src or packages/spec/scripts. No accept set moves — right, and Clause-②: no is right. The only public surface that moves is shipped text: liveness is in @objectstack/spec's files list on the head (dist, json-schema, liveness, ...), so the ledger and its README ride in the tarball — which is the reason a changeset exists at all (see ②).

Structural read of field.json (base 07356a6ab0 vs head, every leaf). 253 leaves before and after, in identical key order. Exactly 8 leaves differ: _note, and the note of requiredWhen, conditionalRequired, unique, reference, autonumberFormat, maxLength, minLength. Of 88 status, 44 evidence, 2 proof, 25 verifiedAt, 9 evidenceScope, 1 authorHint, 1 authorWarn leaves, 0 differ; there are no producer leaves. Each changed leaf equals its base text with exactly the five replacement rules applied (string equality). Numbers removed: #13003 x9, #13036 x1, #13043 x1 = 11; numbers added: 0. No changed row carries authorWarn. Matches the report and the claim's surface.

Structural read of README.md. 979 lines before and after. Exactly 14 lines differ: 272, 273 (the wrap of the same sentence), 283, 359, 910, 912, 939-945, 949. The 22 ATX headings are identical (a naive ^# count reads 23 on the base because base line 273 began with #12400 readings ..., a wrapped sentence, not a heading). 124 table lines before and after; the first-cell (Type) sequence is identical; the 10 table rows that differ are all two-cell rows whose Notes cell alone changes; the 4 digit-only table cells are identical. Numbers removed: exactly 29 sites over the 16 numbers (#14369 x5, #14691 x4, #6540 x3, #10812 / #11330 / #13036 / #14365 x2 each, and one each of #10194 #10238 #10627 #10724 #10726 #10728 #11331 #13003 #13043); numbers added: 0. The README's 41 row tokens equal the 41 state-counts/*.md files on the head, state-counts/ is not in the diff, and the Spec property liveness check-run (the reader that compares the two) is success — so the table still matches the state counts. git grep of the 16 numbers over packages/spec/liveness/ on the head: 0 hits (base: README 13 lines, field.json 8 lines).

The 16 numbers. Probed 2026-09-30T15:56Z by REST GET issues/N: all 16 answer 404; controls #20234 = 200 and #8710 = 404 at both ends. The lit numbers left standing beside rewritten ones (#5961, #12400, #13464, #3855, #5271, #2377) answer 200. So no live citation was removed and no dead one kept.

The 11 anchor commits. Each resolves to exactly one object (rev-parse --disambiguate), each 9-hex prefix is the commit's own, and merge-base --is-ancestor against origin/main exits 0 for every one (the local clone is shallow; an exit 0 still proves ancestry). Each was read with git show, and its own message or diff decides the sentence it now anchors:

The 7 form-D sentences say what the tree shows and no more: field.json _note "is reported separately rather than executed here" (8f10a79's own stance; the same file's conditionalRequired note names the executing commit e25e8397a); "closes the anchor-adoption worklist"; README 910 "the gate's line-citation counter"; README 940 "(since #13464 the publisher computes ...)" with "nothing re-verifies them today" kept (the same leg is form D in manifest.json on main); README 941 "A different question was open about patterns" (past tense is right: patterns is a tombstone since b3a63d32c; crud_endpoints.json on main already says "a different question was open about this same key") and "The z.partialRecord question closes with the record"; README 949 "The end-to-end measurement is not prejudged" (the seeding commit 559041d39d's own words, minus the number; the clause after it still names the measurement).

Author-shown and AI-facing text, sentence by sentence.

  • Changeset: heading "either cite a commit in this repository or say in words what the number stood for" — true (33 C, 7 D). "Eleven ... and twenty-nine ..." — true (11 + 29 by the structural read). "pointed at a GitHub issue or pull request that no longer exists" — true (16 x 404, #6540 was spelled as a PR). "names the commit that did or recorded what the number pointed at" — true and worded carefully: be21955ba records readings it did not make and a9ee98992 executes a ruling. "ship in this package's tarball" — true (files includes liveness). "no row's status, evidence, proof, producer or date changes" — true at the leaf level (0 of each; verifiedAt 0). "no README table row or heading is added, removed or renamed" — true. "no schema, export or runtime behaviour changes" — true (only text files in the diff). Every sentence is true on main the moment this PR lands; none waits on another PR.
  • PR body: "8 note / _note leaves in field.json and 14 README lines change, and nothing else does" — true. "no number is added" — true. "no README table row, heading or date moves" — true for every date VALUE (table cells, seeded dates, verifiedAt); one caveat below. "The 16 dead numbers now occur 0 times across every ledger and the README" — true (git grep on the head). "the card's stage 11 (the hand-written parts of migrations/registry.ts) is still open" — true per the thread (5903202064, 5903816491, 5914481944). The local-run sentences are the dev's; the gate verdicts are the check-runs (below).
  • Commit message: "the six batch re-anchoring stamps and the _note header now read (commit 8f10a79)" — true (6 + 1). "Only note/_note leaves change; status, evidence, proof, verifiedAt and evidenceScope are identical and no number is added" — true. "Table rows, headings and dates are unchanged" — same caveat as the PR body.
  • The one over-broad sentence is in the dev report's changeset_universal_grep: "no date text changes in either file". Strictly false on this head: README line 272 gains the token 2026-08-24 ("the 2026-08-24 reading recorded in commit be21955"), which the base sentence did not carry. It is sourced (be21955's body dates the cloud reading 2026-08-24, and base line 940 already pairs #10812 with "CLEAN 2026-08-24"), it names no number, it moves no date value, and it is the kind of words-beside-the-number the claim permits in a form-C rewrite. Noted so the next reader does not take "no date text changes" as a byte-level claim; it does not fail the PR.

Ruling C+D compliance. Form C's order is the ADR or ruling record when one exists, else the commit sha, with a PR number only as a link beside it. Every form-C site here cites a commit; where a ruling is the decider (2026-08-30 runtime, 2026-08-22 routes), the ruling record lived on the dead tracker itself and the executing commit is the in-repo object, and ADR-0049 is already named beside b3a63d32c. No PR number was introduced. Form D was used only where the number alone carried the meaning. Right.

Part of #20234. Right. The card's stage 11 (the hand-written parts of packages/spec/src/migrations/registry.ts, then gen:upgrade-guide) is named as still open by the stage-10 landing 5903202064, ruling 5903816491 and ruling 5914481944 (serial behind #20281), and the report records 25 further packages/spec/src sites of these 16 numbers routed to a later stage or #20556. Closes would have been wrong; the Part-of PR must not also close its card check-run is success.

② Semver level

@objectstack/spec: patch, in .changeset/20234-liveness-ledger-provenance-anchors-4b.md. Right: the diff publishes (the liveness/ ledgers and their README are in the package's files list on the head), so skip-changeset would be wrong; it publishes text only — no schema, export, accept set, default or runtime move — so minor or major would be wrong. Clause-② line: Clause-②: no in the PR body and the changeset, matching claim 5913437610 — right, nothing in the diff moves an accept set. Check-runs Check Changeset and Governed Surface Queue Guard are success on the head.

③ Boundary flags

Report 5914437728 on the card (branch claude/issue-20234-liveness-dead-numbers-4b, PR #20891, head e74311d471). open_questions: none.

deviations, each answered:

  1. Attribution — the commit carries the model-free trailer pair (session line plus co-author line) and the PR body ends with the session-URL footer; AGENTS.md takes precedence over the harness text. Read off the head: it does. No action.
  2. Branch history — one --force-with-lease on the dev's own branch before any PR existed, message-only correction ("seven" to "six" stamps; the head's field.json carries 6 stamps plus the header, so the corrected message is the true one). The head's tree is fed159715488... as reported; the PR has one commit. Ruling 5914481944 accepted it under AGENTS.md §3. No action.
  3. Shared refs — a git fetch advanced the shared origin/main toward upstream only. No action.
  4. Scratch log placement corrected before other writes. No action.
  5. Labels — none written by the dev; documentation, size/s, tooling are the labelers', needs:contract-review is the seat's per ruling 5914481944. Consistent with the PR's label set. No action.
  6. Worktree removal after read-back; remote head equals the reviewed head. No action.

out_of_scope_findings, each routed:

  1. Stage 11 (migrations/registry.ts hand-written parts) and the 25 remaining packages/spec/src sites of these 16 numbers — this card's later stages; ruling 5914481944 records stage 11 as serial behind spec(integration): build the connector sync executor that syncConfig and fieldMappings declare (14 keys), once and on the mainstream shape #20281 stage ①. Already escalated on the card. This is why the PR says Part of.
  2. 14 sites in packages/spec/scripts/** (among them the readme-table.mts header twin of README line 939) — [finding] check-doc-authoring 的两条腿都够不到 packages/spec/scripts/** —— 一条印给作者的拒绝消息里带着 404 的编号,而门禁是绿的 #19124, per rulings 5909873384 and 5914481944. Routed; nothing for this PR.
  3. check:platform-checklist exit 1 on the base (identity-auth.json twoFactor anchor, pre-existing since slice 1; coverage.json picklist UNCLASSIFIED, arrived with addbbf02ab on the base) — the daily watchdog and picklist metadata kind — spec: picklist collection, Field.select({ picklist }), server-resolved options, translation face (phase 1 of objectstack#18164) #19518's Tier H docs PR, per ruling 5914481944. Not per-PR CI; no check-run on this head runs it; this diff touches neither docs/qa nor the ledger file set. Routed.

Claim 5913437610 surface held: exactly the two files plus one changeset; nothing under packages/spec/src/** or packages/spec/scripts/**; no status, evidence, proof, date-value, producer or scope leaf moved; in the README only sentences carrying a dead number moved.

Check-runs on e74311d471 (read last, 2026-09-30T15:57Z; 39 runs, 35 distinct names after dedupe by newest started_at): 30 success, 5 skipped, 0 failure, 0 still running. Skipped: Auto Label and Check PR Size (their newest runs, started 15:33:40Z on the label event, skipped; earlier runs of both were success), Build Docs and Console Pin Gate (the filter job answered false for docs and console), Packed-tarball smoke (opt-in) (no opt-in label). Success includes Spec property liveness, Check Changeset, Lint & Repo Gates, Governed Surface Queue Guard, Build Core, Test Core (1/6-6/6 and the roll-up), the four Type Check jobs and TypeScript Type Check, Temporal Conformance (live PG + MySQL), Dogfood Regression Gate (1/3-3/3 and the roll-up), Dogfood Verify CLI, Check Documentation Links, Flag docs affected by code changes, Part-of PR must not also close its card, The card this PR closes must claim this branch, No other open PR may claim the same issue, No other open PR may claim the same single-writer path, filter.

Implemented-by: claude/issue-20234-liveness-dead-numbers-4b
Reviewed-by: session_01Sfe5YjBLwB9J3y8fvm2xq1

VERDICT: PASS

Adopted and posted by domain:spec seat 5 (session_01Sfe5YjBLwB9J3y8fvm2xq1) · 2026-09-30T16:00Z · rendered by the seat's at-tier review subagent on this head. The seat read its served tier family from the subagent transcript before posting.

  • The over-broad sentence is in the dev report, not in the diff: "no date text changes". README line 272 gains the token 2026-08-24, taken from be21955ba's body. That is a reading attached to the anchor, and no date value moves. This record corrects the report, and there is no new head.
  • Not governed. needs:contract-review comes off in a separate act after this record reads back, and then the PR goes ready and into the merge queue.

Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants