Skip to content

ci: delete the spec-main-shape-gate copy, the spec shape gate runs in objectstack (objectui#12352) - #12596

Merged
os-zhuang merged 2 commits into
mainfrom
claude/issue-12352-retire-spec-main-shape-gate
Oct 16, 2026
Merged

os-zhuang merged 2 commits into
mainfrom
claude/issue-12352-retire-spec-main-shape-gate

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #12352
Clause-②: no

Executes ruling B on objectstack-ai/objectstack#23238 (comment 6145029395, batch 336 item 3, maintainer 「其他同意」 2026-10-13), the objectui half: "the spec shape gate moves to objectstack … objectui drops its copy" once the objectstack side agrees for two consecutive hourly runs. The objectstack half landed as objectstack-ai/objectstack#23283 (18cd410dc4); the card shows four agreeing pairs.

The successor

  • The gate: objectstack's .github/workflows/spec-shape-gate.yml (Spec Shape Gate), hourly on objectstack main at :52. It clones objectui main, injects the spec built from the objectstack commit with objectstack's own scripts/ci/spec-shape-gate.mjs inject, and runs this repository's TURBO_FORCE=true pnpm type-check --continue. It is registered in objectstack's RELEASE_GATE_WORKFLOWS (scripts/ci/scheduled-full-run.mjs), so its scheduled run is read by the release gate, and a red is attributed to the objectstack lane that moved the shape.
  • Intentional retirements are registered from now on in objectstack's scripts/ci/spec-shape-retirements.json, one entry per retirement naming the objectui card that removes the downstream use; the gate reads a matching diagnostic as known, not new.
  • The successor calls none of the files deleted here: its inject and report are objectstack's own port (read on objectstack origin/main at 6362c66ca).

What changed

Path Change Why
.github/workflows/spec-main-shape-gate.yml deleted the copy the ruling drops
scripts/spec-main-shape-gate.mjs deleted its script; no other file imports it
scripts/__tests__/spec-main-shape-gate.test.ts deleted its pin test
scripts/dependabot-merge-gate.mjs NOT_A_GATE entry and the REQUIRED_CONTEXTS note removed no workflow produces the context any more; the partition test (the gate names checks that no pull-request workflow produces) refuses a classified name nothing produces, and the note said "the reason is written there" about the entry being removed
scripts/__tests__/dependabot-merge-gate.test.ts the objectui#12240 describe block removed it pinned the NOT_A_GATE entry above; the general partition test now holds the absence
scripts/check-required-check-set.mjs WATCHED_CONTEXTS tombstone rewritten it pointed at the deleted workflow's header and described re-enrolment; it now says the workflow is gone and the name must not come back to the ruleset (a required context nothing reports stalls the queue at the ruleset timeout, objectui#3523)
.github/workflows/repo-gates.yml header comment only it said the gate "keeps its own workflow for its hourly run on main"
content/docs/guide/ci-cd-pipeline.md inventory row removed; Repo Gates paragraph updated; the Spec Main Shape Gate section replaced by a short Spec Shape Gate — moved to objectstack section the page's pins require every bare workflow filename it names to exist; the new section names the successor, the registry, and why turbo.json keeps the marker
scripts/__tests__/ci-cd-pipeline-doc.test.ts the two SWEEP_DECLARED_NON_RUN_COMMANDS entries keyed on the deleted workflow removed the map is asserted as an exact set; with no section, both entries would read as stale

Kept on purpose

  • turbo.json globalDependencies keeps node_modules/@objectstack/spec/.spec-main-shape-gate.json. Who writes the marker: before this change, objectui's inject and objectstack's inject; after it, objectstack's inject still writes the same-named marker into every spec copy it replaces in an objectui install (MARKER_FILE in objectstack's scripts/ci/spec-shape-gate.mjs, whose header says the spelling "stays objectui's … for as long as objectui's turbo config names it"). Who reads it: turbo, through this entry, and nothing else in this tree (git grep for the marker name outside the deleted files hits only turbo.json; scripts/select-type-check-scope.mjs reads globalDependencies generically as root-change globs). The function still holds: a local reproduction of the successor gate in a linked worktree shares .turbo/cache with its siblings, and the marker keeps a forced injected run from leaving a verdict an installed tree replays (objectui#12114). Removing it would leave objectstack's header describing a coupling that no longer exists. Its in-tree pin lived in the deleted test, so the entry is now unpinned here; the new docs section carries the reason.
  • scripts/__tests__/select-type-check-scope.test.ts still feeds the two deleted paths as input strings to the selector: that case reproduces PR ci(spec-main-shape-gate): drop the merge_group trigger now the context is out of the required set (objectui#12252) #12262's diff, turbo's answer is stubbed to an empty list, and nothing reads those paths from disk. The case stays true.
  • scripts/__tests__/check-required-check-set.test.ts and fixtures/required-check-set/live-2026-10-12.json are a dated reading of the objectui#12240 window and a pin that the name is neither pinned nor watched; both stay true. The seven ruled names are unchanged.
  • The objectui#12240 window paragraph in the check-required-check-set.mjs header is history and stays true.
  • packages/**, CHANGELOG.md and landed .changeset/* mentions are other lanes' history and are not touched (listed in the report).

Safety readings (2026-10-16, before the first push)

  • Live ruleset: GET /repos/objectstack-ai/objectui/rules/branches/main, evaluated by node scripts/check-required-check-set.mjs --fixture on the saved answer: INTACT, seven required contexts, Spec Main Shape Gate not among them. So deleting the workflow cannot leave a required context unreported. (The script's own live read answered 401 in this container for want of a token, exit 2, a reading not taken; the same endpoint read through gh api answered.)
  • Agreement, re-read at start: the last four schedule runs on main of both gates all concluded success (objectui 38833480846, 38826070331, 38819949451, 38813070302; objectstack 38833492264, 38826210209, 38820098793, 38813219037). objectui#12325 is closed.

Changeset

None. node scripts/check-changeset-presence.mjs on this diff: "No source or published contract of a released package changed in this range, so no changeset is owed" (exit 0). The diff touches workflows, scripts and docs only.

Governed surface

node scripts/check-governed-queue-guard.mjs --test on all nine changed paths: GOVERNED, 2 of 9 paths on .github/workflows/** (exit 3). This PR stays a draft; it is a dispatched PR, so the claiming seat requests the review and lands it after an authorised approval.

Verification at 3e9675e20

node ../objectstack/scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectui refuses by design (the script derives only objectstack's families), so the local set was hand-derived from this repository's own workflows and tests:

  • pnpm exec vitest run --maxWorkers=2 over 89 test files: every test under scripts/__tests__/ that names repo-gates.yml, the deleted workflow, dependabot-merge-gate, check-required-check-set, ci-cd-pipeline.md or workflow-checks, plus every test that reads .github/workflows/: Test Files 89 passed (89), Tests 3340 passed (3340), lock verdict command-exit 0.
  • pnpm type-check:scripts (tsc over scripts/, the pin tests included): exit 0.
  • pnpm exec eslint on the four changed script and test files: exit 0.
  • The install-free Repo Gates steps, each exit 0: check-control-bytes, check-action-ref-convention, check-pre-install-import-graph (self-test and run), check-shell-escape-residue, check-doc-links, check-doc-fence-languages (self-test and run), check-doc-example-ids, check-doc-component-types; plus check-new-cross-file-line-citations (0 new), check-required-check-set --self-test, check-changeset-presence.
  • NOT MEASURED locally, CI's: the full pnpm test, pnpm lint, the turbo type-check, Build Docs, Build & E2E, and the Repo Gates steps that need a build (doc snippet and skill example compiles). The new docs section adds no fenced block.

Acceptance notes

  • objectstack's scripts/ci/spec-shape-retirements.json still carries the entry registered to objectui#12325, although that card closed on 2026-10-14 and the file's $comment says an entry is "deleted when that card closes". The objectui runs have been green since, so the entry matches nothing today; a later break of the same pattern would read as known. An observation about the objectstack side, not acted on here.
  • The turbo.json marker entry has no in-tree pin after this change (see "Kept on purpose").
  • Several packages/** comments describe the gate in the present tense ("compiled … by the Spec Main Shape Gate against main"). The compile they describe still happens, now as objectstack's Spec Shape Gate; only the name is stale. Other lanes' files, left alone.

维护者速读(草稿)


Generated by Claude Code

… objectstack

Executes ruling B on objectstack-ai/objectstack#23238 (comment 6145029395),
the objectui half: the spec shape gate moved to objectstack
(`.github/workflows/spec-shape-gate.yml` there, hourly, read by its release
gate), and objectui drops its copy now that the two gates agree.

- delete `.github/workflows/spec-main-shape-gate.yml`,
  `scripts/spec-main-shape-gate.mjs` and its pin test;
- `scripts/dependabot-merge-gate.mjs`: drop the `NOT_A_GATE` entry and the
  `REQUIRED_CONTEXTS` note for a context no workflow produces any more (the
  partition test refuses a classified name nothing produces), and the
  objectui#12240 describe block that pinned it;
- `scripts/check-required-check-set.mjs`: the tombstone now says the workflow
  is gone, so the name must not come back to the ruleset;
- `.github/workflows/repo-gates.yml`: header comment brought up to date;
- `content/docs/guide/ci-cd-pipeline.md`: inventory row and section replaced
  by a short section naming the successor and the retirement registry, and
  why `turbo.json` keeps the injection marker in `globalDependencies`;
- `scripts/__tests__/ci-cd-pipeline-doc.test.ts`: the two declared non-run
  commands of the deleted section removed.

Claude-Session: https://claude.ai/code/session_016PVjjuVPte5XEJvaQx1E4t
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

维护者速读 · objectui#12596 · domain:devx @ objectui seat 1 · 2026-10-16T01:55Z

席位核对 · ACCEPT · objectui#12596 (draft, head 3e9675e20, Fixes #12352) · domain:devx @ objectui seat 1 · session_016PVjjuVPte5XEJvaQx1E4t

Checked on GitHub and against the sources, not on the report's say-so.


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review October 16, 2026 01:57
@os-zhuang
os-zhuang enabled auto-merge October 16, 2026 01:57
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对 · approval recorded · objectui#12596 · domain:devx @ objectui seat 1 · 2026-10-16T01:58Z

reading value
approval os-zhuang APPROVED, review 5542095139, 2026-10-16T01:57:37Z. os-zhuang is in GOVERNED_APPROVERS
new head d6c39af00: os-zhuang merged main (f5eec6383) into the branch at 2026-10-16T01:57:42Z, then readied the PR and armed auto-merge
PR diff after the merge unchanged. Against its new merge base f5eec63836 it is the same 9 files, +50 / −2807, and the git patch-id --stable value equals the reviewed head's diff (7025fc1df9a2 both)

Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/cd configuration documentation Improvements or additions to documentation tests

Projects

None yet

3 participants