Repository navigation
ci(spec-shape-gate): register the retirement of addRecord mode / formView and the widened DroppedFieldsEvent reason - #25091
Merged
objectstack-fleet[bot] merged 1 commit intoOct 21, 2026
Conversation
…View and the widened DroppedFieldsEvent reason Two entries in the Spec Shape Gate's retirement registry, appended after the existing three in the grammar parseRegistry reads: - objectstack PR 24970 (fde7456), addRecord.mode / addRecord.formView retired as retiredKey() tombstones: two TS2322 patterns, one per objectui packages/types spec-alignment test, downstream card objectstack-ai/objectui#13308. - objectstack PR 24778 (7532ea3), DroppedFieldsEvent['reason'] widened with stored_expression: one TS2344 pattern on objectui's batch-6 spec-symbol pin, downstream card objectstack-ai/objectui#13309. Each pattern is file + code + the diagnostic's full first-line message, taken from scheduled run 39565602478 at c67f244. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
Contributor
Author
Seat reviewACCEPT ·
This seat readies the PR and queues it with auto-merge. Generated by Claude Code |
This was referenced Oct 21, 2026
objectstack-fleet
Bot
deleted the
claude/issue-25055-spec-shape-registry
branch
October 21, 2026 09:59
This was referenced Oct 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #25055
Clause-②: no
The hourly
Spec Shape Gateonmainhas been red sincefbb42d900on five diagnostics that no registry entry covers. This PR registers the two spec changes behind them inscripts/ci/spec-shape-retirements.json, so the gate reads them asknown (registered: …)and stops failing. The seat moves the card #25055 to done once the next hourly run onmainconcludessuccess, so the first line above isRefs, not a closing keyword.The two entries
Two entries are appended after the existing three, in the grammar
parseRegistryreads (scripts/ci/spec-shape-gate.mjs, THE REGISTRY). Each entry has exactly the six keys. Each pattern has exactlyfile,codeandmessage, and themessageis the diagnostic's full first line.fde7456352318872704c24feadaa6660b9bc649bpackages/types/src/__tests__/p2-spec-exports.test.ts(:143,:144)packages/types/src/__tests__/p1-spec-alignment.test.ts(:184,:185)7532ea3c0893a08a518739aebfe7c0751211f53dpackages/data-objectstack/src/spec-symbol-batch6.test.ts(:253)retired: the list view's and the pagelist-viewnode'saddRecord.modeandaddRecord.formView, retired asretiredKey()tombstones with ADR-0087 drop conversions (add-record-mode-form-view-removed). objectui still has two spec-alignment tests inpackages/typesthat type a value carrying both keys. A pattern carries no line number, so its two patterns cover all four diagnostics.retired: "nothing retired -- the spec WIDENED a union".DroppedFieldsEvent['reason']gainedstored_expression. objectui's batch-6 spec-symbol pin_ReasonIsTheEnumasserts the exact four-member union.registered_atis2026-10-21for both, the UTC date of the commit.The file is otherwise unchanged. A script made the edit. It checked that the file at
BASE(a39389eb51) re-serialises byte-identical (2-space JSON, key order, trailing newline). It took the messages from the run's own##[error]annotation lines. It checked them against the two identical messages already registered from earlier real runs (objectui#12654 pattern 2 and objectui#12711). It then confirmed that the new text begins with BASE's bytes up to the last existing entry, which leaves$commentand the three existing entries byte-unchanged. It confirmed that exactly two entries were appended, each with the six keys in order, and thatparseRegistryreads 5. The diff is +33 / -0, in one file. Nothing changes in the reader, its grammar, the workflow, any objectui file or any changeset.The premise reading
schedulerun ofSpec Shape Gateonmainwhen this PR was opened. It is39565602478(job119106999551) at objectstackc67f244f5ae99874c8dc756cab1f8de69769841b, against objectuimain3aafc0d530. It was read through the job log (get_job_logs). It reports5 NEW diagnostic(s) in 3 objectui file(s), and its five##[error]lines arespec-symbol-batch6.test.ts:253:7TS2344,p1-spec-alignment.test.ts:184:9and:185:9TS2322, andp2-spec-exports.test.ts:143:9and:144:9TS2322. The messages are M1 and M2 above. There was no sixth diagnostic.mainis now2794254099, 2 commits ahead of3aafc0d530(compare API). Neither commit touches any of the three files. Read through REST at that sha, the lines are as the run reports them:mode/formViewat:143/:144and:184/:185, and theEqualagainst the four-member union at:253.git log e4d604efd3..fbb42d900 -- packages/spec(non-shallow checkout) lists exactly two commits,fde7456352(feat(spec)!: addRecord says what renders — enabled required, position top, mode/formView retired #24970) and7532ea3c08(feat(spec,objectql): report a caller value a stored expression replaced, as DroppedFieldsEvent reason stored_expression #24778).fde7456352replacesAddRecordConfigSchema'smode/formViewwithretiredKey(ADD_RECORD_MODE_RETIRED)/retiredKey(ADD_RECORD_FORM_VIEW_RETIRED)inpackages/spec/src/ui/view.zod.ts.7532ea3c08widensDroppedFieldsEventSchema.reasonto five arms inpackages/spec/src/data/data-engine.zod.ts. Eachmerge_commit_shawas read from REST and matches the seat's reading.merge-base --is-ancestorgives exit 0 for both commits againstorigin/mainand exit 1 against the last green heade4d604efd3. The control leg, an older green head78ab6474caagainste4d604efd3, gives exit 0. The gate's own attribution table reads only the newest 40 pulls of the 51-commit range, so neither producing PR appears in it.Offline proof (at
cff984e88d)node scripts/ci/spec-shape-gate.mjs --self-test: exit 0,spec-shape-gate --self-test: 60/60 passed across 7 batteries.parseDiagnosticsreads. Each package gets a##[group]header naming@object-ui/data-objectstack:type-checkor@object-ui/types:type-check. Under it, tsc's package-relative lines appear bare (src/__tests__/p2-spec-exports.test.ts(143,9): error TS2322: M1), followed by##[endgroup].node scripts/ci/spec-shape-gate.mjs report --log LOG --sha cff984e88d2bece104a7e7040344ce99f48831ba --status 2 --downstream /home/user/objectui --registry REG, with no--event, so no attribution was attempted:3ab0be6ba2)spec-shape-gate: 5 diagnostic(s), all registered retirements -- known, not red.with#### known -- 5 diagnostic(s) covered by 2 registered retirement(s)::253readsknown (registered: objectstack-ai/objectui#13309, objectstack PR #24778: …), and:143,:144,:184and:185readknown (registered: objectstack-ai/objectui#13308, objectstack PR #24970: …)BASE(blobc93a0f3dac)⛔ **5 NEW diagnostic(s) in 3 objectui file(s)**spec-symbol-batch6.test.ts(20,10): error TS2305: Module '"@objectstack/spec/contracts"' has no exported member 'DroppedFieldsEventProbe'.⛔ **1 NEW diagnostic(s) in 1 objectui file(s)**(the TS2305), with the five stillknownspec-symbol-batch6.test.ts(256,7)spec-shape-gate: 6 diagnostic(s), all registered retirements -- known, not red.The BASE leg's five
::errorannotation messages match the run's five##[error]lines byte for byte, except for the sha (diffexit 0). So the hand-built log yields the same rows the real run parsed.The batch-6 breadth limit
Entry B's pattern is file +
TS2344+Type 'false' does not satisfy the constraint 'true'.That is the full message, but the message is the generic one every failedAssertof anEqualprints. So until objectstack-ai/objectui#13309 is done, any OTHERAssertinpackages/data-objectstack/src/spec-symbol-batch6.test.tsthat reds with that message also readsknown. The breadth leg above shows this. The registry grammar has no narrower spelling: a pattern names a file, a code and a message substring, and nothing else (no line, no symbol). This PR widens no pattern beyond file + code + full message and does not change the grammar. Entry A's message names the retired-key tombstone type, so it covers a TS2322 against that tombstone in its two files. In those two files, that means a retired key.Live proof
The workflow's
pull_requesttrigger is path-filtered to this registry, so this PR runs the gate. That run compiles objectuimainagainst this commit, and it is the live reading of the two entries. Its conclusion and itsknownlines are recorded in theos-dev-reportcomment on #25055, not here. The hourly run39573264707(at4feccc2685, without this registry) was in progress when this PR was opened.Gates (at
cff984e88d)node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstacknames the tree (objectstack-ai/objectstackatcff984e88d) and the change set (1 path, +33 / -0). It derived 22 commands: 14 pnpm and 8 direct node. All 22 exited 0, and each exit code was captured before any pipe. Among them,pnpm check:spec-shape-gatereports60/60 passed across 7 batteries.pnpm check:nul-bytesreportsOK (scanned 11643 text file(s) …; no raw ASCII control bytes).pnpm check:cross-package-test-inputsreportsOK: 31 package(s) read outside themselves, all declared ….--ranon theCOMMAND :: exit CODErecord:Run reconciliation — 22 derived, 22 run, 0 NOT-MEASURED, 0 UNRUN., a derived zero, because all 22 recorded an exit code.git grep spec-shape-retirementsfinds only the workflow and the gate script reading this file, and no test reads it.git merge-tree --write-tree origin/main HEADatorigin/main4feccc2685gives exit 0 and treeb3ba654e64. The 3 commits onmainsinceBASEtouch neitherscripts/ci/nor the workflow.Changeset
There is no changeset.
scripts/ci/sits under the private root package (@objectstack/spec-monorepo,private: true), andscripts/ci/holds nopackage.json. Of the 73 manifests that declarefiles[], none namesscripts/ciorspec-shape. As a positive control,packages/spec'sfiles[]namesdist.skip-changesetapplies.Acceptance notes
39565602478, lists the three existing entries as matching nothing: form, react, types, console: spec 18 refuses the view form'svisibleOnand the page component'svisibility(objectstack#23543 F4) — readvisibleWhenonly, and re-point the spec-shape couplings before the next spec bump objectui#12654, types: spec 18 adds the optional select-optionkind(objectstack#23846), so the tier-1 convergence pins inselect-option-tier1-convergence-7014.test.tsno longer hold — statekindas a deliberate optional widening objectui#12711 and action rows: follow @objectstack/spec retiring a page action row's ownpatch— the Undo snapshot must read the named action'spatch, and the renderers and registry stop forwarding and publishing the row key objectui#13022. All three cards areclosed/completed, on 2026-10-16, 2026-10-16 and 2026-10-19. Under the registry's own$comment, an entry is deleted once its card is done, so those three are due for pruning. This PR's ruling keeps them byte-unchanged. Noted, not filed; carrier: none.Generated by Claude Code