Skip to content

Commit 9f24ecb

Browse files
committed
chore(deps): refresh the lockfile to @objectstack/* 17.2.0 — fs stops 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
1 parent 72ffc34 commit 9f24ecb

4 files changed

Lines changed: 139 additions & 148 deletions

File tree

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
'@object-ui/console': patch
3+
---
4+
5+
Refreshes the lockfile so every `@objectstack/*` package resolves at `17.2.0` — `spec`, `client`, `core`, `formula`, `lint` and `sdui-parser` move in lockstep (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.
6+
7+
**The docs-site and console builds stop pulling a Postgres connection-string parser toward the browser bundle.** `@objectstack/spec@17.1.0` imported `pg-connection-string` at the top level of `dist/index.mjs` with no `browser` export condition, so `apps/site`'s production build failed with `Module not found: Can't resolve 'fs'` on every route that reaches `@object-ui/components` from a client component — red on `main` since 2026-08-22 (objectui#5668). `17.2.0` ships the objectstack#11072 fix: `.`, `./data`, `./system`, `./kernel` and `./cloud` now carry `browser` conditions pointing at schema-free `dist/browser/**` bundles, and the site build is back to `Tasks: 29 successful, 29 total`.
8+
9+
The refresh is lockfile-only — every manifest already declared `^17.0.0`, which admits `17.2.0`, so no dependency range changed. No shipped source moves: the two in-repo adaptations are a drift-guard test and a CI gate, both forced by `17.2.0` retiring the spec's theme module (objectstack#10485) exactly as the objectui#5716 localization predicted — its `Theme`/`ThemeMode`/`ColorPalette` ALLOW entries in `check:spec-symbols` went stale and were deleted, and the parity test now pins the vacancy (the spec re-publishing a theme name is a loud collision) instead of a spec leg that no longer exists.

‎packages/types/src/__tests__/page-nav-misc-spec-parity.test.ts‎

Lines changed: 44 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,14 @@
1515
*
1616
* - **Derived** (`ActionParam`, `CreateExportJobRequest`,
1717
* `CreateExportJobResult`, `ImportRowResult`, `NavigationArea`,
18-
* `NavigationAreaSchema`, `Theme`): the spec now supplies the keys, so the
18+
* `NavigationAreaSchema`): the spec now supplies the keys, so the
1919
* risk is no longer drift but a divergence outliving its reason, or a local
2020
* key quietly reclaiming a name the spec owns. Asserted in both directions.
21+
* (`Theme` was in this list until `@objectstack/spec` 17.2.0 retired its
22+
* whole theme module — objectstack#10485 / PR objectstack#10695. Under the
23+
* objectui#5716 ruling, option A, this package now OWNS the vocabulary, so
24+
* `Theme`/`ThemeMode`/`ColorPalette` moved to the vacancy-pinned rows
25+
* below, the same road `GestureType`/`GestureConfig` travelled.)
2126
* - **Renamed** (`FileMetadata`, `GestureConfig`, `GestureType`,
2227
* `OfflineConfig`, `PageRegion`, `PageRegionSchema`, `ResponsiveConfig`,
2328
* `WidgetManifest`, `WidgetSource`): nine genuine coincidences — same word,
@@ -50,15 +55,6 @@ import type {
5055
ActionParamSchema as SpecActionParamSchema,
5156
I18nLabel as SpecI18nLabel,
5257
NavigationArea as SpecNavigationArea,
53-
// Re-pointed BY SIDE on the rc.6 bump (objectui#4167), not by name.
54-
// Up to rc.5 the spec published `Theme` (= `z.infer`) alongside `ThemeInput`
55-
// (= `z.input`); rc.6 retired every `…Input` alias and moved the bare name
56-
// onto the INPUT side, so `Theme` is now `z.input` and `ThemeParsed` is the
57-
// `z.infer` side. Following the old NAMES here would have swapped both pins
58-
// silently — which is why `ThemeInput` became `Theme` and `Theme` became
59-
// `ThemeParsed`, rather than either binding staying where it was written.
60-
Theme as SpecThemeInput,
61-
ThemeParsed as SpecThemeParsed,
6258
} from '@objectstack/spec/ui';
6359
import { NavigationAreaSchema } from '../zod/app.zod.js';
6460
import type { NavigationArea, NavigationItem } from '../app.js';
@@ -280,35 +276,24 @@ describe('NavigationArea derives from the spec', () => {
280276
});
281277

282278
// ─────────────────────────────────────────────────────────────────────────────
283-
// Theme — derived (re-export of the spec's AUTHORING shape)
279+
// Theme — owned locally since the spec's theme retirement (objectui#5716)
284280
// ─────────────────────────────────────────────────────────────────────────────
285281

286-
describe('Theme is the spec AUTHORING theme, not the parsed one', () => {
282+
describe('Theme is the AUTHORING theme document, owned by this package (objectui#5716)', () => {
283+
// Until `@objectstack/spec` 17.2.0 this block pinned mutual assignability
284+
// with the spec's `Theme` (its `z.input` side) and pinned `ThemeParsed.mode`
285+
// required — the two spec legs `theme.ts`'s header predicted would retire on
286+
// the pin refresh. 17.2.0 shipped the retirement (objectstack#10485 / PR
287+
// objectstack#10695): the spec no longer exports any theme name, so there is
288+
// nothing upstream to pin against and the shapes are documented, not pinned
289+
// (objectui#5716 ruling, option A — localize). The vacancy itself is pinned
290+
// in the renamed-dialects block below. What stays executable here is the
291+
// AUTHORING reading the engine depends on: `mode` optional, because
292+
// `ThemeEngine` receives stored/authored themes, not parsed ones.
287293
it('accepts a theme with no `mode` (the authoring side)', () => {
288294
const authored: Theme = { name: 'acme', label: 'Acme', colors: { primary: '#0af' } };
289295
expect(authored.mode).toBeUndefined();
290296

291-
// Mutual assignability with the spec's authoring type: this is what makes
292-
// the re-export a re-export rather than a coincidence.
293-
const asSpecInput: SpecThemeInput = authored;
294-
const back: Theme = asSpecInput;
295-
expect(back.name).toBe('acme');
296-
});
297-
298-
it('is NOT the spec parsed theme, whose `mode` is required', () => {
299-
// `.default('auto')` has already run in `z.infer`, so the parsed type would
300-
// make `mode` mandatory and every stored objectui theme unrepresentable.
301-
// If the spec ever drops that default the two collapse and this pin fails,
302-
// which is the moment to re-read the derivation comment in `theme.ts`.
303-
//
304-
// rc.6 spells the `z.infer` side `ThemeParsed`. The pin reads the same fact
305-
// it always did — following the NAME `Theme` here instead would have made
306-
// this assertion compare the authoring side against itself and go green on
307-
// nothing, which is exactly the swap the import comment warns about.
308-
type ModeOfParsed = undefined extends SpecThemeParsed['mode'] ? 'optional' : 'required';
309-
const parsedModeIs: ModeOfParsed = 'required';
310-
expect(parsedModeIs).toBe('required');
311-
312297
type ModeOfLocal = undefined extends Theme['mode'] ? 'optional' : 'required';
313298
const localModeIs: ModeOfLocal = 'optional';
314299
expect(localModeIs).toBe('optional');
@@ -694,6 +679,32 @@ describe('renamed local dialects do not collide with a spec export (objectui#307
694679
},
695680
);
696681

682+
/**
683+
* THE TRIPWIRE'S THIRD FIRING, on the `@objectstack/spec` 17.2.0 refresh
684+
* (objectui#5668). 17.2.0 retired the spec's whole theme module
685+
* (objectstack#10485 / PR objectstack#10695) while objectui retained the
686+
* theme SYSTEM, so under the objectui#5716 ruling (option A — localize)
687+
* `@object-ui/types` now OWNS `Theme`, `ThemeMode` and `ColorPalette`,
688+
* hand-written in `theme.ts` from the last-published 17.1.0 shapes.
689+
*
690+
* Unlike the Gesture pair these were never renamed — the local names were
691+
* derived from the spec until the retirement — but the pin they need now is
692+
* the same one: the names are exported from this package, so the spec
693+
* re-publishing any of them is a live collision, not a latent one.
694+
*/
695+
it.each([['Theme'], ['ThemeMode'], ['ColorPalette']])(
696+
'the spec no longer owns `%s`, localized under the objectui#5716 ruling',
697+
(localized) => {
698+
expect(
699+
names,
700+
`spec owns '${localized}' again — the objectstack#10485 theme retirement has ` +
701+
`been undone upstream while @object-ui/types exports that exact name ` +
702+
`(theme.ts, objectui#5716). This is a live collision: re-triage against ` +
703+
`objectstack#4115 — derive from the spec again, or arbitrate the name.`,
704+
).not.toContain(localized);
705+
},
706+
);
707+
697708
/**
698709
* `OfflineConfig` is the one the spec vacated that objectui did NOT reclaim,
699710
* and the reason is worth pinning rather than remembering: **the spec was

0 commit comments

Comments
 (0)