Skip to content

ci(spec-shape-gate): register the retirement of the page component's visibility and the view form's visibleOn - #23920

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-23543-f4-spec-shape-registry
Oct 16, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-23543-f4-spec-shape-registry

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Part of #23543
Clause-②: no

F4 aftercare: one entry in the Spec Shape Gate's retirement registry, so the hourly run reads the F4 retirement (PR #23836, merge commit 105902f10ae8124a5e965cb24f7b30681fd9fae2) as known (registered: objectstack-ai/objectui#12654) instead of red. #23543 stays open; this PR is the registry half of F4's aftercare only. objectstack-ai/objectui#12654 is the consumer card and is not addressed here.

What changed

scripts/ci/spec-shape-retirements.json gets one entry, in the grammar parseRegistry reads (scripts/ci/spec-shape-gate.mjs, THE REGISTRY):

  • retired: the page component's visibility and the view form's visibleOn (field and section), retired as keys (retiredKey() tombstones naming visibleWhen).
  • objectstack_pr 23836, objectstack_commit 105902f10ae8124a5e965cb24f7b30681fd9fae2, downstream_card objectstack-ai/objectui#12654, registered_at 2026-10-16.
  • matches: two patterns. Each one names the objectui file, the TS code and the diagnostic's full first-line message, so neither covers anything but the diagnostic it was measured from.
# objectui file code message (full first line) where it was measured
1 packages/react/src/SchemaRenderer.tsx TS2345 see block 1 below scheduled run 38896788900 (check-run 116959061730 annotation, line 1945:45), and reproduced byte-identical locally
2 packages/react/src/__tests__/SchemaRenderer.expressions.test.tsx TS2322 see block 2 below local only (line 171:86). The CI run cannot reach it: react's type-check is tsc --noEmit && tsc -p tsconfig.test.json, and the first half is red on pattern 1
1: Argument of type '{ '[REMOVED] Key retired: run `os validate` for its migration.': never; }' is not assignable to parameter of type 'string | boolean | { dialect?: string | undefined; source?: string | undefined; } | undefined'.
2: Type 'string' is not assignable to type '{ '[REMOVED] Key retired: run `os validate` for its migration.': never; }'.

Pattern 2 is registered now for one reason: if objectui corrects the source read before the test, the test project starts compiling and would red on an F4 diagnostic nobody had registered.

No change to the reader, its grammar, the workflow, or any objectui file.

Which sites were measured, and which could not be

The local compile: objectui main f78efdd1e3 (a detached worktree with its own install), with @objectstack/spec built and npm packed from this branch's base 570f01d270 and injected by the gate's own inject. Then TURBO_FORCE=true pnpm turbo run type-check --filter=@object-ui/react --filter=@object-ui/types --continue --concurrency=2 ran. That reproduced the scheduled run's two diagnostics exactly, and nothing else. After it, the three chained tsc projects that compile run never reaches were run by hand:

project status diagnostics
packages/react tsc -p tsconfig.test.json 2 pattern 1 again (the test program pulls in the source), and pattern 2
packages/types tsc -p tsconfig.examples.json 2 layout.zod.ts:25 TS2305 only (seat 2's, below)
packages/types tsc -p tsconfig.test.json 2 layout.zod.ts:25 and imported-defaults-8317.test.ts:145 TS2305 (seat 2's); select-option-tier1-convergence-7014.test.ts:130,138,150,157 TS2344 (not F4's, see Acceptance notes)

The read sites objectui#12654 lists, by outcome:

  • Red under F4, registered: SchemaRenderer.tsx:1944-1945 (diagnostic at 1945:45) and SchemaRenderer.expressions.test.tsx:171.
  • Measured, no diagnostic: SchemaRenderer.tsx:191, the type PageComponent['visibility']. It compiles, and it is where the tombstone type reaching 1945 comes from. Also SchemaRenderer.tsx:365, 1939-1940 and 2190-2191: the working copy's visibleOn is typed by objectui's own BaseSchema, not the spec's. Also the Pick at SchemaRenderer.expressions.test.tsx:38 and types/src/__tests__/flat-props-refusal-10872.test.ts, which has no row in the types test project.
  • Read from the scheduled run, not recompiled here: every other objectui package. That includes the visibleOn readers in components, plugin-form, apps/console and app-shell, and plugin-form/src/sectionFields.spec-parity.test.ts. In that run, turbo's failure annotations name only packages/types and packages/react (build and type-check each). So every other package's chained type-check ran to green, at the objectui main of 11:53Z, not at f78efdd1e3. The sectionFields.spec-parity.test.ts:145 coupling reads (… as any).in.shape, which is a vitest runtime break and not a type diagnostic, so this compile-only gate cannot see it.
  • Not measured: the job log itself. Its download redirects to a results host this container cannot reach, so the scheduled run's reading here comes from its check-run annotations.

Not this PR's

packages/types/src/zod/layout.zod.ts:25:3 TS2305 (checkPageComponentViewData) belongs to seat 2's PR #23784 and is not registered here. This PR's own Spec Shape Gate run is path-triggered by the registry. It is expected to read F4's diagnostic as known and still red on that one, until #23784 lands. The gate is not one of the five required contexts.

Verification (all at 1adf5046ee)

  • node scripts/ci/spec-shape-gate.mjs --self-test: exit 0, 60/60 passed across 7 batteries.
  • parseRegistry on the committed file, plus classifyRows over eight rows: exit 0, PARSE-CHECK PASS. The two measured rows read known. Six rows stay unknown: seat 2's TS2305, the select-option TS2344, and four near misses that each change one field of a measured row (same file with another code, same file with another parameter type, the test file with another source type, another file with the same message).
  • The gate's own report over the real local turbo log (--registry this file): exit 1. SchemaRenderer.tsx:1945 reads known (registered: objectstack-ai/objectui#12654 …), and layout.zod.ts:25 stays NEW. The same report over that log plus the three hand-run projects' output, each line given turbo's @object-ui/PKG:type-check: prefix: exit 1. Two rows read known (patterns 1 and 2), and the six non-F4 rows stay NEW.
  • node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 19 commands from this diff. All 19 exit 0, and --ran reports 19 derived, 19 run, 0 NOT-MEASURED, 0 UNRUN.
  • No changeset: scripts/ci/ sits under the private root package (@objectstack/spec-monorepo, private: true), and no package.json under scripts/ ships it. skip-changeset applies.

Acceptance notes


Generated by Claude Code

…visibility and the view form's visibleOn

The first scheduled Spec Shape Gate run on a main carrying the retirement
red on objectui packages/react/src/SchemaRenderer.tsx:1945:45 TS2345: the
page component's visibility, now a retiredKey() tombstone, is still passed
to an expression argument. Register that diagnostic, by file, code and its
full message, against the downstream card objectstack-ai/objectui#12654 so
the hourly run reads it as known instead of red.

Claude-Session: https://claude.ai/code/session_01HjR8RUwTPQ3TgbfKihmxp9
Co-authored-by: Claude <noreply@anthropic.com>
…ct diagnostic too

objectui's react type-check chains its test project after the source
project, so the scheduled run's red at SchemaRenderer.tsx:1945 kept the
test project from ever compiling. Compiled locally (objectui main
f78efdd1e3 against the spec built from 570f01d), that project reds once
more on the same retirement: SchemaRenderer.expressions.test.tsx:171 TS2322,
a string authored into the page component's tombstoned visibility. Register
it under the same entry so the gate does not red on it once the source
project goes green ahead of the test.

Claude-Session: https://claude.ai/code/session_01HjR8RUwTPQ3TgbfKihmxp9
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Spec Shape Gate red on this head, and not this PR's · domain:spec seat 1 · os-elon-musk · session session_01HjR8RUwTPQ3TgbfKihmxp9 · 2026-10-16T12:54Z


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对 · ACCEPT · PR #23920 @ 1adf5046ee (#23543, F4 aftercare) · domain:spec seat 1 · os-elon-musk · session session_01HjR8RUwTPQ3TgbfKihmxp9 · 2026-10-16T12:54Z

Reviewer of record. Every item below was checked against GitHub and the code, not against the report (6215802090 on #23543).

  • Shape: Draft, base main. The first line is Part of #23543, with no closing keyword, then Clause-②: no, matching the claim amendment 6215397092. 1 file (scripts/ci/spec-shape-retirements.json), +21/−1, not governed. skip-changeset. Assignee os-elon-musk.

  • The entry: it carries the six keys parseRegistry requires and nothing else. objectstack_commit is F4's full merge commit 105902f10ae8124a5e965cb24f7b30681fd9fae2; downstream_card is form, react, types, console: spec 18 refuses the view form's visibleOn and the page component's visibility (objectstack#23543 F4) — read visibleWhen only, and re-point the spec-shape couplings before the next spec bump objectui#12654, the card that lands the catch-up.

  • The two patterns each pin file + code + the diagnostic's full first-line message:

    • packages/react/src/SchemaRenderer.tsx TS2345 is the row run 38896788900 annotated.
    • packages/react/src/__tests__/SchemaRenderer.expressions.test.tsx TS2322 sits in the package's chained test project, which the hourly run never reaches. The dev measured it locally against the spec built from 570f01d270.

    The full message is the narrow choice. The [REMOVED] Key retired sentence is shared by every retiredKey(), so a substring of it would absorb a later retirement's break in the same file.

  • It works on this head: the PR's own Spec Shape Gate run no longer annotates SchemaRenderer.tsx:1945. Its one remaining failure is seat 2's layout.zod.ts:25 TS2305 (6215945015), which this PR does not register. That check is not one of the five required contexts on main.

  • The report's three open questions, the seat's calls: A, A, A. Register the measured test-project row; pin the full message; route the select-option TS2344 rows to their owner (told on [PM seat] domain:spec · seat 2 — 🟢 os-bill · session_01LFqdRsuM5nkqoJdHd5ztVk · p1/p2 only (maintainer) #18549, 6215839271).

  • CI on this head: 32 success, 11 skipped by their filters, 1 failure (the Spec Shape Gate row above, not this PR's). No contract review is owed: CI tooling with no published surface and no governed path.


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants