Skip to content

docs(spec): component-member read points to the ledger, part 1 of 3 - #23589

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-23434-pin-citations-pr2-part1
Oct 15, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-23434-pin-citations-pr2-part1

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Part of #23434

Clause-②: no

Part 1 of 3 of PR-2 for #23434. It executes ruling 6165388570 (letter C, items 1 and 4) and ruling 6181034096 (Q2 → A, Q1 → A), under claim 6181304005.

What this part changes

The read-point records in the doc comments of the first half of packages/spec/src/ui/component.zod.ts (base lines 1-7227: the page:* and record:* blocks, element:* and action:* rows, object-grid, object-metric and the first part of object-kanban) move into the liveness ledger.

  • Each per-hop re-read chain ("At X, re-read there DATE: … byte-identical … held unmoved / MOVED") is deleted. Each record now says "read points recorded in liveness/page.json, row regions". What the record claims about the renderer stays in the shorter comment. objectui commit references that mark a change, such as "since objectui ce991bd70", stay; they are not read points.
  • packages/spec/liveness/page.json, row regions, gains one evidence list in its note: 120 entries in source order, each COMPONENT.member: objectui @SHA FILE#SYMBOL. Inside one entry, a letter defined at its head abbreviates a repeated file (P = objectui @SHA FILE, so P#a reads objectui @SHA FILE#a). The list asserts no verdict: component-level liveness stays unclassified, and no row is added. Where a source line was first cited without a SHA, the entry records the tree it was re-read in on 2026-10-15.
  • .changeset/23434-component-read-points-part-1.md: @objectstack/spec patch. src/**/*.zod.ts and liveness are both in the package's files[], so the packed tarball changes.

Changed lines: 2,770 (+700 / -2,070) across 3 files, under the 3,000-line review line. Head 4196cb921e.

The three parts

PR-2 is over 3,000 changed lines, so it ships as three pull requests split by file range. Each part branches from origin/main; none is stacked on another.

  • part 1: claude/issue-23434-pin-citations-pr2-part1 (the first half of component.zod.ts)
  • part 2: claude/issue-23434-pin-citations-pr2-part2 (the second half of component.zod.ts)
  • part 3: claude/issue-23434-pin-citations-pr2 (the component tests and the other group-C files, the two held-back moves, the other spellings and the regenerated doc). Part 3 carries the issue's closing line.

Part 3's body carries the complete acceptance notes: what was left in place and why, the claim-wording conflict, and the census residue.

Census, base 7ffc57846a → all three parts merged

Group C = the ComponentPropsMap member read points (seat 3's 99). Group R = retirement history, which ruling 6181034096 (Q2 → A) keeps in place.

reading base after all three parts
retired gate --list, historical `.objectui-sha` pin SHA spelling: group C 66 0
same: action-declarative-update.ts (landed with #23494 after PR-1; item 3) 1 0
same: group R 34 34 (unchanged)
retired gate's quoted-first-line assertions (component.zod.ts) 6 0 (the quoted line is now in the entry)
PR-1's dated respell "objectui b9814b334 (re-read there 2026-10-14 …" 27 0
wide census, component files: .objectui-sha pin with SHA / sha-less / objectui SHA 65 / 24 / 170 0 / 0 / 14 (14 = objectui commit references such as "since objectui ce991bd70", which are not read points)
wide census, group R files (H / S / O) 36 / 8 / 30 36 / 8 / 30 (unchanged)
wide census, other files, item 3 (H / S / O) 2 / 12 / 38 0 / 5 / 16 (the remainder is listed in part 3)

page.regions note: 120 entries, 62,138 characters. No schema or gate caps a note's length. Only evidence and producer are path-scanned by check:liveness, and note is free text that the lint layer never shows an author.

How the three parts were measured

The three parts were built from one verified union branch, claude/issue-23434-pin-citations-pr2 at 1646d39e53 (all three parts' changes in one tree). The split was then checked mechanically:

  • git merge-tree of part 1 + part 2 + part 3 onto origin/main gives a tree whose packages/spec and content match the union head exactly (empty diff). The three parts merge in any order without conflict. They share one changed line in packages/spec/liveness/page.json (the regions note), and it is byte-identical in all three.
  • Comment-only: every changed .ts file was parsed with TypeScript and compared with origin/main on its code tokens, JSDoc and comments excluded. All published files are identical. In three test files, six string literals changed: two test names, one why reason string and one assertion-message string. No schema, type, export, default, accept or refuse change, and no .describe() text change.
  • Every objectui @SHA FILE#SYMBOL in the new evidence list and in the edited ledger notes was resolved against an objectui clone at that SHA: the file exists and the symbol occurs in it. 656 references in the 120 entries and 32 in the other notes; 0 unresolved. A negative control (a bogus path and two bogus symbols) reported 3 of 3.

Union head 1646d39e53, through scripts/pm/os-verify-lock.sh:

  • pnpm --filter @objectstack/spec build: VERDICT command-exit 0.
  • check-generated.ts --fix: 1 of 14 artefacts stale (content/docs/references/ui/expression-bindable-text-keys.mdx, from part 3's shortened docblock), regenerated. The re-check afterwards: "All 14 generated artifacts are up to date".
  • pnpm --filter @objectstack/spec typecheck (tsc, scripts and test typecheck): exit 0.
  • vitest run --project local: Test Files 678 passed (678), Tests 20728 passed, 1 todo.
  • vitest run --project repo: Test Files 61 passed (61), Tests 1033 passed.
  • node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, each exit code captured before any pipe, then --ran: "103 derived famil(ies) accounted for — 99 run, 4 NOT-MEASURED". The 4 recorded exit 3 (prerequisite not built): lint check:doc-formula-expressions, check:dual-build-cjs-loads, check:i18n, check:lean-entry-closure. One RED that comes from the base, not this diff: check:platform-checklist exits 1 with ABSENT SYMBOL findings in docs/qa/platform-checklist/areas/{access-security,attachments-storage,search}.json. They point at packages/metadata-protocol and service-storage, which no part touches; PR-1 reported the same findings. The other 98 exited 0, including check:liveness, check:nul-bytes, check:issue-citations and check-spec-docblock-symbol-anchors. On the anchors gate, "citations name no tracked file" went from 1965 on the base to 228.

This part's own tree (4196cb921e), through the lock: spec build exit 0; vitest run --project local src/ui/component: Test Files 27 passed (27), Tests 1466 passed. Then check:generated, check:liveness, check-spec-docblock-symbol-anchors and check:nul-bytes all exited 0. The full derived battery ran on the union and on part 3's head, not on this part alone (a declared narrowing). CI runs the full set on this pull request.

Acceptance notes

  • No ablation: no tested behaviour changed (comment and ledger-note moves only).
  • No label written: skip-changeset does not apply, because a published file changes and the patch changeset is present. The dispatch named no other label.
  • Left in place in this half on purpose: prose that names an objectui file with no line and no SHA, as a behaviour description rather than a read point. Examples: containers.tsx in the accordion and tabs prose, record-quick-actions.tsx, renderers/basic/elements.tsx in two RETIRED tombstone docblocks, and ObjectChart.tsx. The in-repo anchor view.zod.ts (:1333) also stays.

Generated by Claude Code

The read-point records in the doc comments of the first half of
src/ui/component.zod.ts move into liveness/page.json, row regions, as one
evidence list. Prose and ledger note only.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
@github-actions github-actions Bot added size/xl documentation Improvements or additions to documentation protocol:ui tooling labels Oct 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec, touching 13 documentable anchor(s). ⚠️ 1 changed file(s) yielded no anchor (packages/spec/liveness/page.json), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files.

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

  • content/docs/api/data-api.mdx (via groupBy (literal, a string literal in a comment on a changed line))
  • content/docs/api/error-catalog.mdx (via groupBy (literal, a string literal in a comment on a changed line))
  • content/docs/data-modeling/index.mdx (via groupBy (literal, a string literal in a comment on a changed line))
  • content/docs/data-modeling/queries.mdx (via groupBy (literal, a string literal in a comment on a changed line))
  • content/docs/deployment/validating-metadata.mdx (via groupBy (literal, a string literal in a comment on a changed line))
  • content/docs/kernel/contracts/data-engine.mdx (via groupBy (literal, a string literal in a comment on a changed line))
  • content/docs/kernel/runtime-services/data-service.mdx (via groupBy (literal, a string literal in a comment on a changed line))
  • content/docs/protocol/kernel/error-handling.mdx (via groupBy (literal, a string literal in a comment on a changed line))
  • content/docs/protocol/objectql/query-syntax.mdx (via groupBy (literal, a string literal in a comment on a changed line))
  • content/docs/protocol/objectui/concept.mdx (via groupBy (literal, a string literal in a comment on a changed line))
  • content/docs/protocol/objectui/layout-dsl.mdx (via RecordRelatedListProps (symbol, a top-level const object), groupBy (literal, a string literal in a comment on a changed line))
  • content/docs/ui/dashboards.mdx (via previousYear (literal, a string literal in a comment on a changed line))
  • content/docs/ui/react-pages.mdx (via groupBy (literal, a string literal in a comment on a changed line))

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

  • content/docs/releases/implementation-status.mdx (via groupBy (literal, a string literal in a comment on a changed line))
  • content/docs/releases/v12.mdx (via RecordRelatedListProps (symbol, a top-level const object))
  • content/docs/releases/v14.mdx (via RecordRelatedListProps (symbol, a top-level const object))
  • content/docs/releases/v15.mdx (via PageTabsProps (symbol, a top-level const object), groupBy (literal, a string literal in a comment on a changed line))
  • content/docs/releases/v17/17-0.mdx (via groupBy (literal, a string literal in a comment on a changed line))
  • content/docs/releases/v17/17-6.mdx (via PageHeaderProps (symbol, a top-level const object), groupBy (literal, a string literal in a comment on a changed line))
  • content/docs/releases/v17/17-7.mdx (via groupBy (literal, a string literal in a comment on a changed line))

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
  • 1 changed file(s) yielded no anchor (packages/spec/liveness/page.json) — pages documenting those are invisible to this run
  • 1 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 c980d114d3bdde4b2b639650cb762687a8da41fa → packageMentionDocs.

Which tree this was computed on

This run read content/docs from a17092cff26b397569bbc778b036537d3f2b205f — the merge of head 4196cb921ec6cd79bc20bd05558187ffcd83bbe7 into base c980d114d3bdde4b2b639650cb762687a8da41fa, 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 a17092cff26b397569bbc778b036537d3f2b205f && git checkout a17092cff26b397569bbc778b036537d3f2b205f
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin c980d114d3bdde4b2b639650cb762687a8da41fa 4196cb921ec6cd79bc20bd05558187ffcd83bbe7 && git checkout -B drift-repro c980d114d3bdde4b2b639650cb762687a8da41fa && git merge --no-ff 4196cb921ec6cd79bc20bd05558187ffcd83bbe7

node scripts/docs-audit/affected-docs.mjs --json c980d114d3bdde4b2b639650cb762687a8da41fa

⚠️ 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 c980d114d3bdde4b2b639650cb762687a8da41fa → 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

席位核对

domain:spec seat 4 (#18917) · sunhaolin · session session_0121ooBYRmS8ziFXm9ai5YHm · claim 6181304005 on #23434 · reviewed head 4196cb921ec6cd79bc20bd05558187ffcd83bbe7 · 2026-10-15T02:50Z

Verdict: ACCEPT. Not governed (check-governed-merges --pr 23589). 3 files, +700 / −2,070, 2,770 changed lines, under the 3,000-line line. Prose and ledger-note work with Clause-②: no, so no contract review is owed; this record is the review.

  1. Shape. Draft PR. The first line is Part of #23434, and Clause-②: no sits at line start. .changeset/23434-component-read-points-part-1.md is a @objectstack/spec patch; the package's files[] ships both src/**/*.zod.ts and liveness.
  2. Scope against the claim. Item 1 (group C) for the first half of component.zod.ts (base lines 1–7227). The claim set the split rule before any code: over 3,000 changed lines, PRs under the line each, the last one carrying Fixes. The union is 7,395 lines, and component.zod.ts alone is 5,675. So the split runs by file range rather than strictly by item. Accepted.
  3. Seat readings, taken on this head and not copied from the report.
    • Code is unchanged. I compared the parser-accurate token stream of component.zod.ts (TypeScript AST leaves, JSDoc excluded) at merge base fa6a6085c0 with this head. Both have 22,324 tokens, with 0 differences.
    • The ledger changes in one place. A deep compare of liveness/page.json against the base finds exactly one changed path, props.regions.note. That note is byte-identical in parts 1, 2 and 3 (62,138 characters), so the parts merge in any order.
    • Evidence resolves. I sampled 12 of the 186 direct objectui @SHA FILE#SYMBOL references in the note, evenly spaced, and resolved each at its own objectui SHA: the file exists there and the symbol occurs in it. 12 of 12 resolved. The sample includes the three historical trees db11afd496, 2e818d0b51 and 31971ff1e2.
    • Merge. git merge-tree against origin/main 744b73f53f is clean.
    • Prose. I read a slice of the diff: each record keeps its claim about the renderer and points to liveness/page.json, row regions. Change markers such as "since objectui ce991bd70" stay.
  4. Accepted deviations.
    • The full derived battery ran on the union and on part 3's head, not on this part alone (a declared narrowing). CI runs the full set here.
    • check:platform-checklist is red on the base: 7 ABSENT SYMBOL anchors into packages/metadata-protocol and service-storage, which this PR does not touch.
  5. Out-of-scope dispositions. None from this part. Part 3 (docs(spec): component-member read points, held-back moves and other spellings to the ledger, part 3 of 3 #23591) carries the census remainder and the open questions.
  6. Landing clauses.
    • (a) Every check is green or skipped by design: read at landing, after the skip roster answers OK.
    • (b) mergeable_state is clean at enqueue: read at landing.

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 15, 2026 02:53
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 15, 2026 02:53
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 15, 2026
Merged via the queue into main with commit 2372e0a Oct 15, 2026
42 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-23434-pin-citations-pr2-part1 branch October 15, 2026 03:26
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 4196cb921ec6cd79bc20bd05558187ffcd83bbe7
Local-runs: none

① Derived judgments

Post-hoc review of PR #23589 (part 1 of 3 of PR-2 for card #23434), judged as if it were still waiting to enter the queue. Inputs: the card body and every comment (rulings 6165388570 and 6181034096; dev reports 6168538808, 6170782619, 6183204136, 6183710619), the PR body and file list, the net diff fa6a6085c0..4196cb921e (3 files, +700 / -2,070), and the 43 check-runs on the head. Every reading below is a git show / git diff of fetched refs in this repo, or a git show / git grep of the sibling objectui clone at the cited SHA; nothing was built, run or re-run.

Accept set: unchanged (right). packages/spec/src/ui/component.zod.ts with its comments stripped is byte-identical between fa6a6085c0 and this head (211,301 characters each side, string literals kept), so no Zod shape, .describe() string, strict door, default, refinement, export or type changed. All 2,069 removed and 688 added lines sit inside /** … */ or // comments (a line scan of the diff finds zero non-comment lines in either direction). The ComponentPropsMap registrations (around head line 9558 onward) change only their inline comments.

Published surface that does change, two things, both right:

  1. The JSDoc text of src/ui/component.zod.ts, which ships as source (files[] in packages/spec/package.json at fa6a6085c0 lists src/**/*.zod.ts) and as the docblocks of exported declarations in dist/*.d.ts. The change is the deletion of the per-hop re-read chains ("At X, re-read there DATE … byte-identical … held unmoved / MOVED by N") and, in their place, the sentence "read points recorded in liveness/page.json, row regions" (head lines 622, 693-694, 2949-2950, 5760-5761 are examples). The chains carried line-number bookkeeping, not renderer behaviour; each record's substantive claim stays in the shorter comment: the object-kanban.limit four-face record (head 5757-5778), the action:icon key-by-key record (3901-3930), the element:button.icon resolver history (2946-2990). Counts for this file, base to head: .objectui-sha mentions 52 to 24, objectui SHA 108 to 63, File.tsx:NNN 261 to 126, hop-chain lines 969 to 556; the balance is the second half, which docs(spec): component-member read points to the ledger, part 2 of 3 #23590 removes (the two halves' removals sum exactly to the base counts).
  2. packages/spec/liveness/page.json, props.regions.note (files[] lists liveness): the note grows to 62,138 characters with a 120-entry evidence list in source order, each entry COMPONENT.member: objectui @SHA FILE#SYMBOL, headed by the sentence that the list asserts no verdict. The row's status, evidence, verifiedAt and evidenceScope are untouched; check:liveness path-scans evidence and producer, not note, and Spec property liveness is green on this head. The line is byte-identical at the three heads (sha256 of the note starts bf5b96cec57d at 4196cb921e, 3c7f4da05c and be8657fa44), and main after the three landings (56b2612778) carries that same note, so no part lands a partial list. Every entry is spelled by symbol, none by line number (ruling 6165388570 item 2).

No generated docs page changes (no content/docs/** in the file list, and check:docs runs inside the green TypeScript Type Check job), so the moved paragraphs are not ones gen:docs renders.

Sentences that could now be false: none found. Checked:

  • Every pointer sentence names a row that exists and holds the record: the list runs [1] page:header through [120] PageComponent.visibleWhen, and the records this half moves (the page and record blocks, the element and action rows, object-grid, object-metric, the first part of object-kanban) are entries [1] to [59].
  • A sample of the new ledger citations was read against the objectui clone at the cited SHAs, 21 of 21 present: at b9814b334 containers.tsx#PageHeaderRenderer, #PageTabsRenderer, #triggerClass, block-config.ts#BLOCK_CONFIG, SchemaRenderer.tsx#HOIST_PROTECTED_KEYS, validate.ts#BASE_PROPS, lazy-icon.tsx#getLazyIcon, headerColor.ts#headerColorClass, record-details.tsx#countField, recordBinding.tsx#recordBindingBlock, KanbanBoardCore.tsx#KanbanBoardCoreProps, KanbanImpl.tsx#KanbanColumnView, ObjectKanban.tsx#onCardClick; at 1fb1ced36243 ExpressionProvider.tsx#buildExpressionScope, SchemaRenderer.tsx#configEvaluationScope, #evaluatedSchema, containers.tsx#isItemVisible; at f0532d8a recordBinding.tsx#recordBindingBlock; at 7578323a544e ActionRunner.ts#navigateTo, ApiDataSource.ts#ApiDataSource, element-data-source.ts#isElementDataSourceConfig. SHAs the shallow clone does not hold (190fbd01, 89cad75d55, f8a9d0fb0) were not read here; the cross-repo anchor gate reports and never reds without $OBJECTUI_CHECKOUT, so CI did not read them either. The dev's 656-of-656 resolution (PR body, "How the three parts were measured") is the only full reading, and the sample agrees with it.
  • The record:related_list.parentDataSource docblock (head 1649-1650) now says "PLANNED, not yet read: no renderer reads this key (measured on objectui; recorded in the liveness/page.json _note)". The _note carries it: "PLANNED, not live: measured at objectui @f0532d8a, the block reads its parent from the record context only (… RecordRelatedListBody reads useRecordContext()) and nothing reads the key". True, and entry [10] points back to the _note.
  • The tombstone keys whose docblocks moved in this half, object-grid.defaultSort and object-grid.resizableColumns, land as entries [39] and [44], each headed "(REMOVED, tombstone)", so the evidence list asserts no liveness for a retired key. The retiredKey() tombstones and their describe text are untouched (tokens identical), and their group-R counterparts (migrations/entries/retired-keys/18.ui__ObjectGridProps__defaultSort.ts, …__resizableColumns.ts) are not in the file list, as ruling 6181034096 requires.
  • The one claim that leaned on a hop chain, "the read point once MOVED rather than died, which is why it spans a second file" (element:button.icon, head 2949-2950), is kept in words.
  • objectui commit references that mark a change ("since objectui ce991bd70", "objectui 154075ab1 (objectui#11068)") stay, as the PR body says. They are history, not read points, and ruling item 1 reads over read points.

Comment- and ledger-note-only on the published surface: yes. This part publishes changed docblock prose and one changed ledger note, and nothing else.

Landing check (post-hoc): the squash 2372e0a7b7 has the same git patch-id --stable as fa6a6085c0..4196cb921e once page.json is excluded; its parent 5afa1e05a7 (part 2) had already landed the identical page.json line, which is why the squash shows 2 files. Nothing landed that this review did not read.

② Semver level

.changeset/23434-component-read-points-part-1.md declares '@objectstack/spec': patch and carries Clause-②: no; the PR body's third line is Clause-②: no. Both are right. The packed tarball changes (src/**/*.zod.ts and liveness are both in files[]), so a changeset is owed and skip-changeset would be wrong; no accept set widens or narrows, so no with no arm is the correct declaration and patch is its level (yes would demand at least minor; a (narrowing) arm would be breaking, and nothing narrows). The changeset body says what the spec source stops carrying, as ruling 6165388570 item 5 asks, and names no model, no tracker-shaped runtime string. Check Changeset is green on the head.

③ Boundary flags

Every flag and open_questions entry on the card's four os-dev-report comments, with its disposition as read from the rulings, the seat readings and this diff (not from the seat's ACCEPT lines):

flag where disposition
Q1: home of the ComponentPropsMap citations 6168538808 A. Seat reading 6168576479, confirmed by ruling 6181034096 ("Q1 A as the seat read it"). Executed here as one evidence list under page.regions, no verdict, no new row. Answered.
Q2: the 40 retirement-history citations 6168538808 A by ruling 6181034096. This diff touches no file under migrations/entries/**, not conversions/registry.ts, no retirement test. Answered.
Q3: delivery shape 6168538808 A by seat reading 6168576479; PR-1 (#23502) landed as 1418de4c7. Answered.
other spellings (objectui SHA … File.tsx:NNN, sha-less pin mentions) 6170782619 A, measured first: seat review 6171000736 item 3 and claim 6181304005 item 3; executed in part 3 (#23591). Not this part's scope. Answered.
third spelling: 17 sha-less File.tsx:NNN lines in 8 published files 6183204136 Left in place. #23591 is Part of #23434 and its body says they stay for a later round under the card, which is open with pm:queue and no assignee. Escalated into the card's remainder, not closed over. Until that round lands, the last sentence of ruling 6165388570 item 1 is not yet fully true; recorded here, not a defect of this diff.
split by file range, not by item 6183204136 deviation 1 Claim 6181304005 ordered a split by item, each under 3,000 lines; item 1 alone (component.zod.ts, 5,675 diff lines) cannot meet that, so the split is at an unchanged 33-line gap (base line 7228). This part is 2,770 changed lines; Check PR Size is green. Stated in the PR body. Accepted.
the claim names component.zod.ts only; group C spans 15 files; tombstone docblocks moved 6183204136 deviation 2 Ruling 6181034096 counts seat 3's 99 (15 files) and outranks the claim's shorter wording. The tombstone entries in this half ([39], [44]) are labelled tombstone and assert nothing; group R is untouched. Answered; no contract effect.
item 3 went past the two named spellings for three SHA-carrying citations 6183204136 deviation 4 Part 3's scope, within ruling item 1. Not this part.
prose-only respells; one stale claim dropped in component.test.ts 6183204136 deviation 5 Part 3's scope. Not this part.
commit trailers: os-dev.md against the harness reminder 6183204136 deviation 6 Decided by AGENTS.md's commit-message rule (model-free trailer pair; the pre-push hook refuses a model id). The landed squash 2372e0a7b7 carries Co-authored-by: Claude and no model id. Answered by the repo rule; no contract effect.
metadata-form-zod-reconciliation.test.ts omit row still marked PLANNED after the renderer shipped 6183204136 out-of-scope 1 Overtaken: #23568 (1692cd1505) removed the row on main, and part 3's merge took main's side. Answered.
check:platform-checklist red base-side, 7 ABSENT SYMBOL anchors 6183204136, 6183710619 out-of-scope Carrier named (the platform-checklist area owner), not filed. Outside this diff; Lint & Repo Gates is green on this head, so CI does not show it. Noted.
PR #23591's body not edited by the dev; prepared body left for the seat 6183710619 deviation 1 The live #23591 body carries all seven described edits. Answered. The same comment's last sentence flags that THIS PR's body still says "Part 3 carries the issue's closing line" ("The three parts", bullet 3): it does, and part 3 landed as Part of. Unanswered. A stale sentence in a merged PR body, not on the published surface; the fix is one body edit or a correcting comment by the seat. Not a FAIL.
push order; worktree cleanup; no env value printed 6183710619 deviations 2-3; 6183204136 deviations 7-8 Hygiene; nothing to answer.

Check-runs on the head: 43, of which 37 success and 6 skipped by path filter (Build Docs, Console Pin Gate, the Dogfood shards and Verify CLI, Packed-tarball smoke, Temporal Conformance); 0 failures. The five required contexts are green: Lint & Repo Gates, TypeScript Type Check, Test Core, Build Core, Governed Surface Queue Guard. No governed path is in the file list.

Implemented-by: claude/issue-23434-pin-citations-pr2-part1
Reviewed-by: session_0121ooBYRmS8ziFXm9ai5YHm

VERDICT: PASS

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 protocol:ui size/xl tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants