Skip to content

ci: two-speed CI for objectui — affected-only tests on PR and merge-queue runs, the full 8-shard suite and coverage on main's schedule, the spec shape gate cached by objectstack sha, eighteen one-check workflows folded into one (objectstack#22998) #12214

Closed

Description

@objectstack-fleet

Protects: the merge queue's required contexts of this repository (Test, Type Check, Lint and the gate workflows), the published check-run names every PR and merge group of @object-ui/* passes through; this card keeps the names and cuts their wall and their run count.

Filed by the director seat (summon #37, session_01LqNgdPZB2Jnr5HpGbaqLeB) on the maintainer's words, verbatim: 「我觉得能让整个车队提速的方案就是好方案,main 很多天才会发一个版本,我只要确保发版本之前做好各种测试就可以。」, 「然后 objectui cloud 仓库也要看一下,是否需要类似的方案。」 and 「三仓的 ci 优化卡你负责派发」. The doctrine is objectstack-ai/objectstack#22998 (two-speed CI); this card is its objectui execution. Filing gate ③: maintainer-directed. ⛔ Not a claim. Tier H: .github/workflows/** is a governed surface; the PR stays a draft until a GOVERNED_APPROVERS member approves it.

Measured on 2026-10-12 (the newest 1,000 completed runs, about one day; the jobs API)

job runs median p90
CI :: Test (shard n/8) 27 each 13.3–15.6 min 15.7–17.9
Spec Main Shape Gate 29 13.3 13.9
CI :: Type Check 36 10.2 13.0
CI :: Test (coverage shard n/4), push only 9 each 36.3–38.6 40.3
Lint :: Lint 41 6.0 7.0
Skill Examples, Doc Snippet Types, README Exports 41 each 4.5–5.0 5.4
CI :: Build Docs 36 2.9 5.3
  • A CI run on pull_request or merge_group walls at 17.8 min median (the test shards) and costs 123–132 runner-minutes; a push run walls at 40 min (coverage) and costs 151.
  • Eighteen one-check workflows (Skills Paths, Skill Examples, Skill Eval Tokens, Shell Escape Residue, README Exports, Pre-Install Import Graph, Inert vi.mock Specifiers, Docs Route Eager Closure, Docs Links, Doc Snippet Types, Doc Fence Languages, Doc Example Ids, Doc Component Types, Control Bytes, Action Ref Convention, Governed Surface Guard, Changeset Presence, Spec Main Shape Gate) each ran about 1,100 times in the trailing 7 days, each with its own checkout and setup; most take 0.2–0.5 min, three take 4.5–5 min.
  • pnpm test --shard=i/8 shards the whole repository's vitest run by file on every PR; there is no affected-only path. 302 PRs merged in the trailing 7 days.
  • Job queue wait is 2–3 s median across the fleet (measured), so runner concurrency is not the constraint; wall and run count are.

What to build (one PR, Tier H, draft until approved)

  1. Tests two-speed. On pull_request and merge_group, run the tests of the packages affected by the diff (turbo --affected against the merge base, or vitest related/changed where the root config owns the run), still sharded; on push to main and on a schedule (hourly), run the full 8-shard suite and the 4-shard coverage. The Test aggregator keeps its name and its "every shard reported success" check (scripts/check-test-shard-results.mjs) on both speeds. Measure the PR wall before and after on your branch.
  2. Spec Main Shape Gate builds @objectstack/spec from objectstack main on every run (13.3 min). Cache the built spec tarball by the resolved objectstack main sha (actions/cache or an artifact keyed by sha), so a run only builds when main moved since the last build; keep the gate on every event.
  3. One gates workflow. Fold the one-check workflows into a single Repo Gates workflow with one checkout and one setup per run, the checks as steps or as a small matrix; keep every check's name as a step name and keep each check on the events it runs on today. ⛔ Do not fold Governed Surface Guard (it is a guard on the queue, kept separate on purpose) and do not fold Changeset Presence / Changeset Guard if required-check-set-patrol pins them by workflow name: read scripts/check-required-check-set.mjs first and keep every required check-run name byte-identical.
  4. Lint (6 min) stays as is; name it in the PR body as the next follow-up if it becomes the critical path after 1–3.

Acceptance

  • A product-only PR's checks all conclude within 8 minutes on three consecutive runs; Test, Type Check and Lint appear by name on the PR.
  • The hourly schedule run on main carries the full suite and coverage; required-check-set-patrol stays green.
  • The PR body carries the before/after wall and run counts, and the required-check names before and after (byte-identical).

Related: objectstack#22998 · objectstack#22991 · this repository's AGENTS.md merge-queue section · scripts/check-required-check-set.mjs · scripts/check-test-shard-results.mjs.

Activity

  1. added
    domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repo
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    and removed on Oct 12, 2026
  2. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 · the director seat dispatching on the maintainer's order, verbatim 「三仓的 ci 优化卡你负责派发」 (this seat's session, 2026-10-12T09:00Z)
    Session: session_01LqNgdPZB2Jnr5HpGbaqLeB
    Account: os-zhuang
    Branch: claude/issue-12214-two-speed-ci
    Worktree: objectui-issue-12214
    Domain: domain:devx
    Seat: domain:devx#9
    File surface: .github/workflows/ci.yml (the test jobs' event split), .github/workflows/spec-main-shape-gate.yml (the cache), a new .github/workflows/repo-gates.yml replacing the one-check workflows it folds (each folded file deleted in the same PR), scripts/check-required-check-set.mjs and its test only if the required-set pin must learn the new names, package.json scripts only if a new test script is needed; ⛔ not governed-surface-guard.yml, ⛔ not changeset-guard.yml / changeset-presence.yml unless the required-set pin proves them foldable (stop on breach; explain in the report)
    Container & model: L, mode:subagent, model: opus (the default judgment tier; objectstack's dispatch-gates --tier --repo objectstack-ai/objectui on the paths answers no path-derived mandate; the test split and the fold are design judgments, so the default, not the floor). Tier H: .github/workflows/** is a governed surface in this repository; the PR stays a draft until a GOVERNED_APPROVERS member approves it.
    Clause-②: no
    Responsibility: n/a — not a defect card
    Thread-read: none
    Ruling-ref: objectstack-ai/objectstack#22998 (the doctrine card; the maintainer's words verbatim in its body) and objectstack comment 6120820653
    Serial constraints cleared: no in-flight claim in this repository declares .github/workflows/** (read in this act); the objectstack siblings #22991 and #22998 touch objectstack files only. Merge origin/main before opening the PR.

  3. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    Fold recorded on ruling 6121816480 of objectui#12208 (batch #328 item 1 → B, staged; the maintainer's word verbatim 「同意」): PR-1 of that card, the test matrix from 8 to 12 shards with every pin of the count, rides this card's PR as one commit (Refs objectui#12208 (PR-1)); PR-2 (duration-balanced sharding, the timing file and its refresh, the headroom reading) waits for this PR to land and is dispatched on objectui#12208 then. The fold instruction went to this card's dev. Director seat, summon #37, session_01LqNgdPZB2Jnr5HpGbaqLeB, 2026-10-12T09:50Z. ⛔ Not a claim; no label change here.

  4. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 12214,
    "status": "done",
    "branch": "claude/issue-12214-two-speed-ci",
    "pr": "#12232",
    "session": "session_01LqNgdPZB2Jnr5HpGbaqLeB (subagent of the director seat; the relay stamped this id on the PR)",
    "premise_still_valid": true,
    "summary": "Draft PR #12232 (head 9ba9682), five commits plus one main merge. (1) ci.yml two speeds: pull_request and merge_group run the affected test files chosen by the new scripts/select-affected-tests.mjs (changed packages plus transitive dependents, held equal to turbo by test; plus an always-on set the package graph cannot place; full run on package.json, tsconfig, vitest or vite config, root config files, the root config's imports, or a package a broad setup file imports; fails open); push to main and a new hourly schedule run the whole suite plus the 4-shard coverage lane; the aggregator keeps --shards equal to the matrix and still refuses a partial set. (2) objectui#12208 PR-1 folded in: the Test matrix 8 to 12 legs, the same twelve on both speeds. (3) Spec Main Shape Gate gains the hourly schedule; the scheduled main run publishes the packed spec as artifact objectstack-spec-SHA and other runs reuse it only from a main run of this repository, else build. (4) Fifteen one-check gate workflows folded into one Repo Gates job, check names kept as step names; Governed Surface Guard, Changeset Presence (its Changeset Declaration is required) and Spec Main Shape Gate not folded. The PR's own CI run on 2fbe080 went green on every check. H3 was refuted on its premise (the spec build is 1.6 of 13.3 min; the forced compile is the cost), and the card's 8-minute acceptance line is not reachable by items 1-4 alone; see open_questions.",
    "tests": "Final on 2fbe080: pnpm exec vitest run scripts/ eslint-rules/ = 192 files passed, 2 skipped, 5767 tests passed (os-verify-lock VERDICT command-exit 0). After the last commit 9ba9682 (two comment lines reverted): ci-cd-pipeline-doc, merge-queue-reporting, check-governed-queue-guard, check-changeset-presence, check-pre-install-import-graph, check-action-ref-convention = 6 files, 227 tests passed. pnpm type-check = 81/81 tasks (exit 0); pnpm type-check:scripts exit 0; pnpm lint = 47/47 tasks, 0 errors; eslint --no-inline-config --format json over the 43 changed scripts files = 43 files linted, 0 errors, 0 warnings. Ablation (committed first, trap-restored, blob hash proved): deleting the main-only filter from the spec reuse lookup turned its pin red (1 failed), restored to HEAD blob 9aed98d6. Selector fixtures cover every rule in both directions; live test holds the dependents closure equal to turbo ls for plugin-kanban, app-shell and i18n.",
    "gates": [
    "pnpm exec vitest run scripts/ eslint-rules/ → exit 0 (192 files, 5767 tests) on 2fbe080",
    "pnpm type-check → exit 0 (81/81)",
    "pnpm type-check:scripts → exit 0",
    "pnpm lint → exit 0 (47/47, 0 errors)",
    "eslint --no-inline-config on 43 changed scripts files → 0 errors, 0 warnings",
    "node scripts/check-pre-install-import-graph.mjs --self-test → 0; live → 0",
    "node scripts/check-required-check-set.mjs --self-test → 0; live read through the agent proxy → exit 2 (HTTP 401, node fetch carries no credential here); the same endpoint read with gh → 8 contexts",
    "node scripts/check-governed-queue-guard.mjs --self-test → 0; --test .github/workflows/repo-gates.yml → NOT GOVERNED",
    "node scripts/check-bash32-floor.mjs --self-test → 0; check-cross-repo-closer-outcome --self-test → 0",
    "the fifteen folded gates live on the tree → all exit 0 (control-bytes, action-ref-convention, pre-install-import-graph, shell-escape-residue, vi-mock-specifiers, vi-mock-inherit, doc-links, doc-fence-languages, doc-example-ids, doc-component-types, prompt-component-keys, skills-paths, skill-eval-tokens, check:docs-route-closure, skill-examples incl. --self-test, doc-snippet-types incl. --emit-census, doc-example-types, doc-json-fences, check:readme-exports) after building every package under packages/",
    "node scripts/check-changeset-presence.mjs → 0 (no changeset owed)",
    "YAML parse of every touched workflow → ok; actionlint NOT MEASURED, not installed",
    "PR #12232 CI on 2fbe080: every check success (Test, Type Check, Lint, Build & E2E, Build Docs, Changeset Declaration, Spec Main Shape Gate, Governed Surface Queue Guard, Repo Gates, all 12 shards, dist pins). The run on 9ba9682 is in_progress at report time."
    ],
    "walls": {
    "before": "jobs API, newest 300 completed CI runs 2026-10-09T13:14Z to 2026-10-12T08:42Z: pull_request wall median 17.3 min (p90 18.0), runner-min 128.0; merge_group 17.5 / 132.0; push 39.3 / 151.3. Shard test step median 13.0 (PR) / 14.5 (queue). Type Check 9.3 / 10.6. Spec Main Shape Gate 12.8 / 13.3 (build 1.3, pack 0.3, forced type-check 10.6 / 11.1). The fifteen folded workflows: 15 jobs per pull_request event, sum of job medians 16.1 runner-min, longest 4.8 min.",
    "after_measured_pr_12232_run_on_2fbe080c": "CI (full speed: this diff touches lychee.toml, a root config, so the selector answered mode=full) wall 13.1 min, 135.9 runner-min, 12 shard test steps min/median/max 6.3/10.1/12.3 min, select step at most 1 s; Repo Gates 1 job 4.5 min wall = 4.5 runner-min (shared build 156 s); Spec Main Shape Gate 13.7 min (no main artifact yet, so it built); Type Check 11.1; Lint 4.7. Whole PR: 13.8 min from first start to last finish, bound by Spec Main Shape Gate.",
    "after_projected_affected_speed": "selector replay over the newest 200 first-parent commits of main: 32% full runs, share of test files selected p25 41%, median 45%, p75 100%, mean 62%; docs-only floor 622 of 4931 test files. A median PR's 12 shards then carry about 45% of the full-speed test step, but PR and queue wall stay bound by Spec Main Shape Gate and Type Check."
    },
    "required_checks": "Before (live ruleset 11776024 via GET /rules/branches/main): Lint, Type Check, Build & E2E, Build Docs, Changeset Declaration, Test, Spec Main Shape Gate, Governed Surface Queue Guard. After: the same eight names, byte-identical, produced by the same workflows; all eight reported success on PR #12232. None of the fifteen folded names was required, so no ruleset edit is needed.",
    "files_changed": "68 files vs origin/main: A .github/workflows/repo-gates.yml; D 15 workflows (action-ref-convention, control-bytes, doc-component-types, doc-example-ids, doc-fence-languages, doc-snippet-types, docs-links, docs-route-eager-closure, pre-install-import-graph, readme-exports, shell-escape-residue, skill-eval-tokens, skill-examples, skills-paths, vi-mock-specifiers); M ci.yml, spec-main-shape-gate.yml, comment-only check-links.yml hook-selftests.yml line-citation-gate.yml lint.yml lockfile-integrity.yml; A scripts/select-affected-tests.mjs and its test; M scripts/dependabot-merge-gate.mjs, markdown-test-inputs.mjs (ledger row), check-test-shard-results.mjs (usage header), comment-only check-doc-fence-languages/check-doc-json-fences/check-doc-snippet-types/check-pre-install-import-graph/check-skill-examples/check-vi-mock-override-shape/github-slug/coverage-red-cause-census .mjs and ci-setup-pnpm.sh; M 28 tests under scripts/tests; M content/docs/guide/ci-cd-pipeline.md, CONTRIBUTING.md, lychee.toml.",
    "deviations": [
    "Folded objectui#12208 PR-1 into this PR as its own commit df83ebe, per ruling 6121816480 (batch 328 item 1, letter B). Shard-count pins touched: ci.yml matrix [1..12], job name Test (shard N/12), step name, both --shard=N/12 spellings, check-test-shard-results.mjs --shards 12 in the Test aggregator; scripts/dependabot-merge-gate.mjs NOT_A_GATE rows Test (shard 1/12)..(12/12) plus prose; scripts/tests/dependabot-merge-gate.test.ts produced names; scripts/tests/select-affected-tests.test.ts wiring pins; usage lines in scripts/check-test-shard-results.mjs; prose naming the width in content/docs/guide/ci-cd-pipeline.md, .github/workflows/lint.yml, scripts/tests/check-eager-closure-budget.test.ts, check-skill-examples.test.ts, check-test-path-roots.test.ts. The coverage matrix stays at 4. The affected speed uses the same twelve legs (no derived count), stated in the PR body. PR body carries the line Refs objectui#12208 (PR-1).",
    "File surface wider than the claim, each a consequence of the fold or the selector: the Dependabot merge gate and its test, 28 pin tests under scripts/tests (home workflow moved to repo-gates.yml; install-free absence pins rewritten as order pins; the objectui#6221 step tests re-aimed at the shared build and the derive-step empty-filter refusal), the markdown-test-inputs ledger row for the new test, the pipeline guide, CONTRIBUTING.md, lychee.toml, and comment-only pointers in five other workflows and eight scripts.",
    "governed-surface-guard.yml and changeset-presence.yml: the fold commit had repointed one comment line in each; both reverted to main's bytes in 9ba9682 to stay inside the claim. Each now carries a stale filename pointer in a sentence about past reasoning (control-bytes.yml, docs-links.yml).",
    "Item 2 mechanism changed from actions/cache to main-run artifacts: actions/cache is branch-scoped, so PR-written entries would only serve that PR's re-runs, and PR or queue uploads run branch-controlled YAML; reuse is restricted to artifacts a main run of this repository built.",
    "Dispatch asked to record each job's wall from the PR's own run, so the report waited in the foreground (bounded) for that run; the follow-up push 9ba9682 started another run that is in_progress at report time.",
    "Merge commit 2fbe080 carries git's default message without the trailer pair (no force-push to amend)."
    ],
    "mcp_calls": "0",
    "api_writes": "2 strokes through the fleet-write relay: (1) pr_create = POST /repos/objectstack-ai/objectui/pulls (draft) + POST /repos//issues/12232/assignees [os-zhuang], carried by POST /repos/objectstack-ai/objectstack/dispatches (run 38239055774, read-back identical 12859 bytes); (2) this os-dev-report comment POST /repos//issues/12214/comments. git push x7 (not REST). Zero label writes (objectui labels are path-driven and no gate reads a dev-applied label here).",
    "open_questions": [
    {
    "question": "The card's acceptance line (a product-only PR's checks all conclude within 8 minutes) is not reachable by items 1-4: after this PR the PR and queue wall is bound by Spec Main Shape Gate (12.8-13.3 min median, 13.7 measured here, of which the forced uncached type-check is 10.6-11.5) and Type Check (9.3-10.6). How should the remaining critical path be carried?",
    "options": [
    "A: two follow-up cards: (i) Spec Main Shape Gate's compile, e.g. key the turbo-hashed marker by objectstack sha alone and cache the compile per sha, a change to that gate's ruled false-green defences; (ii) Type Check, the objectstack doctrine card's own named next bottleneck (build-and-typecheck with the turbo cache saved on main only)",
    "B: move Spec Main Shape Gate's compile to the full battery (schedule and push) and drop it from the required set, a ruleset change only the maintainer can make",
    "C: accept about 13 minutes as this card's outcome and amend the acceptance line"
    ],
    "recommendation": "A, because it keeps every required context and every verdict where it is, and attacks the two measured costs directly; B trades a requirable gate for speed and needs a ruling plus a settings edit; C leaves the measured bottleneck in place."
    },
    {
    "question": "Spec reuse hit rate: with the hourly warm the modelled hit rate is 22% (about 0.35 min saved per run); a dedicated warm cadence of 10-15 minutes reaches 53-64% (about 0.9-1.0 min per run) at the cost of one spec build per objectstack sha on main. Raise the warm cadence?",
    "options": ["A: keep hourly (the doctrine's full-battery cadence)", "B: add a 15-minute warm-only schedule leg that builds and publishes the spec without the compile"],
    "recommendation": "A for now, because the saving is bounded by the 1.6-minute build either way and the compile is the real cost (question 1)."
    }
    ],
    "out_of_scope_findings": [
    "carrier: 承接者:无 · noted in PR Acceptance notes, not filed · AGENTS.md test section says pnpm test is what CI runs with --shard=1/4; the width was already 8 and is 12 now, and PR CI runs the affected set. Governed file, untouched.",
    "carrier: PM (card text) · noted, not filed · the card and dispatch call .github/workflows/** a governed surface (Tier H) in objectui; node scripts/check-governed-queue-guard.mjs --test .github/workflows/repo-gates.yml answers NOT GOVERNED and AGENTS.md's governed list has five entries without it. The PR stays a draft regardless, as a dispatched PR.",
    "carrier: 承接者:无 · noted in PR body, not filed · Spec Main Shape Gate's inject writes the sha AND the injection time into the turbo-hashed marker, so the compile can never be served from cache even per sha; this is the lever behind open question 1A, a ruling-level change, not a defect.",
    "carrier: 承接者:无 · noted, not filed · governed-surface-guard.yml and changeset-presence.yml comments now name control-bytes.yml / docs-links.yml, deleted by this PR; left untouched because the claim excludes both files.",
    "carrier: 承接者:无 · noted in PR Acceptance notes · ci.yml and repo-gates.yml check out with submodules: true while the tree declares no submodule (vestigial, harmless)."
    ]
    }

  5. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    Review: ACCEPT · PR #12232 (draft, head 9ba96826) · director seat dispatching on the maintainer's order, 2026-10-12T11:29Z

    Checked on GitHub, not on the report's say-so:

    • PR shape: exists, draft, base main, body line 1 Fixes #12214, line 2 Refs objectui#12208 (PR-1); assignee os-zhuang; 68 files, +2491/−2061, six commits with one main merge; labels documentation · configuration · ci/cd · tests. No changeset owed (check-changeset-presence exit 0; CI-only diff).
    • The card's items, held: (1) two speeds in ci.yml: on pull_request / merge_group the new scripts/select-affected-tests.mjs picks the changed packages, their transitive dependents (a test holds this equal to turbo's answer) and an always-on set the graph cannot place, with a full run on root-config, package-manifest or setup-file changes and on any selector failure; push to main and a new hourly schedule run the whole suite plus the 4-shard coverage; the Test aggregator keeps --shards equal to the matrix width and still refuses a partial set. (2) objectui#12208 PR-1 folded as commit df83ebef on ruling 6121816480: the matrix 8 → 12 with every pin of the count moved (ci.yml names, --shard spellings, the aggregator's --shards 12, the Dependabot merge gate and its test, the usage lines, the prose in the pipeline guide and three tests); the coverage matrix stays 4. (3) Spec Main Shape Gate gains the hourly schedule and publishes the packed spec as artifact objectstack-spec-<sha>; other runs reuse it only when a main run of this repository built it (artifacts, not actions/cache, which is branch-scoped and would let a PR's YAML write what a queue run reads). (4) fifteen one-check workflows folded into one Repo Gates job, every check kept as a step name; Governed Surface Guard, Changeset Presence (its Changeset Declaration is required) and Spec Main Shape Gate not folded.
    • Required checks: the live ruleset 11776024 read by the dev names eight contexts (Lint, Type Check, Build & E2E, Build Docs, Changeset Declaration, Test, Spec Main Shape Gate, Governed Surface Queue Guard); the same eight, byte-identical, are produced by the PR's workflows and all passed; none of the fifteen folded names was required, so no ruleset edit is needed for this PR.
    • Checks on head 9ba96826: every check completed, none failed or cancelled (the twelve Test shards, Test (dist pins), Type Check, Lint, Build & E2E, Build Docs, Changeset Declaration, Spec Main Shape Gate, Governed Surface Queue Guard, Repo Gates, Hook Self-Tests, Line Citation Gate, the lockfile checks, Live E2E (informational)).
    • Gates (the report, exits quoted): vitest run scripts/ eslint-rules/ 192 files / 5,767 tests exit 0 on 2fbe080c, the six affected test files re-run after the comment-only last commit (227 tests); pnpm type-check 81/81; type-check:scripts 0; pnpm lint 47/47, 0 errors; eslint --no-inline-config over the 43 changed scripts, 0 errors; check-pre-install-import-graph self-test and live 0; check-required-check-set --self-test 0 (the live read through the agent proxy answered 401 — the proxy strips the credential for node's fetch — and was taken with gh instead: 8 contexts); check-governed-queue-guard --self-test 0 and --test .github/workflows/repo-gates.yml NOT GOVERNED; the fifteen folded gates run live after a full build, all 0; one ablation (the main-only filter of the spec reuse, red when removed, restored to blob 9aed98d6). actionlint NOT MEASURED (not installed); every touched workflow parsed.
    • Measured on PR ci: two-speed CI — affected tests on PR and queue runs, full suite and coverage on main's push and hourly schedule, spec gate reuse by objectstack sha, fifteen gate workflows folded into Repo Gates (objectui#12214) #12232's own run (2fbe080c, a full run because the diff touches lychee.toml, a root config): CI wall 13.1 min, 135.9 runner-min; the twelve shard test steps 6.3 / 10.1 / 12.3 min (min / median / max); Repo Gates one job 4.5 min; Spec Main Shape Gate 13.7 (no main artifact existed yet); Type Check 11.1; the whole PR 13.8 min bound by the spec gate. Before (300 runs): pull_request 17.3 min and 128 runner-min; merge_group 17.5 / 132; push 39.3 / 151; the fifteen folded workflows 15 jobs and 16.1 runner-min per PR event. Projected affected speed over the newest 200 main commits: 32 % full runs; the median PR selects 45 % of test files.
    • Open question 1 → B, ruled by the maintainer (「我接受你的建议」): Spec Main Shape Gate leaves the required set, stays hourly on main and advisory on PRs; filed as objectui#12240 (lands after this PR; the ruleset edit is the maintainer's). Type Check is objectui#12222. The card's 8-minute line is therefore carried by ci: Spec Main Shape Gate leaves the required set — hourly on main as part of the full battery, advisory on PRs; the required-check pin goes 8 → 7 and the maintainer removes the check from the ruleset (two-speed CI, objectstack#22998; ruled B) #12240 and ci: Type Check runs 476 s median on every PR and merge group although its turbo cache is restored — measure the cache hit rate, fix the miss, and type-check affected packages only on PR and merge-queue runs (two-speed CI, objectstack#22998) #12222, not by this PR. Open question 2 → A: the hourly warm run stays; the saving is capped by the 1.6-minute build, the compile is the cost ci: Spec Main Shape Gate leaves the required set — hourly on main as part of the full battery, advisory on PRs; the required-check pin goes 8 → 7 and the maintainer removes the check from the ruleset (two-speed CI, objectstack#22998; ruled B) #12240 removes from the PR path.
    • Deviations accepted: the file surface beyond the claim, each a consequence of the fold or the selector (the Dependabot gate and its test, 28 pin tests, the markdown-test-inputs ledger row, the pipeline guide, CONTRIBUTING.md, lychee.toml, comment-only pointer updates); governed-surface-guard.yml and changeset-presence.yml reverted to main's bytes to stay inside the claim (each now names a deleted filename in a sentence about past reasoning: noted, not blocking); the merge commit without the trailer pair (a force-push is banned here). Writes: 2 relay strokes (pr_create with assignee; the report 6123124321); mcp_calls 0; no label writes (objectui's labels are path-driven).
    • Noted, not filed (carriers in the report): AGENTS.md's test section still says --shard=1/4 (governed; the lane's next AGENTS.md PR); this repository's governed list has no workflows entry either (the same correction as on cloud, recorded on this seat's ledger); submodules: true in two workflows with no submodule declared (vestigial).

    Landing: the maintainer approves and merges by hand (the CI cards' posture on the maintainer's word; check-governed-queue-guard --test answers NOT GOVERNED for the folded workflow, so the posture is the maintainer's, not the table's). This card stays pm:dispatched until the PR lands; objectui#12208 (PR-2) and objectui#12222 and #12240 unblock on the merge; the landing record follows.

  6. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    LANDED — PR #12232 is MERGED (2026-10-12T12:26Z, merged by the maintainer, merge commit 21fdeb34) and read in place on origin/main 21fdeb34. Director seat, summon #37, session_01LqNgdPZB2Jnr5HpGbaqLeB, 2026-10-12T12:28Z.

    probe on origin/main want got
    scripts/select-affected-tests.mjs in the tree 1 1
    .github/workflows/repo-gates.yml in the tree; workflow files 42 → 28 (fifteen folded, one added) 1; 28 1; 28
    ci.yml: merge_group trigger, the hourly schedule (cron: '26 * * * *'), the selector named in the on: comment present present
    the eight required names (Lint, Type Check, Build & E2E, Build Docs, Changeset Declaration, Test, Spec Main Shape Gate, Governed Surface Queue Guard) each produced once by a workflow on main 8 × 1 8 × 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repopriority:p1tooling

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions