Skip to content

[Decision] Three scheduled workflows nobody reads: retire Spec Coverage (nightly) and Engine Split Metric (weekly, report-only), and fold Showcase Smoke into Nightly Tiers — or keep them #26445

Closed

Description

@objectstack-fleet

Ruled: 6433804956 · letter B · 2026-10-27T04:32Z

Filing gate: ③ maintainer-directed. Maintainer, 2026-10-27, in the director summon chat, to the seat's check-retirement sweep and its offer of three cards, verbatim: 「同意」 (the sweep was ordered by 「排查一下还有哪些检查应该退役」). Filed by the director seat (session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708, sweep record 6433263738). ⛔ Not a claim. Batch-of: 11 (director seat, 2026-10-27). Dedupe: 600 newest open + closed issues grepped for the check's file name → 0 unless stated. Filing gate ②: a maintainer-only decision (retiring a workflow is a governed-surface change under .github/workflows/**; the maintainer asked which checks to retire). Reader after the ruling: domain:devx (one Tier H PR).

维护者速读

三条定时工作流各有问题:Spec Coverage(每天 05:00,带覆盖率插桩跑 spec 全套)自己的文件头写着「趋势产物最多偶尔看一眼」;Engine Split Metric(每周一,ADR-0076 D7 引擎跨包提交比)只出报告、不设门,「阈值定了才设门」,没人在等这个阈值;Showcase Smoke(每天 07:00,showcase 每个导航面渲染健康)文件头说「稳定后升为 PR 门」,从未升,30 天 8 红 22 绿,红了也不开卡没人读,而 ui 并仓后 Build & E2E UI 已在每个 PR 上构建控制台。请裁:A 三条全退;B 退前两条,Showcase Smoke 并进 Nightly Tiers(它红了会开卡);C 三条都留。

一句话问题

三条没有读者的定时检查每天花 runner 时间,红了也不会变成任何人的任务。

Governing text

  • .github/workflows/coverage-nightly.yml header: the instrumented spec suite "added minutes of instrumentation overhead to every main push … for a trend artifact that is consulted occasionally at best" — that is why it was moved off push; nothing reads the artifact since.
  • .github/workflows/engine-split-metric.yml header: "Report-only — no gate until a threshold is agreed (~88% at ADR time)"; ADR-0076 D7.
  • .github/workflows/showcase-smoke.yml header: "Manual + nightly only; it never gates PRs. Promote to a PR gate once it has proven stable here."
  • test-nightly-tiers.yml: the nightly e2e/live tiers; its report job files one issue per failing file (maintainer direction 2026-09-07 「测试会不会太多,是否都是必要的」).
  • AGENTS.md Prime Directive 14: .github/workflows/** is Tier H.

Premises (re-check)

  • 30-day run history on main (GET /actions/workflows/{id}/runs): Spec Coverage 29 success / 1 failure; Engine Split Metric 5 success; Showcase Smoke 22 success / 8 failure (the failing step: "Vendor the pinned Console SPA"), last six green. None of the three writes an issue (grep -c "issues" <file> → 0 write paths).
  • No card in the 600 newest issues cites a coverage trend, the engine split ratio, or a showcase-smoke red.

Options × cost × effort

What Consequence Effort
A retire all three delete three workflow files, their check:* wiring and scripts/ci/scheduled-full-run.mjs's knowledge of them if any the showcase nav-surface render assertion is no longer run anywhere nightly; Build & E2E UI covers the Console build on PRs, not every showcase surface devx · 1 Tier H PR · XS
B retire two, fold the third as A for Spec Coverage and Engine Split Metric; Showcase Smoke's assertion becomes a *.live.test.* under the nightly tiers so a red files a card the assertion keeps running with a reader; one nightly job fewer devx · 1 Tier H PR + one test move · S
C keep nothing three jobs keep running unread none

业务含义

A:没人看的仪表盘拆掉;B:拆两块,第三块的指针接到会响的那块表上;C:维持现状。

四轴

os-decision-facets

  • ① 项目长远合理性:没有读者的检查不是检查;B 把唯一还有断言价值的那条接到有读者的夜跑上,缩小工作流数量而不丢断言。
  • ② 实际业务拉动:三条工作流 30 天 0 张卡、0 个读者;Showcase Smoke 8 次红无人处理。
  • ③ 防 AI 犯错:B 下 showcase 面渲染失败会开卡(响亮);今天是静默红。
  • ④ 创业阶段不扩散:remove 优于 declare-and-maintain;A/B 都减文件,C 保留三份永久义务。
    Prior rulings read: coverage nightly · engine split · showcase smoke → ADR-0076 D7; maintainer 2026-09-07 「测试会不会太多」; thread: none.

推荐 + 置信缺口

B。只看①选 B;②③④ 是否翻转:否。不取 A(丢掉 showcase 每个导航面的渲染断言,而它在 ui 并仓后的 PR 门里没有等价物);不取 C。缺口:Showcase Smoke 的断言搬进 nightly tiers 的成本未实测(它是 Playwright 对真实栈,nightly tiers 已跑 *.live.test.*,形状相同)。

裁后执行

devx 席开一个 Tier H PR(删两条或三条工作流 + 搬断言),由你批准落地;本卡随 PR 关闭。

Activity

  1. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Brief-claimed-by: session_01KrKXQVvgYk2AJ4VkqMobyb · batch #407 · 2026-10-27T04:02Z

    Director seat, summon #51 continuation (ledger objectstack#12708). Filed by this seat on the maintainer's 「同意」 to the check-retirement sweep (record 6433263738) and presented in batch #407 as item 1 of 1. The card carries the six items and the facets block; seat increment at filing:

    • Run history re-read 2026-10-27T04:02Z on main: Spec Coverage 29 green / 1 red in 30 days, Engine Split Metric 5 / 0, Showcase Smoke 22 / 8 with the last six green; none of the three files an issue or is read by a script or a card (600 newest issues grepped).
    • The seat recommends B: retire Spec Coverage and Engine Split Metric; move Showcase Smoke's nav-surface render assertion under Nightly Tiers (*.live.test.*), whose report job files a card per red file, so the one assertion with product value keeps a reader. Not A (loses the only nightly check that renders every showcase surface) and not C. Workload: devx · 1 Tier H PR (.github/workflows/**, lands by the maintainer's approval) · S.
      Prior rulings read: coverage nightly · engine split · showcase smoke → ADR-0076 D7; maintainer 2026-09-07 「测试会不会太多」; thread: none.
  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Ruling: batch #407 item 1 · letter B · maintainer 「同意」 2026-10-27T04:31Z

    Recorded by the director seat (summon #51 continuation, session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708). The maintainer answered batch #407 with 「同意」 — the seat letter. Brief 6433433659. Letter B: retire .github/workflows/coverage-nightly.yml (Spec Coverage) and .github/workflows/engine-split-metric.yml (Engine Split Metric, ADR-0076 D7 report-only) — the workflow files, their check:* wiring and any reader of their artifacts; .github/workflows/showcase-smoke.yml is retired as a workflow and its nav-surface render assertion moves under Nightly Tiers as a *.live.test.* so that a red files a card through that job's report step. Not A (the showcase assertion would run nowhere) and not C.

    Workload (card column): devx · one Tier H PR (.github/workflows/**, lands by the maintainer's approval) · S; the test move is measured on the PR (Playwright against the live stack, the shape Nightly Tiers already runs). ADR-0076 D7's metric script may stay in scripts/ unwired, or go with the workflow — the lane says which in the PR body; if it goes, the ADR gets a one-line note in a separate governed PR.

    Execution: needs-user-decision → pm:queue in this act (domain:devx, p2, area:devpath). Ruling-ref: names this comment. Clause-②: no, Metadata-protocol: none.

  3. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 10 · 2026-10-27T05:20Z
    Session: session_01Q4MDXRbEJCNdPAP4SiXwp9 (devx seat 2) · card thread cmsg_01FdL1XeUyvVNxLreh3F4Qi988VUoRMhEaekZbB638HuLE
    Account: os-steve
    Branch: claude/project-thread-q9cfh6 (the harness-pinned branch of the card thread; it names no issue, so this claim is the identity record; amended on spawn)
    Worktree: objectstack-issue-26445
    Domain: domain:devx
    Seat: domain:devx#2 (seat post #20163)
    File surface: delete .github/workflows/coverage-nightly.yml and .github/workflows/engine-split-metric.yml with their check:* wiring and any reader of their artifacts; retire .github/workflows/showcase-smoke.yml as a workflow and move its nav-surface render assertion under Nightly Tiers as a *.live.test.* (the shape test-nightly-tiers.yml already runs, so a red files a card through its report step); .github/dependabot.yml / roster / required-context / self-test pins that list the three workflows. ADR-0076 D7's metric script either stays unwired in scripts/ or goes, the PR body says which; an ADR note, if owed, is a separate governed PR (⛔ no docs/adr/** here). ⛔ No ci.yml, no ui/.github/**; a ui/ test path only if the moved assertion must live beside the showcase app, and then named in the report. ⛔ Tier H (.github/workflows/**): draft until a GOVERNED_APPROVERS approval; the dev neither readies nor arms auto-merge · Amended on the thread's hand-back (PR #26529): the moved assertion lives at examples/app-showcase/test/showcase-smoke.live.test.ts with examples/app-showcase/vitest.config.ts, playwright.config.ts and types/node-shim.d.ts; turbo.json (showcase#test inputs gain scripts/nightly-tiers.mjs and its .d.mts); the pins that counted the retired workflows: scripts/check-stall-guard-budget.mjs (battery 10 floor 13→12), scripts/pm/dispatch-gates.self-test.mjs (the engine-split live-tree case), docs/qa/platform-checklist/areas/platform-core.json (source path); comment pointers in half-state-patrol.yml and shard-timings-refresh.yml; scripts/check-engine-split-ratio.mjs stays unwired (its --self-test stays in lint.yml)
    Container & model: M, mode:thread, model: default tier (TIER_DEFAULT, from dispatch-gates --tier: no path-derived mandate), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — decision card, ruling B
    Thread-read: 6433804956
    Ruling-ref: 6433804956
    Premise: the three workflows exist on main with the 30-day histories the card measured and none writes an issue (the dev re-reads each file and greps every reader of their names and artifacts first)
    Serial constraints cleared: no in-flight PR of this seat touches these three workflow files or test-nightly-tiers.yml


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 26445,
      "status": "done",
      "branch": "claude/project-thread-q9cfh6",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26529",
      "session": "session_01ADHkmTHHuvZqTM7XKWfv8Q",
      "premise_still_valid": true,
      "summary": "Ruling B (6433804956). Deleted coverage-nightly.yml and engine-split-metric.yml; check-engine-split-ratio.mjs stays in scripts/ unwired (on demand, header says so, --self-test still in lint.yml), so ADR-0076 D7 still names a live script and only its workflow sentence needs a separate governed one-line note. showcase-smoke.yml retired; the whole e2e/ Playwright suite now runs from examples/app-showcase/test/showcase-smoke.live.test.ts in the Nightly Tiers live tier (app-showcase vitest config reads OS_TEST_TIERS via scripts/nightly-tiers.mjs; turbo hashes it). test-nightly-tiers.yml gained a continue-on-error prepare step (console:build + playwright chromium on the showcase's shard), a diagnostics upload, and runs slices before the whole-package leg so a red smoke cannot stop the CLI slice. Pins moved: stall-guard-budget battery 10 floor 13->12, dispatch-gates.self-test live literal-argv key, platform-core.json source.",
      "tests": "Live tier on the real stack (OS_TEST_TIERS=nightly vitest run, examples/app-showcase, head 0d08883a): playwright '53 passed (2.3m)', vitest 'Test Files 1 passed (1) / Tests 1 passed (1)'. Negative control via scripts/ablation-replace.mjs (Task Board surface forced red, anchor 1->0, blob cf29f07379cd->26b53aa6a54e): '52 passed', vitest red '1 of 53 showcase smoke test(s) failed' naming 'showcase-smoke.spec.ts > surface renders cleanly: Task Board'; restored blob == HEAD, git diff HEAD empty. Queue tier: pnpm --filter @objectstack/example-showcase test 'Test Files 39 passed (39) / Tests 484 passed (484)'; typecheck exit 0. nightly-tiers --check: showcase 39 queue / 1 nightly, cli 512 / 85. Partition k/2: shard1 cli 1/2 + example-showcase (whole), shard2 cli 2/2.",
      "gates": "dispatch-gates --commands: 86 at 57f8caa3, all 86 exit 0 (exits captured before any pipe); --ran: '86 derived famil(ies) accounted for - 86 run, 0 NOT-MEASURED (a DERIVED zero)'. Red on the way, fixed in PR: check:stall-guard-budget (battery 10 floor), check:pm-dispatch-gates (1/1935 fast case). Slow tier node scripts/pm/check-dispatch-gates.mjs --slow: '2200 cases pass' exit 0. After merge of origin/main (2094edeb): derivation unchanged (86); partition-test-shards --self-test, nightly-tiers --self-test, nightly-tiers --check exit 0. CI families: in_progress on PR #26529 head 2094edeb (incl. Nightly Tiers on the PR via its own paths trigger = first runner reading of the prepare step + smoke under turbo strict env).",
      "dogfood_battery": "n/a - no ! in the PR title and no (narrowing) arm",
      "line_budget": "+323 / -201, 15 files",
      "files_changed": [
        ".github/workflows/coverage-nightly.yml (deleted)",
        ".github/workflows/engine-split-metric.yml (deleted)",
        ".github/workflows/showcase-smoke.yml (deleted)",
        ".github/workflows/test-nightly-tiers.yml",
        ".github/workflows/half-state-patrol.yml",
        ".github/workflows/shard-timings-refresh.yml",
        "examples/app-showcase/test/showcase-smoke.live.test.ts (new)",
        "examples/app-showcase/vitest.config.ts",
        "examples/app-showcase/types/node-shim.d.ts",
        "examples/app-showcase/playwright.config.ts",
        "docs/qa/platform-checklist/areas/platform-core.json",
        "scripts/check-engine-split-ratio.mjs",
        "scripts/check-stall-guard-budget.mjs",
        "scripts/pm/dispatch-gates.self-test.mjs",
        "turbo.json"
      ],
      "deviations": [
        "turbo.json (@objectstack/example-showcase#test inputs + scripts/nightly-tiers.mjs/.d.mts) is outside the claim's named File surface: the vitest config now imports that module, so without it a predicate change would replay a cached test result. Seat: please add it to the claim's File surface.",
        "scripts/pm/dispatch-gates.self-test.mjs (scripts/pm/**, governed wording surface) edited: its live-tree case required the deleted workflow's 'check-engine-split-ratio.mjs --days 90' and reds check:pm-dispatch-gates otherwise; read as one of the increment's pins. Wording files scripts/pm/dispatch-gates.mjs untouched.",
        "test-nightly-tiers.yml leg order changed to slices-first (not in the card): the loop breaks on the first red leg, so whole-first would let a red smoke skip the CLI e2e slice on its shard.",
        "ci.yml L810 comment still names the coverage-nightly workflow (ci.yml read-only for this card)."
      ],
      "mcp_calls": "7 - issue_read x2 (get, get_comments), actions_list x4 (list_workflow_runs x2, list_workflow_jobs x2), pull_request_read x1 (get); no write tool",
      "api_writes": "2 - relay pr_create (objectstack-ai/objectstack#26529, labels skip-changeset, assignee os-steve), relay comment (this os-dev-report on #26445); plus git pushes (not REST). 1 unauthenticated REST read (claim comment 6434447902)",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: devx seat 2 - follow-up governed PR: ADR-0076 D7 line names .github/workflows/engine-split-metric.yml; one-line note that check-engine-split-ratio.mjs now runs on demand (ruling 6433804956 says separate governed PR).",
        "carrier: none - noted, not filed: nightly shard 1 now carries the showcase prepare (~5 min) + smoke (~2-3 min) on top of ~24.6 min; the partitioner weighs example-showcase by its queue-tier timing (48s) and cannot see the live cost."
      ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Released by devx seat 2 (#20163). PR #26529 (ruling B) merged as 5065db82 after os-zhuang's approval; its 15 files on main match the reviewed head 2094edeb line for line. On its PR run, the showcase smoke ran inside Nightly Tiers with 53 Playwright cases passed. Its first scheduled nightly on main is the next reading.


    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

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:devxpriority:p2Medium: important, M3tooling

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions