a-change-is-judged-in-minutes — A change is derived in under a second and judged in minutes, and nothing that could have changed is skipped
The owner should never wait on the toolchain for a change that touched little. An ordinary derive finishes in under a second. A pull request's required verdict arrives within five minutes. Both are measured and enforced, and the speed comes from not repeating work whose inputs did not move, never from weakening a gate.
PLANNED 0 of 10 issues done
- ready
- 2
- blocked
- 8
- active
- 0
- verify
- 0
- done
- 0
- cancelled
- 0
Problem
The owner should never wait on the toolchain for a change that touched little. An ordinary derive finishes in under a second. A pull request's required verdict arrives within five minutes. Both are measured and enforced, and the speed comes from not repeating work whose inputs did not move, never from weakening a gate. Proposed in ADR 0185 (A derivation is a typed graph of the generators the executable already plans, keyed by the content of what each node reads, and the full derive stays its oracle); ADR 0186 (A pull request's required verdict is the feedback lane, a gate whose inputs did not change is reused as inputs_unchanged, and the proof lane judges the combined top before it lands); ADR 0187 (Tests are selected by the impact of a change, derived from what each case declares it reads, and a change of unknown impact runs every case) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c208#3, chatgpt-majordomus:c208#24, chatgpt-majordomus:c228#0, chatgpt-majordomus:c292#0.
Outcome
The owner should never wait on the toolchain for a change that touched little. An ordinary derive finishes in under a second. A pull request's required verdict arrives within five minutes. Both are measured and enforced, and the speed comes from not repeating work whose inputs did not move, never from weakening a gate.
Current state
Its issues extend existing milestones; see each issue's why.
Desired state
Every criterion of the intent is carried by an issue here and proven by its test.
Acceptance criteria
- A warm derive of an unchanged tree finishes under 1 s p95 on the declared reference machine and runs no generator
- A derive after one changed canonical input finishes under 1 s p95, excluding a cold executable build
- For every fixture, an incremental derive under any node order and worker count leaves the same bytes as a full derive, deletions included
- Required pull-request validation reaches a binding verdict within 300 s p95 from validation start, with queue wait reported separately
- Every gate the plan does not run carries the proof that nothing it reads changed, and an omitted dependency turns a gate red
- A derive or CI path that regresses past its noise-aware budget fails a gate and names the stage that caused it
Validation
- majordomus plan validate
Issues
Each one is an execution contract with its own acceptance criteria, validation command and required evidence. The wave column is the layer of the dependency graph it sits in.
| issue | status | wave | depends on | title |
|---|---|---|---|---|
| I2848 | READY | 0 | — | A pre-push gate that runs the executable does not wait on another worktree's build |
| I3233 | BLOCKED | 1 | I2521 | Stage C renders only the targets that read the index, and the manifest no longer renders every code-only artifact a second time |
| I3234 | BLOCKED | 5 | I2521, I2525 | A derive whose executable is current and whose inputs did not move answers before it waits for the machine's lock |
| I3235 | BLOCKED | 3 | I2521, I0832 | The site generator reads the use-case catalogue once per run |
| I3238 | BLOCKED | 6 | I2350, I2348, I2527, I3242 | A pull request runs the cases its change can affect, chosen from what each case declares it reads, and a change of unknown impact runs them all |
| I3239 | BLOCKED | 6 | I3242 | One job builds a run's executable and every other job of that run uses it |
| I3240 | BLOCKED | 6 | I2350, I3242 | A pull request's browser audit visits the pages its change can reach, and a shared-layout change sweeps them all |
| I3241 | BLOCKED | 6 | I3242 | Only a job that reads history fetches all of it |
| I3242 | BLOCKED | 5 | I2472, I2350 | The pull-request critical path has a committed GitHub baseline and a budget per required job, and a run's summary names its critical path and every cache state |
| I3838 | READY | 0 | — | The plan page renders within the audit budget at every width, because a finding is counted rather than printed once per pair |
The graph
flowchart LR
I2848["I2848<br/>A pre-push gate that runs the executable does not wait on another worktree's build"]:::ready
I3233["I3233<br/>Stage C renders only the targets that read the index, and the manifest no longer renders every code-only artifact a second time"]:::blocked
I3234["I3234<br/>A derive whose executable is current and whose inputs did not move answers before it waits for the machine's lock"]:::blocked
I3235["I3235<br/>The site generator reads the use-case catalogue once per run"]:::blocked
I3238["I3238<br/>A pull request runs the cases its change can affect, chosen from what each case declares it reads, and a change of unknown impact runs them all"]:::blocked
I3239["I3239<br/>One job builds a run's executable and every other job of that run uses it"]:::blocked
I3240["I3240<br/>A pull request's browser audit visits the pages its change can reach, and a shared-layout change sweeps them all"]:::blocked
I3241["I3241<br/>Only a job that reads history fetches all of it"]:::blocked
I3242["I3242<br/>The pull-request critical path has a committed GitHub baseline and a budget per required job, and a run's summary names its critical path and every cache state"]:::blocked
I3838["I3838<br/>The plan page renders within the audit budget at every width, because a finding is counted rather than printed once per pair"]:::ready
I3242 --> I3238
I3242 --> I3239
I3242 --> I3240
I3242 --> I3241
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:2pxLinked from this diagram (10)
- I2848 A pre-push gate that runs the executable does not wait on another worktree's build
- I3233 Stage C renders only the targets that read the index, and the manifest no longer renders every code-only artifact a second time
- I3234 A derive whose executable is current and whose inputs did not move answers before it waits for the machine's lock
- I3235 The site generator reads the use-case catalogue once per run
- I3238 A pull request runs the cases its change can affect, chosen from what each case declares it reads, and a change of unknown impact runs them all
- I3239 One job builds a run's executable and every other job of that run uses it
- I3240 A pull request's browser audit visits the pages its change can reach, and a shared-layout change sweeps them all
- I3241 Only a job that reads history fetches all of it
- I3242 The pull-request critical path has a committed GitHub baseline and a budget per required job, and a run's summary names its critical path and every cache state
- I3838 The plan page renders within the audit budget at every width, because a finding is counted rather than printed once per pair
Canonical record: .ai/repo/project/milestones/a-change-is-judged-in-minutes.yaml. Read it back with majordomus plan show a-change-is-judged-in-minutes.