Skip to content

Commit ce2e08e

Browse files
ci(spec-shape-gate): register the retirement of a page action row's own patch (#24485)
Part of #24394 Clause-②: no Aftercare for #24394. This PR adds one entry to the Spec Shape Gate's retirement registry, so the gate reads the retirement of a page action row's own `patch` (PR #24442, merge commit `69f342b92470e0b66aa9b17ccd2fc7db04e4e568`) as `known (registered: objectstack-ai/objectui#13022)` instead of red. #24394 keeps its `completed` state, and this PR is only its registry half. objectstack-ai/objectui#13022 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`: what retired (a page action row's own `patch` on `action:button`, `action:icon` and the `action:group` / `action:menu` member), and what objectui still authors (its action-button undo test sets `patch` on an `action:button` node). - `objectstack_pr` 24442, `objectstack_commit` `69f342b92470e0b66aa9b17ccd2fc7db04e4e568`, `downstream_card` `objectstack-ai/objectui#13022`, `registered_at` 2026-10-19. - `matches`: one pattern. It names the objectui file, the TS code and the diagnostic's full first-line message, so it covers only the diagnostic it was measured from (the precedent is PR #23920). | objectui file | at | code | message | |---|---|---|---| | `packages/components/src/renderers/action/__tests__/action-button-undoable-11168.test.tsx` | 64:14 | TS2353 | the block below | ```text Object literal may only specify known properties, and 'status' does not exist in type '{ "[REMOVED] Key retired: run `os validate` for its migration.": never; }'. ``` The entry was written by a script from the annotation's own message bytes, not retyped. A JSON round-trip of the file is byte-identical, so the two existing entries are untouched. The diff is +14 / -0. There is no change to the reader, its grammar, the workflow, or any objectui file. ## Where the diagnostic was read - **Source:** PR #24469's own `pull_request` run, `39206747055`, job `117911140691`. Its head is `eb080715a5`. The objectstack commit under test is the merge ref `faa8cd2403a0`, whose parents are `ff4840756d` (main) and `eb080715a5`. That run reports exactly ONE new diagnostic, the one above. It was read from the job's check-run annotations through REST. The job log itself could not be downloaded here: its blob host refuses this container's proxy (CONNECT 403). - **Attribution to `69f342b924`:** the compare API says `faa8cd2403a0` is 8 ahead of and 0 behind `69f342b924`, so it contains the retirement. Line 64 of that test is `patch: { status: 'done' },` inside an `action:button` node's `properties`, and column 14 is `status`. The type it fails against is the `retiredKey()` tombstone that `69f342b924` put on the row `patch` (`rowPatchRetired`, `packages/spec/src/ui/component.zod.ts`). The test file read is from objectui `main` `4484a11041`. - **Nothing is hidden behind it.** `@object-ui/components` runs `type-check` as `tsc --noEmit && tsc -p tsconfig.test.json`. Its `tsconfig.json` excludes `**/__tests__/**`, so only the second half compiles this file. That means the first half passed, and the second half reported its whole program, which is this one row. The annotations name no other package. - **No scheduled run exists yet.** No scheduled Spec Shape Gate run on `main` after `5eb5400309` existed when this PR was opened. The newest is `39207019385`, on `31ce45c071`, created 05:55Z. GitHub's scheduler is lagging across the repo: the newest scheduled run of any workflow was created at 06:25Z. This PR's own `pull_request` run compiles objectui `main` against this registry, and it is the first reading of the entry itself. - **A correction to the request comment `6260806564`:** that comment quotes the message as starting `'status' does not exist in type`. Its full first line starts `Object literal may only specify known properties, and`. The shorter quote would still have matched as a substring, but the full first line is what is registered here. ## How it was proved locally (at `dd4359bf47`) The gate's full objectui compile was not run here. Per the dispatch, objectui was not built. The reader was exercised offline through the CI step itself: `node scripts/ci/spec-shape-gate.mjs report --log LOG --sha 69f342b --status 2 --downstream DS --registry REG`. Here DS is a synthetic objectui workspace mapping `@object-ui/components` to `packages/components`. LOG is one turbo-prefixed line rebuilt from the annotation's bytes: `@object-ui/components:type-check: src/renderers/action/__tests__/action-button-undoable-11168.test.tsx(64,14): error TS2353: ...`. | leg | registry | log | exit | verdict line | |---|---|---|---|---| | the entry | this branch | the measured diagnostic | 0 | `spec-shape-gate: 1 diagnostic(s), all registered retirements -- known, not red.` | | control: before | `e11ae4b6b0` (BASE) | the measured diagnostic | 1 | `1 NEW diagnostic(s) in 1 objectui file(s)` | | precision: another key | this branch | the same line with `'title'` for `'status'` | 1 | `1 NEW diagnostic(s)`, and this entry is listed as matching nothing | | precision: another file | this branch | the same message in `action-icon-undoable.test.tsx` | 1 | `1 NEW diagnostic(s)`, and this entry is listed as matching nothing | - `node scripts/ci/spec-shape-gate.mjs --self-test`: exit 0, `spec-shape-gate --self-test: 60/60 passed across 7 batteries`. The self-test runs on its own fixture, not on this file, so the table above is the proof for the entry. - `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` derived 22 commands from this diff (1 path). All 22 exit 0, each code captured before any pipe. Among them, `pnpm check:spec-shape-gate` reports 60/60, `pnpm check:nul-bytes` reports `OK (scanned 12305 text file(s) ...)`, and `pnpm check:cross-package-test-inputs` reports `OK`. `--ran` then reports `22 derived, 22 run, 0 NOT-MEASURED, 0 UNRUN`. ## Changeset No changeset. `scripts/ci/` sits under the private root package (`@objectstack/spec-monorepo`, `private: true`). No `package.json` under `scripts/` ships it, and only the gate's script and workflow read the registry. `skip-changeset` applies. ## Acceptance notes - The two existing entries (objectui#12654, objectui#12711) are listed as matching nothing in the offline legs above. That follows from the synthetic log, which holds one row. It says nothing about the real run, and this PR does not judge them. --- _Generated by [Claude Code](https://claude.ai/code/session_01WnW7HvfnfHbLg1fpkHX3Mu)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent b7a688e commit ce2e08e

1 file changed

Lines changed: 14 additions & 0 deletions

File tree

‎scripts/ci/spec-shape-retirements.json‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,20 @@
3333
"message": "Type 'false' does not satisfy the constraint 'true'."
3434
}
3535
]
36+
},
37+
{
38+
"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",
39+
"objectstack_pr": 24442,
40+
"objectstack_commit": "69f342b92470e0b66aa9b17ccd2fc7db04e4e568",
41+
"downstream_card": "objectstack-ai/objectui#13022",
42+
"registered_at": "2026-10-19",
43+
"matches": [
44+
{
45+
"file": "packages/components/src/renderers/action/__tests__/action-button-undoable-11168.test.tsx",
46+
"code": "TS2353",
47+
"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; }'."
48+
}
49+
]
3650
}
3751
]
3852
}

0 commit comments

Comments
 (0)