From d2aef71c75a5ccab84d9302d6e108e0f414ec273 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 16 Oct 2026 12:27:37 +0000 Subject: [PATCH 1/2] ci(spec-shape-gate): register the retirement of the page component's 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 --- scripts/ci/spec-shape-retirements.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/scripts/ci/spec-shape-retirements.json b/scripts/ci/spec-shape-retirements.json index db7d1484cd..5d4e7ce730 100644 --- a/scripts/ci/spec-shape-retirements.json +++ b/scripts/ci/spec-shape-retirements.json @@ -1,4 +1,19 @@ { "$comment": "Intentional spec retirements the Spec Shape Gate reads as `known` instead of red. One entry per retirement, written by the accepting seat when the downstream (objectui) card is filed, deleted when that card closes. Every entry carries exactly: retired, objectstack_pr, objectstack_commit (40-hex merge commit), downstream_card (owner/repo#N), registered_at (YYYY-MM-DD), matches (non-empty; each pattern names a repo-relative objectui `file` -- `*` within a segment, `**` across -- plus at least one of `code` (TS) or `message` (substring)). A file alone is refused. The reader, its grammar and its refusals: scripts/ci/spec-shape-gate.mjs (THE REGISTRY).", - "retirements": [] + "retirements": [ + { + "retired": "the page component's `visibility` and the view form's `visibleOn` (field and section) retired as keys -- retiredKey() tombstones naming `visibleWhen` (F4 of #23543, executed by PR #23836) -- the downstream still passes the page component's `visibility` to an expression argument, now typed as the tombstone", + "objectstack_pr": 23836, + "objectstack_commit": "105902f10ae8124a5e965cb24f7b30681fd9fae2", + "downstream_card": "objectstack-ai/objectui#12654", + "registered_at": "2026-10-16", + "matches": [ + { + "file": "packages/react/src/SchemaRenderer.tsx", + "code": "TS2345", + "message": "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'." + } + ] + } + ] } From 1adf5046ee1cefc6cef97154ddcf427ff4f29dc4 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 16 Oct 2026 12:36:50 +0000 Subject: [PATCH 2/2] ci(spec-shape-gate): register the retired visibility key's test-project 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 570f01d270), 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 --- scripts/ci/spec-shape-retirements.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/ci/spec-shape-retirements.json b/scripts/ci/spec-shape-retirements.json index 5d4e7ce730..29d6cdcab6 100644 --- a/scripts/ci/spec-shape-retirements.json +++ b/scripts/ci/spec-shape-retirements.json @@ -2,7 +2,7 @@ "$comment": "Intentional spec retirements the Spec Shape Gate reads as `known` instead of red. One entry per retirement, written by the accepting seat when the downstream (objectui) card is filed, deleted when that card closes. Every entry carries exactly: retired, objectstack_pr, objectstack_commit (40-hex merge commit), downstream_card (owner/repo#N), registered_at (YYYY-MM-DD), matches (non-empty; each pattern names a repo-relative objectui `file` -- `*` within a segment, `**` across -- plus at least one of `code` (TS) or `message` (substring)). A file alone is refused. The reader, its grammar and its refusals: scripts/ci/spec-shape-gate.mjs (THE REGISTRY).", "retirements": [ { - "retired": "the page component's `visibility` and the view form's `visibleOn` (field and section) retired as keys -- retiredKey() tombstones naming `visibleWhen` (F4 of #23543, executed by PR #23836) -- the downstream still passes the page component's `visibility` to an expression argument, now typed as the tombstone", + "retired": "the page component's `visibility` and the view form's `visibleOn` (field and section), retired as keys -- retiredKey() tombstones naming `visibleWhen` (F4 of #23543) -- objectui still passes the page component's `visibility` to an expression argument, and its expressions test (compiled only by the package's chained test project) still authors that key", "objectstack_pr": 23836, "objectstack_commit": "105902f10ae8124a5e965cb24f7b30681fd9fae2", "downstream_card": "objectstack-ai/objectui#12654", @@ -12,6 +12,11 @@ "file": "packages/react/src/SchemaRenderer.tsx", "code": "TS2345", "message": "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'." + }, + { + "file": "packages/react/src/__tests__/SchemaRenderer.expressions.test.tsx", + "code": "TS2322", + "message": "Type 'string' is not assignable to type '{ '[REMOVED] Key retired: run `os validate` for its migration.': never; }'." } ] }