diff --git a/02-DECISIONS/0279-the-issue-tracker-triages-every-new-issue-and-an-issue-is-ready-when-what-it-depends-on-is-delivered.md b/02-DECISIONS/0279-the-issue-tracker-triages-every-new-issue-and-an-issue-is-ready-when-what-it-depends-on-is-delivered.md index 10c355d1..2eb1534b 100644 --- a/02-DECISIONS/0279-the-issue-tracker-triages-every-new-issue-and-an-issue-is-ready-when-what-it-depends-on-is-delivered.md +++ b/02-DECISIONS/0279-the-issue-tracker-triages-every-new-issue-and-an-issue-is-ready-when-what-it-depends-on-is-delivered.md @@ -55,8 +55,8 @@ check of ADR 0278 is one of its parts. the operator asked for "delivered first". 2. **When every issue it depends on is resolved, or closed as wontfix, and every pull request its fix names is delivered** — the delivery's own state, not the merge. Chosen. A wontfix dependency will never be delivered, - and an issue must not wait for it for ever; a duplicate's original is linked by its own `duplicates` link and - carries the work. + and an issue must not wait for it for ever — except one closed as the duplicate of another: the work moved + there, so it lets go only when its original does. ### How the tracker learns a fix is delivered @@ -100,15 +100,18 @@ consolidated schema exist for this store; a reader that does not know a key igno ### 3. Ready An issue is **ready** when it is not resolved or wontfix and every issue it depends on is either wontfix, or -resolved with every pull request its `fixed-by` names (`#`) delivered; an entry that names no -pull request, such as a commit, is not waited for. An issue with no dependency is ready. When a dependency's fix +resolved with every pull request its `fixed-by` names (`#`, in any case, or the forge's page of +it) delivered; an entry that names no pull request, such as a commit, is not waited for. A wontfix dependency +closed as the duplicate of another counts as its original does. Readiness is said once per spell: an issue keeps +the dependencies it was said ready for, so one delivery letting two of them go says it once. An issue with no dependency is ready. When a dependency's fix is delivered and that makes an issue ready, the issue gains a note saying so and naming the dependency, and the tracker says the event **`ready`** with its number, so a picker can react. The tracker consumes `mesh-delivery.transition`; a transition to `delivered` with a pull request's number marks every issue whose `fixed-by` names `#`. On its own `moved` to `resolved`, it asks -`mesh-delivery.checks` for each pull request in `fixed-by` it has not heard delivered, and marks those whose -delivery is `delivered`. +`mesh-delivery.checks` for each pull request in `fixed-by` it has not heard delivered, at most three per handling, +and marks those whose delivery is `delivered`. An ask that fails, or more left to ask, has the event offered again, +so a delivery never asked ends in `max-deliveries` rather than in silence. ### 4. Triage diff --git a/03-DESIGN/01-to-be/53-the-issue-tracker.md b/03-DESIGN/01-to-be/53-the-issue-tracker.md index 7bd982f5..27ad5c3e 100644 --- a/03-DESIGN/01-to-be/53-the-issue-tracker.md +++ b/03-DESIGN/01-to-be/53-the-issue-tracker.md @@ -228,8 +228,8 @@ what it depends on, and the issue is said ready when every fix it waits for is d **Needs**: none, decision (a decision record first), operator (the operator's answer is required). - **`depends-on`**: refused when it would close a cycle; `get` shows what an issue depends on and what it is needed by. -- **Ready**: not resolved or wontfix, and every dependency wontfix, or resolved with every pull request its - `fixed-by` names delivered. The tracker consumes `mesh-delivery.transition` and, at its own `moved` to resolved, asks +- **Ready**: not resolved or wontfix, and every dependency wontfix (one closed as a duplicate counts as its + original), or resolved with every pull request its `fixed-by` names delivered; said once per spell. The tracker consumes `mesh-delivery.transition` and, at its own `moved` to resolved, asks `mesh-delivery.checks` for what it has not heard; an issue made ready gains a note and the event `ready`. - `open` takes severity and needs; `set` changes severity, needs and suggested owner; `list` filters on severity, needs and ready. `groom` triages the backlog, dry run first.