chore(console): bump the objectui pin to 53ded82bf7a4 — the shipped console lowers array analytics filters - #16788
Conversation
…4 pin bump Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012GKcPZbMoGq7WPzKLfRBTU
…the pin-bump artifacts Re-derived every asserting `.objectui-sha` citation at 53ded82bf7a4 rather than swapping the sha (#10274): 12 citations across 4 spec sources. Three cited objectui files changed over the range and their anchors MOVED; the rest were re-READ at the new pin rather than carried on byte-identity. Regenerated the two pin-derived records: scripts/sdui-manifest.record.json and packages/sdui-parser/objectui-lockstep.json. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012GKcPZbMoGq7WPzKLfRBTU
📓 Docs Drift CheckThis PR changes 2 package(s): 1 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
⛔ 1 release-owned page(s) also name something this change touched. These are read-only:
What this run could not see
Coarse fallback — 131 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 a6f54625292845073c8cc977b3e440e239754909 && git checkout a6f54625292845073c8cc977b3e440e239754909
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin a749dcc4b6f5a40cdffe7958ec576dda6bc2d01e 7be42d4145da38602bb4d063684666dc0e96b331 && git checkout -B drift-repro a749dcc4b6f5a40cdffe7958ec576dda6bc2d01e && git merge --no-ff 7be42d4145da38602bb4d063684666dc0e96b331
node scripts/docs-audit/affected-docs.mjs --json a749dcc4b6f5a40cdffe7958ec576dda6bc2d01e
|
…position The disposition claimed the diff was `.objectui-sha` plus the changeset and nothing else. It is not: the four packages/spec/src pin-citation sources and the two generated pin records are in it too. A changeset ships verbatim to the published CHANGELOG, so a published artifact must not misdescribe its own diff. The operative clause is unchanged and still true — no schema, no authorable metadata key, no protocol surface — and the disposition stays `not-required (no-migration-prescription)`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012GKcPZbMoGq7WPzKLfRBTU
|
Both required corrections are in, on 1. The permanent changeset ( 2. The PR body's Clause-② section. "No spec file is touched by this PR" is gone. It now says four are touched, comment-only, AST-identical base-vs-head under Verification of the follow-up commit:
Still draft, auto-merge unarmed — the flip is yours. Generated by Claude Code |
|
Generated-artifact sync done via What the sync produced: nothing changed, and that is a measurementBoth generated records regenerated to byte-identical output. After the merge I rebuilt the spec closure and re-ran the full chain;
This is a real regeneration, not a skipped one — both generators printed their writes ( The #16797 guard was applied
The guard still matters today: objectui tip has moved twice since this PR opened (now Nothing of main's was swallowedThe strongest available form of step 4.3: Gates re-run on the merged headRe-derived post-merge (8 paths vs the new merge base The same three are Still draft, auto-merge unarmed — the flip stays yours. Generated by Claude Code |
Fixes #16626
Bumps the objectui pin from
a472b07167a3to53ded82bf7a4so the console this repo ships carries objectui#7754's array-analytics lowering, unblocking #15442 / #15449.The pin moved through
scripts/bump-objectui.sh— never a hand edit of.objectui-shaor the generated console dist.Acceptance criterion — the card's, verbatim, with its control legs
The instrument is only trustworthy once the control legs answer. Taken in a non-shallow objectui clone (9702 commits;
git rev-parse --is-shallow-repository=false):git merge-base --is-ancestor 53ded82b "$(git show origin/main:.objectui-sha)"— against this branch's pin--is-ancestor NEWPIN~40 NEWPIN--is-ancestor NEWPIN~200 NEWPIN--is-ancestor NEWPIN origin/mainmain--is-ancestor 53ded82b a472b0716(the OLD pin)53ded82b, the criterion holds reflexively (a commit is its own ancestor). The load-bearing legs are CONTROL-C and the functional probe below, not the criterion's exit 0 on its own.Pre-bump readings agreed with triage to the commit:
--is-ancestor 53ded82b a472b0716→ 1,--is-ancestor a472b0716 53ded82b→ 0, distance 34.How far to bump — the measured judgement
Bumped to exactly
53ded82b(34 commits), not to tip.At measurement time tip was 376 commits away, not the 308 the card recorded — tip moved between filing and execution, which is itself a reason not to chase it. The 34-commit range already carries 2 declared-breaking entries and several ADR-0049 retirements; tip would add 342 more commits of unrelated console change onto a card whose stated purpose is one lowering fix — and, per the card's own headline, CI cannot see any of it.
Functional probe — because CI is blind to this seam
Green CI is not evidence here. Producer side runs the real lowering each pin performs (
translateFilterArrayat the old pin;lowerAnalyticsFilterForWire=translateFilterArray→isFilterAST→parseFilterASTat the new one). Wire side is the realAnalyticsQueryRequestSchemafrom the built@objectstack/spec.a472b0716(shipped today)53ded82bf(this PR){status:{$ne:'done'}}— control[{field,operator,value}]invalid_type@where['status','!=','done']invalid_type@where['and', rule, rule]invalid_type@where[]invalid_type@wherewhereat all)What each pin actually puts on the wire as
where:["status","!=","done"](still an array){"status":{"$ne":"done"}}["and",["status","!=","done"],["amount",">",100]]{"$and":[{"status":{"$ne":"done"}},{"amount":{"$gt":100}}]}[]wherekeyThe control ACCEPTs at both pins, so the probe is measuring the array arms and not a broken harness.
This coverage remains CI-invisible. Nothing added here renders the showcase
object-metrictiles through the pinned console; the probe above is a one-off measurement recorded in this PR, not a standing test. Recorded per triage's acceptance point 4.Clause-② tested and confirmed
no— no producer/consumer mismatchThe bumped console does not accept a shape the spec refuses. The fix runs the other way: it narrows what the console posts, lowering an authored
FilterArrayto theFilterConditionthe contract already declares.AnalyticsQueryRequestSchema.whereis unchanged onorigin/main(FilterConditionSchema.optional(),packages/spec/src/data/analytics.zod.ts— now line 410, the card's:299having drifted as the file grew) and its own describe text already prescribes exactly this: an authoredFilterArrayis lowered byparseFilterASTon the client before the wire; this field admits only the loweredFilterCondition.Four
packages/spec/srcfiles ARE touched — the pin-citation records below, and nothing else. They are comment-only, and measured so rather than asserted: the base (8b37a0973d) and head versions of all four compile to AST-identical output under TypeScript withremoveComments: true. String literals survive that pass, so no describe text, error-guidance string, tombstone or alias literal moved.analytics.zod.tsandfilter.zod.tshave zero diff againstorigin/main. Hence Clause-②no: the accept set did not widen, and the producer simply stopped emitting a shape that was always refused.The second half of a pin bump
scripts/sdui-manifest.record.jsonre-recorded at the new pin. The manifest content is byte-identical (sha256 49211fee7792…, 57 components) because both pins ship@object-ui17.6.0 — only the provenance moved.packages/sdui-parser/objectui-lockstep.jsonre-recorded.pnpm gen:sdui-lockstepreads whatever the objectui checkout has atHEAD, so a checkout sitting at tip recordedobjectui@d65b2baaagainst pin53ded82bf— and with 25 diagnostic codes. Re-recorded from an objectui worktree pinned at53ded82bf: 24 codes. The difference was real, so the checkout had to be pinned.check:react-declaration-paritysays "this repository contains no copy of it" whilesdui.manifest.jsonsits in the repo root. PassingMANIFEST="$PWD/sdui.manifest.json"turns it green — no objectui dump, no Playwright.Pin citations re-measured, not sha-swapped (#10274)
12 asserting citations across 4 spec sources. Three cited objectui files changed over the range, so their anchors were re-derived:
api-methods-batch-conformance.test.tsObjectGrid.tsxselection block3544-35593538-3553dataset.zod.tsdataset-format.tsformatMeasureDate184-197185-198dataset.zod.tsdataset-format.tsdatetime arm194195dataset.zod.tsdate-display.tsformatDate104-137131-164dataset.zod.tsdate-display.ts±7-day fallback90117The
ObjectGrid.tsxblock is byte-identical across the hop —git hash-objecton both spans returns6133933199230670e29d8c7f51c558d86a0af1d2— so it shifted six lines up and no substance moved. No read point died.Every remaining anchor sat in a file byte-identical over the range and was still re-READ at the new pin rather than carried on that identity (
containers.tsx×4,plugin-kanban×4, theplugin-dashboardmetric chain ×4,button.tsx×5,resolve-icon.ts×4,lazy-icon.tsx,useBulkExecutor.ts). All correct as written.Only the asserting spelling was updated; the 3 bare dated-history mentions of
a472b0716are left as the historical records they are.Gates
Derived from the actual changed set with
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackand reconciled with--ran.90 derived families run, 86 exit 0. The other four measured nothing:
check:dual-build-cjs-loadsPREREQUISITE NOT MET— reads built output; 86 packages have nodist/. Needs a whole-workspace build, which is CI's.check:type-check-debt--re-measure cannot run: 30 workspace deps unbuilt. The gate itself says a number from here would measure a different world.check:doc-formula-expressionsPREREQUISITE NOT MET—@objectstack/formulaunbuilt.check:react-declaration-parityMANIFEST; green once set (see #16715 note above).Exit 3 is this repo's explicit nothing was measured code, distinct from a finding's 1. Every exit code was captured before any pipe.
Declared narrowing: the three exit-3 families need a full workspace build and are left to CI.
Package-level:
pnpm --filter @objectstack/spec typecheck→ 0;pnpm --filter @objectstack/spec test→ 465 files / 12952 tests passed. Both throughscripts/pm/os-verify-lock.sh(VERDICT command-exit 0).All 127 changed lines under
packages/spec/srcare comment lines — verified mechanically, zero non-comment changed lines — so no type or runtime surface moves with them.验收备注
Triage's acceptance points, answered:
scripts/bump-objectui.sh, not folded into finding(spec):ElementDataSourceSchema.filter(page.zod.ts) still declares the MongoDB-styleFilterConditionSchema— the binding-level sibling of #14406 outsideComponentPropsMap, while objectui's composition seam lowers three shapes and its own pins author the tuple array #15442.docs/releases-maintenance.md"After the pin moves" procedure followed. Hit the check-react-blocks-declaration-parity.ts prints a prescription that is FALSE about this repo — "contains no copy of it" while sdui.manifest.json is checked in at the root; it made a dev declare a runnable gate NOT MEASURED #16715 false prescription and did not dump from objectui.ElementDataSourceSchema.filter(page.zod.ts) still declares the MongoDB-styleFilterConditionSchema— the binding-level sibling of #14406 outsideComponentPropsMap, while objectui's composition seam lowers three shapes and its own pins author the tuple array #15442 / finding(spec): fourobject-*filterdoors inComponentPropsMapdeclarez.unknown()— no orthography at all — so they still accept the MongoDB-style record ui#6206-B retired, silently; the card that closed the lastFilterConditionSchemadoor assumed they declared the array #15449 and replying on chore(console): bump the objectui pin past 53ded82b — the shipped console refuses every array analyticswhere, which blocks the ruled #15442/#15449 filter converge #16626. finding(spec):ElementDataSourceSchema.filter(page.zod.ts) still declares the MongoDB-styleFilterConditionSchema— the binding-level sibling of #14406 outsideComponentPropsMap, while objectui's composition seam lowers three shapes and its own pins author the tuple array #15442 and finding(spec): fourobject-*filterdoors inComponentPropsMapdeclarez.unknown()— no orthography at all — so they still accept the MongoDB-style record ui#6206-B retired, silently; the card that closed the lastFilterConditionSchemadoor assumed they declared the array #15449 are not touched here and stay open.bash scripts/pm/os-regen-merge.shsequence rather than a plain merge.Out of scope, noted not filed: the range's own changeset records that objectui merged 7 commits carrying no
.changeset/*.md; upstream's own gate for that is objectui#3387. Carrier: that upstream card.Authored by Claude Code in session
session_012GKcPZbMoGq7WPzKLfRBTU.Generated by Claude Code