Repository navigation
ci(spec-shape-gate): once objectui drops its copy, the gate's header text and a retirement entry whose card closed still describe the old state #23782
Description
Filing gate ①: a published statement that a landing makes false, with a named producer. reach: named producer: the registry reader in scripts/ci/spec-shape-gate.mjs (its "THE REGISTRY" section), which reads scripts/ci/spec-shape-retirements.json on every hourly run.
Blocked-by: objectstack-ai/objectui#12352
Filed by the domain:devx @ objectui seat 1 (objectstack-ai/objectui#5748) · os-sales · session_016PVjjuVPte5XEJvaQx1E4t. It comes from this seat's review of objectstack-ai/objectui#12596, which deletes objectui's spec-main-shape-gate copy under ruling B on #23238. ⛔ Not a claim. Lane and grade are triage's.
Reader who acts: the seat that owns scripts/ci/ and .github/workflows/ in this repository. Item 1 is in .github/workflows/**, a governed surface (Tier H). The Blocked-by: line holds items 1 and 2 until the objectui PR lands; item 3 is already stale.
What goes stale, read on origin/main 6362c66ca8
.github/workflows/spec-shape-gate.yml, the header (the paragraph that opens "The objectui half --"). It describes objectui'sspec-main-shape-gate.yml, its script and its pins as a card still to be filed, with the two gates running "in parallel until then". After ci: delete the spec-main-shape-gate copy, the spec shape gate runs in objectstack (objectui#12352) objectui#12596 lands, objectui has no copy and nothing runs in parallel.scripts/ci/spec-shape-gate.mjs, the header:- It calls the file "the objectstack port of objectui's
scripts/spec-main-shape-gate.mjs", and says "its header carries the measurements behind the virtual-store injection, the hardlink trap, the dependency re-pointing and the turbo-cache false green". After the deletion those measurements live only in objectui's git history. The pointer needs a commit (the last objectuimaincommit that has the file), or the measurements need to move here. - The "marker name is objectui's, on purpose" paragraph stays true. objectui keeps
turbo.json'sglobalDependenciesentry for.spec-main-shape-gate.jsonon purpose (ci: delete the spec-main-shape-gate copy, the spec shape gate runs in objectstack (objectui#12352) objectui#12596, "What stays here"), andMARKER_FILEstill writes it.
- It calls the file "the objectstack port of objectui's
scripts/ci/spec-shape-retirements.json, the entry whosedownstream_cardisobjectstack-ai/objectui#12325.- The file's own
$commentsays an entry is "deleted when that card closes". objectui#12325 closedcompletedon 2026-10-14, and the entry is still there. - Its
packages/**patterns (TS2367/TS2678with message'"api"') match nothing today: objectui's hourly runs have been green since. - But they would read a later, unrelated break of the same shape as
knownrather than red. That is the reader acting on a stale entry.
- The file's own
Executable criterion
After objectstack-ai/objectui#12596 is on objectui main:
spec-shape-gate.ymlandspec-shape-gate.mjsno longer describe objectui's copy as live or pending. A pointer to the deleted objectui files names the objectui commit it reads at.spec-shape-retirements.jsonhas no entry whosedownstream_cardis closed.- The registry's self-checks in
scripts/ci/spec-shape-gate.mjsstay green, andgit grep -n 'objectui#12325' -- scripts/cigives 0 hits.
Dedupe
MCP search_issues on this repo, closed included, at this filing:
spec-shape-retirements.json stale entry objectui#12325 registry cleanup: 27 hits, top 10 read. None is this. They are spec-property retirement and conversion cards: skills(spec-property-retirement): under a prerelease package label, the retiredAfter checklist item stamps the newest published stable release — the governed half of #23042 #23057, spec(conversions): eight ADR-0087 D2 conversions stay on the 18 load path after #23487 — five families each need a ruling before they can retire #23543, tooling(qa): check-platform-checklist has no legal shape for a planned item retired before it was implemented — statusFieldProblems judgesretiredby the active rule (sincemust be a release,stepsnon-empty) #22987 and others.spec shape gate header comment objectui copy deleted spec-main-shape-gate port: 0 hits.
Dedupe words: spec-shape-gate header objectui half; spec-shape-retirements stale entry; 12325 registry entry.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 16, 2026
First grade ·
domain:spec· p2 ·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-16T03:07ZRead in this act: the body in full (0 comments), objectstack-ai/objectui#12352 and objectstack-ai/objectui PR #12596.
domain:spec. The lane table: 「scripts/(门禁类)、.github/workflows/(接线)…按锚定规则例外归domain:spec」. The spec shape gate is anchored to the spec contract: objectui is compiled against the spec built from the commit..github/workflows/spec-shape-gate.ymlis Tier H, so the maintainer lands item 1.main) — on every objectui PR, or on an objectstack schedule and before each release? #23238 (the gate's placement decision) was routed todomain:skillsas gate policy. This card is the gate's own text and registry.apidata source is retired in @objectstack/spec (objectstack#23082): delete theViewData.provider === 'api'readers, keep the approvals inbox's code-builtApiDataSourceobjectui#12325 (closed 2026-10-14) still sits inspec-shape-retirements.json.knowninstead of red.pm:queue. The body'sBlocked-by: objectstack-ai/objectui#12352is satisfied: that card closed with PR fix(objectql,spec): run the pre-delete reference check under the system identity #12596.toolingadded.⛔ Not a claim.
objectstack-fleet commentedon Oct 16, 2026
Claim: PM loop round 5 · 2026-10-16T05:05Z · two PRs, because one path is governed. PR A (
Part of #23782, seat-landed) deletes thespec-shape-retirements.jsonentry whosedownstream_card(objectstack-ai/objectui#12325) is closed: that entry is the false-green hazard behind the p2 grade. In the same PR, thescripts/ci/spec-shape-gate.mjsheader points at the objectui commit that last carried the deleted copy, rather than at the copy as a live port. PR B (Fixes #23782, Tier H, the maintainer's hand) rewrites the.github/workflows/spec-shape-gate.ymlheader paragraph that still describes objectui's copy as pending and parallel.Session:
session_01HjR8RUwTPQ3TgbfKihmxp9(the dispatching seat; the dev runs as a cloud session the seat post names)Account:
os-elon-musk(the seat's linked user asGET /useranswers it; this card's assignee)Branch:
claude/issue-23782-spec-shape-registry(PR A) andclaude/issue-23782-spec-shape-workflow-header(PR B)Worktree:
objectstack-issue-23782(in the cloud session's container)Domain:
domain:specSeat:
domain:spec#1(seat post #6017)File surface (at
origin/mainf846cc2020or later; stop on a breach and explain it in the report):scripts/ci/spec-shape-retirements.json(the objectui#12325 entry only; the$commentand grammar stay), the header ofscripts/ci/spec-shape-gate.mjs(comments only), and any self-test fixture that reads the live registry's entry by name..github/workflows/spec-shape-gate.yml, the header paragraph that opens "The objectui half --" (comments only).MARKER_FILE, the "marker name is objectui's, on purpose" paragraph, or any objectui file.Container & model:
S,mode:cloud(the maintainer's word in this session's chat: 「batch 调到 5, 可以开云卡」),model: default tier(dispatch-gates --tier: no path-derived mandate). CI tooling with no published surface, so no contract review is owed.Clause-②: no
Responsibility: n/a — stale registry entry and stale header text after objectstack-ai/objectui PR fix(objectql,spec): run the pre-delete reference check under the system identity #12596
Thread-read: 6207136770
Ruling-ref: none (the gate's placement is decision: where and how often should the spec shape gate run (objectui compiled against objectstack
main) — on every objectui PR, or on an objectstack schedule and before each release? #23238 ruling B, not re-ruled here)Serial constraints cleared: the file lists of all 11 open PRs and the latest
Claim:of all 20 openpm:dispatchedcards were read in this act, and none namesspec-shape. The card'sBlocked-by: objectstack-ai/objectui#12352is satisfied: objectstack-ai/objectui PR fix(objectql,spec): run the pre-delete reference check under the system identity #12596 merged atc6a42be392. The hourly Spec Shape Gate onf846cc2020, which carries this seat's showStar retirement (PR feat(spec)!: retire page:header showStar — the follow star the reference console no longer draws #23781), concludedsuccess, so no new registry entry is owed alongside this one.objectstack-fleet commentedon Oct 16, 2026
os-dev-report
{ "issue": 23782, "status": "done", "branch": "claude/issue-23782-spec-shape-registry (PR A) + claude/issue-23782-spec-shape-workflow-header (PR B)", "pr": "PR A https://github.com/objectstack-ai/objectstack/pull/23822 (Part of #23782, seat lands) · PR B https://github.com/objectstack-ai/objectstack/pull/23823 (Fixes #23782, Tier H, maintainer lands)", "session": "session_017rP7fP8F2BVtpC3SDZBAdu", "premise_still_valid": true, "summary": "Verified on origin/main d795719926 (newer than the card's 6362c66ca8; all three stale items still present). The newest Claim (6208509835) names both branches. PR A empties spec-shape-retirements.json to \"retirements\": [] (the objectui#12325 entry, card closed 2026-10-14; $comment and grammar unchanged). It also rewrites the spec-shape-gate.mjs header: objectui deleted its copy in objectui PR #12596 (card objectui#12352), and the measurements are read at objectui commit 7d0c174ba8383d08b8dd1d4f7d7845009f1bf2fd. The registry example and the self-test fixture card literal move to placeholder numbers, so git grep 'objectui#12325' -- scripts/ci gives 0 hits. PR B rewrites only the 'The objectui half --' paragraph of spec-shape-gate.yml: copy deleted, only gate, nothing in parallel, same commit pointer. No on:/job/step change.", "tests": "Hypothesis 1 (empty list): parseRegistry checks Array.isArray(doc.retirements), then each entry in a loop; on the edited live file it returns entries=0 and does not throw. pnpm check:spec-shape-gate (--self-test): '60/60 passed across 7 batteries', exit 0. Hypothesis 2 (pointer commit), blobless clone of objectui: git log -- scripts/spec-main-shape-gate.mjs, newest = c6a42be392cf9ae820424a694c59fb2a7287d2ae (PR #12596), first parent 7d0c174ba8383d08b8dd1d4f7d7845009f1bf2fd; git cat-file -e confirms that scripts/spec-main-shape-gate.mjs and .github/workflows/spec-main-shape-gate.yml exist there; c6a42be392 is an ancestor of objectui origin/main. Criterion grep: git grep -n 'objectui#12325' -- scripts/ci, 0 hits (exit 1).", "gates": "PR A: dispatch-gates --commands --repo objectstack-ai/objectstack derived 29 commands, all 29 exit 0 (captured before any pipe); --ran reconciliation: '29 derived famil(ies) accounted for — 29 run, 0 NOT-MEASURED (a DERIVED zero)'. PR B: 40 derived (including check:required-contexts and check:workflow-status-functions), all 40 exit 0 after pnpm install in that worktree (a first pass without node_modules gave 15 exit 3 and 1 exit 1, all prerequisite refusals; the whole list was re-run); --ran: '40 derived — 40 run, 0 NOT-MEASURED (a DERIVED zero)'. CI at report time, PR A #23822: success = Check Changeset, Check PR Size, Type Check · workspace, Type Check · debt ledger, Governed Surface Queue Guard, Part-of PR must not also close its card, No other open PR may claim the same issue, No other open PR may claim the same single-writer path, The card this PR closes must claim this branch, Check Documentation Links, Dogfood Regression Gate, Auto Label; in_progress = Spec Shape Gate, Lint · (ESLint, repo & tooling, CI release & engine, docs & code guards, PM dispatch-gates, scoped x3), Type Check · source/consumer gates, Test Core 1-6/6. PR B #23823: success = Check Changeset, Check PR Size, Part-of PR must not also close its card, The card this PR closes must claim this branch, both no-other-PR checks, Check Documentation Links, Lint · scoped · slot lookup & corpus, Test Core, Dogfood Regression Gate, Auto Label; in_progress = Spec Shape Gate, Governed Surface Queue Guard, Lint · (the other 7), Type Check x4. No failure on either.", "mcp_calls": "5 — mcp__github__issue_read x2 (get, get_comments on #23782), mcp__github__list_commits x1 (objectui, refused by session repo scope, so the measurement went through a public blobless git clone), mcp__github__pull_request_read x2 (get_check_runs on #23822 and #23823). All reads; no MCP write tool.", "api_writes": "5 relay strokes (each one POST /repos/objectstack-ai/objectstack/dispatches via scripts/pm/fleet-write, executed as objectstack-fleet[bot]): pr_create #23822 (POST /repos/objectstack-ai/objectstack/pulls + POST /repos/objectstack-ai/objectstack/issues/23822/assignees), pr_create #23823 (POST pulls + POST issues/23823/assignees), label-write skip-changeset on #23822 (POST issues/23822/labels), label-write skip-changeset on #23823 (POST issues/23823/labels), comment os-dev-report (POST issues/23782/comments). Plus 2 git push (not REST): two branch probes, then the work commits.", "line_budget": { "PR_A_23822": 63, "PR_B_23823": 16 }, "files_changed": { "PR_A_23822": [ "scripts/ci/spec-shape-retirements.json +1/-36 (entry deleted; retirements now [])", "scripts/ci/spec-shape-gate.mjs +16/-10 (header comments + self-test fixture card literals)" ], "PR_B_23823": [ ".github/workflows/spec-shape-gate.yml +9/-7 (header comment paragraph only)" ] }, "deviations": [ "Self-test fixture literals in spec-shape-gate.mjs (FIXTURE_ENTRY.downstream_card and the two checks comparing against it, plus the malformed sample 'objectui 12325') now use objectstack-ai/objectui#999999 / 'objectui 999999'. The fixture is inline and does not read the live registry, but the card's criterion (0 grep hits in scripts/ci) cannot hold without changing it. Values only; no reader, matcher or assertion changed.", "The THE REGISTRY header example's downstream_card is now objectstack-ai/objectui#N (a placeholder), for the same grep criterion.", "The dispatch prompt's commit trailer (Co-Authored-By with a model name) and the 'Part of #23782' line in the first commit were refused by the pre-push check:commit-card-trailers. Both were reworded on the unpushed commit (model-free 'Claude' with the noreply anthropic address, card relation only in the PR body). No force-push.", "PR bodies end with the repo's session-URL footer form (os-dev.md), not the harness '🤖 Generated with' line." ], "open_questions": [ { "question": "Item 2 remedy: a pointer to objectui's deleted header, or move the measurements here?", "options": [ "A pointer to objectui commit 7d0c174ba8383d08b8dd1d4f7d7845009f1bf2fd with the file path", "B copy the measurements into this header" ], "recommendation": "A (done). Real need: nobody here maintains those measurements and the mechanism is unchanged. Long term: a pinned 40-hex commit cannot drift, while a copy ages. AI error: the pointer names the exact git show path. Scope: no new maintained text." }, { "question": "Self-test fixture card number", "options": [ "A placeholder #999999", "B a real closed objectui card" ], "recommendation": "A (done). A real number would read as a live registration; the fixture only needs a card that passes the parser." } ], "out_of_scope_findings": [] }Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
ACCEPT → PR #23822 comment 6209772596 and PR #23823 comment 6209779754 ·
domain:specseat 1 · sessionsession_01HjR8RUwTPQ3TgbfKihmxp9· 2026-10-16T06:46Z · PR #23822 (Part of, items 2 and 3) lands from the seat once its head is green. PR #23823 (Fixes, item 1,.github/workflows/**) is Tier H, the maintainer's hand, and closes this card when it merges.objectstack-fleet commentedon Oct 16, 2026
Landed · PR #23822 →
43567a8fcb(Part of, items 2 and 3) ·domain:specseat 1 ·os-elon-musk· sessionsession_01HjR8RUwTPQ3TgbfKihmxp9· 2026-10-16T07:02Z43567a8fcborigin/maingit merge-base --is-ancestor 43567a8fcb origin/main→ exit 043567a8fcbequal the reviewed head1b10608543(ACCEPT6209772596)gh-readonly-queue/main/pr-23822-*ref remainsPart of #23782and no closing keyword; this card is still open, as intendedgit grep -n 'objectui#12325' -- scripts/cionorigin/main: 0 hits;spec-shape-retirements.jsonreads"retirements": []State:
pm:dispatchedstays, because item 1 is still in flight: PR #23823 (Fixes #23782,.github/workflows/**, Tier H) is the maintainer's hand, accepted in6209779754, and closes this card when it merges. The cloud dev session is kept until then.Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
Landed · PR #23823 →
944f03850e(PR B, item 1) ·domain:specseat 1 ·os-elon-musk· sessionsession_01HjR8RUwTPQ3TgbfKihmxp9· 2026-10-16T11:32Zos-zhuangafter the APPROVED review 5546718862 on898d297275); merge commit944f03850eorigin/maingit merge-base --is-ancestor 944f03850e origin/main→ exit 0944f03850eequals the reviewed head898d297275(ACCEPT6209779754, contract review PASS6214160554, same head)gh-readonly-queue/main/pr-23823-*ref remainsFixes #23782; this card closedcompleted. PR A (#23822,Part of) landed earlier (6210015726)State:
pm:dispatchedis removed in this act;tooling,priority:p2anddomain:specstay. The cloud dev session was archived at the seat's ACCEPT.main..github/workflows/spec-shape-gate.yml's header says objectui deleted its copy in objectstack-ai/objectui PR fix(objectql,spec): run the pre-delete reference check under the system identity #12596, so this gate is the only one. The header points to objectui7d0c174ba8for the deleted measurements, the same pointerscripts/ci/spec-shape-gate.mjscarries.spec-shape-retirements.jsonholds no entry for a closed card.CONTRACT_REVIEW_TIERreview this governed workflow text owed before the queue ran after the approval, not before it. It PASSed on the merged head.Generated by Claude Code