Uh oh!
There was an error while loading. Please reload this page.
Refresh the lockfile to @objectstack/* 17.2.0 — fs stops reaching the browser bundle - #5790
Merged
Merged
Conversation
… reaching the browser bundle Lockfile-only refresh, the residual action the objectui#5668 ruling named (Decision 1, option A — wait for upstream, then "an objectui lockfile refresh"): every manifest already declared ^17.0.0, which admits 17.2.0, so no dependency range changed. All six @objectstack packages move in lockstep (spec, client, core, formula, lint, sdui-parser) — a split resolution is what produced the dual-version spec graph that reddened check:spec-symbols in this repo's history — and no 17.1.0 resolution remains in pnpm-lock.yaml. Two incidental in-range transitive patch floats rode the non-frozen install: seroval 1.6.2 -> 1.6.3 (under @tanstack/router-core) and fast-uri 3.1.5 -> 3.1.6 (under ajv). The fix consumed: @objectstack/spec@17.1.0 imported pg-connection-string at the top level of dist/index.mjs with no browser export condition, so the apps/site production build failed with "Module not found: Can't resolve 'fs'" — red on main since 2026-08-22. 17.2.0 ships the objectstack#11072 browser conditions (., ./data, ./system, ./kernel, ./cloud -> dist/browser/**). Measured locally on this branch, same instrument as the 2026-08-22 bisect: before (17.1.0) Tasks: 28 successful, 29 total / turbo exit 1; after (17.2.0) Tasks: 29 successful, 29 total / turbo exit 0, uncached. Green-keeping, forced by the new build and nothing else — both halves the objectui#5716 localization planted deliberately as the refresh's tripwire ("both turn stale/red on the pin refresh, which is how that refresh announces itself here"): - check-spec-symbol-derivation: delete the Theme / ThemeMode / ColorPalette ALLOW entries, stale now that 17.2.0 ships the spec's theme-module retirement (objectstack#10485) and the names no longer collide — exactly the deletion their own comment prescribed ("The refresh PR deletes these three entries"). - page-nav-misc-spec-parity.test: retire the two spec-side theme legs (mutual assignability with the spec Theme, ThemeParsed.mode required) — nothing is left upstream to pin against — and pin the vacancy instead: Theme, ThemeMode and ColorPalette asserted ABSENT from the spec export set, the GestureType/GestureConfig road, so an upstream re-publish is a loud collision. The local authoring pin (mode optional) stays executable. The declared-BREAKING 17.2.0 entry (http_request_errors_total retired, objectstack#9834) is inert here: the name and its four spelling/registry variants match zero files. Fixes#5668 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EuPCi56cnGyykygi3z9w4m
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
…eta-spelling Green-keep forced by the refresh, caught by the pin itself: Test (shard 1/4) on 9f24ecb failed exactly the two count assertions in vite-objectstack-spec-dist.test.ts (declared.length 18, injectedSpecKeys 18), which is the anti-vacuity property doing its job on a real bump. The moved entry is measured, not assumed: diffing the published 17.1.0 exports map (18 keys, via the registry) against the installed 17.2.0 (19 keys) shows exactly one addition — ./meta-spelling, resolving to dist/meta-spelling/index.mjs under the import condition — and no removal. The alias table needs no code change: it is derived from the exports map at runtime, and the reconciliation case proves the new entry gets a real alias agreeing with Node's own resolver (25/25 pass, and the whole scripts/__tests__ directory is 1631/1631). Prose counts that state current facts move with the pin (the map has 19, mutation legs read 19-vs-18 / gains 19 keys, the fixture note reads 19-entry); the two dated historical records (the rc.6 measurement, the objectui#5388 incident narrative) stay as written. The exact-count assertion stays exact — no toBeGreaterThan. Refs #5668 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EuPCi56cnGyykygi3z9w4m
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
os-zhuang
marked this pull request as ready for review
August 23, 2026 09:55
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Aug 23, 2026
This was referenced Aug 23, 2026
This was referenced Aug 24, 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 freeto 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.
Fixes#5668
The residual action the ruling on that card named (Decision 1, comment 5381285629: option A — wait for upstream, then "an objectui lockfile refresh"), executed now that all six
@objectstack/*packages published at 17.2.0 in lockstep (2026-08-23T07:00:22–07:00:47Z) with the upstream browser-condition change (objectstack-ai/objectstack#11072) verified in the published tarball (comment 5384839941 on the card). Every ⛔ of the ruling is honored: no pin revert, no bundler shim, no docs-site rerouting.Build Docscheck on THIS PR is a path-filtered skip, not the evidenceThis diff touches nothing under
content/orapps/site/, soci.yml's step-level path filter reportsBuild Docsgreen in ~11 seconds having built nothing — the false-green recorded twice on the card (comments 5379267156, 5384090119). The acceptance evidence is the local before/after measurement below, taken with the same instrument as the 2026-08-22 bisect.main's own push run after the merge is the confirming CI reading — onpushthe job takes the early return and always builds.The measurement — observed, not predicted
Both legs run as
pnpm turbo run build --filter='@object-ui/site' --concurrency=2from this worktree, output redirected to file before any pipe, exit captured from the verify-lock wrapper that wraps turbo itself:72ffc3496, all six@objectstack/*at 17.1.0Tasks: 28 successful, 29 total·Failed: @object-ui/site#build·Error: Module not found: Can't resolve 'fs'atpg-connection-string@2.14.0/index.js:88Tasks: 29 successful, 29 total·Time: 4m16.247s·Cached: 0 cached— fully uncached1218dcc9a(current)Tasks: 29 successful, 29 total·Cached: 0 cached, 29 total— fully uncached again (fresh worktree, cold cache)Lockstep, proven by absence
pnpm-lock.yamlresolves exactly one version of each:spec,client,core,formula,lint,sdui-parser— all17.2.0. A grep for any remaining@objectstack/*@17.1.0returns zero. The specifier set is untouched: 37 ×^17.0.0, no manifest changed, and the rootpnpm.overridesstill carries nothing under@objectstack/*— the #5529 shape ("Lockfile refresh only — every manifest already declared^17.0.0").Declared, not hidden: the non-frozen install floated two in-range transitive patches that are outside the
@objectstacksubtree —seroval1.6.2→1.6.3 (under@tanstack/router-core) andfast-uri3.1.5→3.1.6 (underajv). Hand-reverting lockfile integrity hunks was the riskier move, so they ride along. CI installs--frozen-lockfile, which is why the refreshed lockfile is committed.Green-keeping — three edits, all forced by the new build
17.2.0 ships the spec's theme-module retirement (objectstack#10485). The #5716 localization (
packages/types/src/theme.ts, landed as PR #5752) predicted in its own header that on this refresh "both turn stale/red … which is how that refresh announces itself here":scripts/check-spec-symbol-derivation.mjs— theTheme/ThemeMode/ColorPaletteALLOW entries stopped colliding and went stale; deleted, exactly as their own comment prescribed ("The refresh PR deletes these three entries"). Gate now green:1297 files scanned against 4959 spec export names.packages/types/src/__tests__/page-nav-misc-spec-parity.test.ts— the two spec-side theme legs (mutual assignability with the specTheme;ThemeParsed.moderequired) had nothing left upstream to pin against; retired, and replaced with vacancy pins following the file's ownGestureType/GestureConfigroad:Theme,ThemeMode,ColorPaletteasserted absent from the spec export set, so an upstream re-publish is a loud collision. The local authoring pin (modeoptional) stays executable. 45/45 pass.scripts/__tests__/vite-objectstack-spec-dist.test.ts(commit1218dcc9a, caught byTest (shard 1/4)on9f24ecbb1— the pin doing its anti-vacuity job on a real bump) — the exports-map count pins move 18 → 19. The moved entry is measured, not assumed: diffing the published 17.1.0 exports map (18 keys, read from the registry) against the installed 17.2.0 (19 keys) shows exactly one addition,./meta-spelling(→dist/meta-spelling/index.mjsunder theimportcondition) and no removal. The alias table itself needed no change — it is derived from the exports map at runtime, and the reconciliation case proves the new entry gets a real alias agreeing with Node's own resolver (import.meta.resolve), not just a number that agrees: 25/25 in the file, 61 files / 1631 tests acrossscripts/__tests__/. The exact-count assertion stays exact — notoBeGreaterThan. Prose counts stating current facts moved with the pin; the two dated historical records (the rc.6 measurement, the objectui#5388 narrative) stay as written.PM assumption 5, partially falsified — reported, not silently absorbed. TS2305 did appear in
packages/typeson the refresh — but only in the drift-guard test's deliberate spec-side import, which is the announcement mechanism #5716 built, not a gap in what it localized. The runtime surface (theme.ts,packages/providers) compiles clean; full repo type-check is 81/81 on the refreshed lockfile. No contract call was made here: the ownership question was already ruled on #5716 (option A — localize), and the edits execute instructions written into the files by that ruling.Verification on HEAD
1218dcc9apnpm turbo run build --filter='@object-ui/site'— 29/29, fully uncached (table above). Earlier on9f24ecbb1:pnpm turbo run build44/44 uncached,pnpm turbo run type-check81/81 with zero TS errors (the shard-1 fix touches onlyscripts/, re-covered bytype-check:scriptsexit 0).1218dcc9a, each exit 0:check:spec-symbols,check:action-forward-parity,check:phantom-deps,check:esm-specifiers,check:node-esm-load,check:published-dist,check:eager-closure(verdict on9f24ecbb1:Console eager closure is 3225.1 KB gzipped across 52 of 508 chunks (budget: 3990.2 KB, headroom: 765.1 KB)— no re-baseline needed this round, unlike Pin @objectstack/* to 17.1.0 #5529),check:doc-types,check:doc-snippets,check:control-bytes, changeset presence, changeset no-major,type-check:scripts.@objectstack(the direct consumption radius of the moved packages), run from the repo root: 155 files / 2010 tests + 235 files / 3512 tests (1 skipped), all green — plus the fullscripts/__tests__/directory (61 files / 1631 tests) after the shard-1 fix. The full vitest farm and repo-wide lint are CI's runs; ESLint on the edited files is clean.http_request_errors_totalretired, objectstack#9834) re-verified inert: the name and its four spelling/registry variants match zero files in this repo.Out-of-scope notes: #5493 and #5494 (spawned by #5529) remain open and are untouched here;
Test (coverage)remains red onmainper #5436 and is not this PR's. None of the in-flight lanes' files (packages/plugin-timeline/src/ObjectTimeline.tsx,packages/app-shell/src/views/metadata-admin/**,packages/app-shell/src/__tests__/widget-dom-leak-sweep.test.tsx) is touched. The./sharedconcern raised on the card measures away — see issue comment 5385206676.🤖 Generated with Claude Code
https://claude.ai/code/session_01EuPCi56cnGyykygi3z9w4m
Generated by Claude Code