Skip to content

chore(spec): retire check:objectui-pin-citations; objectui read points become dated readings and move into the liveness ledger (#23434, part 1) - #23502

Merged
os-zhuang merged 10 commits into
mainfrom
claude/issue-23434-objectui-read-points-to-ledger
Oct 14, 2026
Merged

os-zhuang merged 10 commits into
mainfrom
claude/issue-23434-objectui-read-points-to-ledger

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Part of #23434. This PR is the first half of ruling C (comment 6165388570). PR-2 carries the closing keyword.

Clause-②: no

What changes

  1. check:objectui-pin-citations retires whole. This deletes packages/spec/scripts/check-objectui-pin-citations.ts (including its --verify-anchors mode), its packages/spec/package.json script, the lint.yml step, the gate's NO_GENERATOR row in packages/spec/scripts/check-generated.ts, its CENSUS_REFUSE_WIDE row and prose in scripts/pm/bare-root-worklist.mjs (the self-test was re-counted to 13 members and is green), and the prose that named the gate in scripts/pm/dispatch-gates.mjs, packages/spec/scripts/check-llms-txt.ts, packages/spec/src/ui/component.zod.ts and packages/spec/src/ui/view.zod.ts. Nothing routes the family any more: dispatch-gates learned the family only from the script's own watch hints.
  2. All 49 asserting citations are respelled as dated readings. These were the citations spelled with the pin file, an equals sign and a sha. Each now says it was read at objectui b9814b334 and no longer claims to be "the pin this repo builds against". Only that spelling changed. No record is deleted by this step. The 49 sit in component.zod.ts, component.test.ts, functional-completeness.ts, view.zod.ts, action.zod.ts, action-outcome-messages.test.ts, dataset.zod.ts, api-methods-batch-conformance.test.ts, and the reason text of six v18 semantic migration entries (kernel-runtime-config-timeout-unit-in-key, kernel-health-check-and-hot-reload-durations-unit-in-key, logging-durations-unit-in-key, system-metrics-jsdoc-durations-unit-in-key, system-tracing-otel-exporter-durations-unit-in-key, tenant-schema-cache-ttl-unit-in-key). After this PR, nothing in packages/spec/src carries that spelling: the retired gate's own --list, re-run from the base tree against this head, reports 0.
  3. 38 group-M citations move into the note of their ledger row, written as objectui @SHA FILE#SYMBOL. Every symbol was resolved against /home/user/objectui at the cited sha. No line numbers. The source keeps the claim in shortened prose and drops the per-hop re-read chains. The receiving rows:
    • view.json: list.calendar, list.gantt, list.timeline, list.map (the completeness table in kernel/functional-completeness.ts; the ListMapConfigSchema strictness record with its seven quoted anchors; view.test.ts; view-overlay-options-bag.test.ts), list.chart (resolveListChartBinding), form.sections (form-row span / scale)
    • action.json: outcomeMessages, onSuccess.navigate (action-on-success-executor.ts), aria (the tombstone comment)
    • dashboard.json: widgets, widgets.values, widgets.chartConfig.aria
    • report.json: chart, blocks
    • field.json: options, scale (also shared/scale-ceiling.ts), inlineColumns (stack.zod.ts, inline-grid-columns.ts and its test, inline-grid-sort-fields.ts, the column-type case of inline-grid-column-carriers.test.ts)
    • translation.json: flows.screens, flows.label
  4. One .describe() changed: the form-field span text drops the commit it named. content/docs/references/ui/view.mdx is regenerated (check:generated --fix proved it stale and nothing else).
  5. Patch changeset .changeset/23434-objectui-read-points-to-ledger.md.

No schema, type, export, default or refusal changed.

Census (re-measured on this branch's base, d54e2393b)

The ruling's "37 + 98 lines" counted grep lines. The real population is 179 citations in 63 tracked files: 49 asserting and 130 historical. Another 24 sit in the gitignored, generated migrations/registry.ts. Group M had 43 citations in my first count. Three of those turned out to be ComponentPropsMap read points (ui/page.zod.ts visibleWhen roots, and the object-master-detail-form detail entry and record:line_items keys in inline-grid-column-carriers.test.ts), so they move to group C. Two more are held back for size (see Acceptance notes). That leaves 38 moved here. After this PR, the retired gate's --list (run from the base tree) finds 0 asserting and 100 historical: 66 in group C and 34 in group R.

Acceptance notes

  • Moved in PR-2: the api-methods-batch-conformance.test.ts record (row object.json enable.apiMethods) and the dataset.zod.ts measure format record (row dataset.json measures.format). Both were moved on this branch and then reverted to keep the PR under 3,000 changed lines. Their asserting respell stays here. The moved form is kept as a patch in the session scratchpad for PR-2.
  • Group C (99 ComponentPropsMap citations, the three re-classified above included; its 33 asserting ones are already respelled here) goes to page.json page.regions in PR-2, per the seat reading. Group R (40 retirement-history citations; its 6 asserting ones are already respelled here) waits on the maintainer's answer to Q2.
  • Outside the retired gate's population: renderer citations that never used the pin-file spelling are still in source, for example ui/view.zod.ts "inside the console pin from objectui b9814b334 … ListView.tsx:5716", and mentions such as "at the .objectui-sha pin" that name no sha (dashboard.zod.ts, view.zod.ts, i18n-resolver.ts). Neither is in ruling item 1's 37/98 count. Recorded, not changed.
  • check:platform-checklist is red on this branch with 8 ABSENT SYMBOL findings, in docs/qa/platform-checklist/areas/{access-security,attachments-storage,search}.json. They point at packages/metadata-protocol/src/protocol.ts and packages/services/service-storage/src/attachment-access-hooks.ts. This diff touches none of those files. NOT judged as this PR's red.

Verification (head 7fe6ffdde)

  • pnpm --filter @objectstack/spec build: exit 0. check:generated: 1 of 14 stale (check:docs, the span describe), fixed with --fix. check:liveness, check:spec-changes and check:upgrade-guide re-run at head: exit 0.
  • @objectstack/spec test (local project): 676 files, 20,580 tests passed. test:repo: 60 files, 1,029 passed. Both ran before the final hold-back commit. After it, the two reverted files' suites ran again at head: 3 files, 89 passed.
  • @objectstack/lint tests (the ledger's consumer): 139 files, 6,726 passed.
  • node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran (with exit codes): 174 derived, 174 accounted, 166 run, 8 with exit 3 (prerequisite not built). Two of those 8, check:doc-formula-expressions and check:doc-security-posture, re-ran green after building lint and formula. NOT MEASURED, because they need the CLI or a whole-repo dist: check:skill-examples, check:docs-transcript-drift, check:dual-build-cjs-loads, check:i18n, check:i18n-walk-parity, check:lean-entry-closure. One non-zero is check:platform-checklist (see above). Every other derived gate exited 0, including check:nul-bytes, check:issue-citations, check-spec-docblock-symbol-anchors and bare-root-worklist --self-test.

维护者速读(草稿)

改了什么:删掉门禁 check:objectui-pin-citations(脚本、package 脚本、lint.yml 一步、相关登记)。spec 源码里 49 处"等于当前 objectui pin"的断言式引用,改写成"在 objectui b9814b334 读到"的日期读数。38 处有台账行可对应的渲染端读点,从 spec 注释搬进 packages/spec/liveness/*.json 的 note,写法是"文件#符号",不写行号。协议本身(schema、类型、导出、默认值、拒收)一处没动。

为什么改:裁决 C(「同意」)。以前每次 objectui 升级 pin,这道门禁都逼 spec 改写几十行注释,还要再做一次契约复核。这个 PR 落地后,升级 pin 不再碰 packages/spec/src,除非某个键的行为真的变了。

风险与代价(含回滚):只改注释、台账 note 和一段 describe 文字,运行时行为不变。代价是以后没有门禁把这些读点钉在 pin 上。读点改用符号锚定,符号被改名或删除时才需要重测,这正是裁决要的。回滚就是整个 revert 这个 PR,门禁和原注释一起恢复。剩下两组(组件成员读点 99 处、退役历史 40 处)和两条暂缓的搬迁,放在 PR-2。

席位意见:

你要做的:审一遍,点 approve,让席位合并(lint.yml 改动属于 Tier H)。


Generated by Claude Code

claude added 10 commits October 14, 2026 12:50
…ng citations as dated readings

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D6F9axfoPzR7t8G1J7Ytzz
… points into the ledger

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D6F9axfoPzR7t8G1J7Ytzz
…llow-up PR; keep their dated respell

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D6F9axfoPzR7t8G1J7Ytzz
@github-actions github-actions Bot added size/xl ci/cd dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation protocol:data protocol:system protocol:ui tests tooling labels Oct 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec, touching 16 documentable anchor(s). ⚠️ 16 changed file(s) yielded no anchor (packages/spec/liveness/action.json, packages/spec/liveness/dashboard.json, 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.

3 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:

  • content/docs/data-modeling/analytics.mdx (via DatasetMeasureSchema (symbol, a top-level const))
  • content/docs/deployment/validating-metadata.mdx (via ComponentPropsMap (symbol, a top-level const object))
  • content/docs/protocol/objectui/layout-dsl.mdx (via ComponentPropsMap (symbol, a top-level const object))

⛔ 6 release-owned page(s) also name something this change touched. These are read-only:

  • content/docs/releases/v15.mdx (via PageTabsProps (symbol, a top-level const object))
  • content/docs/releases/v17/17-1.mdx (via ComponentPropsMap (symbol, a top-level const object))
  • content/docs/releases/v17/17-3.mdx (via ComponentPropsMap (symbol, a top-level const object))
  • content/docs/releases/v17/17-4.mdx (via ComponentPropsMap (symbol, a top-level const object))
  • content/docs/releases/v17/17-5.mdx (via ComponentPropsMap (symbol, a top-level const object))
  • content/docs/releases/v17/17-7.mdx (via ComponentPropsMap (symbol, a top-level const object))

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.

What this run could not see
  • 16 changed file(s) yielded no anchor (packages/spec/liveness/action.json, packages/spec/liveness/dashboard.json, packages/spec/liveness/field.json, …) — pages documenting those are invisible to this run
  • 2 name(s) were too generic to anchor anything (single lowercase words)
  • the SDK route bridge reached 54 of 206 client-bound route-ledger rows — the other 152 have no registrar path: tail to select them, so pages documenting THEIR client methods cannot appear above, on this or any run. Of those 152: 0 are remediable by widening that discovery convention (an in-repo file declares the path; the convention did not scan it); 55 are structural — on a ledger where NOT ONE row is declared in-repo, so no discovery change reaches them at any price; 97 are undecided (no in-repo declaration, on a ledger that has other in-repo registrars — absence and an unreadable spelling are not distinguishable here). The rows themselves: node scripts/docs-audit/affected-docs.mjs --bridge-coverage
  • 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 — 142 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 394f65e891f0ac6c6be708fb807740d5cb446520 → packageMentionDocs.

Which tree this was computed on

This run read content/docs from 7ff853b044d774b667dfdfe993235e0ee74eddd1 — the merge of head 7fe6ffdde1cf4842bdd4b482549d6a5f7780405b into base 394f65e891f0ac6c6be708fb807740d5cb446520, which is what actions/checkout gives a pull_request run. Not the PR head.

A worktree cut from an older main holds a different content/docs, so re-deriving there can legitimately return a different list — that is a different tree, not a wrong row. To answer on the same tree:

# while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 7ff853b044d774b667dfdfe993235e0ee74eddd1 && git checkout 7ff853b044d774b667dfdfe993235e0ee74eddd1
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 394f65e891f0ac6c6be708fb807740d5cb446520 7fe6ffdde1cf4842bdd4b482549d6a5f7780405b && git checkout -B drift-repro 394f65e891f0ac6c6be708fb807740d5cb446520 && git merge --no-ff 7fe6ffdde1cf4842bdd4b482549d6a5f7780405b

node scripts/docs-audit/affected-docs.mjs --json 394f65e891f0ac6c6be708fb807740d5cb446520

⚠️ That checkout carried uncommitted changes, so the commit above does not fully identify what was read.

Advisory only, and a precision-first one (#9192): a page is listed because it names a
symbol, wire route or SDK method this diff touched — not because it mentions a changed
package. Each row says which anchor put it there, so a wrong row is reportable rather than
merely annoying. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs 394f65e891f0ac6c6be708fb807740d5cb446520 → pass the list as
args.docs, on the commit named under Which tree this was computed on.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 7fe6ffdde1cf4842bdd4b482549d6a5f7780405b
Local-runs: none

Inputs read: card #23434 (body and all 8 comments, ruling of record 6165388570 letter C, seat reading 6168576479, dev reports 6168538808 and 6170782619), PR #23502 (body, 46-file list, net diff +252/−2647 against main), the 39 check-runs on the head (read once). Repo read-only; no worktree, build, test or gate run. One read outside the listed inputs, disclosed: git cat-file -t on the sibling objectui clone for the 13 shas the moved notes cite (all resolve to commits); the symbols themselves were NOT resolved by this review and rest on the dev's claim.

① Derived judgments

Accept-set: no change, judged right. Every hunk under packages/spec/src/** is docblock, test-header comment, or a string inside a v18 migration reason. No z.* shape, refinement, default, retiredKey, export or refusal moves. The one .describe() touched is FormFieldBaseSchema.span (ui/view.zod.ts), whose text drops the pin sentence (at the pin this repo builds against (.objectui-sha = b9814b334d8a)) and keeps the behaviour clause verbatim; content/docs/references/ui/view.mdx is regenerated to match (2 rows, both the same string). That is a published-prose change, not a contract change — right.

Public surface, each named:

  • packages/spec/liveness/{action,dashboard,field,report,translation,view}.json — note fields only, 19 rows, additive (the prior note text is kept byte-for-byte and a sentence is appended). The ledger SHIPS (files[]), so this is a published-artifact change at patch level — right. Spec property liveness check-run: success.
  • packages/spec/package.json — one check:* script removed; dev-only, not a consumer surface — right.
  • packages/spec/scripts/check-objectui-pin-citations.ts deleted (1,363 lines); check-generated.ts loses the matching NO_GENERATOR row (the --reconcile-only pairing stays balanced: script and row go together) — right.
  • .github/workflows/lint.yml — the one step check-spec-pin-citations-still-name-the-pin removed; its id is referenced nowhere else in .github/** — right. Tier H hunk.
  • scripts/pm/bare-root-worklist.mjs — CENSUS_REFUSE_WIDE row removed, prose re-counted to thirteen; scripts/pm/dispatch-gates.mjs — prose only. Routing of the family was derived from the deleted script's own watch-hint header (extractWatchHints), so deleting the script retires the routing — right.

Brief items judged:

  • (a) No accept/refuse/export change anywhere — holds on every file; Clause-②: no is right (PR body and changeset both carry it).
  • (b) Moved citations land in real rows, nothing lost. Every source citation deleted by the diff (sha + objectui file) has a counterpart appended to a row whose key exists in the ledger: view.json list.calendar / list.gantt / list.timeline / list.map (the completeness table's four rows plus the ListMapConfigSchema strictness record's seven anchors, view.test.ts style, view-overlay-options-bag.test.ts) / list.chart (resolveListChartBinding @f0268ad7) / form.sections (resolveColSpan, WIDE_FIELD_TYPES, spanLadderFor); action.json outcomeMessages (composeSuccessMessage), onSuccess.navigate (execute / handlePostExecution / readOnSuccessNavigation @1fb1ced36243, from action-on-success-executor.ts), aria; dashboard.json widgets (complex.zod.ts#DashboardWidgetSchema @53ded82bf7a4), widgets.values (AdvancedChartImplInner @89cad75d5570), widgets.chartConfig.aria; report.json chart, blocks; field.json options (SelectCellRenderer @d8ec8d6d4f01), scale (normalizeSectionField, NumberCellRenderer @53ded82bf7, the @89cad75d5570 and @62597c588072 readings, the retired spec-bridge note from scale-ceiling.ts), inlineColumns (hydrateColumns / fieldTypeToColumnType @db11afd4967c, SORT_FIELD_NAMES @89cad75d5570, deriveFormFields / MasterDetailLines @31971ff1e28f); translation.json flows.label (@0abd4f9f8), flows.screens (@f8a9d0fb). 36 distinct objectui @SHA FILE#SYMBOL strings were added to the ledger; no added ledger line carries a FILE:LINE objectui anchor. The shortened source prose names the receiving row in every case. Two minor spellings, not failing: the InterfaceListPage.mapConfig.test.tsx control in list.map is cited by file and test title with no #symbol, and the plugin-map.mdx mention carries no @sha of its own (it sits inside a sentence dated at @b9814b334). The translation.json additions name no new symbol, but the rows' evidence fields already carry the FlowRunner symbols at @0abd4f9f8 / @31971ff1e, so the read points are in the ledger. Judged right.
  • (c) Respelled citations no longer claim the pin. 43 single-line asserting spellings are deleted; the remaining asserting records were multi-line (action.zod.ts, action-outcome-messages.test.ts, scale-ceiling.ts, component.zod.ts :4570) and are either moved or respelled. No + line in the diff carries .objectui-sha followed by =, and no + line under packages/spec/src says builds against. Each respell reads at objectui b9814b334 (re-read there 2026-10-14: …). The 49 count is the dev's gate --list figure and is consistent with 43 single-line plus the multi-line ones in the diff. Right.
  • (d) Retirement complete. Every reference to check:objectui-pin-citations / check-objectui-pin-citations on the tree is in the diff's − lines: lint.yml (rationale comment and step), package.json, check-generated.ts (row and sibling comment), check-llms-txt.ts, component.zod.ts :3367, view.zod.ts :2404, bare-root-worklist.mjs (prose ×2, row), dispatch-gates.mjs prose. What remains names it as history only: packages/spec/CHANGELOG.md and two .changeset/pre/20471-*.md fragments — right to leave. No other workflow, turbo.json, docs page or script calls it. Right.
  • (e) Six migration reason strings. Each of the six v18 entries changes only the clause that named the pin: the pinned objectui checkout — the pin this repo builds against, .objectui-sha = b9814b334… — becomes the objectui checkout at b9814b334… (the pin when this was measured / re-read). The measured counts, controls and hop lists after it are untouched. Says only what was measured. Right. These are NOT the two entries ruling item 4 fences off (18.element-data-source-…, 18.object-block-sort-item-array), which the diff does not touch.
  • (f) Tier H and 速读. lint.yml is in the file list, so the PR is Tier H and lands on the maintainer's merge; the body carries ## 维护者速读(草稿) with 改了什么 / 为什么改 / 风险与代价(含回滚) / 席位意见 (empty, draft) / 你要做的. Right.

② Semver level

.changeset/23434-objectui-read-points-to-ledger.md: '@objectstack/spec': patch, Clause-②: no. What the diff publishes from @objectstack/spec: changed docblock prose in shipped .d.ts/source, one changed .describe() string (span), appended ledger notes in the shipped liveness/*.json, and the regenerated reference doc. No type, export, default or refusal moves, so patch is the right level and skip-changeset would have been wrong. The changeset body names what the source stops carrying (ruling item 5) and lists what PR-2 still owes. Root tooling (scripts/pm/**, .github/**) is unpublished and owes no changeset. Check Changeset: success.

Clause-②: no

③ Boundary flags

Dev flags and open_questions, each answered or escalated:

  1. Deviation 1 — three group-M citations re-classified to group C (ui/page.zod.ts visibleWhen roots; inline-grid-column-carriers.test.ts master-detail and record:line_items key sets). They are ComponentPropsMap members with no row below page.regions; the seat reading (6168576479) routes group C to PR-2. Answered: consistent with the seat reading; those files keep their (historical) citations in source for now, which PR-2 must move.
  2. Deviation 2 — two moves held back for size (api-methods-batch-conformance.test.ts → object.json enable.apiMethods; dataset.zod.ts → dataset.json measures.format). Both respelled here (at objectui b9814b334), so neither claims the pin; the moved form is in the dev's scratchpad patch. Escalated to the seat: the seat reading said PR-1 moves "the 43 that have a row", and the hold-back instruction is recorded only in the dev report, not on the card. PR-2's claim must list both files explicitly or the ledger will be short two rows the reading promised.
  3. Open question (report 6170782619) — renderer citations outside the gate's population (objectui SHA … ListView.tsx:5716 in view.zod.ts; sha-less at the .objectui-sha pin mentions in dashboard.zod.ts, view.zod.ts, i18n-resolver.ts). Not in the ruled 37/98 population and not changed here; correctly recorded, not changed. Escalated: ruling item 1's sentence ("the published spec source carries no renderer citation") reaches them literally, so the seat should put the dev's A/B to the maintainer alongside Q2 before PR-2 is dispatched. Does not block PR-1.
  4. Q2 (retirement-history group R, 40 citations) stays with the maintainer per the seat reading; PR-1 touches it only through the six asserting respells, which Q2 option A also prescribes. No conflict with any Q2 answer.
  5. check:platform-checklist red (8 ABSENT SYMBOL findings into packages/metadata-protocol/src/protocol.ts and service-storage/src/attachment-access-hooks.ts). The diff touches neither file; main-side drift. Not this PR's red; the dev's out-of-scope note names a carrier. The Lint · docs & code guards check-run (in progress) is where it would surface on the head.
  6. NOT MEASURED gates (check:skill-examples, check:docs-transcript-drift, check:dual-build-cjs-loads, check:i18n, check:i18n-walk-parity, check:lean-entry-closure) need the CLI or a whole-repo dist; none reads docblock prose or the ledger, and the head's Lint · * / Test Core runs cover them.
  7. Claim file-surface: the diff stays inside the amended claim (6168576479 added check-generated.ts, check-llms-txt.ts, the two prose mentions); scripts/bump-objectui.sh and docs/releases-maintenance.md are untouched as ruled (item 4). chart.zod.ts and the six migration entries are inside packages/spec/src/** and carried asserting or group-M records, so they are in surface. No breach.

Check-runs on the head: success — Dogfood Regression Gate, Auto Label, No other open PR may claim the same single-writer path, filter, No other open PR may claim the same issue, Governed Surface Queue Guard, Check Documentation Links, The card this PR closes must claim this branch, Flag docs affected by code changes, Part-of PR must not also close its card, Check PR Size, Validate Package Dependencies, Spec property liveness, Check Changeset. Skipped by filter — Console Pin Gate, Dogfood Verify CLI, Dogfood Regression Gate (shards), Temporal Conformance, Packed-tarball smoke. In progress at brief time (named, not awaited): Build Core, Build Docs, Test Core (1/6)…(6/6), Type Check · workspace / source gates / consumer gates / debt ledger, Lint · ESLint, Lint · CI, release & engine gates, Lint · repo & tooling gates, Lint · PM dispatch-gates (carries the bare-root-worklist --self-test thirteen-member count), Lint · docs & code guards (carries check:generated), Lint · scoped · tooling self-tests, Lint · scoped · query-options erasure, Lint · scoped · slot lookup & corpus. The verdict below is on the diff and the completed runs; a red among the in-progress runs re-opens it.

Implemented-by: claude/issue-23434-objectui-read-points-to-ledger
Reviewed-by: session_01D6F9axfoPzR7t8G1J7Ytzz

VERDICT: PASS

Adopted by domain:spec seat 3 (#18883), baozhoutao, session session_01D6F9axfoPzR7t8G1J7Ytzz, at 2026-10-14T14:39Z: rendered by an isolated read-only reviewer at CONTRACT_REVIEW_TIER. ③-2: the two held-back moves are recorded on the card for PR-2's claim. ③-3: the seat reads ruling item 1 ("the published spec source carries no renderer citation after this") as reaching the other spellings; PR-2 censuses and moves them, recorded on the card. ③-5 is the known main red (watchdog #23376, closed by triage).


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

维护者速读(终稿)· PR #23502 · domain:spec seat 3 · 2026-10-14T14:40Z

Session session_01D6F9axfoPzR7t8G1J7Ytzz · baozhoutao. Head 7fe6ffdde; contract review PASS on this head (record above). Tier H (.github/workflows/lint.yml): this PR lands only on your approval.

改了什么
这是 #23434 裁决 C 的第一半(Part of #23434)。① 退役 check:objectui-pin-citations 门禁:删掉脚本、package 脚本、lint.yml 那一步,以及 PM 工具里对它的引用。② spec 源码里 49 处"声称跟随当前 objectui pin"的引用,改写成"在 objectui b9814b334 读到"的日期读数,不再跟着 pin 走。③ 有对应台账行的 38 处引用,搬进 packages/spec/liveness/*.json 的 note,写成 objectui @SHA 文件#符号,源码里删掉。共 46 个文件,+252/−2647(大头是删掉的门禁脚本 1,363 行)。

为什么改
您问「升级 objectui pin,为什么会导致 spec 协议变更」:原因是这个门禁要求每次 pin 升级都改写 spec 源码里的引用。本 PR 落地后,升级 pin 不再触碰 packages/spec/src。

风险与代价(含回滚)
只动注释、台账 note 和门禁,不改任何 schema、类型、导出或默认值(Clause-②: no)。回滚 = revert 本 PR(门禁会回来,49 处引用回到断言写法)。余下两组(组件属性 99 处、退役历史 40 处)和两处为控制行数暂缓的搬迁留给 PR-2;退役历史那组等您对 #23434 Q2 的回答。

席位意见
建议批准。复核记录逐项核过:没有任何引用丢失(删掉的都在台账里有对应),改写后没有一处再声称跟随 pin,门禁的调用方全部清掉。

你要做的(一个动作)
在本 PR 点批准(os-zhuang 或 hotlong 任一)。批准后席位负责落地。


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review October 14, 2026 14:56
@os-zhuang
os-zhuang enabled auto-merge October 14, 2026 14:56
@os-zhuang
os-zhuang added this pull request to the merge queue Oct 14, 2026
Merged via the queue into main with commit 1418de4 Oct 14, 2026
50 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-23434-objectui-read-points-to-ledger branch October 14, 2026 15:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/cd dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation protocol:data protocol:system protocol:ui size/xl tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants