Skip to content

ci: delete the spec-main-shape-gate copy — four consecutive hourly runs agree with objectstack's Spec Shape Gate, which the release gate reads (ruling B on objectstack#23238, the objectui half) #12352

Closed

Description

@objectstack-fleet

Filing gate: execution of a ruling — ruling B on objectstack-ai/objectstack#23238 (comment 6145029395, batch 336 item 3, maintainer 「其他同意」 2026-10-13): "the spec shape gate moves to objectstack … objectui drops its copy" once "two consecutive hourly runs on the objectstack side agree with objectui's". Filed by the objectstack domain:skills seat 1 (seat post objectstack-ai/objectstack#7623, session_013zGKMG1cRedVzWtqGGGZW9, huangyiirene), the seat that landed the objectstack half (objectstack-ai/objectstack#23283, 18cd410dc4). Lane: domain:devx (this repo's CI workflows). ⛔ Not a claim; triage grades on first touch.

The evidence the ruling asked for (four consecutive agreeing pairs, read from both repositories' runs)

hour (UTC, 2026-10-14) objectstack Spec Shape Gate (schedule, main) objectui spec-main-shape-gate (schedule, main)
01:5x run 38498460141 — success, 0 spec shape break annotations (the #23160 retirement registered → known) run 38498422265 — failure on TS2339 ×4, TS2367 ×4, TS2678 ×2 (the #23160 retirement, unregistered here)
02:5x run 38503562367 — success, 0 new-break annotations run 38503474196 — failure, the same four diagnostic classes
03:5x run 38508692416 — success, 0 new-break annotations run 38508650754 — failure, the same four diagnostic classes
04:5x run 38513897579 — success, 0 new-break annotations run 38513810543 — failure, the same four diagnostic classes

Both gates compiled objectui main against the spec built from objectstack main at the same hour; every red row on this side is a row the objectstack side reads as the registered retirement of objectstack-ai/objectstack#23160 (registered to this repo's card #12325 in scripts/ci/spec-shape-retirements.json). Same diagnostics, red where unregistered, known where registered — the two gates agree, and the objectstack side is the one the release gate reads (scripts/ci/scheduled-full-run.mjs RELEASE_GATE_WORKFLOWS).

What done looks like

Workload: S (a deletion with two pin edits); precedent objectui PR #12250.

四维(业务立场)

  • 长远合理性:一道形状门,跑在上游、发版前必过、红归属到改动方;下游不再替上游体检。
  • 实际业务拉动:四对小时运行同诊断,objectui 侧连红只是未登记的已知退役,再跑一小时就是一小时无信息的红。
  • 防 AI 犯错:两处各一份结果,AI 席位会读错「哪边是权威」;删掉副本只剩一个读数。
  • 创业阶段不扩散:纯删除,不加门禁;必需检查名单(objectui#12240)不动。

Dedupe: objectui labels=domain:devx&state=all&since=2026-10-01 grepped for spec-main-shape-gate|shape gate|Spec Main Shape (25 cards) — #12214 (the hourly run), #12240 (out of the required set; PR #12250), #12252 (the merge_group trigger dropped) and #12325 (the retirement card, pm:on-hold) are the siblings; none deletes the gate. No open objectui PR touches the gate's files at filing. Dedupe words: spec-main-shape-gate deletion · objectui gate copy retired · ruling B objectui half.


Generated by Claude Code

Activity

  1. added
    domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repo
    on Oct 14, 2026
  2. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade on the queue · tooling · priority:p2 · domain:devx · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-14T05:57Z

    Read fresh, and the ruling checked: objectstack-ai/objectstack#23238 6145029395 (batch #336 item 3, letter B, maintainer 「其他同意」) says objectui drops its copy once the objectstack side agrees for two consecutive hourly runs. This card shows four.

  3. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 · domain:devx @ objectui seat 1 · 2026-10-16T01:31Z · triage-graded (6161960849); executes ruling B on objectstack-ai/objectstack#23238 (6145029395)
    Session: session_016PVjjuVPte5XEJvaQx1E4t
    Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-12352-retire-spec-main-shape-gate
    Worktree: objectui-issue-12352
    Domain: domain:devx
    Seat: domain:devx#1
    File surface: .github/workflows/spec-main-shape-gate.yml, scripts/spec-main-shape-gate.mjs and scripts/__tests__/spec-main-shape-gate.test.ts (deleted); the lines that name the gate in scripts/check-required-check-set.mjs, scripts/dependabot-merge-gate.mjs, .github/workflows/repo-gates.yml, turbo.json and content/docs/guide/ci-cd-pipeline.md; their pins scripts/__tests__/{check-required-check-set,dependabot-merge-gate,ci-cd-pipeline-doc,select-type-check-scope}.test.ts and scripts/__tests__/fixtures/required-check-set/**; one empty-frontmatter .changeset/*.md if the changeset gate asks. Stop on breach and explain it in the report. ⛔ No packages/** (their mentions are history; report them), ⛔ no CHANGELOG.md or landed .changeset/*.
    Container & model: S, mode:subagent, model: TIER_DEFAULT (dispatch-gates --tier on the gate paths: "no path-derived mandate")
    Clause-②: no
    Responsibility: n/a — not a defect card (maintainer-ruled execution, tooling)
    Thread-read: 6161960849
    Serial constraints cleared:


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 12352,
      "status": "done",
      "branch": "claude/issue-12352-retire-spec-main-shape-gate",
      "pr": "https://github.com/objectstack-ai/objectui/pull/12596",
      "session": "session_016PVjjuVPte5XEJvaQx1E4t",
      "premise_still_valid": true,
      "summary": "Deleted objectui's copy of the spec shape gate (.github/workflows/spec-main-shape-gate.yml, scripts/spec-main-shape-gate.mjs, scripts/__tests__/spec-main-shape-gate.test.ts), executing ruling B on objectstack-ai/objectstack#23238; draft PR #12596 (head 3e9675e20, base 7b5e55893, assignee os-sales). Removed the now-unproduced 'Spec Main Shape Gate' from NOT_A_GATE in scripts/dependabot-merge-gate.mjs (plus its REQUIRED_CONTEXTS note and the objectui#12240 describe block), rewrote the WATCHED_CONTEXTS tombstone in scripts/check-required-check-set.mjs, updated the repo-gates.yml header comment, replaced the ci-cd-pipeline.md row and section with a short 'Spec Shape Gate — moved to objectstack' section naming the successor and the retirement registry, and dropped the two stale SWEEP_DECLARED_NON_RUN_COMMANDS entries. Kept turbo.json's globalDependencies marker on purpose: objectstack's own inject (scripts/ci/spec-shape-gate.mjs MARKER_FILE) still writes '.spec-main-shape-gate.json' into objectui's installed spec and turbo is its only reader; it still guards the objectui#12114 local-reproduction cache case. Premise re-verified on the new base: the three files existed, objectstack spec-shape-gate.yml (cron '52 * * * *') is in RELEASE_GATE_WORKFLOWS, both gates' last four schedule runs on main concluded success, #12325 is closed, and the live ruleset no longer lists 'Spec Main Shape Gate' (so deletion cannot stall the queue).",
      "tests": "At HEAD 3e9675e20 (git rev-parse --short HEAD after the final commit; no later push). (1) bash os-verify-lock.sh -c 'pnpm exec vitest run --maxWorkers=2' over 89 hand-derived files (every scripts/__tests__ test naming repo-gates.yml, the deleted workflow, dependabot-merge-gate, check-required-check-set, ci-cd-pipeline.md or workflow-checks, plus every test reading .github/workflows/): 'Test Files  89 passed (89)', 'Tests  3340 passed (3340)', 'os-verify-lock: VERDICT command-exit 0 · held the lock 214s'. (2) pnpm type-check:scripts (tsc -p tsconfig.scripts.json) under the lock: VERDICT command-exit 0. (3) pnpm exec eslint on the four changed .mjs/.ts files: exit 0, no output. No ablation: the diff changes config lists, comments, docs and deletes files; it changes no tested behaviour (os-dev rule: config/script/workflow/docs are not ablated). The removal of the NOT_A_GATE entry is forced by the existing partition assertion 'the gate names checks that no pull-request workflow produces'.",
      "gates": "Route B: node /home/user/objectstack/scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectui exit 2 'REFUSING — asked for objectstack-ai/objectui, but this checkout is objectstack-ai/objectstack' (by design), so --ran reconciliation does not apply; local set hand-derived from objectui's repo-gates.yml install-free steps. Each exit captured before any pipe: check-control-bytes 0; check-action-ref-convention 0; check-pre-install-import-graph --self-test 0 and run 0; check-shell-escape-residue 0; check-doc-links 0 ('Links are valid across 17 scan roots', incl. the new #spec-shape-gate--moved-to-objectstack anchor); check-doc-fence-languages --self-test 0 and run 0; check-doc-example-ids 0; check-doc-component-types 0; check-new-cross-file-line-citations 0 ('0 new citation(s)'); check-required-check-set --self-test 0 ('32 cases pass'); check-changeset-presence 0 ('no changeset is owed'); check-governed-queue-guard --test on all 9 changed paths exit 3 = GOVERNED (2 of 9 on .github/workflows/**), PR stays draft; control-byte self-scan grep exit 1 (no hits). Live ruleset: gh api repos/objectstack-ai/objectui/rules/branches/main then node scripts/check-required-check-set.mjs --fixture on it: exit 0 INTACT, 7 required contexts, Spec Main Shape Gate absent (the script's own live read exit 2, HTTP 401, no token in container = reading not taken). PR check-runs on 3e9675e20 at report time: Changeset Declaration=success, Changeset Fixed Group Check=success, Changeset Claim Re-read=success, Line Citation Gate=success, Governed Surface Queue Guard=success, label=success; Type Check, Lint, Repo Gates, Build Docs, Build & E2E, Test (shard 1-16/16), Test (dist pins), Live E2E (informational)=in_progress; dependabot/Test (coverage)/coverage shards=skipped. No 'Spec Main Shape Gate' check run on the PR (workflow gone on the branch). NOT MEASURED locally, CI's: full pnpm test, pnpm lint farm, turbo type-check, Build Docs, Build & E2E, Repo Gates build-dependent steps (doc snippet / skill example compiles; the new section adds no fence).",
      "mcp_calls": "0",
      "api_writes": "2 relay strokes via scripts/pm/fleet-write/dispatch.mjs and post-stamped (each one POST /repos/objectstack-ai/objectstack/dispatches): (1) pr_create = POST /repos/objectstack-ai/objectui/pulls (draft) + POST /repos/objectstack-ai/objectui/issues/12596/assignees [os-sales], run 38837082474 success, read-back 9957 bytes sent = 9957 stored; (2) this os-dev-report comment = POST /repos/objectstack-ai/objectui/issues/12352/comments. git push x2 (empty-branch probe, then 3e9675e20) are not REST. No label writes, no PR body PATCH.",
      "open_questions": [],
      "out_of_scope_findings": [
        "observation, not filed (dormant; carrier: none, the objectstack registry's accepting seat would own it): objectstack scripts/ci/spec-shape-retirements.json on origin/main 6362c66ca still carries the entry with downstream_card objectstack-ai/objectui#12325, though that card was closed completed 2026-10-14 and the file's $comment says an entry is 'deleted when that card closes'; objectui's hourly runs have been green since, so it matches nothing today, but its packages/** TS2367/TS2678 '\"api\"' patterns would read a later same-pattern break as known. Dedupe words: spec-shape-retirements stale entry · 12325 registry entry · retirement registry cleanup",
        "observation, not filed (carrier: none): turbo.json globalDependencies marker entry is now unpinned in objectui (its pin lived in the deleted spec-main-shape-gate.test.ts); the reason now lives in content/docs/guide/ci-cd-pipeline.md 'What stays here'.",
        "history, other lanes, left alone (stays true, past tense): packages/data-objectstack/src/spec-symbol-batch6.test.ts ('IT FIRED AGAIN ... in the Spec Main Shape Gate'); packages/react/src/hooks/__tests__/useNavigationOverlay.modeDefault.test.tsx ('the one diagnostic the Spec Main Shape Gate reported'); packages/types/src/__tests__/any-component-emit-headroom-11573.test.ts first mention ('went red'); packages/types/src/__tests__/object-view-unmirrored-keys-7779.test.ts (both: 'printed' / 'never printed'); packages/types/src/__tests__/retired-key-type.ts ('were written to compile against both ... while the two disagreed'); packages/types/src/zod/index.zod.ts and public-blocks.zod.ts ('caught it'); packages/types/src/zod/reports.zod.ts ('measured by').",
        "present tense, name now stale but substance true (the same objectui type-check against spec main still runs, as objectstack's Spec Shape Gate), other lanes, left alone: packages/data-objectstack/src/metadata-client.overlayScope.test.ts (two comments: 'compiled against TWO specs ... the Spec Main Shape Gate'; 'the Spec Main Shape Gate type-checks and runs no test'); packages/plugin-designer/src/__tests__/NavigationDesigner.specNavTypes.test.tsx ('the Spec Main Shape Gate's injected install'); packages/types/src/__tests__/any-component-emit-headroom-11573.test.ts second mention ('compiles against objectstack main'); packages/types/src/__tests__/authoring-nodes-11364.test.ts, element-repeater-data-source-11880.test.ts, grid-default-filters-gantt-map-filter-round10-6152.test.ts ('compiled against both ... by the Spec Main Shape Gate against main'); packages/types/src/__tests__/report-chart-query-spec-parity.test.ts (three: 'compiled ... by the Spec Main Shape Gate', 'type-checks and runs no test', 'the half the Spec Main Shape Gate never runs'); packages/types/src/__tests__/spec-object-refinements-7715.test.ts ('the Spec Main Shape Gate compiles this repository'). CHANGELOG.md (app-shell, i18n, runner) and .changeset (11573, 12093, 12170) mentions are history, untouched."
      ],
      "su_du": "- 删了什么:objectui 自带的 spec 形状门副本 —— `spec-main-shape-gate.yml`、它的脚本与 pin 测试;另把依赖收紧台账、必需检查巡检、Repo Gates 注释和 CI 文档里提到它的几处改成「门已搬到 objectstack」。\n- 为什么安全:维护者裁决 B(objectstack-ai/objectstack#23238)要求两边一致后删副本,两边最近四个小时运行结论一致;线上必需检查名单(开 PR 前实读,7 项)早已不含这个检查名,删掉不会卡住合并队列;objectstack 的后继门用它自己的脚本,不引用被删文件。\n- 谁接替:objectstack 的 `spec-shape-gate.yml` 每小时 :52 用 objectstack main 构建的 spec 编译 objectui main,发版门读它,红灯归改动 spec 的那条 lane;有意的退役登记在 objectstack `scripts/ci/spec-shape-retirements.json`。\n- 保留:`turbo.json` 里那条注入标记(objectstack 注入时仍写它,防本地复现时 turbo 缓存串味);回滚 = revert 本 PR。",
      "files_changed": [
        ".github/workflows/spec-main-shape-gate.yml (deleted)",
        "scripts/spec-main-shape-gate.mjs (deleted)",
        "scripts/__tests__/spec-main-shape-gate.test.ts (deleted)",
        "scripts/dependabot-merge-gate.mjs",
        "scripts/__tests__/dependabot-merge-gate.test.ts",
        "scripts/check-required-check-set.mjs",
        ".github/workflows/repo-gates.yml",
        "content/docs/guide/ci-cd-pipeline.md",
        "scripts/__tests__/ci-cd-pipeline-doc.test.ts"
      ],
      "changed_lines": "9 files changed, 50 insertions(+), 2807 deletions(-) (git diff --shortstat 7b5e55893..3e9675e20)",
      "deviations": [
        "Base moved: the dispatch read origin/main ae923ece22; the worktree was cut from 7b5e55893 (origin/main at start). Every premise was re-read on 7b5e55893; the lead-list grep hit the same 35 files.",
        "Within the claimed surface, four items stay unchanged on purpose: turbo.json (marker still written by objectstack's inject, read by turbo; see summary), scripts/__tests__/select-type-check-scope.test.ts (the paths are input strings to a stubbed selector reproducing PR #12262, not read from disk), scripts/__tests__/check-required-check-set.test.ts and fixtures/required-check-set/live-2026-10-12.json (a dated reading that stays true; the seven ruled names unchanged), and the objectui#12240 window paragraph in the check-required-check-set.mjs header (history). No .changeset added: check-changeset-presence says none is owed.",
        "The REQUIRED_CONTEXTS note in dependabot-merge-gate.mjs was deleted rather than rewritten: it pointed at the NOT_A_GATE entry this PR removes, and the partition test already refuses a classified name that nothing produces.",
        "check-required-check-set.mjs live read answered HTTP 401 in this container (no GITHUB_TOKEN), exit 2; the ruleset was read through gh api and judged with the same script's --fixture.",
        "Attribution: the harness reminder asked for a model-named Co-Authored-By trailer and a different PR footer; commits carry the model-free pair (Claude-Session + Co-authored-by: Claude) per AGENTS.md section 9, and the PR body ends with the os-dev session-URL footer. No model identifier is in the PR, the commit, the docs or this report."
      ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → objectui#12596 comment 6206273492 · domain:devx @ objectui seat 1 · 2026-10-16T01:56Z. Tier H (.github/workflows/**): the PR stays a draft with needs-user-decision and review requested from os-zhuang and hotlong; after an authorised approval and green CI the seat lands it. The objectstack-side follow-up is objectstack-ai/objectstack#23782.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: objectui#12596 → c6a42be392 (Fixes #12352) · domain:devx @ objectui seat 1 · session_016PVjjuVPte5XEJvaQx1E4t · 2026-10-16T02:21Z

    reading value
    PR objectui#12596 approved by os-zhuang (review 5542095139); readied, auto-merge armed and enqueued by os-zhuang; merged through the queue at 2026-10-16T02:20:45Z
    objectui main c6a42be392 is the head (one parent, 7d0c174ba)
    content probe .github/workflows/spec-main-shape-gate.yml, scripts/spec-main-shape-gate.mjs and scripts/__tests__/spec-main-shape-gate.test.ts are absent. turbo.json still names .spec-main-shape-gate.json (kept on purpose)
    blob identity all 6 edited files equal the PR head d6c39af00: repo-gates.yml f4c959cc77, ci-cd-pipeline.md 8093708281, ci-cd-pipeline-doc.test.ts cbbd8cdeae, dependabot-merge-gate.test.ts 8dd6f36903, check-required-check-set.mjs bbedf5fd39, dependabot-merge-gate.mjs 68610ab4ad

    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repopriority:p2tooling

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions