From 1e67d9f13d193ea01c5c33fcb28456ed64f215c3 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 23 Oct 2026 06:51:53 +0000 Subject: [PATCH] =?UTF-8?q?chore(ci):=20empty=20spec-shape-retirements.jso?= =?UTF-8?q?n=20=E2=80=94=20all=20five=20entries=20name=20closed=20objectui?= =?UTF-8?q?=20cards=20(#25108)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The registry's own $comment says each entry is deleted when its downstream card closes. All five downstream cards are closed `completed`: objectui#12654, #12711, #13022, #13308 and #13309. A stale entry masks a new break of the same shape in the same file, so all five go, leaving `"retirements": []`. `$comment` is unchanged. parseRegistry accepts an empty array (it checks only Array.isArray(doc.retirements)); the gate's self-test pins this ("an empty registry loads as zero retirements"). Co-authored-by: Claude Claude-Session: https://claude.ai/code/session_01LKHDniRQSWjRJyDtacwpEd --- scripts/ci/spec-shape-retirements.json | 83 +------------------------- 1 file changed, 1 insertion(+), 82 deletions(-) diff --git a/scripts/ci/spec-shape-retirements.json b/scripts/ci/spec-shape-retirements.json index 3ab0be6ba2f..db7d1484cd9 100644 --- a/scripts/ci/spec-shape-retirements.json +++ b/scripts/ci/spec-shape-retirements.json @@ -1,85 +1,4 @@ { "$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) -- 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", - "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'." - }, - { - "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; }'." - } - ] - }, - { - "retired": "nothing retired -- the spec ADDED an optional key: the select option's lifecycle `kind` (`open` | `won` | `lost`, required only under a `stageField`, #23809). objectui's select-option convergence pins assert by design that the converged form and metadata faces gained no key beyond `description` / `default`, so a new spec key reds them (TS2344 `Equal` pins, compiled only by the package's chained test project); the entry is deleted when objectui re-pins the faces", - "objectstack_pr": 23846, - "objectstack_commit": "adad73f71483abf84b470e90367fe8080c44a4e0", - "downstream_card": "objectstack-ai/objectui#12711", - "registered_at": "2026-10-16", - "matches": [ - { - "file": "packages/types/src/__tests__/select-option-tier1-convergence-7014.test.ts", - "code": "TS2344", - "message": "Type 'false' does not satisfy the constraint 'true'." - } - ] - }, - { - "retired": "a page action row's own `patch` (action:button, action:icon and the action:group / action:menu member), retired as a key -- a retiredKey() tombstone sending the author to the `patch` of the action the row's `name` names (#24394) -- objectui's action-button undo test still authors `patch` on an `action:button` node", - "objectstack_pr": 24442, - "objectstack_commit": "69f342b92470e0b66aa9b17ccd2fc7db04e4e568", - "downstream_card": "objectstack-ai/objectui#13022", - "registered_at": "2026-10-19", - "matches": [ - { - "file": "packages/components/src/renderers/action/__tests__/action-button-undoable-11168.test.tsx", - "code": "TS2353", - "message": "Object literal may only specify known properties, and 'status' does not exist in type '{ \"[REMOVED] Key retired: run `os validate` for its migration.\": never; }'." - } - ] - }, - { - "retired": "the list view's and the page `list-view` node's `addRecord.mode` and `addRecord.formView`, retired as keys -- retiredKey() tombstones on the one AddRecordConfig every list-view door shares, with ADR-0087 drop conversions (`add-record-mode-form-view-removed`) -- objectui still authors both keys in two spec-alignment tests in `packages/types` that type a value carrying them (an `AddRecordConfig` in p2-spec-exports, a `ListViewSchema` in p1-spec-alignment); the entry is deleted when the downstream card closes", - "objectstack_pr": 24970, - "objectstack_commit": "fde7456352318872704c24feadaa6660b9bc649b", - "downstream_card": "objectstack-ai/objectui#13308", - "registered_at": "2026-10-21", - "matches": [ - { - "file": "packages/types/src/__tests__/p2-spec-exports.test.ts", - "code": "TS2322", - "message": "Type 'string' is not assignable to type '{ '[REMOVED] Key retired: run `os validate` for its migration.': never; }'." - }, - { - "file": "packages/types/src/__tests__/p1-spec-alignment.test.ts", - "code": "TS2322", - "message": "Type 'string' is not assignable to type '{ '[REMOVED] Key retired: run `os validate` for its migration.': never; }'." - } - ] - }, - { - "retired": "nothing retired -- the spec WIDENED a union: `DroppedFieldsEvent['reason']` gained a fifth arm, `stored_expression` (a stored field whose declared expression the engine computes on every write). objectui's batch-6 spec-symbol pin `_ReasonIsTheEnum` asserts the exact four-member union (`readonly`, `readonly_when`, `primary_key`, `computed`) with a TS2344 `Equal` pin, so the widened union reds it; the entry is deleted when the downstream card closes", - "objectstack_pr": 24778, - "objectstack_commit": "7532ea3c0893a08a518739aebfe7c0751211f53d", - "downstream_card": "objectstack-ai/objectui#13309", - "registered_at": "2026-10-21", - "matches": [ - { - "file": "packages/data-objectstack/src/spec-symbol-batch6.test.ts", - "code": "TS2344", - "message": "Type 'false' does not satisfy the constraint 'true'." - } - ] - } - ] + "retirements": [] }