Repository navigation
docs(spec): the sha-less objectui line citations move to their liveness rows - #23621
Conversation
…ss rows Ten live read-point records in packages/spec/src named an objectui file by line with no SHA. Each moves into the note of its liveness row as `objectui @sha FILE#SYMBOL`, re-read at objectui b9814b334, and the source comment names the row. The view.json list.exportOptions note is respelled by symbol. Retirement history and the two records with no ledger row stay. Claude-Session: https://claude.ai/code/session_01LFqdRsuM5nkqoJdHd5ztVk Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LFqdRsuM5nkqoJdHd5ztVk Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift CheckThis PR changes 1 package(s): 11 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
⛔ 2 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 fe32ffc1b973278aefd81cf7482fdcfb0af93c16 && git checkout fe32ffc1b973278aefd81cf7482fdcfb0af93c16
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin af255525c833a74c0c98e9da1bdfa083725fa39e 023b160afec657bcedf0ee7787b6abe85beb8996 && git checkout -B drift-repro af255525c833a74c0c98e9da1bdfa083725fa39e && git merge --no-ff 023b160afec657bcedf0ee7787b6abe85beb8996
node scripts/docs-audit/affected-docs.mjs --json af255525c833a74c0c98e9da1bdfa083725fa39e
|
…hich stay The headline claimed packages/spec/src no longer cites an objectui File.tsx:NNN for a live read point. Two live citations with no ledger row stay, as the changeset's own last bullet says, so the headline now states what the diff delivers: the read points that have a liveness row move into it, and the two without one stay, named below. Claude-Session: https://claude.ai/code/session_01LFqdRsuM5nkqoJdHd5ztVk Co-authored-by: Claude <noreply@anthropic.com>
席位核对 — ACCEPT ·
|
Contract reviewServed-tier: Scope read. Card #23434 (body and all 23 comments: rulings of record 6165388570, letter C, and 6181034096, Q2 to A; landing record 6184152953; post-hoc review 6184726608; claim 6184826965; the dev's two newest Tier. The file list carries Gate verdicts (the check-runs on ① Derived judgmentsAccept set: unchanged, named right. Every hunk in the six Published surface: prose and ledger evidence, each change named right.
Nothing in the diff is named wrong. ② Semver level
③ Boundary flagsFlag 1, the Flag 2, the file-surface deviation (6185606730): The other dev flags, each answered. Count 17 against 16: 16 reproduced on the base; the landing record's figure was a summing error, right to report. The merge of Implemented-by: VERDICT: PASS Reading taken at 2026-10-15T07:11Z, on the head's check-runs, the net diff and the card's comments; nothing built, run or re-run. Generated by Claude Code |
Fixes #23434
Clause-②: no
The last part of issue 23434, under claim 6184826965. It moves the remainder listed in landing record 6184152953 under ruling 6165388570 (letter C) item 1 ("The published spec source carries no renderer citation after this") into the matching liveness notes, in item 2's spelling. The two live citations with no matching note stay as named exceptions (the "stays: no ledger row" rows below); the seat's ACCEPT on this PR keeps
Fixeson that reading. It also carries residual 2 of the post-hoc review 6184726608. Ruling 6181034096 (Q2 → A) keeps retirement history in place, and this PR applies that test to two of the listed lines.What changes
Every edit to
packages/spec/srcis to a comment. The ledger notes take the moved records asobjectui @SHA FILE#SYMBOL, each read at objectuib9814b334(the.objectui-shapin on this base).8d05456cbedata/field.zod.ts:1816stepreaderfield.jsonstepdata/field.zod.ts:1835dimensionsreaderfield.jsondimensionsui/action.zod.ts:966,:969,:970(+:971, a.tsline)descriptionchainaction.jsondescriptionsystem/translation.zod.ts:161(a.tsline, outside the 8 files)action.jsondescriptionui/bulk-action.zod.ts:81(+:73,:76,:79,.tslines)options[]passthroughview.jsonlist.bulkActionDefsui/i18n-label-resolver.ts:136page.jsonregions, entry [2] (page:tabsitems[].label)ui/view.zod.ts:456,:458(+:457)iddecoration producersview.jsonlist.filterandlist.sortui/view.zod.ts:965(+:967)ViewFilterRulerowidview.jsonlist.filterui/view.zod.ts:1701allowAddTabreaderview.jsonlist.userFiltersui/view.zod.ts:2803idview.jsonlist.sortui/app.zod.ts:963areas[].orderretirement recordui/dashboard.zod.ts:1462widgets[].ariaremoval recordai/build-progress.zod.ts:100(+:102)ui/view.zod.ts:5283(+:5284)ViewItemSchemaEach moved comment now names its row, in the form PR #23591 used ("read points recorded in
liveness/view.json, rowlist.filter").Residual 2 (review 6184726608).
view.jsonlist.exportOptionsnamedObjectGrid.tsxby line (:1596-:1611,:1620-:1631). It now namesobjectui @b9814b334 packages/plugin-grid/src/ObjectGrid.tsx#exportableFormats(formats,streaming) and#handleExport(maxRecords,includeHeaders,fileNamePrefix, andstreamingagain for the server-stream choice). The note keeps that the first measurement was by line at objectuiorigin/main@878140b.Two stale claims, corrected on the move. These were renderer readings that no longer hold at the pin. Each source comment now states only the contract, and the ledger records the current reading:
ui/action.zod.tsandsystem/translation.zod.tssaid the description resolver falls back fromobjects.{object}._actions.{action}.descriptiontoglobalActions.{action}.description. At objectuib9814b334,useObjectLabel.ts#actionSuffixesreads one address only: the object's for an action with a key object, the global one for an action without (objectui#11439 retired the chain). That matches the spec's ownpackages/spec/src/system/i18n-resolver.ts#actionTranslationNode. Theaction.jsondescriptionevidence carried the same stale chain and now reads by symbol.ui/bulk-action.zod.tssaid objectui's bulk-param option TYPE is closed (a label/value pair only). Atb9814b334,objectql.ts#BulkActionParamtypes an option entry open, with an index signature. The passthrough reasoning does not depend on the type, and it stays.The four items listed without a ledger row (6184152953): one reading each
ai/build-progress.zod.ts, objectuidda8f3815(the same record as line 100 above)BuildProgressFrameis a stream frame, not a registered metadata type, so no ledger file covers it. The module's own "Liveness watch" section says so, and it keeps each reading beside its surface by design. A row would mean enrolling the frame incheck-liveness.mts'sSPEC_ONLY_SCHEMAS, asqueryandrealtime_subscriptionwere, each by its own card with a census. That widens what the gate governs, which is not this card's to decide.api/dataset-selection.test.ts(objectui@98178b2)DatasetSelectionis a query request, anddataset.jsongovernsDatasetSchemaonly.system/metadata-form-zod-reconciliation.test.ts:578-579configinview.jsonfailedcheck:livenessas an ORPHAN. The walk stops at theviewunion's container arm (check-liveness.mts#shapeOf). It is a dated census of seven keys, not a renderer read point.VIEW_CONSOLE_ROUND_TRIP_KEYScensus (ui/view.zod.ts, andui/view-console-round-trip-keys.test.ts:19,:42)viewItemandlistOverlayarms, which have no rows. The record is also the symbol ADR-0005 appendix (c) cites (docs/adr/0005-metadata-customization-overlay.md,packages/spec/src/ui/view.zod.ts#VIEW_CONSOLE_ROUND_TRIP_KEYS). It names no renderer file.The recount, on
origin/main8d05456cbe(re-taken on9a6f790a38, which changes none of the six source files: the same 16)git grep -nE '[A-Za-z0-9_-]+\.tsx:[0-9]+' -- 'packages/spec/src/**' ':!*.test.ts'. It gives 38 lines. 22 of them are inconversions/registry.ts,migrations/**andregistry.ts.template, which are group R and stay. That leaves 16 in the 8 named files: build-progress 1, field 2, action 3, app 1, bulk-action 1, dashboard 1, i18n-label-resolver 1, view 6. Landing record 6184152953 says 17, but its own per-file list sums to 16..ts:NNN. A wider instrument (objectui package paths with:NNN, any.ts/.tsx) adds 8 lines on the same records. It also finds one record outside the 8 files,system/translation.zod.ts:161. In-repo.ts:NNNcitations (dataset-compiler.ts,memory-driver.ts,kernel-base.ts,middleware.ts) and the cloud one inagent.zod.tsare not renderer citations, and they stay..tsx:NNNlines (the four "stays" rows above), and 21 → 5 on the wide instrument.Bounded in-place fix, outside the claim's file surface
system/translation.zod.ts:161is not in claim 6184826965's file surface. I fixed it here because all four of os-dev's bounded in-place conditions hold:file:linein published spec source.The claim's file surface needs this file added. The seat records that.
Verification
Head
5596717198mergesorigin/main9a6f790a38into this PR's one change commit,f7160d1f2e. Head023b160afefollows it with one changeset-only commit (the headline now names which read points moved and which stay); no build or test input changed. The merge was clean, and it brought PR #23600 and PR #23601, which touchpackages/spec. After the merge,git diff --stat origin/main HEADis still these 11 files (+62 / -54). Every reading below was taken on5596717198after the merge:pnpm --filter @objectstack/spec buildthroughos-verify-lock.sh: VERDICT command-exit 0. After it,git statuswas clean, so the build wrote no tracked file.pnpm --filter @objectstack/spec typecheck && pnpm --filter @objectstack/spec test(vitest--project local; notest:repo) through the lock: VERDICT command-exit 0. "Test Files 678 passed (678) · Tests 20741 passed | 1 todo (20742)"..tsfiles was parsed with TypeScript atorigin/mainand at head and printed with comments removed. 6 of 6 are identical. The control: a one-character string-literal mutation printed differently, and a comment-only mutation printed the same.objectui @SHA FILE#SYMBOLanchors were checked withscripts/symbol-anchors.mjs#symbolSegmentResolutionagainstgit show SHA:FILEin an objectui clone. 21 of 21 are declarations, and 0 are unresolved. Thecontainers.tsxanchors on the editedpage.jsonline are declarations too. Negative control: one bogus path and two bogus symbols gave 3 of 3 unresolved. The clone was read only, and itsgit statusstayed empty.check-spec-docblock-symbol-anchors, withOBJECTUI_CHECKOUTset to that clone and without it: the same verdict, exit 0 both times. "4888 anchors … 3 cross-repo … 0 NEW line anchors on tracked targets survive (199 citations name no tracked file …)". None of the 3 cross-repo anchors isobjectui:, so the variable had nothing to judge in spec source.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack(no paths) derived 81 commands. The list is the same as on the pre-merge head. Each command was run with its exit code captured before any pipe, then reconciled with--ran: "81 derived famil(ies) accounted for — 78 run, 3 NOT-MEASURED".check:liveness,check:docs,check:api-surface,check:authorable-surface,check:empty-state,check:issue-citations,check:nul-bytes,check:doc-authoring,check-closing-keyword-parityand lint'scheck:doc-formula-expressions(after building@objectstack/formula,@objectstack/sdui-parserand@objectstack/lint).check:dual-build-cjs-loads,check:i18n-walk-parityandcheck:lean-entry-closure. They read the built output of packages this diff does not touch (every dist,packages/cli/dist,packages/objectql/dist). This is a declared narrowing, and CI'sLint & Repo Gatesruns them.check:platform-checklist. It reports the same 7 ABSENT SYMBOL findings PR docs(spec): component-member read points, held-back moves and other spellings to the ledger, part 3 of 3 #23591 reported (areas/access-security.json5,attachments-storage.json1,search.json1), plus that area's anchor floor (27 against 28). This PR touches none of those paths.pnpm --filter @objectstack/spec run check:generated: "All 14 generated artifacts are up to date"..tsx:NNNlines and 5 on the wide instrument, with group R still at 22.Acceptance notes
file:linespelling: the third spelling PR docs(spec): component-member read points, held-back moves and other spellings to the ledger, part 3 of 3 #23591 left. Symbol-only mentions of renderer components in prose stay, as they did in PRs docs(spec): component-member read points to the ledger, part 1 of 3 #23589 to docs(spec): component-member read points, held-back moves and other spellings to the ledger, part 3 of 3 #23591. Examples are "objectui'sActionParamDialog" and "the console's filter builder". They name no file or line, and a pin hop cannot falsify them.app.jsonnavigation.order(NavigationRenderer.tsx:1154, :913at objectui@940ba24; atb9814b334the sort ispackages/layout/src/navOrder.ts#byNavOrder),translation.jsonobjects(useObjectLabel.ts:397-400),view.jsonlist.kanban,list.emptyStateandlist.aria. Ruling item 2 governs the spelling of moved records. Respelling the ledger's older entries is not a defect class, and this card does not claim it..objectui-shapin" without naming the tree:VIEW_CONSOLE_ROUND_TRIP_KEYS, the switcher row-state docblock inui/view.zod.ts, andview-console-round-trip-keys.test.ts. No gate ties them to the pin any more, so a pin hop forces nothing. Naming the tree the spec(ui)+objectui: declare the console's round-trip keys on the stored view overlay (#20051 stage ii, ruling 甲) #20456 census used would make them dated readings.ui/app.zod.ts:963sits in theareas[].orderretirement docblock (retired 17.0.0), andui/dashboard.zod.ts:1462in thewidgets[].ariaremoval record (call graph closed 2026-08-04). Both are parts of retirement records, so ruling 6181034096 keeps them as dated history. Theapp.zod.tsline no longer points at the sort at the pin. As history it is not re-measured.skip-changesetdoes not apply.Generated by Claude Code