chore(console): bump the objectui pin 00d3f09c500c to a472b07167a3 — the shipped console now carries objectui#7477's ListView data.provider: 'object' fold - #15554
Conversation
Moves `.objectui-sha` past objectui#7477's `normalizeListViewSchema` fold, so
the shipped Console SPA folds `data={{ provider: 'object', object }}` onto
`objectName` and reads the author's view kind from `specType` / `type`. That
fold is the consumer half #14791 step 3 depends on: with the old pin, a page
written in the canonical spelling validates green and renders an empty list.
The range walks completely (the objectui checkout was deepened first, so the
FROM-pin object is present and the #14178 degraded tip-only `patch` shape
cannot apply): 29 non-merge commits, 18 changesets added, 15 releasing, 4
declared-breaking, level `minor` derived from objectui's own declarations.
The ADR-0087 disposition on the generated changeset judges each of the four
declared-breaking entries against `packages/spec`'s authorable surface one at
a time; none of them names a key this repo declares.
`packages/sdui-parser/objectui-lockstep.json` is re-recorded at the new pin
(byte-identical grammar region, 24 diagnostic codes, no port owed).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
`scripts/gen-sdui-manifest-node.mjs --objectui-version 17.6.0` re-enumerated the published registry the new pin ships and re-recorded the provenance: `check-sdui-manifest` refuses a record whose `objectuiSha` lags `.objectui-sha`. The manifest itself does not move — 57 components, sha256 49211fee7792…, byte-identical, because both pins ship @object-ui 17.6.0. Only the pin the record was taken against changes. The browser route was run too (`pnpm sdui:manifest`): 57 public blocks dumped from objectui@a472b07167a3 through a real chromium, and ADR-0082 D4's declaration-parity ratchet reports no new divergence against the accepted baseline. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
📓 Docs Drift CheckThis PR changes 2 package(s): ⛔ 1 release-owned page(s) name something this change touched. These are read-only:
What this run could not see
Coarse fallback — 130 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 e44fadd6ce5d392ba5d153aac4b4a0460afc7d66 && git checkout e44fadd6ce5d392ba5d153aac4b4a0460afc7d66
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin ba426b0f091b8d5901acf10bb8e649b514349f49 3db0527b7c6b0f54d89f62ef0d3e08be7158792f && git checkout -B drift-repro ba426b0f091b8d5901acf10bb8e649b514349f49 && git merge --no-ff 3db0527b7c6b0f54d89f62ef0d3e08be7158792f
node scripts/docs-audit/affected-docs.mjs --json ba426b0f091b8d5901acf10bb8e649b514349f49
|
|
ACCEPT — PM seat Reviewed against the three-dot diff
Generated by Claude Code |
|
REWORK — PM seat This PR has been armed but red since 21:08Z, and one of its two reds is its own:
The derived family for a Dispatching the rework on the same branch Generated by Claude Code |
…15422) The pin bump moved `.objectui-sha` to `a472b07167a39e55491109e864bb5a54027dcfbd` while eight read-point records in `packages/spec/src` still asserted `00d3f09c5`. Per `check:objectui-pin-citations`' own instruction, each record was RE-MEASURED at the new pin rather than sha-replaced: every objectui `file:line` anchor was re-READ at `a472b0716` and the anchors and the sha were updated together. No read point died. Three anchors were found WRONG SINCE THEY WERE WRITTEN -- the exact #10274 class the gate exists to surface, and invisible to a line-number refresh because all three sit in files that are byte-identical across the hop: - `ObjectGrid.tsx:3790-3805` named `runBulkActionAggregate`, not the selection gating the record cites. The real block was `3541-3556` at `00d3f09c5` and is `3544-3559` here. - `button.tsx:70-87` / `:88-92` for the registration's input list and `defaultProps`: really `:85-102` / `:103-107`. - `plugin-dashboard/src/index.tsx:161` for the `object-metric` icon input: a docblock sentence in the registry shell, not the input. Really `:204`, which the sibling record in `component.zod.ts` already had right. Comments only -- no schema, no behaviour, no assertion changed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
|
rework-report — issue #15422, PR #15554, head The PR's own red is fixed. CI red on the first head: exit 1. The gate's own instruction, followed rather than routed around: the sha is not the record, the objectui Per-citation table
Zero read points died, and none moved because of the pin. Only one anchor file changed across the hop at all: Three anchors were WRONG since they were writtenThis is the #10274 class the gate's header names, and it is why a sha-only rewrite is forbidden. All three sit in files that did not change, so a line-number refresh could never have surfaced them:
Each correction is recorded in the comment beside it, stating that the anchor was wrong when written rather than shifted. VerificationExit codes captured before any pipe; verdict lines quoted from the gates themselves.
Both the pin gate and 3 NOT MEASURED, each by its own prerequisite text — none is a finding:
Six further gates first returned a prerequisite failure for the same reason and were re-run after The derivation does not name this gate. Scope of the reworkCitation comments only, in three files, Generated by Claude Code |
|
REWORK VERIFIED — PM seat Reviewed against the three-dot diff Dev's verification quoted: red reproduced on CI on Generated by Claude Code |
Fixes #15422
Moves the Console pin
.objectui-shafrom00d3f09c500ctoa472b07167a3(objectuiorigin/maintip as read at bump time, verified reachable from main), so the prebuilt Console SPA this platform ships carries objectui#7477'snormalizeListViewSchemafold. That fold is the consumer half #14791 step 3 depends on: while the pin sat at00d3f09c, a page written in the canonicaldata={{ provider: 'object', object }}spelling validated green and rendered an empty list — landing step 3 against it would have shipped #14791's rejected option C by accident.Old pin to new pin
.objectui-sha00d3f09c500c4a45b5f27aca8af80349412faaf1a472b07167a39e55491109e864bb5a54027dcfbdThe card's one-line criterion, both ends, with its control
Run in an objectui checkout, exit code captured before any pipe:
git fetch --unshallowed before any of this: the container's objectui clone is 50 commits deep,git cat-file -e 00d3f09c…^{commit}failed there, and every reading below (criterion, range, changeset level) would otherwise have been taken against a truncated history.git merge-base --is-ancestor a472b07167a3 origin/mainexits 0 (self-proving: an exit 0 needs a complete path and cannot be manufactured by a missing object).The commit range and the derived changeset level
The FROM-pin object was confirmed present before the changeset was trusted, so this is a real range read and not the #14178 / #14167 degraded tip-only
patch:Level
minor, derived — not assumed. It is the highest level objectui itself declared over the range (.changeset/*.mdfiles added between the two pins), not a default. The 4 declared-breaking entries carry an ADR-0087 disposition that judges each one againstpackages/spec's authorable surface individually; none names a key this repo declares (display_field/description_field/lookup_filters0 occurrences underpackages/spec/src; the Kanban trio 0;packages/spec/srcimports from@object-ui/*0 times; the retired responsive vocabulary already carries its own ledger entries here from #11027).The fold itself is entry 7 of the list:
The console actually rebuilt at the new pin (the Console Pin Gate's own question, run locally)
bash scripts/build-console.shunder the shared verify lock —os-verify-lock: VERDICT command-exit 0 · held the lock 552s (9m12s):packages/console/dist/.objectui-shastampsa472b07167a3. That is whatci.yml's Console Pin Gate (#4290) asks — the pinned SHA builds — reproduced locally rather than waited for. (check:prerelease-pinsis not this gate:prerelease-pin-watch.yml's path filter isscripts/check-prerelease-pin-watch.mjs, its own workflow andpnpm-workspace.yaml, none of which this diff touches. It is in the derived list below anyway and runs green.)Proving the unblock, not just the pin — the option-C trap #14791 names
Two independent legs, because "objectui#7477 is merged" is not the reading that decides whether a page renders.
Leg 1 — the fold is in the SHIPPED bundle bytes, not just in objectui
main. The rebuilt SPA's@object-ui/corechunk carries the fold verbatim (minified):That is⚠️ A control was needed to get here: the first probe spelled the comparison
normalizeListViewSchemawritingobjectNamefromdata.objectand the author's kind fromspecType/type. Located by first finding the chunk that carriesdensityMode(the fold's own function) and then asking that chunk for the provider comparison:framework-CwMzt67l.jshasdensityMode=3,provider===object=2,specType=1; the four other chunks carryingdensityModehave zero of both.provider==="object"and returned 0 hits on the fold AND 0 on the pre-existingprovider==='value'control — a blind probe, not an absence. The minifier emits backticks.Leg 2 — a real render of the canonical spelling, at the pinned tree. objectui's own
packages/plugin-list/src/__tests__/ListView.objectProviderBinding-7477.test.tsxmounts the REAL react page tier (kind:'react'compile, scope injection, the registeredlist-view) withdata={{ provider: 'object', object }}and asserts the rows arrive — the exact shape #14791 step 3 would move the four in-repo sites onto. Run in the build worktree checked out at the pin:objectName=, which keeps working; renaming them is #14791 step 3's job, which this pin unblocks rather than performs.The pin bump's second half — both provenance records
pnpm sdui:manifest(browser route, ADR-0082 D4): dev server + chromium,✓ wrote 57 public blocks, ratchet✓ no new DECLARATION divergence vs accepted baseline. The container's chromium is build 1194 and the pin's playwright 1.62.1 wants 1234, so the documented per-agent symlink tree (docs/releases-maintenance.md) was used for that one invocation — nothing under/opt/pw-browserswas touched.node scripts/gen-sdui-manifest-node.mjs --objectui-version 17.6.0re-recordedscripts/sdui-manifest.record.jsonat pina472b07167a3. The manifest itself does not move: 57 components, sha25649211fee7792…, byte-identical, because both pins ship@object-ui17.6.0.sdui.manifest.jsontherefore shows no diff — that is the correct outcome, not a skipped step.pnpm gen:sdui-lockstepre-recordedpackages/sdui-parser/objectui-lockstep.jsonagainst the new pin.OBJECTUI_ROOTpointed at the build worktree checked out AT THE PIN:--updaterecords the checkout'sHEAD, and the sibling checkout's HEAD was a different revision — the first run recordedobjectui@ac8d5233d077, which is not what ships. Re-run at the pin it recordsobjectui@a472b07167a3, same grammar blob0131f27cf86d, same 24 diagnostic codes ⇒ no port is owed.Verification — every command, exit code captured before any pipe
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived the families from the real change set (4 paths, three-dot semantics, no hand-made diff list), on the final commit6dc36141e. 58 commands run (53 derived +check-adr-0087-registration --base origin/main,check-changeset-fixed— its roster lives under.changeset, which one of my paths is in —check-empty-changeset --base origin/main,check:pm-dispatch-gates,check:objectui-bump):55 green. The load-bearing verdict lines:
1 NOT MEASURED, recorded as such and never as a pass:
pnpm check:dual-build-cjs-loadsexits 3 —PREREQUISITE NOT MET — this gate reads built output, and some package has no dist/ … ⛔ This is NOT a pass: nothing was measured.It needs a fullpnpm build; CI has one.2 that went red on the build cache, not on this diff — measured in both directions.
scripts/build-console.shmaterialises the objectui tree at the pin into.cache/objectui-SHA/(gitignored), and two repo-wide corpus gates walk it:.cache/objectui-a472b07167a3/presentgit worktree removeof itcheck-comment-mask-corpus.cache/objectui-…/apps/console/src/pages/DocsIndex.tsxover-masks 1517 bytescheck:agent-test-spelling.cache/objectui-…/AGENTS.md:188Both findings are objectui's files, reached only because a pin bump necessarily creates that worktree; CI's lint job never builds the console, so
.cache/is not there. Filed separately rather than ridden on this PR.pnpm lint— a PROVEN narrowing, not a skip. Three readings, all three needed:eslint.config.mjsis extension-scoped to**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}(:971,:1015,:1054,:1103,:1172,:1212).--format json:pnpm exec eslint --no-inline-config --format jsonover all four changed paths reports 4 files, 0 errors, 0 lint results — each one"File ignored because no matching configuration was supplied."This diff contains zero lintable files.:326-329— "this repo runs oneeslint.config.mjs, which never enables type-aware linting (noparserOptions.project, no typed@typescript-eslintrules) for ANY file" — so nothing in this diff can move the verdict on a file it does not contain.Scope
.objectui-sha, the derived changeset, and the two provenance records the pin gates require. Nopackages/specschema, no authorable metadata key, no protocol surface, and no author-site rename (that is #14791 step 3).packages/console/CHANGELOG.mdand itspackage.jsonversion rows are untouched by hand — changesets regenerate them, and the bot's release PR #15334 owns that surface.Rework — the eight pin citations, re-measured at
a472b0716CI red on the first head:
Type Check · source gates→ "Check spec pin citations still name the pin this repo builds against" (pnpm --filter @objectstack/spec check:objectui-pin-citations, run 33919484147, job 101174258347). Reproduced on branch head6dc36141ebefore touching anything:exit 1.
The gate's own instruction, followed rather than routed around: the sha is not the record, the objectui
file:lineanchors are. Every anchor in all eight records was re-READ ata472b0716(git -C ../objectui show a472b0716:PATH), and anchors and sha were updated together.Per-citation table
00d3f09c5a472b0716data/api-methods-batch-conformance.test.ts:64plugin-grid/src/ObjectGrid.tsx:3790-3805:3544-3559plugin-grid/src/hooks/useBulkExecutor.ts:284-289:284-289label = 'bulk delete'ui/component.test.ts:281(accordionitems[].icon)components/src/renderers/layout/containers.tsx:919-925,:966ui/component.test.ts:370(tabsitems[].icon)containers.tsx:730-736,:789ui/component.test.ts:2783(button + metric)form/button.tsx:43,:72,:74;action/resolve-icon.ts:129-132,:117-120,:100-105,:90-92:2856)plugin-dashboard/src/index.tsx:161:204ui/component.zod.ts:677(tabs icon)containers.tsx:730-736,:789ui/component.zod.ts:1736(accordion icon)containers.tsx:919-925,:966ui/component.zod.ts:1943(button icon)button.tsx:43,:72,:74;resolve-icon.ts:129-132,:117-120,:100-105,:90-92;lib/lazy-icon.tsx:66-92button.tsx:70-87(inputs),:88-92(defaultProps):85-102,:103-107ui/component.zod.ts:2578(metric tile icon)plugin-dashboard/src/index.tsx:194,:204;ObjectMetricWidget.tsx:142,:474;MetricWidget.tsx:312-321,:373-382;MetricCard.tsx:83;lazy-icon.tsx:66-80Zero read points died, and none moved because of the pin. Only one anchor file changed across the hop at all:
ObjectGrid.tsx(7 insertions, 4 deletions, all at:1204-1213, whereobjectNamemoved onto the sharedresolveRecordSourceObjectName). Every other anchor file —useBulkExecutor.ts,containers.tsx,resolve-icon.ts,button.tsx,lazy-icon.tsx,plugin-dashboard/src/index.tsx,ObjectMetricWidget.tsx,MetricWidget.tsx,MetricCard.tsx— is byte-identical at00d3f09c5anda472b0716, verified bygit hash-object. Each was still re-READ rather than carried on that identity.Three anchors were WRONG since they were written
This is the #10274 class the gate's header names, and it is why a sha-only rewrite is forbidden. All three sit in files that did not change, so a line-number refresh could never have surfaced them:
ObjectGrid.tsx:3790-3805namedrunBulkActionAggregateand says nothing about selection. The block the record means —effectiveBulkActions/hasBulkActions/ theselectionModeladder, the code that actually backs "auto-enables multi-select only when a bulk action exists" — was3541-3556at00d3f09c5and is3544-3559ata472b0716. Both spans hash to6133933199230670e29d8c7f51c558d86a0af1d2, identical to the67dadd602:3436-3451the record cites as its predecessor, which is how the correct block was identified. Arithmetic on the wrong anchor would have produced a fresh-looking3793-3808still describing the wrong function.button.tsx:70-87/:88-92for the registration's input list anddefaultProps.ComponentRegistry.register('button', …)starts at:81; theinputsarray is:85-102(label,variant,size,className— the record's claim holds, and it still publishes noicon) anddefaultPropsis:103-107.plugin-dashboard/src/index.tsx:161in the metric test. That line is a sentence inside the registry shell's docblock. Theobject-metricregistration begins at:194and itsiconinput is at:204— which the sibling record incomponent.zod.ts:2586already had right, so the two halves of the same record disagreed. (:132is a same-named input on themetric-cardregistration — the wrong re-anchor the zod record'sEach correction is recorded in the comment beside it, stating that the anchor was wrong when written rather than shifted.
Verification
Exit codes captured before any pipe; verdict lines quoted from the gates themselves.
check:objectui-pin-citationsbefore (head6dc36141e)✗ 8 spec source(s) assert an objectui pin this repo does NOT build against.check:objectui-pin-citationsafter (head3db0527b7)✅ 8 asserting objectui pin citation(s) match .objectui-sha (a472b0716), 16 historical citation(s) recorded and not checked, across 1178 spec source(s).vitest runon both touched test filesTest Files 2 passed (2)·Tests 251 passed (251)pnpm --filter @objectstack/spec typecheckcheck:test-typecheck: OK — @objectstack/spec's test layer compiles under packages/spec/tsconfig.test.json; 54 file(s) / 261 error(s) / 145 pinned signature(s)(unchanged; the test layer IS compiled, so the two edited test files are covered)pnpm check:nul-bytescheck-nul-bytes: OK (scanned 7561 text file(s) … no raw ASCII control bytes)dispatch-gates --changed --commandsfamily (84 commands)Both the pin gate and
check:nul-byteswere re-run on the final commit3db0527b7, after the commit, not before it.3 NOT MEASURED, each by its own prerequisite text — none is a finding:
pnpm --filter @objectstack/spec check:react-declaration-parity— exit 1, but its own text isMANIFEST is not set — there is no registry side to compare against. This gate did NOT run.It needs a browser manifest dump (pnpm sdui:manifest), the on-demand gate this PR'sscripts/sdui-manifest.record.jsonalready records.pnpm check:dual-build-cjs-loads— exit 3,PREREQUISITE NOT MET — this gate reads built output, and some package has no dist/(103 packages). Needs a whole-monorepopnpm build; CI does it.pnpm check:type-check-debt— exit 3,--re-measure cannot run: 33 workspace dependenc(ies) … have no built type entry point on disk. Same reason.Six further gates first returned a prerequisite failure for the same reason and were re-run after
turbo run build --filter=@objectstack/spec --filter=@objectstack/formula --filter=@objectstack/lint; all six then passed:check:api-surface,check:browser-reachable-entries,check:dual-source-exports,check:entry-nameability,check:exported-any,check:doc-formula-expressions.The derivation does not name this gate.
node scripts/pm/dispatch-gates.mjs --changed --commands --repo objectstack-ai/objectstackon this change set emits 84 commands andcheck:objectui-pin-citationsis not among them — which is how the red reached CI in the first place. It was run by hand as the first item above. The derivation gap itself is the PM's finding, filed separately, not this PR's scope.Scope of the rework
Citation comments only, in three files,
+87 / -70. No schema, no.describe(), no assertion, and no authorable key changed —git diffon the rework commit touches nothing but comment bodies. No test assertion depends on any of the corrected anchors: the assertions aresafeParseaccept/reject pins and.descriptionsubstring checks, none of which reads a line number.🤖 Generated with Claude Code
https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
Generated by Claude Code
Generated by Claude Code