Design 47: say ADR 0395 as accepted — a conflict is asked again at every move, an ended check's builds are not reused, a group's composed check reruns through its members, and the cost bound

This commit is contained in:
2026-10-16 19:26:47 +02:00
parent 11e32ce5be
commit 377fa3f88a
@@ -395,14 +395,28 @@ them.
*ADR 0395, changing ADR 0323 §4.* When the forge's holder hears a repository's trunk move, mesh-delivery asks the
check of every active open pull request into that trunk against its new head at once, so a verdict is current by
the time anyone looks. A pull request whose head no longer merges cleanly into the new head is not checked: the
forge says so without a builder, its statuses fail naming the conflict, and it is told once on the pull request;
its author's next push asks its check. A pull request has at most one check at a time: a check against an older trunk commit,
waiting or running, is dropped or ended when a newer one is asked for it, as a new head already ends its old head's
check (issue 726). The build queue keeps delivery builds first; then checks of pull requests marked ready, then the
rest, the most recently pushed first. A pull request with no push and no ready mark for 7 days is left out until a
push, a ready mark or a recheck wakes it. A recheck also takes a delivery that is still proposed (issue 888). A move made by a delivery group's own member merging in the group's order asks neither the
group's composed check nor its other members again (ADR 0323 §6).
the time anyone looks.
- **A conflict is told, not checked.** A pull request whose head no longer merges cleanly into the new head is not
checked: the forge says so without a builder, its statuses fail naming the trunk commit and the files in
conflict where the forge gives them, and it is told once on the pull request, not again while the same conflict
stands. Every later trunk move and its next push ask the forge again; once it merges cleanly its check is asked.
- **One check per pull request.** A check against an older trunk commit, waiting or running, is dropped or ended
when a newer one is asked for the same pull request, as a new head already ends its old head's check (issue
726). An ended check delivers no verdict, so none of its builds is reused (ADR 0350 §7 keeps only builds a verdict
names); its scratch records wait for ADR 0350 §5's seven-day sweep. A try and a delivery's build are never touched.
- **The queue's order.** Delivery builds first; then checks of pull requests marked ready; then the rest, the most
recently pushed first.
- **Inactive pull requests wait.** One with no push and no ready mark for 7 days is left out until a push, a ready
mark or a recheck wakes it. A recheck also takes a delivery that is still proposed (issue 888).
- **Groups.** For a group's members a move asks only each member's own check; the group's composed check runs again
through those rechecks (ADR 0323 §6) and is never asked by the move itself. A move made by a member merging in
the group's order asks the other members nothing, since they merge moments later; their verdicts are out of date
until then, and one that does not merge is asked again at the next move, its next push or a recheck.
**Its cost** is at most one check asked per active, cleanly merging pull request per trunk move: about 550 a day at
ADR 0323's measured load, fewer once conflicting and inactive ones are left out; ending an older check saves builder
time, not checks asked. Issue 944 measures it once built.
## What every transition does