Skip to content

fix(spec): retire page.json's obsolete prose-in-note citation mandate - #7424

Merged
os-help merged 1 commit into
mainfrom
claude/issue-7188-pagejson-note
Aug 10, 2026
Merged

fix(spec): retire page.json's obsolete prose-in-note citation mandate#7424
os-help merged 1 commit into
mainfrom
claude/issue-7188-pagejson-note

Conversation

@os-help

@os-help os-help commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

Fixes #7188

packages/spec/liveness/page.json's file-level _note justified its "objectui citations belong in note prose, not evidence" convention with a parser limitation: "not evidence, which resolves framework file:line". 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, exactly like view.json / field.json already do.

What changed

  • Moved the two RE-CITED 2026-08-10 (#7133/#7142) entries (template, regions) from note prose into evidence, with an objectui: realm marker — these are page.json's counterparts to PR fix(spec): re-cite measured readers for 11 stale liveness-ledger rows (#7132) (#7133) #7179's sweep, which deliberately left them in note specifically to honor this file's (now obsolete) _note clause rather than contradict it.
  • 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. The still-true clauses (Studio dogfood provenance, container-drill note, roadmap-type removal) are unchanged.
  • Prefixed the cited path with packages/ (packages/components/src/renderers/layout/page.tsx) — the gate's PATH_RE only recognizes tokens rooted at one of apps|content|docker|docs|examples|packages|scripts|skills; the original prose path (components/src/renderers/layout/page.tsx, no packages/) doesn't match that regex and so is invisible to the scanner regardless of realm marker. Without this the moved citations would silently not register as foreign at all. Confirmed by probing evidence.mts's scanEvidence() directly (see report).
  • Appended — measured objectui @11c1e71e to both new evidence strings, matching the sibling convention exactly — this is 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 own "Measurement provenance" and echoed in regions' own RE-CITED note text), so it's making an already-true fact explicit, not a new claim.

No other page.json properties were touched — their citations are older-style, undated, non-RE-CITED prose that matches the same convention still used throughout untouched entries in view.json / field.json; moving those too was out of this card's scope.

Verification

  • node -e "JSON.parse(...)" — valid JSON.
  • pnpm --filter @objectstack/spec has no workspace deps, so no build-closure step was needed for this ledger-only script.
  • check:liveness (tsx scripts/liveness/check-liveness.mts, under the shared verification lock, NODE_OPTIONS=--max-old-space-size=4096) — green, exit 0.
    • evidence paths: 353 repo-local path(s) declared by 'live' entries, 353 resolved against this checkout; 133 attributed to another repo — up from a measured pre-edit baseline of 131 foreign (via --ledger-root against a copy with the original page.json), i.e. 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 copy — the tracked file was 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 (the mutated copy was a throwaway under scratchpad, discarded afterward; the tracked worktree file was never edited for this probe). Confirms the objectui: marker is what keeps the two new foreign citations from resolving locally.

PM 机制假设 check

The card's assumption — since #5623 the gate treats foreign citations in note and evidence identically except the evidenceForeign tally — held exactly: the gate output never attempted to resolve the moved objectui: paths locally, and the only observable delta was the evidenceForeign counter (+2). No contradiction surfaced.

Scope

packages/spec/liveness/page.json only, as routed. No changeset — this is ledger prose with no user-visible surface, matching PR #7179's precedent exactly ("No changeset: this is ledger prose with no user-visible surface"). skip-changeset label applied.


Generated by Claude Code

…#7188)

page.json's file-level _note justified its "objectui citations belong in
`note` prose, not `evidence`" convention with a parser limitation that #5623
removed: an `objectui:`-prefixed path in `evidence` is counted foreign and
never resolved locally, same as `view.json` / `field.json` already do.

Move the two RE-CITED-2026-08-10 entries (`template`, `regions` — the
page.json counterparts of PR #7179's sweep, which deliberately left them in
`note` to honor the now-obsolete _note) into `evidence` with `objectui:`
realm markers, byte-matching the sibling convention including the
`packages/`-rooted path (required for the gate's PATH_RE to recognize the
token at all) and the "— measured objectui @11c1e71e" pin already implied by
the same entries' own RE-CITED text. Delete the obsolete _note clause;
keep the still-true ones.

check:liveness stays green; evidenceForeign grows 131 -> 133 (exactly the
two moved citations), evidenceLocal/resolved unchanged at 353/353.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016R9de1FqP7NvwKvqXi92Gh
@vercel

vercel Bot commented Aug 10, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 10, 2026 10:43am

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

106 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/tenancy-modes.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/data-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/examples.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/permissions/system-context.mdx (via packages/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/http-protocol.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/apps.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/field-grouping-and-order.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

7 release-owned page(s) also reference the affected code. These are read-only:

  • content/docs/releases/implementation-status.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)

content/docs/releases/ is RELEASE-OWNED (AGENTS.md "Documentation Guardrails"): release
notes are written centrally at release time, and a code PR that edits them is the exact PR
that guardrail exists to stop. They are still audited — read-only. If one of them is actually
wrong, file an issue or open a dedicated docs-only PR; do not edit it here.

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@os-help os-help added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 10, 2026 — with Claude
@os-help
os-help marked this pull request as ready for review August 10, 2026 11:11
@os-help
os-help added this pull request to the merge queue Aug 10, 2026
Merged via the queue into main with commit c842043 Aug 10, 2026
30 checks passed
@os-help
os-help deleted the claude/issue-7188-pagejson-note branch August 10, 2026 11:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants