chore(deps): raise the @objectstack/* pin from ^17.0.0-rc.6 to 17.0.0 GA - #4639
Draft
yinlianghui wants to merge 3 commits into
Draft
chore(deps): raise the @objectstack/* pin from ^17.0.0-rc.6 to 17.0.0 GA#4639yinlianghui wants to merge 3 commits into
yinlianghui wants to merge 3 commits into
Conversation
…0 (GA) Raise the dependency floor so the lockfile resolves @objectstack/spec@17.0.0 (the `latest` dist-tag) across the workspace, replacing 17.0.0-rc.6. @objectstack/client, /formula and /lint are raised in the same step: each exact-pins its own @objectstack/spec, so raising spec alone left a nested @objectstack/spec@17.0.0-rc.6 in the tree beside the workspace's 17.0.0. With all four raised the tree resolves a single 17.0.0. This commit is dependency ranges + lockfile only. The rc.6 -> GA delta turns out to be large and the adaptations it forces exceed this card's stated scope ceiling, so no green-keeping adaptations are folded in here; they are reported on the issue for the PM to sequence. Part of #4636 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RnQd8iMMUwXQEV1crFmQiQ
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
This was referenced Aug 14, 2026
Open
…ost-adaptation main) Re-points the GA pin bump onto main after the four pre-re-point adaptations landed (#4649 / #4650 / PR #4671 / PR #4901). package.json range lines merged cleanly (no conflicts); pnpm-lock.yaml was REGENERATED rather than hand-merged: main's lockfile was taken verbatim and `pnpm install` re-run with the raised ranges. The resulting lockfile diff vs main touches only the six @objectstack/* packages. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DbRmJD3iPhXjKr6vhd4Qkv
…nges the manifests now declare QUICK_REFERENCE.md's 'Current Release' block mirrors the manifest range lines this branch raises, and `scripts/__tests__/quick-reference-current-release-4143.test.ts` pins the two in both directions. Raising the ranges without this edit leaves the doc stating ^17.0.0-rc.6 for a tree that resolves 17.0.0 GA. This is the mechanical doc mirror of the range lines already in this branch's declared file surface, not a green-keeping adaptation to a GA behaviour change. The required literal is derived and named by the failing gate itself, so there is no judgement in it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DbRmJD3iPhXjKr6vhd4Qkv
This was referenced Aug 17, 2026
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
This was referenced Aug 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #4636
Raises the
@objectstack/*dependency floor from^17.0.0-rc.6to^17.0.0so thelockfile resolves the GA spec across the workspace.
Status: re-pointed onto post-adaptation
main(2026-08-17). The four pre-re-pointadaptations have all merged (#4649 via PR #4657, #4650 via PR #4660, PR #4671, PR #4901),
and this branch now carries them. The expected-red list this body used to hold is gone —
most of it is green. Three test files remain red, each now owned by its own card, and
they are why this still says
Part ofrather than a closing keyword.Still draft. Do not flip to ready and do not enable auto-merge — that is the PM's call
after review.
Re-point method
origin/mainwas merged into the branch. Thepackage.jsonrange lines merged with noconflicts; the only difference between this branch and
mainacross all 32 manifests isthe range lines themselves:
pnpm-lock.yamlwas regenerated, not hand-merged, per the re-point plan:main'slockfile was taken verbatim (
git checkout origin/main -- pnpm-lock.yaml) andpnpm installre-run against the raised ranges. The resulting lockfile diff versus
maintouches only thesix
@objectstack/*packages — every changed entry is one ofclient,core,formula,lint,sdui-parser,spec; 95 insertions, 95 deletions, symmetric.Lockfile resolution evidence
All 30 workspace importers of
@objectstack/specresolve GA, and every one of them by thesame specifier:
A single copy of the schema package in the tree — asserted three ways, because the whole
point of this card is that the
^range is not the pin:Why
client/formula/lintare in the same commitUnchanged from the original bump, and still the reason a spec-only bump does not satisfy this
card: each of them exact-pins its own
@objectstack/spec("17.0.0-rc.6"at rc.6,"17.0.0"at GA). Raisingspecalone was measured to produce two copies —17.0.0forthe workspace importers plus a nested
17.0.0-rc.6dragged in by those exact pins. Raisingall four is what yields the single GA resolution above.
Parity gate: the GA-side readings are armed
apps/console/src/__tests__/registry-inputs-spec-parity.test.ts— 62 tests, all passing.This is the gate that was reporting four uncovered blocks before PR #4901; the declarations it
merged were dormant on rc.6 and arm themselves on this pin. Counts, quoted from the run:
object-form,object-grid,object-master-detail-formandobject-metricare all present in the installed spec'sComponentPropsMap(0 of 4 on rc.6, 4 of 4 here), and each passes its own"publishes every top-level key its spec props schema declares" case. Measured against the
installed GA package, the four carry 108 top-level keys between them —
object-form39,object-grid37,object-master-detail-form14,object-metric18.the four GA blocks enter coverage exactly when the installed spec carries thempasses.It asserts an equality, not an implication, so it would fail if coverage disagreed with the
pin in either direction.
every GA-pending exemption arms exactly with the installed spec, all fifteen togetherpasses. All 15 GA-pending entries — the 10
object-griddeprecated-alias carve-outs ruled on[Decision] spec 17.0.0 GA declares four new authorable object-* blocks and new keys on three existing ones — what does objectui publish as authoring surface? #4648 and the 5 honoured-but-unpublished keys tracked by page:header / page:tabs / record:details: five keys spec 17.0.0 GA declares and the renderers already honour are never published as inputs #4668 — are now live rather than
dormant, which is exactly the state change this pin was supposed to cause.
the four GA blocks resolve their ruled split — declared vs carved outpasses.Also green here and previously red:
check:spec-symbols(was exit 1 with 6 collisions, landedby PR #4660), the
packages/typesp1-spec-alignmentTS2322 error (cleared by PR #4657), andthe
plugin-form/plugin-detailsectionFields, recordHighlights and recordDetails paritytests.
The accounting gap from the first farm run — identified
The original run recorded 9 failing files / 17 failing tests in the full farm but reproduced
only 8 files / 15 tests when the 193 spec-importing test files were re-run in isolation. One
file and two tests were never identified. They are found, and they were not flakes.
The file is
scripts/__tests__/quick-reference-current-release-4143.test.ts. It imports nospec — it reads
QUICK_REFERENCE.mdand the workspace manifests — which is precisely why are-run scoped to spec-importing files could not reproduce it.
The two tests, and they had two different causes:
states the one version every workspace package carries— pre-existing red onmain,nothing to do with this bump. At the branch point
5bf5d2cb6, QUICK_REFERENCE.md said17.4.0while every manifest carried17.5.0. This is main is red: QUICK_REFERENCE.md "Current Release" still says 17.4.0 after the 17.5.0 release commit — shard-3 gate fails on main and every open PR #4642, filed the same day, whichstates the same two assertions and explicitly names this PR as inheriting the red base:
"PRs fix(app-shell): restore the avatar menu "My Workspaces" entry #4638 / chore(deps): raise the @objectstack/* pin from ^17.0.0-rc.6 to 17.0.0 GA #4639 / test(app-shell): pin relation-field header-action predicates on the console record page #4641 show the same shard red on the same base." PR docs: bump QUICK_REFERENCE.md Current Release to 17.5.0 #4643 has since
landed the correction on
main, so this assertion is green here.contains only version literals this test derives from a manifest— caused by thisbump, and still owed at re-point time. See the next section.
The one edit in this PR beyond ranges and the lockfile
QUICK_REFERENCE.md's "Current Release" block states the@objectstack/specand@objectstack/clientranges, and that file's own header says every value in it is pinned tothe manifest that owns it. Raising the manifests without this edit left the doc asserting
^17.0.0-rc.6for a tree that resolves17.0.0:Two lines changed,
^17.0.0-rc.6to^17.0.0on the Spec and Client rows. Calling it outexplicitly because it is outside "range lines plus lockfile": it is the doc mirror of the
range lines this branch already owns, the required literal is derived and named by the gate
itself so there is no judgement in it, and the file is held by no other in-flight card. It is
not a green-keeping adaptation to a GA behaviour change — those are all left alone below.
Red before / green after: the file went from 1 failing test to
Test Files 1 passed, Tests 8 passed.Worth knowing for whoever reads that gate next: two of its three range-row assertions compare
with
toContain, and'^17.0.0-rc.6'.includes('^17.0.0')istrue, so those two passedagainst the wrong doc. Only the catch-all sweep caught it. Filed as #4913.
What is still red — three files, none of them fixed here
All three are genuine rc.6-to-GA deltas that the four merged adaptations do not cover. Per
this card's scope they are stop-and-report, so each is filed as its own unassigned card rather
than folded in.
packages/components/src/__tests__/record-picker-inputs-spec-parity.test.tspublishes 'filter', which the renderer has read all alongpackages/components/src/__tests__/text-input-inputs-spec-parity.test.tspublishes 'defaultValue', which the renderer has read all alongpackages/fields/src/widgets/__tests__/FilterConditionField.operators.test.tssome builder operator emits every spec $-token#4910 — GA made the element props schemas strict. An undeclared key used to be stripped
in silence and now fails with
unrecognized_keys. Both tests carry a deliberate contrastprobe asserting the old strip-mode behaviour, and only that probe fails; every subject
assertion in both tests passes, so
filteranddefaultValueare correctly published andreachable. The spec's own diagnostic explains the change, and it is the change working as
designed:
#4911 — GA adds
$likeand$iliketoFieldOperatorsSchema, and no builder operator inFilterConditionFieldcan author either, so the reachability gate from #2942 fires. Same shapeas the
$icontainsgap in #4023, with a real UX decision attached (who writes the wildcards),which is why it is not a mechanical addition.
Verification
Everything below was run at
47c7cc3, this branch's head, working tree clean.turbo run build --filter=!@object-ui/site --concurrency=2turbo run type-check --concurrency=2vitest run --maxWorkers=2, 8 shardscheck-changeset-presencecheck-changeset-fixedcheck-changeset-no-majorcheck-phantom-dependenciescheck-control-bytescheck-spec-symbol-derivationcheck-package-self-importcheck-doc-component-typescheck-lint-coveragecheck-type-check-coveragecheck-action-forward-paritycheck-i18n-call-site-keyscheck-i18n-en-driftcheck-i18n-dead-keyscheck-skills-pathscheck-published-dist-toolingThe farm was run as 8 shards rather than one pass so each run fits a bounded window and the
shared heavy-verify lock is released between them; the shard-level totals sum to the figures
above. Per-shard: shards 2, 3, 7, 8 fully green; shard 1 the record-picker file; shard 4 the
text-input file; shard 5 the QUICK_REFERENCE file (now fixed, re-run green); shard 6 the
filter-operators file.
Progress against the original run: 9 files / 17 tests red, down to 3 files / 3 tests.
Changeset
Unchanged from the original bump and still valid at this head —
patchacross the 20 publishedpackages whose
dependenciesorpeerDependenciesranges change. All three changeset gatespass.
check-changeset-presencereports none is strictly owed, since the gate keys onsrc/and no
src/changed here, but the published dependency range of 20 released packages doeschange, which a consumer sees on install, so it is declared rather than skipped.
Note on the
skip-changesetlabel currently on this PR: I did not apply it and have notremoved it. That label is inert — no workflow or script in this repo reads it, and this repo's
own
scripts/__tests__/ci-cd-pipeline-doc.test.tsrecords that "neither the workflow nor thelabel was ever real". Recorded as #4912.
Generated by Claude Code