Skip to content

main is red on Console Pin Gate: #10695 retired the @objectstack/spec/ui theme schemas with no objectui counterpart — at the pin OR on objectui's tip #10857

Description

@os-elon

Console Pin Gate fails on main and will fail for every PR queued behind it until objectui stops importing five retired schemas. Filed unassigned, no domain:* label — that surface is triage's.

Noticed from a merge-queue triage comment on an unrelated PR (#10635, a packages/spec/src/api/ change). The bot's own checklist item 2 — "失败测试与本 PR 无关" — is the right verdict here, but the failure is not flaky and not environmental: it is a deterministic build break on main.

The failure

Queue build 32489707012, job Console Pin Gate, step Build the Console SPA at the pinned objectui SHA:

✗ Build failed in 5.89s
error during build:
Build failed with 6 errors:
[MISSING_EXPORT] "ColorPaletteSchema" is not exported by "../../../../packages/spec/dist/ui/index.mjs"
╭─[ ../../packages/types/src/zod/theme.zod.ts:18:10 ]
[MISSING_EXPORT] "TypographySchema" … theme.zod.ts:18:56
[MISSING_EXPORT] "BorderRadiusSchema" … theme.zod.ts:18:98
[MISSING_EXPORT] "ShadowSchema" … theme.zod.ts:18:144
[MISSING_EXPORT] "ThemeModeSchema" … theme.zod.ts:18:178

Note the shape: MISSING_EXPORT at bundle time, 5.89s, no test ran. This is the build, not a suite — so the usual timeout-vs-assertion triage does not apply, and re-running cannot change the answer.

Root cause, established by content on both repos

objectstack main (08318f7c0e) no longer exports them. Removed by 35ad101bc3feat(spec): retire the themes carrier key and ThemeSchema — app.branding is the one colour surface (#10485, ADR-0049), landed as PR #10695. packages/spec/src/ui/index.ts now says so in as many words:

// `ThemeSchema`, its sub-blocks (`ColorPaletteSchema`, `TypographySchema`,
// `BorderRadiusSchema`, `ShadowSchema`, `ThemeModeSchema`) and `defineTheme`
// are gone with the `defineStack({ themes })` carrier key

objectui still imports them — and this is the part that matters:

wheretheme.zod.ts imports the retired schemas?
objectui @ pinned 9a3daf8d37ad (.objectui-sha)yes
objectui main @ ac73c24b01, ahead of the pinyes
// packages/types/src/zod/theme.zod.ts:19-21 — identical at the pin and at objectui's tipimport{ColorPaletteSchemaasSpecColorPaletteSchema,TypographySchemaasSpecTypographySchema,

So this is not a stale pin. Bumping .objectui-sha to objectui's tip would reproduce the identical failure. objectui has no counterpart to this retirement anywhere — the removal landed one-sided.

Why the same commit's own reasoning predicts this

packages/spec/src/ui/index.ts records that "objectui's ThemeEngine/ThemeContext and their unit tests are retained" — i.e. the retirement knew objectui still has live theme machinery, and kept it. What was missed is narrower and mechanical: that machinery re-derives its zod types from @objectstack/spec/ui rather than declaring them locally, so retaining the engine while deleting the schemas leaves a dangling import. ADR-0049 enforce-or-remove was applied to the spec half only.

What it does not appear to have blocked

35ad101bc3 (#10695), and then #10633, #10635 and #10839, all merged after this gate went red — main advanced dccbcec2e4 → 35ad101bc3 → 16cef9725c → 08318f7c0e. So Console Pin Gate is evidently not a required check for the queue, which is exactly why a one-sided retirement could land: the gate that would have caught it does not stop anything. Whether that is intended is worth a separate ruling; as it stands the signal exists and is being emitted into merge-queue triage comments on innocent PRs, where it reads as someone else's flake.

Suggested shape (not a ruling — this is a finding)

Two halves, and the ordering is forced:

  1. objectui: drop the five @objectstack/spec/ui imports from packages/types/src/zod/theme.zod.ts and declare the shapes locally, or re-point them at whatever app.branding now provides. This must land in objectui first.
  2. objectstack: advance .objectui-sha past that commit. Only then does the gate go green.

Until both land, every PR's queue build carries this red, and the merge-queue triage bot will keep attributing it to whichever PR happens to be in the batch.

Reproduction (free, no CI)

git -C objectstack show origin/main:packages/spec/src/ui/index.ts | grep -n 'are gone'
git -C objectui show $(cat objectstack/.objectui-sha):packages/types/src/zod/theme.zod.ts | sed -n '19,21p'
git -C objectui show origin/main:packages/types/src/zod/theme.zod.ts | sed -n '19,21p'

Provenance

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions