Repository navigation
chore(spec): re-measure the action:group, action:menu and element:repeater records at the objectui pin and quote their props-read sites, ASSERTED_ANCHOR_FLOOR 10 to 13 - #22043
Conversation
…eater records at the pin and quote their props-read sites, ASSERTED_ANCHOR_FLOOR 10 to 13 The three rows' objectui anchors had moved under hop notes that recorded them as held: the two containers' by 3 to 8 lines at the a58626c88 hop (objectui#11638), every repeater anchor by 28 since 31971ff1e (objectui#11168 slice 2), and the repeater's data-objectstack filter and sort anchors since db11afd49 / e420df310. Re-point each at a58626c88, plus action:button's static-params.ts citation (+7) and the definition-list registration prose, which objectui#11168 slice 2 made false. Correct the section 4b hop note, and record where the earlier hop notes missed the drift. Then quote one load-bearing anchor per row: the member forward of action:group (action-group.tsx:325-374) and of action:menu (action-menu.tsx:261-321), and the readProps call of element:repeater (data-list.tsx:125-135). ASSERTED_ANCHOR_FLOOR goes 10 to 13. Comment text only: no schema, key, type or export change. Claude-Session: https://claude.ai/code/session_01GV6oYwgc1kWiUCb1YaprQ7 Co-authored-by: Claude <noreply@anthropic.com>
…e section 4b hop note The member forward's params construction changed content at the a58626c88 hop; every other moved container line is byte-identical. Say so instead of calling every moved line byte-identical, and word the floor docblock's reason the same way. Claude-Session: https://claude.ai/code/session_01GV6oYwgc1kWiUCb1YaprQ7 Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift Check1 anchor(s) derived from 1 changed package(s); no hand-written page names any of them, so this run has nothing to list — not a clean bill of health. This check sees only pages that NAME a derived anchor: one that documents this change in prose, or enumerates it in an authoring dialect, names none and stays invisible to it on every run. What this run could not see
Coarse fallback — 139 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 959b0793a8fb7fcab8b2c21fbf9430cf9de2c813 && git checkout 959b0793a8fb7fcab8b2c21fbf9430cf9de2c813
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin b220e0943e87d26256316387e3c484f3f50b8416 00c6b9802fbcae2bb4cbb89b33788f8e1798e857 && git checkout -B drift-repro b220e0943e87d26256316387e3c484f3f50b8416 && git merge --no-ff 00c6b9802fbcae2bb4cbb89b33788f8e1798e857
node scripts/docs-audit/affected-docs.mjs --json b220e0943e87d26256316387e3c484f3f50b8416 |
…objectui pin The paragraph called 0abd4f9f8 "the current .objectui-sha pin", which it has not been since a58626c88, where objectui#11638 rewrote both containers' params payload. Re-point its three anchors (group :330-335 -> :325-327, menu :265-270 -> :261-263, static-params.ts:172-182 -> :164-174), re-read at a58626c88, and cite the pin in the asserting spelling so the next bump re-checks it. Claude-Session: https://claude.ai/code/session_01GV6oYwgc1kWiUCb1YaprQ7 Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: Inputs: card #20471 (body and all seventeen comments: the triage rulings, the five holds, the two claims and the claim revision, stage 1's ACCEPT and landing, and the three ① Derived judgments
② Semver level
③ Boundary flagsThe dev's reports are
Implemented-by: VERDICT: PASS Generated by Claude Code |
Fixes #20471
Clause-②: no (docblock text and a gate constant: the accept set and the public type surface are unchanged)
Stage 2 of #20471, as the landing record of stage 1 (PR #22038) scopes it. All six
ComponentPropsMaprows the card names now quote their props-read site, so this PR closes the card.The
action:group,action:menuandelement:repeaterrecords cited objectui lines that did not hold at the pin they assert (.objectui-sha=a58626c88). This PR re-measures them at the pin, re-points every cited line that moved, corrects the prose that was false at the pin, and then quotes one load-bearing anchor per row.ASSERTED_ANCHOR_FLOORgoes from 10 to 13.What changed
packages/spec/src/ui/component.zod.ts(docblocks and one code comment, no code):objectNameforwards moved at the0abd4f9f8→a58626c88hop. In fact every container anchor below the deleteduseConfigBagEvaluator()call moved, andstatic-params.tsmoved too. The note now says so. A new "correction" sentence records where earlier hop notes certified anchors that had already drifted (details below). The older dated notes are left as written.action:groupandaction:menurow records: every moved anchor is re-pointed (table below). The "static values" parenthetical on each member forward now describes what is there at the pin: since objectui#11638, a member's ownproperties.paramsis no longer read.element:repeaterrow record: everydata-list.tsxanchor is re-pointed (+28), and so are the twodata-objectstack/src/index.tsanchors. Thefieldssentence said the renderer's TS type and its registration description both advertiselabel. Since objectui#11168 slice 2 neither does, and the sentence now says so.element:definition-listregistration prose: it said the registration publishes the strings'1'/'2'and marksitemsrequired. Since objectui#11168 slice 2 it does neither. Both sentences now give the history and the current lines. The inline comment on thecolumnsliteral makes the same correction.previews/block-config.ts:307is re-pointed to:320.action:button:static-params.ts:91-101is re-pointed to:98-108.[#21855]member paragraph aboveactionContainerMemberShape(patch round00c6b980, at the seat's direction, claim revision6027563825): it called0abd4f9f8the current pin. Its three anchors now point ata58626c88(group:325-327, menu:261-263,static-params.ts:164-174), in the asserting spelling, so the gate re-checks it at the next pin bump. It is an in-place fix: the same defect class, a mechanical edit, no other claim, and the same gate family.packages/spec/scripts/check-objectui-pin-citations.ts:ASSERTED_ANCHOR_FLOORgoes from 10 to 13, exactly the three quotes. Its docblock names the three. It also updates the worklist count from 418 to 419, as--verify-anchorsreads it ata58626c88(see Acceptance notes for why it went up by one)..changeset/20471-component-row-anchor-requote.md: apatchchangeset for@objectstack/spec, becausefiles[]shipssrc/**/*.zod.tsand these docblocks are published text, as stage 1 measured.Re-pointed anchors
Each row was checked in two ways, read-only, in the local objectui object store:
paramsPayloadtails that objectui#11638 rewrote.a58626c88)action:groupactionsread:303:300const declaredActions: UIActionSchema[] = schema.actions || [];actionRendersAtfilter:304:301:329-382action-group.tsx:325-374, QUOTED (params:325-327,objectName:381→:373)display:404:396label/icon:424/:408:416/:400variant:414,:456:406,:448size:415,:457, registration:487-528:407,:449,:479-520(:124held)visible:290+:401:287+:393disabled(dropdown trigger):418:410(:274,:159held):114-171,:205-243,:81-86,action-group.tsx:40-42action:menuactionsread:342:335const actions: UIActionSchema[] = schema.actions || [];:80,:108-147,:408:80,:108-147,:401ActionAutoTrigger:363-370:356-363:264-328action-menu.tsx:261-321, QUOTED (params:261-263,objectName:327→:320)label:389,:398-399:382,:391-392icon/variant/size:240/:241/:242:237/:238/:239visible:235+:336:232+:329inputs:435-463:428-456disabled:219,:388:219,:381element:repeaterreadProps:97-107data-list.tsx:125-135, QUOTEDobject:143,:155;:143-146,:181:171,:183;:171-174,:209filter/sort/limit:120,:152/:153/:154:148,:180/:181/:182emptyText/divided:181/:186:209/:214titleField/fields:191-192/:128,:194-196,:196:219-220/:156,:222-224,:224useResolvedFilterdata-list.tsx:119-120data-list.tsx:147-148serializeOrderBydata-objectstack/src/index.ts:4782-4793,:760-786:5000-5011(options.filters = translateFilterArray(params.$filter);),:868-894element:definition-listcolumnscontrolpreviews/block-config.ts:307:320columns/items:82(prose false at the pin)data-list.tsx:99-105/:91-97, prose rewrittenaction:buttonreadStaticParamValuesstatic-params.ts:91-101static-params.ts:98-108When each anchor moved
These readings use blob ids of each cited file at every pin from
dd3f7e1betoa58626c88, read in the local objectui object store.89cad75d5andab1879721were fetched read-only at depth 1 for this.action-group.tsx/action-menu.tsx: objectui#11638 at the0abd4f9f8→a58626c88hop (+10/-18 and +11/-18). Anchors move -3 below the deleteduseConfigBagEvaluator()call and -8 (group) / -7 (menu) from the member forward on.static-params.ts: byte-identical fromdd3f7e1bethrough0abd4f9f8. It gained 7 lines abovereadStaticParamValuesat the same hop.basic/data-list.tsx: changed once, ate420df310→31971ff1e(objectui#11168 slice 2 rewrote both list registrations). The repeater moved by +28. That hop's note does not list the file. Every later note recorded its anchors as held or re-read in place.previews/block-config.ts::307moved to:320at the same hop.data-objectstack/src/index.ts:translateFilterArrayarm moved atdb11afd49(+42), ate420df310and atab1879721.serializeOrderBymoved ate420df310(+108).The new correction sentence in section 4b records the three files whose drift went unrecorded. It does not rewrite the older dated notes.
The quotes (H3 definition from stage 1: one load-bearing anchor per row, its props-read site)
action:group:action-group.tsx:325-374first lineconst paramsPayload: ActionDef = Array.isArray(action.params). This is the member forward, where every key a member forwards to the runner is enumerated (type,name,label,description,target,openIn,endpoint,method, params,bodyExtra,bodyShape,operation,patch,confirmText,successMessage,outcomeMessages,errorMessage,refreshAfter,locations,toast,resultDialog,onSuccess,objectName). The range keeps the record's own extent: from the params payload to the end of theexecutecall. The line is unique in the file, so a drift is relocated.action:menu:action-menu.tsx:261-321, same first line, same role, unique in that file.element:repeater:data-list.tsx:125-135, quoting the opening line of thereadPropscall, the same text stage 1 quoted for the definition list at:42(in the source,const props = readPropsfollowed by the generic's opening bracket and brace). The type literal is the row's key set. As H3 expected, the line is not unique (:42,:125), so a drift goes red without a relocation hint.forwarded: ActionDefliteral is foraction:button. It also sits below theactionsread (:300/:335), so a shift above either line reds the quote. A quote on theactionsline would add a content check of one key read only. That is noted, not done.inheritedAtin the gate), which for these rows would be another file.Verification (at
afe6f9df; the patch round00c6b980re-ran the card gate, the spec build and tests, and the derived gates green, report6027887111)OBJECTUI_ROOT=/home/user/objectui … check-objectui-pin-citations.ts --verify-anchors= exit 0:13 asserted, 419 objectui anchor(s) still carry no content assertion.pnpm --filter @objectstack/spec check:objectui-pin-citationsbeside the objectui checkout = exit 0:13 anchor content assertion(s) verified against objectui at a58626c88; 500 file:line anchor(s) seen. The self-test, including its live round-trip, is green.13 … NOT VERIFIED — no git checkout.You ADDED coverage — set ASSERTED_ANCHOR_FLOOR to 13. All 13 assertions verified, with no mismatch.node scripts/ablation-replace.mjsin WRAP mode, with--verify-anchorsas the wrapped command. Each anchor hit x1. The mutation was proven by a blob change, and the restore by blob == HEAD blob83976000withgit diff HEADempty. The final porcelain was clean.:325-374changed to:326-374: exit 1,That line IS in the file — at :325, not :326. Either the anchor drifted by -1 lines.action.paramschanged toaction.paramz: exit 1,That line is NOWHERE in packages/components/src/renderers/action/action-menu.tsx at this pin.:125-135changed to:126-135: exit 1,That line appears 2 times in the file (:42, :125).pnpm --filter @objectstack/spec build: VERDICT command-exit 0, andgit statuswas clean afterwards.pnpm --filter @objectstack/spec typecheck: VERDICT command-exit 0.check:scripts-typecheckcompiles the edited script (--listFilesOnly: 1 hit).pnpm --filter @objectstack/spec exec vitest run --project local --maxWorkers=2: VERDICT command-exit 0,Test Files 619 passed (619),Tests 18485 passed | 1 todo. No test names the edited gate script (git grep: 0 hits). Its own--self-test, including the live round-trip, runs inside the gate.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackwas run with no paths atafe6f9dfand derived 82 commands, the same list as at10006d5d.pnpm check:dual-build-cjs-loadsexited 3 (PREREQUISITE NOT MET: about 77 workspace packages unbuilt), so it is NOT MEASURED.packages/spec/distJS and 2 in.d.ts, against a positive control of 14 JS hits for a.describe()string. CI runs the gate.--ranreconciliation:82 derived, 81 run, 1 NOT-MEASURED, 0 UNRUN, exit 0.check:doc-formula-expressions,check:lean-entry-closure,check:dts-closureandcheck:exported-anyfirst refused their prerequisites while a build was in flight. They exited 0 on the final pass, afterpnpm turbo run buildof formula, lint and objectql (14 tasks, VERDICT command-exit 0) and the spec rebuild.check:pm-dispatch-gatesbattery (exit 0,1976 cases pass) ran at10006d5d. The later commit changes six comment lines in the two spec files and nothing the battery reads.pnpm lint(eslint . --no-inline-config) is CI's run. Here:npx eslint --no-inline-config --format jsonon them reads 2 files, 0 errors, 0 warnings, neither ignored.eslint.config.mjsnever enables type-aware linting (noparserOptions.project, stated at its lines 326-328), so this diff cannot move the verdict on an untouched file.Acceptance notes (noted, not filed)
[#21464]member docblock (pin2e818d0b51ec) stays dated and unquoted. Its[#21855]paragraph, which called0abd4f9f8the current pin, was corrected in place in00c6b980(see What changed).data-list.tsx:99-105is spelled as a full anchor. It used to be the bare:82. A bare continuation there would read aspreviews/block-config.ts. The new full anchor carries no quote, so the worklist count rises from 418 to 419..changeset/20471-component-row-anchor-quotes.md, not yet released) says the other three rows "carry no quote yet". This PR adds its own changeset rather than editing that one.Generated by Claude Code