Skip to content

I3206 — The delivery phases have budgets in benchmark policy, and a phase over its budget is a finding with its trend

Once I3202 and I3203 measure the phases, declare each phase's budget beside the UI budgets bench --check already holds, report a phase over budget as a finding with its last window's trend, and keep wall time a report rather than a correctness gate where the runner is not ours.

BLOCKED wave 2 · p2 · implementation profile · parallel safe

Part of delivery-flow-is-measured — The way from a pull request to a verified publication is measured per phase, and its bounds are read where work starts.

Blocked. This issue cannot start until I3202, I3203, milestone:delivery-flow-is-measured are done. The status is derived from that, not declared.

Objective

Once I3202 and I3203 measure the phases, declare each phase's budget beside the UI budgets bench --check already holds, report a phase over budget as a finding with its last window's trend, and keep wall time a report rather than a correctness gate where the runner is not ours.

Why

The owner set speed goals repeatedly: CI under a minute (c195#0), pull requests under five minutes (c208#24), deploy in minutes (c204#0). PR descriptions of 2026-10-16/17 recorded pre-push checks of 305-455 s against a 180 s budget (c287#2). A goal with no budget in policy is not enforced; a budget on a shared runner pool cannot be a red gate without becoming flaky. Proposed in ADR 0196 (Delivery latency targets are budgets of benchmark policy, measured per phase, and never a correctness gate on runners the repository does not own) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c204#2, chatgpt-majordomus:c287#2.

Current state

I2489 (DONE) made the UI's latency budgets benchmark policy held by bench --check; .ai/repo/ci/suite.yaml and structure-durations.tsv bound the suite; no delivery phase has a declared budget.

Desired state

Benchmark policy carries a budget per delivery phase with its source (owner goal or measured baseline); the reading marks each phase within or over; over-budget phases surface on the drain screen and in the brief; nothing turns the ci verdict red on GitHub wall time.

Scope

  • apps/majordomus-cli/src/bench
  • apps/majordomus-cli/src/integration/metrics.rs
  • docs/CI.md
  • .ai/repo/benchmarks/rust/policy.yaml
  • .ai/repo/benchmarks/rust/README.md
  • apps/majordomus-cli/src/ui/prs.rs
  • apps/majordomus-cli/src/capability/builtin/brief.rs
  • site/content/docs/ci.md

Out of scope

  • Weakening any gate to meet a budget
  • Choosing the numbers (ADR proposed: delivery latency targets are budgets)

Dependencies

Acceptance criteria

  • Each phase budget names where its number came from
  • A phase over budget is a finding with the window and sample it was read from
  • No required check depends on runner wall time

Validation

  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib bench::
  • majordomus plan validate

Evidence required

  • test_delivery_phase_budgets

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/I3206.yaml. Read it back with majordomus plan show I3206.

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