Repository navigation
finding: page.json's _note justifies its prose-in-note citation convention with a parser limitation #5623 removed — the convention now rests on a false premise #7188
Description
Activity
Triage:
finding+domain:spec-surface(was fully bare).- Classification: observation-class — the practice the
_notemandates is harmless today (the gate treats foreign citations innoteandevidenceidentically sincecheck:liveness的 stale-evidence 检测只 ⚠ 不判红 —— ADR-0087 证据路径可以静默腐烂,且摘要行的 “N resolved” 数的是路径总数不是解析成功数 #5623's realm attribution); only the stated rationale is dead. Prose-accuracy, zero-victim ⇒finding, held for the findings round rather than queued. - Landing anchor:
packages/spec/liveness/page.jsonfile-level_note— verified onorigin/main@5d24f4bit still reads "…cited as prose innote(notevidence, which resolves framework file:line)", i.e. the obsolete parser-limitation premise. Ledger prose ⇒domain:spec-surface(precedent: finding: "no runtime consumer" on docs-shaped dead ledger rows is contradicted by metadata-admin previews — JobPreview rendersjob.label/job.description, TranslationPreview renderstranslation.label/.name#7131, sweep [sweep] Liveness-ledger citation repair — re-cite measured readers for the stale-evidence rows of #7132 + #7133 #7142). - Dedup: the card's own search plus a re-check on
page.json _note— nothing; [verdict question] view.jsonlist.striped/list.bordered/list.virtualScrollare LIVE on pass-through-only reads — every measured reader copies the key, none applies it #7176 from the same sweep is a different class (verdict question on different rows).
本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
- Classification: observation-class — the practice the
Claim — spec-surface seat (session
session_016R9de1FqP7NvwKvqXi92Gh, seat card #6298).pm:queue→pm:dispatched.- Branch:
claude/issue-7188-pagejson-note - Worktree: dev-owned per-task worktree
../objectstack-issue-7188 - Domain:
domain:spec-surface(own lane) - File surface:
packages/spec/liveness/page.jsononly - Container & model: os-dev subagent (in-process), model
claude-sonnet-5(S-mechanical tier per the 2026-08-10 model policy) - Serial constraints: disjoint from finding: "no runtime consumer" on docs-shaped dead ledger rows is contradicted by metadata-admin previews — JobPreview renders
job.label/job.description, TranslationPreview renderstranslation.label/.name#7131 (job/translation ledgers) and [观察] rls.zod.tsusing属性上方的 TSDoc 块仍宣称「Exactly four forms compile」——与同属性.describe()(#6762 修正后)直接矛盾 #6919 (rls.zod.ts). [verdict question] view.jsonlist.striped/list.bordered/list.virtualScrollare LIVE on pass-through-only reads — every measured reader copies the key, none applies it #7176's pending retirement targetsview.json— no overlap with page.json.
PM-selected route: fix shape 2 from the card (retire the convention — move page.json's objectui citations into
evidencewithobjectui:realm markers matchingview.json/field.json, delete the obsolete_noteclause, E22-dated). Both shapes were graded decision-free by the card; shape 2 removes the false-premise text and the divergence from siblings in one move. Report channel: issue comment with the os-dev-report HTML-comment marker at draft-PR time.
Generated by Claude Code
- Branch:
OS-DEV-REPORT
Issue: #7188
Status: done
Branch:claude/issue-7188-pagejson-note
PR: #7424 (draft)What changed
packages/spec/liveness/page.jsononly, matching the PM-selected fix shape 2:- Moved the two
RE-CITED 2026-08-10 (#7133/#7142)entries (template,regions) — page.json's counterparts to PR fix(spec): re-cite measured readers for 11 stale liveness-ledger rows (#7132) (#7133) #7179's sweep, which had deliberately left them innoteto honor this file's now-obsolete_note— fromnoteprose intoevidence, with anobjectui:realm marker. - Deleted the obsolete
_noteclause ("notevidence, which resolves framework file:line") and replaced it with the accurate present-day description (paths get theobjectui:realm marker and are counted, not resolved —check:liveness的 stale-evidence 检测只 ⚠ 不判红 —— ADR-0087 证据路径可以静默腐烂,且摘要行的 “N resolved” 数的是路径总数不是解析成功数 #5623), matchingview.json's equivalent sentence. Kept the still-true clauses (Studio dogfood provenance, container-drill note, roadmap-type removal). - Finding surfaced while implementing: the gate's
PATH_RE(inevidence.mts) only recognizes tokens rooted at one ofapps|content|docker|docs|examples|packages|scripts|skills. The original prose paths (components/src/renderers/layout/page.tsx, nopackages/prefix) don't match that regex, so a byte-for-byte move of the citation text would have been silently invisible to the scanner — neither local nor foreign — and the required reverse-verification (drop marker → expect one MISSING) would have failed to reproduce. Confirmed by probingscanEvidence()directly with both path forms before editing. Fixed by prefixingpackages/(packages/components/src/renderers/layout/page.tsx), which is the same convention every siblingevidencecitation already uses. - Appended
— measured objectui @11c1e71eto both newevidencestrings, matching the sibling convention exactly — the same objectui pin PR fix(spec): re-cite measured readers for 11 stale liveness-ledger rows (#7132) (#7133) #7179 measured everything else in the same sweep against (stated in that PR's "Measurement provenance" and echoed inregions' own RE-CITED note text), so this makes an already-true fact explicit rather than asserting something new. - No other page.json properties were touched — their citations are older-style, undated, non-RE-CITED prose matching the convention still used throughout untouched entries in
view.json/field.json.
Verification evidence
node -e "JSON.parse(...)"— valid JSON.check:liveness(tsx scripts/liveness/check-liveness.mts, under the shared verification lock) — green, exit 0:
>evidence paths: 353 repo-local path(s) declared by 'live' entries, 353 resolved against this checkout; 133 attributed to another repo
Measured pre-edit baseline (via--ledger-rootagainst a copy holding the originalpage.json): 131 foreign. Delta: exactly +2, one per moved citation. Local declared/resolved unchanged at 353/353 — no local path leaked, no new MISSING.check:empty-state— green, unaffected (unrelated content).node scripts/check-nul-bytes.mjs— OK, 6801 tracked files scanned, no raw control bytes.
Reverse verification (route step 7)
Dropped the
objectui:marker fromtemplate's newevidencestring (via--ledger-rootagainst a mutated scratch copy — tracked worktree file never touched) and re-ran the gate:evidence paths: 354 repo-local path(s) declared by 'live' entries, 353 resolved against this checkout, 1 MISSING; 132 attributed to another repo ✗ 1 'live' entr(ies) cite a file that is missing from THIS repo: page/template → packages/components/src/renderers/layout/page.tsxExactly one MISSING, naming the row touched. Restored (mutated copy discarded from scratchpad).
PM 机制假设 check
Held exactly: the gate never attempted to resolve the moved
objectui:paths locally; the only observable delta wasevidenceForeign(+2). No contradiction surfaced.Scope / process
- No changeset — ledger prose, no user-visible surface, matching PR fix(spec): re-cite measured readers for 11 stale liveness-ledger rows (#7132) (#7133) #7179's precedent exactly ("No changeset: this is ledger prose with no user-visible surface").
- Labels read back after bot settle:
["size/xs"]→ wrote union["size/xs", "skip-changeset"]→ confirmed["size/xs","skip-changeset"]. - PR left in draft — no ready flip, no auto-merge armed.
- No out-of-scope findings.
Generated by Claude Code
- Moved the two
- added a commit that references this issue
on Aug 17, 2026
Observation-class finding surfaced by sweep #7142's review (PR #7179, spec-surface seat, session
session_016R9de1FqP7NvwKvqXi92Gh). Filed unassigned; grading/routing is triage's call (suggested lane:domain:spec-surface; harmless today, prose-accuracy only).Fact
packages/spec/liveness/page.jsoncarries a file-level_notedeclaring that objectui citations belong innoteprose rather than theevidencefield, justified with words to the effect of "notevidence, which resolves framework file:line" — i.e. the claim that the machine parser can only resolve repo-local paths and a foreign path inevidencewould break the gate.That premise has been false since #5623 taught
check:livenessrealm attribution: anobjectui:-prefixed path inevidenceis counted in the foreign bucket and never resolved locally. PR #7179 exercised this at scale the other way — 19 new foreignevidencecitations inview.json/field.json, gate green, and a reverse-verification run proving the realm marker is exactly what keeps them green (dropping one marker produced one MISSING).Why it matters (mildly)
evidenceornote; only theevidenceForeigntally differs._note, or someone extends the false premise to a new ledger file. fix(spec): re-cite measured readers for 11 stale liveness-ledger rows (#7132) (#7133) #7179 deliberately honored the_note(addingevidencethere would have contradicted a sentence in the same file — new prose rot of exactly the class that sweep repaired) and flagged instead.Fix shapes (either is decision-free)
_note's rationale to the true present-day reason (stylistic uniformity within the file / historical), keeping the convention; orevidencewith realm markers, matchingview.json/field.json, and delete the obsolete clause — one file, E22-dated.Precedents: #7128 house style; #7179's convention note (where this was first recorded).
Dedup
Searched open issues for
page.json _note,prose-in-note,evidence realm— nothing. #7176 (from the same sweep) is a verdict question, different rows, different class.