diff --git a/03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md b/03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md index eabe0ca1..941d275f 100644 --- a/03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md +++ b/03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md @@ -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