Repository navigation
docs(spec): component-member read points, held-back moves and other spellings to the ledger, part 3 of 3 - #23591
Conversation
…(bottom third) Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
…meline Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
…p-C files Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
…idence list Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
…hangeset component.zod.ts's moves ship as two separate pull requests so each stays under the 3000-line review line; this branch carries the tests, the other group-C files, the two held-back moves and the other spellings. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
One conflict, packages/spec/src/system/metadata-form-zod-reconciliation.test.ts: main (1692cd1, #23568) deleted the page / interfaceConfig / emptyState omit row whose why string this branch had edited. Resolved by taking main's side: the row's own text said it leaves once the renderer half lands. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
…d omit row Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm
📓 Docs Drift CheckThis PR changes 1 package(s): 13 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
⛔ 4 release-owned page(s) also name something this change touched. These are read-only:
What this run could not see
Coarse fallback — 142 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 63448079ef93f64d7797b396fa7179429e232e3b && git checkout 63448079ef93f64d7797b396fa7179429e232e3b
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 744b73f53f716ea45cc1078c403db0d42761cbab be8657fa446caddb5ec4de9777016c103621fe10 && git checkout -B drift-repro 744b73f53f716ea45cc1078c403db0d42761cbab && git merge --no-ff be8657fa446caddb5ec4de9777016c103621fe10
node scripts/docs-audit/affected-docs.mjs --json 744b73f53f716ea45cc1078c403db0d42761cbab
|
席位核对
Verdict: ACCEPT. Not governed (
|
Contract reviewServed-tier: ① Derived judgmentsPost-hoc review of PR #23591 (part 3 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 Accept set: unchanged (right). Of the 38 changed Published surface that does change, all of it prose or ledger, all right:
Sentences that could now be false: none found. Checked, with the tree each reading was taken against:
Comment- and ledger-note-only on the published surface: yes. This part publishes changed docblock prose, ledger notes and one regenerated docs page, and nothing else. Landing check (post-hoc): the squash ② Semver level
③ Boundary flagsEvery flag and
Check-runs on the head: 50 (two trigger events, the push at 02:52 and the body change at 03:28), of which 43 Implemented-by: VERDICT: PASS |
Part of #23434
Clause-②: no
Part 3 of 3 of PR-2 for issue 23434. The issue stays open after it lands, for the remainder named below. It executes ruling 6165388570 (letter C, items 1 and 4) and ruling 6181034096 (Q2 → A, Q1 → A), under claim 6181304005. Parts 1 and 2 are #23589 and #23590, which move the records in
packages/spec/src/ui/component.zod.ts. All three branch fromorigin/main; none is stacked on another.What this part changes
Item 1, group C outside
component.zod.ts. The component-member read points incomponent.test.tsmove intoliveness/page.json, rowregions, as do those in thecomponent-*.pin.test.tsfamily (action-member params, form custom-fields, form / list / metric families, object-grid declared keys and typed members, objectui-held members,z.unknown()members, report-items / action members), the record-block tests (approvals / attachments, field security, record blocks, reference rail), the action-row and element-navigation tests,expression-bindable-text-keys.zod.ts,object-refinement-check-exports.test.ts,page.zod.tsandinline-grid-column-carriers.test.ts. Where a test record carried a reading the ledger lacked, it became an entry or a clause of an entry: thepage:tabsretiredtype, the icon vocabulary table, the static-params drop, the drill-down writer pins, the grid'sAggregationType, the page-builder guide, the object-manager dialog writer, the bindable-text rows,PageComponent.visibleWhenroots and the PLANNEDdataSourceAPI binding.object-refinement-check-exports.test.ts's two mirror citations went to their own rows (view.jsonlist.appearance,dashboard.jsonwidgets), not topage.regions.Item 2, the two held-back moves, applied as PR-1's hold-back reversed (
git diff 7fe6ffdde1 7ebc084841over the four files, which were byte-identical onorigin/main):src/ui/dataset.zod.ts→liveness/dataset.json, rowmeasures.format.src/data/api-methods-batch-conformance.test.ts→liveness/object.json, rowenable.apiMethods.Item 3, the other spellings, each into its matching row as
objectui @SHA FILE#SYMBOL. Every symbol was resolved at that SHA, and a sha-less citation was re-read at a named tree:ui/action-declarative-update.ts(.objectui-shapinb9814b334; landed with #23494 after PR-1)action.jsonoperationui/navigation-target.ts,ui/action-url-target-scheme-set.test.ts(objectui7578323)action.jsontargetui/app.zod.tsviewNamerule (sha-less pin)app.jsonnavigation.viewNameui/bulk-action.zod.tspromoted route (objectuimaindca25aff2)view.jsonlist.bulkActionDefsui/dashboard.zod.ts#20960 census (objectuimain5262f7dd)dashboard.jsonwidgets.optionsui/dashboard.zod.tsmirror check (sha-less pin)dashboard.jsonwidgets(already recorded by PR-1)ui/view.zod.tsgroupByFieldconsumer (objectuidda8f3815)view.jsonlist.kanbanui/view.zod.tsempty-statelink(objectuib9814b334, fourFile.tsx:NNN)view.jsonlist.emptyState(+page.jsoninterfaceConfig)ui/view.zod.tsform-layout twin (sha-less pin)page.jsonregions(already in the list)ui/list-view-export-options.ts,ui/view.test.ts(origin/main@878140b)view.jsonlist.exportOptions(already recorded)data/field.form.tshint face (sha-less pin)field.jsonrelatedListFilterdata/field.zod.tscurrency width (sha-less pin)field.jsoncurrencyConfigdata/field.zod.tslookup snake twins (objectuied971e8)field.jsonlookupColumnsshared/editability-boundary.tsper-optiondisabled(objectuimainaca27fa)field.jsonoptionssystem/i18n-resolver.tsresolveFlowScreenTitlecaller (sha-less pin)translation.jsonflows.screens(already recorded)system/metadata-form-zod-reconciliation.test.tsemptyStateomit reason (objectui7af0ab3); #23568 has since removed that omit row on main, and the merge took main's sidepage.jsoninterfaceConfig; the 7af0ab3 reading is kept there in the past tensepage.zod.tsemptyStatehand-off (InterfaceListPage.tsx:509)page.jsoninterfaceConfig(already recorded)Also:
content/docs/references/ui/expression-bindable-text-keys.mdxis regenerated (check-generated.ts --fix), and.changeset/23434-component-read-points-part-3.mdis a@objectstack/specpatch.Changed lines: 1,754 (+336 / -1,418) across 49 files, under the 3,000-line review line. Head
be8657fa44, which contains merge7ea3bb007doforigin/main.Census, base
7ffc57846a→ all three parts mergedGroup C = the
ComponentPropsMapmember read points (seat 3's 99). Group R = retirement history, which ruling 6181034096 (Q2 → A) keeps in place.--list, historical`.objectui-sha` pin SHAspelling: group Caction-declarative-update.ts(landed with #23494 after PR-1; item 3)component.zod.ts)b9814b334(re-read there 2026-10-14 …".objectui-shapin with SHA / sha-less /objectui SHAce991bd70", which are not read points)page.regionsnote: 120 entries, 62,138 characters. No schema or gate caps a note's length. Onlyevidenceandproducerare path-scanned bycheck:liveness, andnoteis 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-pr2at1646d39e53(all three parts' changes in one tree). The split was then checked mechanically:git merge-treeof part 1 + part 2 + part 3 ontoorigin/maingives a tree whosepackages/specandcontentmatch the union head exactly (empty diff). The three parts merge in any order without conflict. They share one changed line inpackages/spec/liveness/page.json(theregionsnote), and it is byte-identical in all three..tsfile was parsed with TypeScript and compared withorigin/mainon its code tokens, JSDoc and comments excluded. All published files are identical. In this part's head, five string literals changed across two test files: two test names, onewhyreason string, and the two pieces of one assertion message. No schema, type, export, default, accept or refuse change, and no.describe()text change.objectui @SHA FILE#SYMBOLin 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, throughscripts/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): lintcheck: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-checklistexits 1 with ABSENT SYMBOL findings indocs/qa/platform-checklist/areas/{access-security,attachments-storage,search}.json. They point atpackages/metadata-protocolandservice-storage, which no part touches; PR-1 reported the same findings. The other 98 exited 0, includingcheck:liveness,check:nul-bytes,check:issue-citationsandcheck-spec-docblock-symbol-anchors. On the anchors gate, "citations name no tracked file" went from 1965 on the base to 228.This part's head
be8657fa44: merge7ea3bb007doforigin/main, then the past-tense fix to thepage.jsoninterfaceConfignote. Every run below was taken after the last commit, in a fresh worktree:typecheck: exit 0.vitest run --project local: Test Files 678 passed (678), Tests 20728 passed, 1 todo.--project repo: Test Files 61 passed (61), Tests 1033 passed. Lock VERDICT command-exit 0. The targeted run first,src/system/metadata-form-zod-reconciliationandsrc/ui/component: Test Files 28 passed (28), Tests 1542 passed.check:generated("All 14 generated artifacts are up to date"),check:liveness,check:issue-citations,check-spec-docblock-symbol-anchorsandcheck:nul-bytes: all exit 0.dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, then--ran: "111 derived famil(ies) accounted for — 111 run, 0 NOT-MEASURED". No STALE TREE note. Seven families first exited 3 because the fresh worktree had no built prerequisites. Afterpnpm turbo run build --concurrency=2(lock VERDICT 0), all seven re-ran at exit 0: lintcheck:doc-formula-expressionsandcheck:doc-security-posture,check:skill-examples,check:docs-transcript-drift,check:dual-build-cjs-loads,check:i18nandcheck:lean-entry-closure. 110 exit 0. One RED, from the base:check:platform-checklist, exit 1, the same 7 ABSENT SYMBOL findings (areas/access-security.json5,attachments-storage.json1,search.json1); no part touches those paths.Acceptance notes
Deviations from the claim, stated rather than chosen silently:
component.zod.tsalone is 5,675 lines. Socomponent.zod.tssplits into two halves at an unchanged 33-line gap (parts 1 and 2, 2,770 and 2,931 lines). Item 1's remaining files ride here with items 2 and 3. Every part carries the identicalpage.regionsline so that each part's ledger is complete; agit merge-treeof all three ontoorigin/mainreproduces the verified union tree.component.zod.tsonly. Seat 3's group C, the 99 that ruling 6181034096 counts, spans 15 files:component.zod.ts,component.test.ts, thecomponent-*.pintests,expression-bindable-text-keys.zod.ts,object-refinement-check-exports.test.ts,page.zod.tsandinline-grid-column-carriers.test.ts. I followed the ruling's 99. Some tombstone docblocks insidecomponent.zod.ts(sortField,resizableColumns,defaultSort,quickAdd, formlayoutinline/grid) were moved, per seat 3's file-based classification. Theirmigrations/entriesand retirement-test counterparts (group R) are untouched.origin/main.Left in place on purpose (census remainder after all three parts):
integration/connector.test.ts(errorMappingretired, objectui0d8fd7c),system/email-template.zod.ts(category/isSystemretired),ui/app.zod.ts(homePageIdtombstone, objectui@785b8a5d),ui/dashboard.zod.ts(actionUrl/actionType/actionIconremoved,objectui@91757a7),ui/view.zod.ts(responsive/performanceremoved,objectui@fb35e48) andapi/export-job-family-retirement.test.ts.ai/build-progress.zod.ts(objectuidda8f3815; the build-progress phase vocabulary; no ledger file covers AI stream frames).api/dataset-selection.test.ts(objectui@98178b2; the five call sites that build a runtimeDatasetSelection, which is a request rather than dataset metadata).system/metadata-form-zod-reconciliation.test.ts:578-579(sevenviewkeys the ledger walk cannot hold, as that comment itself says).ui/view-console-round-trip-keys.test.ts:19,42and the matchingui/view.zod.tsround-trip census (VIEW_CONSOLE_ROUND_TRIP_KEYS, sha-less pin); the walk stops at the union's container arm.kernel/functional-completeness.ts(afb228418,5f4514f7b,fec3b1a8b,04a67b9dc),ui/bulk-action.zod.ts(29b99490), andui/page.zod.ts/ui/view.zod.ts(b434f5f47,0253416). Three of these sentences said "at the pin"; they now read "on the console this repo ships" or use the past tense.File.tsx:NNNcitations with neither a SHA nor a pin mention. They do not claim to track the pin, so a pin hop never forces their rewrite. There are 17 lines in 8 published source files:ai/build-progress.zod.ts,data/field.zod.ts(2),ui/action.zod.ts(3),ui/app.zod.ts,ui/bulk-action.zod.ts,ui/dashboard.zod.ts,ui/i18n-label-resolver.tsandui/view.zod.ts(6). There are also 40 in tests: 30 of them in the pin tests name the objectui TEST file a fixture's shape was copied from (writer provenance, not a renderer read point). These stay for a later round under [Decision] Every objectui pin hop rewrites spec docblocks: move the objectui read-point citations out of packages/spec/src? #23434, which stays open: ruling item 1's last sentence covers them.Measured drift (zone 2):
--list, plus the respelled ones (27 of PR-1's "re-read there 2026-10-14" form across the component files and the two held-back files). Group R holds at 34 historical citations, unchanged. One new live historical citation landed after PR-1:ui/action-declarative-update.ts(fix(spec)!: page action rows carry ActionSchema's declarative-update rules, read from one judge #23494), moved here.regionsnow holds 62,138 characters.component.test.tssaid the tree renderer readsdatathrough the'undeclared'arm (true at objectui87af769e9). At objectuib9814b334it is the'view-data'arm. The ledger entry records the current reading.Merge note: #23568 removed the
interfaceConfig.emptyStateomit row frommetadata-form-zod-reconciliation.test.tson main. The merge (7ea3bb007d) took main's side, and this part no longer touches that file.skip-changesetdoes not apply, because a published file changes and the patch changeset is present.Generated by Claude Code