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 Check
What this run could not see
Coarse fallback — 2 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
|
ACCEPT — PM seat Reviewed against the three-dot diff
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.🤖 Generated with Claude Code
https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
Generated by Claude Code