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
Queue time, run time and lead time per phase are derived readings; the backlog bound is policy and the brief says when it is passed; finish names the pull request it hands on; budgets exist per phase without turning runner wall time into a correctness gate.
BLOKOVÁNO 0 z 6 úkolů hotovo
- připraveno
- 0
- blokováno
- 6
- aktivní
- 0
- verify
- 0
- hotovo
- 0
- zrušeno
- 0
Problém
Between 2026-09-10 and 2026-10-18 the owner asked more than a dozen times for faster turnaround and an empty backlog, and every audit reconstructed queue waits and lead times by hand from run timestamps. The repository measures CI run durations and merges per day, but not the wait before a run starts, not what happens after a merge, and its backlog bound is an environment default of one script. 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); ADR 0197 (The backlog is bounded by a declared bound that every session reads at start, and the bound reports rather than refuses); ADR 0198 (Delivery is judged by verified outcomes landed per day, with lead time p95 as its control, never by commits, pull requests or sessions) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c199#14, chatgpt-majordomus:c255#7, chatgpt-majordomus:c204#2, chatgpt-majordomus:c216#6, chatgpt-majordomus:c238#2, chatgpt-majordomus:c280#2, chatgpt-majordomus:c287#2, chatgpt-majordomus:c295#7, chatgpt-majordomus:c112#3, chatgpt-majordomus:c207#6, chatgpt-majordomus:c209#3.
Výsledek
Queue time, run time and lead time per phase are derived readings; the backlog bound is policy and the brief says when it is passed; finish names the pull request it hands on; budgets exist per phase without turning runner wall time into a correctness gate.
Aktuální stav
Verified on master 707a04c7ce8: integration.timings measures started-to-completed only (timings.rs); I2474 draws merges per day; scripts/ci/backlog-check reads MJ_BACKLOG_MAX (default 10); brief.rs reports prs brief without a bound; lib/finish.sh names no pull request. I2946 (board on 2026-10-18, p7, not on master) measures throughput from prs and ci-timings.
Cílový stav
One measured flow from opened to served-verified, read by the drain screen, the brief, CLI, HTTP and MCP from the same capabilities, with unmeasured phases said as unmeasured.
Rozsah
- apps/majordomus-cli/src/integration
- apps/majordomus-cli/src/capability/builtin/brief.rs
- apps/majordomus-cli/src/bench
- lib/finish.sh
- .ai/repo/policy.yaml
- scripts/ci/backlog-check
- docs/INTEGRATION.md
- docs/CI.md
Mimo rozsah
- A second metrics store
- Refusing work on a bound
- Weakening any gate
Kritéria přijetí
- Each phase reading carries its sample size and observation time
- The backlog bound is declared once and read by the brief and backlog-check
- No figure on a surface is typed beside the repository
Validace
- majordomus plan validate
Rizika
- I2946 (on the board on 2026-10-18) touches the same metrics module; I3203 overlaps it and does not wait for it
- GitHub's API returns at most 100 runs per page; windows must paginate
Úkoly
Každý z nich je prováděcí kontrakt s vlastními kritérii přijetí, validačním příkazem a požadovanými důkazy. Sloupec wave je vrstva grafu závislostí, v níž úkol leží.
| issue | status | vlna | závisí na | název |
|---|---|---|---|---|
| I3202 | BLOKOVÁNO | 0 | — | CI timings measure the wait before a run starts beside the run, and count what cancelled runs spent |
| I3203 | BLOKOVÁNO | 1 | I3202, I2740 | Delivery lead time is measured per phase, from a pull request's opening to its verified publication |
| I3204 | BLOKOVÁNO | 0 | — | The backlog's bound is declared once in policy, and every session brief says when the landable backlog is past it |
| I3205 | BLOKOVÁNO | 0 | — | A pull request's change is split into canonical, derived and incidental paths, and the drain shows each |
| I3206 | BLOKOVÁNO | 2 | I3202, I3203 | The delivery phases have budgets in benchmark policy, and a phase over its budget is a finding with its trend |
| I3207 | BLOKOVÁNO | 0 | — | A finished task names the pull request that carries its branch and that pull request's disposition |
Graf
flowchart LR
I3202["I3202<br/>CI timings measure the wait before a run starts beside the run, and count what cancelled runs spent"]:::blocked
I3203["I3203<br/>Delivery lead time is measured per phase, from a pull request's opening to its verified publication"]:::blocked
I3204["I3204<br/>The backlog's bound is declared once in policy, and every session brief says when the landable backlog is past it"]:::blocked
I3205["I3205<br/>A pull request's change is split into canonical, derived and incidental paths, and the drain shows each"]:::blocked
I3206["I3206<br/>The delivery phases have budgets in benchmark policy, and a phase over its budget is a finding with its trend"]:::blocked
I3207["I3207<br/>A finished task names the pull request that carries its branch and that pull request's disposition"]:::blocked
I3202 --> I3203
I3202 --> I3206
I3203 --> I3206
classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2pxOdkazováno z tohoto diagramu (6)
- I3202 CI timings measure the wait before a run starts beside the run, and count what cancelled runs spent
- I3203 Delivery lead time is measured per phase, from a pull request's opening to its verified publication
- I3204 The backlog's bound is declared once in policy, and every session brief says when the landable backlog is past it
- I3205 A pull request's change is split into canonical, derived and incidental paths, and the drain shows each
- I3206 The delivery phases have budgets in benchmark policy, and a phase over its budget is a finding with its trend
- I3207 A finished task names the pull request that carries its branch and that pull request's disposition
Canonical record: .ai/repo/project/milestones/delivery-flow-is-measured.yaml. Read it back with majordomus plan show delivery-flow-is-measured.