Skip to content

design: fast PR tier, full main tier, self-healing main (CI redesign) #1779

Closed

Description

@dezren39

Design: fast PR tier, full main tier, self-healing main

Design doc: files/designs/ci-fast-pr-full-main.md in the repo-health
goal workspace
(~/workspace/goals/keep-the-four-repos-healthy/files/designs/ci-fast-pr-full-main.md).
Directive: Drew, 2026-10-28. Capacity tracker: #1599.

Summary

CI execution is already fast — the fleet's pain is GitHub runner
queue wait (2026-10-28 evidence in the doc and on #1599: 127+
runs queued at once; a 27-job id run waited 16–105m per job for
0.4–13.8m of execution; opencode test e2e jobs waited 65–76m for
0.1m of execution). The fix is structural, in three phases:

  1. Phase 1 — cancel-in-progress everywhere it is missing
    (Drew-approved outright). Standard pattern: ref-keyed group +
    cancel-in-progress: true; main runs keyed by run_id, never
    cancelled. Audit gaps are enumerated in the doc §2.2
    (openchamber nix-eval/release/vscode-extension, opencode
    publish*, openchamber pr-review, code goreleaser). jules.yml is
    deliberately untouched (CI: Jules workflow_run subscribes to every workflow completion — 44 of the last 100 repo runs are skipped no-ops, and they share the concurrency group that can drop a real ci-failure-fix run #304).
  2. Phase 2 — PR tier slimming. PRs get basic validation only:
    changed-path lint/format, syntax/typecheck of affected packages,
    affected-package unit tests. Full matrices (flake check, e2e,
    cross-platform builds, conformance, benches) move to main. The
    dividing line is an explicit path-glob change-class policy
    (doc §3.3, classes 0–4) that is tuned over time using the
    main-breakage rate — not pipeline rewrites.
  3. Phase 3 — main tier + remediation chain. One watched
    main-gate workflow per repo runs ALL checks on merge to main. On
    failure: breakage issue filed under the pattern (Breakage-ID
    dedupe, main-broken + priority/critical labels) → Jules
    first via the existing jules label trigger (budgeted: free
    tier 15/day, 3 concurrent) → on Jules failure/timeout, release
    to a priority-90 Muse fix packet, dedupe
    repo-health:v1:fix:<repo>:main-breakage:<id>. Ownership is
    singular and visible at all times (exactly one of the jules
    label or a live queue task holds the breakage; every transition
    is an agent-note:v1), so the orchestrator never double-assigns
    and dropped items are recovered by the monitor's existing
    claim-evaporation/dead-in-queue repairs.

Acceptance criteria

  • Design reviewed; phase issues (filed alongside this one) are
    the implementation path.
  • The change-class policy table (doc §3.3) is adopted as the
    tuning surface for PR-tier scope.
  • Rollout order Phase 1 → 2 → 3 is followed; each phase lands
    via its own queue task and PRs.

Notes

  • Jules today: code's jules.yml has the jules-label trigger and a
    ci-failure-fix job that explicitly excludes main — Phase 3
    builds on both facts (doc §2.3).
  • Releases must not cut from a red main; that gate is a Phase 3
    acceptance item, not part of this design issue.

Activity

  1. added
    kind/ciCI/CD pipelines, workflows, and build automation
    task/triageQueue packet kind: verify, reproduce, and route this item
    source/creatorFiled by the new-issue-creator job
    priority/highImportant and time-sensitive
    queue/queuedHas a queued task in the Supabase agent queue
    on Oct 28, 2026
  2. developing-today commented on Oct 28, 2026

    @developing-today
    Contributor
  3. dezren39 commented on Oct 28, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    state: filed
    Found via: filed this run — CI redesign pass executing Drew's 2026-10-28 directive (cancel-in-progress approved; PR tier = basic validation; full suite on main; Jules → issue → priority-90 Muse packet remediation chain). Design doc: files/designs/ci-fast-pr-full-main.md (repo-health goal workspace). Capacity evidence: #1599.
    Agent: ci-redesign-filing

  4. added
    queue/claimedQueue worker lifecycle state
    work/assignedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 1, 2026
  5. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    event: picked_up
    task: 2390
    worker: repo-worker-code (lane B)
    note: Triage of the CI-redesign design (#1779): verifying the design doc against live workflow state in all four repos and checking phase issues #1780/#1781/#1782 cover the rollout. No workflow changes in triage.

  6. 5 remaining items

  7. added
    queue/queuedHas a queued task in the Supabase agent queue
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 1, 2026
  8. developing-today commented on Nov 3, 2026

    @developing-today
    Contributor

    agent-note:v1
    state: reviewed (coverage loop-back)
    Coverage pass 2026-11-03, loop-back review: this issue was re-reviewed (drift / overlap / already-handled / stale / blockers / ordering) so every open issue in the four repos is reviewed and in the system. Verdict: still live; in the system as task 7250 (triage, queued, priority 50) in repo-health-code-pilot. Labels audited and synced. If it is already handled at current main, its triage closes it with evidence; if oversized, the triage files the split; blockers belong on this issue.
    Found via: coverage loop-back 2026-11-03

  9. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 3, 2026
  10. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    event: picked_up
    task: 7250
    worker: repo-worker-code (lane L)
    note: Triage of the CI-redesign design (#1779) against the 2026-11-02 policy change (no CI on PRs at all; main + manual only; main failure triggers a fix session). Verifying phase issues #1780/#1781/#1782, follow-ups from the 2026-11-01 triage (task 2390), and current workflow/policy state on main; then close or re-scope with evidence.

  11. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    event: triage_complete
    task: 7250
    worker: repo-worker-code (lane L)
    verdict: design RECONCILED and CLOSED on its merits — every acceptance item is satisfied by the phase track; all remaining implementation is owned by live tasks on the phase issues, not by this design issue.

    Reconciliation with the 2026-11-02 policy note (packet for task 7250): fresh main does NOT show a literal "no CI on PRs" supersession. .github/ci-policy.md (live on main, 11,923 bytes) still names #1779 as the design and states the merge requirement is the basic (PR) tier only, with the full suite on main NOT a merge gate. nix-ci.yml is push/schedule/dispatch-only; the basic-tier PR workflows (e.g. id-check.yml, mcpx-test.yml) remain. So the 2026-11-02 change narrowed practice to exactly the design's §3.1/§3.2 model — basic PR tier, full main tier, PRs never held for the full suite — it did not replace the design.

    Acceptance check (fresh gh state, 2026-11-03):

    Closing #1779 as completed: the design is implemented/adopted; nothing remains that is unique to this issue. Remainders live on #1780 (task 7252) and #1782 (task 6538 / PR #4636) — no new issue or packet needed, and none filed (per the one-issue-per-change rule).

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

Metadata

Metadata

Assignees

Labels

kind/ciCI/CD pipelines, workflows, and build automationpriority/highImportant and time-sensitivesource/creatorFiled by the new-issue-creator jobtask/triageQueue packet kind: verify, reproduce, and route this item

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions