chore(objectui): bump the console pin to ab1879721595 (carries objectui f624f278, b0bf413c and ab187972) - #21625
Conversation
…bjectui.sh --no-commit output) Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w Co-authored-by: Claude <noreply@anthropic.com>
…kstep at ab1879721595; re-measure more pin citations (wip) Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w Co-authored-by: Claude <noreply@anthropic.com>
…9721 (wip) Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w Co-authored-by: Claude <noreply@anthropic.com>
…(wip) Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w Co-authored-by: Claude <noreply@anthropic.com>
…d.span describe (wip) Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift CheckThis PR changes 2 package(s): 2 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
⛔ 5 release-owned page(s) also name something this change touched. These are read-only:
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 a46cc222b2bb8a65baf6756259de4d63bdb3df2d && git checkout a46cc222b2bb8a65baf6756259de4d63bdb3df2d
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 5b5e83f446bde0bf6e13db304b9f07f115635704 4fc15b7e67f4d4f25e3886058e3eb507b2947bbc && git checkout -B drift-repro 5b5e83f446bde0bf6e13db304b9f07f115635704 && git merge --no-ff 4fc15b7e67f4d4f25e3886058e3eb507b2947bbc
node scripts/docs-audit/affected-docs.mjs --json 5b5e83f446bde0bf6e13db304b9f07f115635704
|
Contract reviewServed-tier: ① Derived judgmentsInputs: card #21616 (body, claim 5971910197, os-dev-report 5972904218), PR #21625 (body, the 20-file list, net diff
② Semver level
Clause-②: no — right. No ObjectStack published accept set widens and no public surface is added. The spec moves text only. ③ Boundary flags
Deviations:
Not flagged by the dev, raised here: the Implemented-by: VERDICT: FAIL Generated by Claude Code |
…te records and the outcomeMessages liveness row at objectui ab1879721 The console reader for each landed inside 89cad75d5570..ab1879721595 (objectui#11068, objectui#11227, objectui#11344), so the records that said no renderer reads them are rewritten to the measured read at the pin, and the keyboardNavigation describe drops its not-enforced marker. Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w Co-authored-by: Claude <noreply@anthropic.com>
…boardNavigation describe Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: ① Derived judgmentsInputs.
② Semver level
Clause-②: no — right.
③ Boundary flags
Deviations in the patch-round report:
No blocking item remains. Implemented-by: VERDICT: PASS Generated by Claude Code |
The os-regen driver kept this branch's side of the generated page in the merge with origin/main 5b5e83f, which dropped main's object-metric aggregate and trend rows (3f1bc81). gen:docs on the merged tree puts them back. The page now differs from origin/main only by this branch's keyboardNavigation row. Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: ① Derived judgmentsInputs.
This round is a sync, not new work: right.
Spec accept set: right. It does not move.
Re-measured records, each checked against objectui at
Console surface through
ADR-0087 disposition on
Lockstep and manifest records: right.
Not flagged by the dev; non-blocking.
② Semver level
Clause-②: no — right.
③ Boundary flags
Deviations:
The
No blocking item remains. Implemented-by: VERDICT: PASS Generated by Claude Code |
✅ ACCEPT — PR #21625 (#21616), head
|
Fixes #21616
Clause-②: no
Moves the bundled Console's objectui pin from
89cad75d5570(#21380) to objectuimainat claim time,ab187972159583b595facdcae3c73b50f6f312e9, so the Console carries objectui#11553, objectui#11544 and objectui#11562, and objectui's own move onto@objectstack/*17.6.0. Unblocked by this, once it lands: #12438 (B1's re-run), #21464 (the held object-gridcolumnsmember). #21596's run reads whatever console this pin builds.Range
89cad75d5570..ab1879721595: 65 non-merge commits, 119 changesets added (one no longer present at the tip, read from the commit that added it), 111 releasing (43 declared breaking, all by the author's annotation), 8 release-nothing, 1 commit without a changeset (6903eafbc, a docs example).git merge-base --is-ancestorexits 0 against objectuiorigin/mainfor the old pin and for every commit named below;ab1879721595isorigin/mainat the claim-time read.The landings this bump carries
/studio/~org/automations(PR objectui#11565)f624f278d77eoptionsonly, never a column's (PR objectui#11563)b0bf413cac21columnsmemberrecord:detailsedit mode edits atextareafield in a multi-line textarea, so a save keeps its line breaks (PR objectui#11567)ab1879721595(the pin itself)@objectstack/*17.6.0 and follows its mechanical contract moves (PR objectui#11531)6158e4c93f0bWhat changed here, and why
.objectui-shaand.changeset/console-ab1879721595.md, written byscripts/bump-objectui.sh ab187972159583b595facdcae3c73b50f6f312e9 --no-commit(auto levelminor). The explicit sha is passed because the shared../objectuicheckout sits on another branch. The script'sadr-0087: TODOplaceholder is answerednot-required (no-migration-prescription), in the wording the previous bumps used, naming all 43 declared-breaking entries (26 commits). Each is objectui's own surface: its validators, layout nodes, node-type keys, CLI, designer and drill-report types. Where an entry narrows toward an ObjectStack shape, ObjectStack already declares that shape: the{ condition, style }rule, a dataset-bound dashboard widget,deleteBehavior,percentScaleOf. Measured: none of the 22 retired or narrowed node keys probed is aComponentPropsMaprow (56 rows) or aPageComponentTypemember (31).packages/sdui-parser/objectui-lockstep.json, re-recorded withpnpm gen:sdui-lockstepagainst the build worktree at the pin (OBJECTUI_ROOT=.cache/objectui-ab1879721595; the generator correctly refused the off-pin shared checkout). It reads 214 grammar lines (blob0131f27cf86d), 25 codes and containment predicate76c18fb95d1f, all unchanged, so no port is owed.sdui.manifest.json+scripts/sdui-manifest.record.json, fromnode scripts/gen-sdui-manifest-node.mjsover the treepnpm objectui:buildbuilt at the pin. It has 107 components, none added or removed. Fourteen changed their published inputs:griddropssmColumns/mdColumns/lgColumns/xlColumns, and itscolumnsandgapbecome value sets.stack/flexgapandcontainerpaddingbecome value sets too.page:headerdrops the inertbreadcrumb.object-gridgainsdescription,emptyStateandkeyboardNavigation.object-pivotgainsdrillDown, andrecord:line_itemsgains ten inputs.object-grid/object-kanbanconditionalFormatting,action:button/action:iconsuccessMessage, and thefieldsinput of the three form blocks (object-form,embeddable-form,object-master-detail-form).packages/spec/src(check:objectui-pin-citationsreds on any pin move) were re-measured at the new pin, not restamped. Each anchor was mapped through its cited file's diff and re-read. Block hashes and corpus counts were re-taken with a method that first reproduced every89cad75d5number: the selection block still hashes toc88443302d40…, and the corpus is 10071 files withobjectstack16044 and@objectstack/spec6461 at the old pin, against 10267, 16377 and 6665 here. This regeneratespackages/spec/src/migrations/registry.tsandcontent/docs/references/ui/view.mdx. It adds.changeset/objectui-pin-citations-ab1879721595.md(@objectstack/specpatch), because theFormField.spandescribe and six migration descriptions name the pin.action:*rows. objectui#11344 now forwardsoutcomeMessagesto the runner. Theaction:button/action:iconrows record it as a key the renderer forwards and the row does not declare: it arrives on theaction:barmember path, and objectui leaves the input unpublished until the row declares it. Theaction:group/action:menurows record it riding each member's forward.object-treeparagraph now cites the regenerated manifest record.object-gridkeyboardNavigation. The grid reads the key at this pin (objectui#11068,154075ab1:ObjectGrid.tsx:5458handsschema.keyboardNavigation ?? inlineEditabletodata-table.tsx, which makes the cells one roving Tab stop). So the describe drops[EXPERIMENTAL — not enforced]and its "no renderer reads it" sentence, and states the measured behaviour. The member docblock and the block docblock's [finding(spec):ComponentPropsMap['object-grid'](ObjectGridPropsSchema) declares neitherdescriptionnoremptyState, which objectui'sObjectGridreads once objectui#11130 lands #20694] paragraph record the read and keep thedb11afd4967cmeasurement as history.content/docs/references/ui/component.mdxis regenerated.object-gridemptyState's record called the unresolved locale map "a renderer gap". objectui#11227 (6158e4c93) ends that gap:ObjectGrid.tsx:6468-6469resolvestitle/messageagainst the display locale.ActionSchema.outcomeMessageswasplanned, with an author warning that the console does not show outcome copy yet. The console reader is objectui#11344 (c476be0e0,ActionRunner.composeSuccessMessage), so the row islive, as it prescribed for this commit. This addspackages/spec/liveness/action.jsonand its count shardliveness/state-counts/action.mdto the diff, and thesuccessMessagerow's note records the interpolation.ui/view.zod.tsthat redded:ObjectView.tsx2293->2299,objectql.zod.ts2145->2370(still.strict()) and1160->1419(still withoutmap). No key, default, enum member or export moves.flexgaps 1, 2, 3, 4, 6 and 8 andgridgap 5 with columns 3 and 4, all inside the new sets.*Columnskey or any retired node key (0git grephits).datasetanyway.percentfields declaremax: 100, so objectui#11475's storage-driven scaling reads them as whole percents.is_empty/$emptyon a value provider.Browser verification (
examples/app-showcase, this branch)pnpm dev -- --fresh --ui --no-watch -p 41737ran at87d7c51424, before the merge, with its own ephemeral DB and the seeded admin. The fourmaincommits merged afterwards touch no console asset.check:console-shareportsobjectui@ab1879721595. The run was driven in headless Chromium (/opt/pw-browsers/chromium) with every API response captured.ab1879721595POST /api/v1/automation/showcase_task_completed/clone{ name: 'pinprobe_flow_clone', label: 'Pinprobe flow clone' }, then open/_console/studio/~org/automationsGET /api/v1/meta/flow/pinprobe_flow_clone200,_packageIdnull. The page header reads "Organization flows · Automations". The rail lists "Pinprobe flow clone" and the canvas opens it (?surface=flow:pinprobe_flow_clone, status draft). Studio's home lists "NOT IN A PACKAGE · Organization flows" beside "No writable packages yet"backlog/done/in_progress/in_review/todo, labelled from the object field's options: Backlog, Done, In Progress, In Review, To Do. Each counts 2, matchingPOST /api/v1/data/showcase_task/query(groupBy: ['status'], 5 records). The retired column-optionsread cannot be authored (the strictListColumnSchemarefusesoptions), so there is no pre-fix leg to contrastPATCHa task'snotesto"Call back Monday.\n\nBudget approved, needs legal review.\n", open its record page, double-click Notes, append "Signed off.", SaveTEXTAREAwhose value carries both line breaks. The stored value after the save is"Call back Monday.\n\nBudget approved, needs legal review.\nSigned off."Smoke: the
/_console/homelauncher, Capability Map, Command Center (大屏), the JSX Command Center (grid columns={4} gap={5}), the Delivery Operations dashboard (KPI tiles and charts drawn), Chart Gallery, Component Gallery and Task Board. 0 page errors. Non-2xx responses were only401 /auth/get-sessionbefore sign-in,404 /usage/storageand one404 ?state=draftno-draft probe. Only the PIDs this run started were stopped.Gates and tests run locally, at
4fc15b7e67(sync round),5eadf35375(patch round) andb93b5fec004fc15b7e67is the head after mergingorigin/main5b5e83f446withscripts/pm/os-regen-merge.sh. The merge commit501902fb09had no conflict hunk.component.zod.tsandmigrations/registry.tsauto-merged, and both sides' added and removed lines are intact, compared line for line against each side's own diff. The os-regen driver kept this branch's side ofcontent/docs/references/ui/component.mdx, dropping main's object-metricaggregateandtrendrows (3f1bc816a2).check:generated --fixregenerated it in4fc15b7e67, and it now differs from main only by this PR'skeyboardNavigationrow. The PR's own contribution, its diff againstorigin/main, is the same 25 paths with the same added and removed lines as at5eadf35375.At
4fc15b7e67,dispatch-gates --commandsderived the same 128 commands from the same 25-path diff, and all 128 exited 0.--ranreports 128 derived, 128 run, 0 NOT-MEASURED. These also exited 0:check:objectui-pin-citations --verify-anchors(54 asserting citations matchab1879721; 7 content assertions verified)check:authorable-surface,check:migration-registry(registry.tscurrent: 360 semantic entries, with main'sui-object-metric-aggregate-trend-typed),check:generated(all 15 artifacts current),check:docsandcheck:liveness@objectstack/spectest (609 files, 18057 passed, 1 todo) and typecheckAt
5eadf35375,dispatch-gates --commandsderived 128 commands from the 25-path diff (the 127 below pluscheck:platform-checklist), and all 128 exited 0.--ranreports 128 derived, 128 run, 0 NOT-MEASURED. These also exited 0:check:objectui-pin-citations --verify-anchors(54 asserting citations matchab1879721; 7 content assertions verified)check:generatedandcheck:docs(component.mdxregenerated bycheck:generated --fix)check:liveness(aftergen:liveness-counts)@objectstack/spectest (608 files, 18017 passed, 1 todo) and typecheck@objectstack/lintlint-liveness-properties.test.ts(95 passed)b93b5fec00is the head after mergingorigin/mainf97660cdd6withscripts/pm/os-regen-merge.sh. The regeneratedregistry.tsis byte-identical to the merge's and keeps main's newelement-text-variant-heading-subheading-retiredentry.node scripts/pm/dispatch-gates.mjs --commandsderived 127 commands, the same set before and after the merge. All 127 exited 0 at this head, and the--ranreconciliation reports 127 derived, 127 run, 0 NOT-MEASURED, every exit recorded. On the pre-merge pass at87d7c51424,check:skill-examplesandcheck:dual-build-cjs-loadsfirst exited 3 (PREREQUISITE NOT MET: nodist/) and exited 0 afterpnpm build.check-adr-0087-registration --base origin/main,check-changeset-no-major --base origin/maincheck:console-sha,check:console-injection,check:sdui-lockstep,check-sdui-manifestcheck:objectui-pin-citations --verify-anchors(49 asserting citations matchab1879721; 7 content assertions verified)check:migration-registry,check:objectui-bump@objectstack/spec check:generated(aftercheck:generated --fixregeneratedcontent/docs/references/ui/view.mdx){major:4,minor:6,patch:5}literal) and its spec-injection check.pnpm buildexited 0.pnpm --filter @objectstack/spec test: 608 files, 18017 passed, 1 todo.pnpm --filter @objectstack/sdui-parser test: 218 passed.pnpm --filter @objectstack/spec typecheck: exit 0.eslint --no-inline-configwas run on the 13 changed TS files: 0 errors, 0 warnings. The population is**/*.{ts,…}(eslint.config.mjs:971), and the config enables no type-aware linting (:327-328), so the diff cannot move a judgment on an untouched file. Repo-widepnpm lintis left to CI.Environment: Node 22.22.0 sufficed. At this pin objectui locks
jsdom29.1.1 (engines ^22.13.0), so no newer Node was needed.Acceptance notes
useServerGrouping.tsanduseGroupedData.tsare byte-identical at89cad75d5570andab1879721595, so this hop does not reach them. Not measured in a browser at the old pin.object-kanban'sconditionalFormattingis stillz.unknown()in this spec, while objectui#11522 now declares only the{ condition, style }rule on that block. This is the same typing-by-reference move spec(ui): theComponentPropsMaprows still type renderer-read members asz.unknown()—navigationon object-map / object-gantt / object-tree andconditionalFormattingon object-kanban accept42— the family close-out after #21445 #21464 makes for its object-block members.action:button/action:iconrows inui/component.zod.tsstill do not declareoutcomeMessages, which objectui now forwards. Declaring it is a contract decision, recorded on the rows and not made here.conversions/registry.ts'PAGE_HEADER_COMPONENT_TYPESdocblock still callspage-headerobjectui's legacy alias. objectui retired that node key in this range (ad1785c1d). The conversion itself is unaffected.Generated by Claude Code