Skip to content

Commit ce08d55

Browse files
os-zhuangclaude
andauthored
chore(deps): upgrade @objectstack/* to 17.0.0-rc.0 (#2950)
Move spec/client/formula/lint from ^16.x to ^17.0.0-rc.0. Two groups of v17 changes reach this repo, pulling in opposite directions: the spec pruned surface objectui re-exported, and adopted surface objectui carried locally. Pruned — dead Theme config (objectstack#3494). ThemeSchema dropped `spacing`, `breakpoints`, `logo`, `density`, `wcagContrast`, `rtl`, `touchTarget` and `keyboardNavigation`: authorable but never enforced, so authoring them was already a silent no-op. @object-ui/types re-exported those sub-schemas *by reference* (#2231), so they could not survive the prune without becoming hand-written mirrors — the second de-facto contract AGENTS.md #0.1 forbids. Dropped: the `Spacing`/`Breakpoints`/`DensityMode`/`WcagContrastLevel`/ `ThemeLogo` types, the deprecated `SpacingScale` alias, the matching schemas and `*SchemaType` helpers, and `Theme.spacing`/`.breakpoints`/`.logo`. `mergeThemes` no longer merges the three dropped keys. `generateThemeVars` is untouched — it never emitted them, which is why the audit called them dead. The one real consumer was ThemeProvider setting the favicon from `theme.logo.favicon`; that path is gone, since v17 strips the key at parse and it can never arrive again. The live favicon is unaffected: it comes from operator branding (`getFaviconUrl()`) in the console's index.html, main.tsx, and on route change. List density is also untouched — `useDensityMode` and `rowHeightToDensityMode` use @object-ui/core's own local `DensityMode`. Adopted — ListColumn (objectui#2231). `ListColumnSchema` used to extend the spec with two fields, each tagged "promote upstream rather than grow this extension"; v17 did exactly that. `summary` is now the spec's union([ColumnSummarySchema, ColumnSummaryConfigSchema]) and `prefix` is the spec's ColumnPrefixSchema, so the extension collapses to a plain re-export. `prefix.type` now defaults to 'text' on parse instead of staying undefined. Node 22 is the floor. Every @objectstack package declares engines.node >=22 (objectstack#3825; Node 20 hit EOL 2026-04-30), while this repo claimed >=20 and ran CI on Node 20.x — promising and validating a runtime its own core dependency does not support. engines.node is now >=22, CI runs Node 22.x, and the CI/deployment docs follow. The parity test keeps its teeth: the deleted ThemeLogo assertions are replaced by a guard that the pruned keys stay pruned and that objectui does not re-add local mirrors, and the ListColumn summary check now asserts the shared aggregation vocabulary behaviorally (the spec builds that arm through lazySchema, whose Proxy defeats the old identity check). Verified: pnpm type-check 76/76 green; pnpm test 672/672 files, 7956 tests, 0 failures. Co-authored-by: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com>
1 parent c4db402 commit ce08d55

40 files changed

Lines changed: 292 additions & 374 deletions

.changeset/objectstack-17-rc0.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
---
2+
"@object-ui/types": minor
3+
"@object-ui/core": minor
4+
"@object-ui/react": minor
5+
---
6+
7+
chore(deps): upgrade `@objectstack/*` to 17.0.0-rc.0, and let the spec take back what it now owns
8+
9+
`spec` / `client` / `formula` / `lint` move from `^16.x` to `^17.0.0-rc.0`. Two
10+
groups of v17 changes reach this repo, and they pull in opposite directions —
11+
the spec pruned surface objectui re-exported, and adopted surface objectui had
12+
been carrying locally.
13+
14+
**The spec pruned dead Theme config (objectstack#3494), so the re-exports went
15+
with it.** `ThemeSchema` dropped `spacing`, `breakpoints`, `logo`, `density`,
16+
`wcagContrast`, `rtl`, `touchTarget` and `keyboardNavigation` — authorable but
17+
never enforced, so authoring them was already a silent no-op. `@object-ui/types`
18+
re-exported those sub-schemas *by reference* (issue #2231), so they could not
19+
survive the prune without becoming hand-written mirrors — exactly the second
20+
de-facto contract AGENTS.md #0.1 forbids. Removed from the public surface:
21+
22+
- Types: `Spacing`, `Breakpoints`, `DensityMode`, `WcagContrastLevel`,
23+
`ThemeLogo`, and the deprecated `SpacingScale` alias
24+
- Schemas: `SpacingSchema`, `SpacingScaleSchema`, `BreakpointsSchema`,
25+
`ThemeLogoSchema`, and the `SpacingSchemaType` / `BreakpointsSchemaType` helpers
26+
- `Theme.spacing`, `Theme.breakpoints` and `Theme.logo`
27+
28+
`mergeThemes` no longer merges the three dropped keys. `generateThemeVars` is
29+
unaffected — it never emitted them, which is why the liveness audit called them
30+
dead. The one real consumer was `ThemeProvider`, which set the favicon from
31+
`theme.logo.favicon`; that path is gone, because v17 strips the key at parse and
32+
it could never arrive again. The live favicon is unaffected: it comes from
33+
operator branding (`getFaviconUrl()`), applied in the console's `index.html`,
34+
`main.tsx`, and on route change.
35+
36+
Nothing else read the pruned types. In particular the list-density feature is
37+
untouched — `useDensityMode` and `rowHeightToDensityMode` use `@object-ui/core`'s
38+
own local `DensityMode`, which never came from the spec.
39+
40+
**The spec adopted objectui's ListColumn extensions (objectui#2231), so the
41+
extension collapsed.** `ListColumnSchema` used to `.extend()` the spec with two
42+
fields, each carrying a note to promote it upstream rather than grow the
43+
extension; v17 did exactly that. `summary` is now the spec's
44+
`union([ColumnSummarySchema, ColumnSummaryConfigSchema])` — the same enum ∪
45+
`{ type, field }` form `useColumnSummary` reads — and `prefix` is the spec's
46+
`ColumnPrefixSchema`. `ListColumnSchema` is now a plain by-reference re-export.
47+
One behavior change rides along: `prefix.type` defaults to `'text'` on parse
48+
instead of staying `undefined`, so the cell renderer always gets a value.
49+
50+
**Node 22 is now the floor.** Every `@objectstack` package declares
51+
`engines.node: ">=22.0.0"` (objectstack#3825; Node 20 reached EOL 2026-04-30).
52+
This repo claimed `>=20` and ran CI on Node 20.x, so it promised — and validated
53+
— a runtime its own core dependency does not support. `engines.node` is now
54+
`>=22`, CI runs Node 22.x, and the CI/deployment docs say so.
55+
56+
The major stays 17: per AGENTS.md the major tracks `@objectstack`'s major, which
57+
is also 17, and that convention deliberately outranks semver purity — so the
58+
removals above ship as a minor rather than desyncing the two.

.github/WORKFLOWS.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ Our GitHub Actions workflows automate testing, security scanning, dependency man
1616
This is the main CI pipeline that ensures code quality.
1717

1818
**Jobs**:
19-
- **Test**: Runs tests on Node.js 18.x and 20.x
19+
- **Test**: Runs tests on Node.js 22.x
2020
- Executes unit and integration tests
21-
- Generates coverage reports (Node 20.x only)
21+
- Generates coverage reports
2222
- Uploads coverage to Codecov
2323

2424
- **Lint**: Checks code style and quality
@@ -32,7 +32,6 @@ This is the main CI pipeline that ensures code quality.
3232
**Optimizations**:
3333
- Uses pnpm store caching for faster dependency installation
3434
- Runs jobs in parallel when possible
35-
- Only uploads coverage on Node 20.x to save time
3635

3736
### 2. CodeQL Security Scan
3837

.github/workflows/changeset-release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
- name: Setup Node.js
3333
uses: actions/setup-node@v7
3434
with:
35-
node-version: '20.x'
35+
node-version: '22.x'
3636
cache: 'pnpm'
3737
registry-url: 'https://registry.npmjs.org'
3838

.github/workflows/ci.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ jobs:
6464
- name: Setup Node.js
6565
uses: actions/setup-node@v7
6666
with:
67-
node-version: '20.x'
67+
node-version: '22.x'
6868
cache: 'pnpm'
6969

7070
# Every package must be either type-checked or explicitly declared as a
@@ -132,7 +132,7 @@ jobs:
132132
- name: Setup Node.js
133133
uses: actions/setup-node@v7
134134
with:
135-
node-version: '20.x'
135+
node-version: '22.x'
136136
cache: 'pnpm'
137137

138138
- name: Install dependencies
@@ -169,7 +169,7 @@ jobs:
169169
- name: Setup Node.js
170170
uses: actions/setup-node@v7
171171
with:
172-
node-version: '20.x'
172+
node-version: '22.x'
173173
cache: 'pnpm'
174174

175175
- name: Install dependencies
@@ -208,7 +208,7 @@ jobs:
208208
- name: Setup Node.js
209209
uses: actions/setup-node@v7
210210
with:
211-
node-version: '20.x'
211+
node-version: '22.x'
212212
cache: 'pnpm'
213213

214214
- name: Install dependencies
@@ -309,7 +309,7 @@ jobs:
309309
if: steps.docs-changes.outputs.should_run == 'true'
310310
uses: actions/setup-node@v7
311311
with:
312-
node-version: '20.x'
312+
node-version: '22.x'
313313
cache: 'pnpm'
314314

315315
- name: Turbo Cache
@@ -351,7 +351,7 @@ jobs:
351351
- name: Setup Node.js
352352
uses: actions/setup-node@v7
353353
with:
354-
node-version: '20.x'
354+
node-version: '22.x'
355355
cache: 'pnpm'
356356

357357
- name: Install dependencies

.github/workflows/dependabot-auto-merge.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
- name: Setup Node.js
2828
uses: actions/setup-node@v7
2929
with:
30-
node-version: '20.x'
30+
node-version: '22.x'
3131
# No `cache: 'pnpm'` here: this job never runs `pnpm install`, so the
3232
# pnpm store doesn't exist and setup-node's post-job cache save fails
3333
# with "Path Validation Error", which marks the whole job as failed.

.github/workflows/lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ jobs:
5454
- name: Setup Node.js
5555
uses: actions/setup-node@v7
5656
with:
57-
node-version: '20.x'
57+
node-version: '22.x'
5858
cache: 'pnpm'
5959

6060
# Every package must run ESLint or be declared a known gap. turbo skips

.github/workflows/performance-budget.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ jobs:
4141
- name: Setup Node.js
4242
uses: actions/setup-node@v7
4343
with:
44-
node-version: '20.x'
44+
node-version: '22.x'
4545
cache: 'pnpm'
4646

4747
- name: Turbo Cache

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ jobs:
2929
- name: Setup Node.js
3030
uses: actions/setup-node@v7
3131
with:
32-
node-version: '20.x'
32+
node-version: '22.x'
3333
cache: 'pnpm'
3434
registry-url: 'https://registry.npmjs.org'
3535

.github/workflows/shadcn-check.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ jobs:
2828
- name: Setup Node.js
2929
uses: actions/setup-node@v7
3030
with:
31-
node-version: '20'
31+
node-version: '22.x'
3232
cache: 'pnpm'
3333

3434
- name: Install dependencies

apps/console/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@
8989
"@object-ui/providers": "workspace:*",
9090
"@object-ui/react": "workspace:*",
9191
"@object-ui/types": "workspace:*",
92-
"@objectstack/client": "^16.1.0",
93-
"@objectstack/spec": "^16.0.0-rc.0",
92+
"@objectstack/client": "^17.0.0-rc.0",
93+
"@objectstack/spec": "^17.0.0-rc.0",
9494
"@tailwindcss/postcss": "^4.3.3",
9595
"@tailwindcss/typography": "^0.5.20",
9696
"@testing-library/jest-dom": "^7.0.0",

0 commit comments

Comments
 (0)