Skip to content

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

Closed

Description

@os-help

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.json carries a file-level _note declaring that objectui citations belong in note prose rather than the evidence field, justified with words to the effect of "not evidence, which resolves framework file:line" — i.e. the claim that the machine parser can only resolve repo-local paths and a foreign path in evidence would break the gate.

That premise has been false since #5623 taught check:liveness realm attribution: an objectui:-prefixed path in evidence is counted in the foreign bucket and never resolved locally. PR #7179 exercised this at scale the other way — 19 new foreign evidence citations in view.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)

  • The practice itself is harmless — the gate treats foreign paths identically whether they sit in evidence or note; only the evidenceForeign tally differs.
  • But the stated reason is dead, and a convention resting on a false premise invites two failure shapes: someone "fixes" page.json to match its siblings and gets reverted citing the _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 (adding evidence there 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)

  1. Re-anchor the _note's rationale to the true present-day reason (stylistic uniformity within the file / historical), keeping the convention; or
  2. Retire the convention: move page.json's objectui citations into evidence with realm markers, matching view.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.

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Aug 10, 2026
  2. os-zhuang commented on Aug 10, 2026

    @os-zhuang
    Contributor

    Triage: finding + domain:spec-surface (was fully bare).

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  3. added
    pm:queueReady for the PM dispatch loop
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Aug 10, 2026
  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Aug 10, 2026
  5. self-assigned this
    on Aug 10, 2026
  6. os-help commented on Aug 10, 2026

    @os-help
    CollaboratorAuthor

    Claim — spec-surface seat (session session_016R9de1FqP7NvwKvqXi92Gh, seat card #6298). pm:queue → pm:dispatched.

    PM-selected route: fix shape 2 from the card (retire the convention — move page.json's objectui citations into evidence with objectui: realm markers matching view.json/field.json, delete the obsolete _note clause, 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

  7. os-help commented on Aug 10, 2026

    @os-help
    CollaboratorAuthor

    OS-DEV-REPORT

    Issue: #7188
    Status: done
    Branch: claude/issue-7188-pagejson-note
    PR: #7424 (draft)

    What changed

    packages/spec/liveness/page.json only, 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 in note to honor this file's now-obsolete _note — from note prose into evidence, with an objectui: realm marker.
    • Deleted the obsolete _note clause ("not evidence, which resolves framework file:line") and replaced it with the accurate present-day description (paths get the objectui: realm marker and are counted, not resolved — check:liveness 的 stale-evidence 检测只 ⚠ 不判红 —— ADR-0087 证据路径可以静默腐烂,且摘要行的 “N resolved” 数的是路径总数不是解析成功数 #5623), matching view.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 (in evidence.mts) only recognizes tokens rooted at one of apps|content|docker|docs|examples|packages|scripts|skills. The original prose paths (components/src/renderers/layout/page.tsx, no packages/ 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 probing scanEvidence() directly with both path forms before editing. Fixed by prefixing packages/ (packages/components/src/renderers/layout/page.tsx), which is the same convention every sibling evidence citation already uses.
    • Appended — measured objectui @11c1e71e to both new evidence strings, 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 in regions' 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-root against a copy holding the original page.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 from template's new evidence string (via --ledger-root against 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.tsx
    

    Exactly 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 was evidenceForeign (+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

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

Metadata

Metadata

Assignees

Labels

pm:dispatchedDispatched to a dev agent by /pm-dispatch

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions