Repository navigation
Commit ce2e08e
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
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
36 | 50 | | |
37 | 51 | | |
38 | 52 | | |
0 commit comments