Skip to content

I2350 — One gate model names what a local check, a pull request, an integration and a release must run, and no second inventory exists

Model the fast local, the pull-request impacted, the complete integration and the release-level checks as selections of the existing gate dispatch and claim and evidence system, with a conservative, reproducible affected-test selection that falls back to the full plan when impact cannot be proved, and diagnostics that name the cause, the reproducing command and the owner.

READY wave 0 · p1 · implementation profile · parallel safe

Part of ci-critical-path — The critical path from a change to its verdict, and from a merge to its verified deploy, runs under a minute warm.

Ready. Every dependency is done, so majordomus plan start I2350 will be accepted.

Objective

Model the fast local, the pull-request impacted, the complete integration and the release-level checks as selections of the existing gate dispatch and claim and evidence system, with a conservative, reproducible affected-test selection that falls back to the full plan when impact cannot be proved, and diagnostics that name the cause, the reproducing command and the owner.

Why

The gate model is one file, and what each tier runs is still decided in four places: that file, the core-check script, the workflows and the release model. A gate added to one and not the others is the duplicated inventory the pack names. Source: convergence prompts/04-policy-gates-and-completion.md Issue 04.1 'Single authoritative quality policy'; autopilot prompts/04-pr-drain.md Issue 4 'Review and checks' (the non-impacting check). Revived on 2026-10-18 from the delivery-packs rescue sweep into ci-critical-path, because its milestone delivery-is-held-by-evidence never landed.

Current state

gates.yaml declares gates, jobs and path classes and scripts/ci-plan reads nothing else to plan a change (test/cases/94_ci_plan.sh). scripts/ci/core-check carries its own ordered list of checks; the release has its own model (.ai/repo/ci/release.yaml); a task's gates are recorded and enforced at finish (lib/gates.sh, apps/majordomus-cli/src/gates/judge.rs). The tiers are not named.

Desired state

Each gate declares the tiers it belongs to, and the local check, the pull-request plan, the integration plan and the release plan are each a selection of the one model. core-check and the release model read their lists from it. A gate's failure prints why it was selected, the command that reproduces it and the rule or owner it answers to. Amended on 2026-10-18 by the derive-performance plan: each gate in gates.yaml declares its lane (feedback, proof, release); the pull-request verdict waits on the feedback lane, and the proof lane must be green on the combined top before it lands (ADR 0167); structure is split into an instant and a proof tier, master already running no cargo run per gate except scripts/rust-check; and case-level affected selection moves out of this issue into the derive-performance plan's drv-06.

Scope

  • .ai/repo/ci/gates.yaml
  • .ai/repo/ci/release.yaml
  • scripts/ci-plan
  • scripts/ci/core-check
  • lib/gates.sh
  • apps/majordomus-cli/src/gates/model.rs
  • apps/majordomus-cli/src/gates/judge.rs
  • docs/CI.md
  • scripts/ci/verdict

Out of scope

  • Reusing recorded results, which is I2348.
  • A tier an adopter must declare: a repository with no model keeps today's behaviour.
  • Case-level affected-test selection, which the derive-performance plan moves to its drv-06

Dependencies

None. This issue is a root of the graph.

What waits on this

Acceptance criteria

  • A gate added to the model with its tiers appears in the local check, the plan and the release selection with no other file edited
  • No script outside the model carries a list of gates, proved by a check that finds one when it is put back
  • A change whose impact cannot be proved runs the full plan, and the plan says which path caused it
  • A failing gate's output names the selection reason, the reproducing command and its owner
  • Every gate in gates.yaml declares one lane of feedback, proof and release, the pull-request verdict waits on the feedback lane alone, and a combined top lands only with its proof lane green
  • The structure job is split into an instant tier on the feedback lane and a proof tier

Validation

  • bin/majordomus plan validate
  • scripts/ci-plan --check
  • MJ_TEST_JOBS=4 bash test/run.sh 94_ci_plan <the cases this issue adds>

Evidence required

  • tier_selection_case
  • no_second_gate_list_check

Evidence

None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.

Timeline

started
—
verified
—
completed
—

Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.

Canonical record: .ai/repo/project/issues/I2350.yaml. Read it back with majordomus plan show I2350.

Searches the titles and descriptions of every page this site publishes.