mesh-issues: say a delivered fix left in fixing, and flag a stale claim (hq issue 483)
mesh/merge-gate pass: builds mesh-issues → novox; no bus step; every machine composes with the change as it did without (4 of 4 compose)
mesh/repo-check pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
mesh/delivery superseded: a newer head of the same pull request

The operator found 13 issues in fixing whose fix was delivered hours before:
their pull requests were linked, not in fixed-by, so their delivery was never
measured, and nothing said an issue left there or a worker gone.
This commit is contained in:
2026-10-11 12:16:59 +02:00
parent c4ea58aeb0
commit d81e7d063b
10 changed files with 345 additions and 24 deletions
+25 -2
View File
@@ -19,7 +19,7 @@ what it refuses.
|---|---|---|
| `open` | `title`, `report`, optionally `located-in`, `record` | checks the issue, then takes the next number and keeps it under that number; answers the number |
| `get` | `number` | the issue whole: fields, notes, links |
| `list` | optionally `status`, `owner`, `phrase`, `limit` | short rows, newest first: number, status, owner, title |
| `list` | optionally `status`, `owner`, `phrase`, `limit`, `severity`, `needs`, `ready`, `flag` (`delivered-not-resolved` or `stale-claim`) | short rows, newest first: number, status, owner, title, and each flag that holds |
| `move` | `number`, `status`, and what that status needs (`by` for `diagnosing` and `fixing`, optionally `take-over`) | changes the status under the development cycle's rules |
| `note` | `number`, `text` | appends a note; a note is never edited |
| `link` | `number`, `kind`, `target`, optionally `remove` | adds or removes a typed link |
@@ -110,6 +110,27 @@ event `ready-to-verify`, once per set of fixes; it is resolved once its acceptan
while the issue stays `fixing`: `move` to the status it has changes what it holds and is refused when it changes
nothing.
**The fixes of an issue are its `fixed-by` and the pull requests linked to it** (link kind `pull-request`; hq issue
483): agents link a pull request while the issue is in fixing and give `fixed-by` at the resolve, so a delivery read
on `fixed-by` alone missed every fix being verified. Readiness still reads `fixed-by` alone, so a pull request linked
and abandoned holds no dependent back. A pull request linked after its delivery moved hears no transition again: each
sweep asks mesh-delivery for at most five fixes never heard of, of issues not resolved.
The ready-to-verify note names each fix with when it was delivered, and the issue's worker; the event carries
`worker` and `delivered-at`. No channel of the tracker reaches a worker, so the note and the event are how it hears.
**Delivered, not resolved** (hq issue 483). An issue in fixing whose every fix is delivered carries
`delivered-not-resolved` on `get` and its `list` row. Past `delivered-not-resolved-after` (default `1h`) from the last
delivery, the sweep says it once as a warning on the operator's channel, key
`issue-tracker.delivered-not-resolved.<number>`, "issue N: fixed and delivered, not resolved; <worker> works on it",
cleared there when the issue leaves fixing or names a fix not delivered yet (at its `moved`, or the next sweep).
**A stale claim** (hq issue 483). An issue in diagnosing or fixing whose worker did nothing on it for
`worker-stale-after` (default `24h`) and that names no pull request still open (not merged, or never heard of)
carries `stale-claim` on `get` and its `list` row, beside its `worker`. A move by someone else takes it over without
`take-over`'s reason, as any stale worker; the answer, the note and the `moved` event say the claim was stale
(`stale-claim`).
Every five minutes the module looks for a fix merged and not delivered after `stuck-after` (default `2h`): it is
said once — a note on the issue and a warning on the operator's channel (`seat:operator-channel.notify`, key
`issue-tracker.fix-stuck.<number>`), cleared there when every fix of the issue is delivered. A module that runs only
@@ -243,7 +264,9 @@ as the credential, which ADR 0266 keeps agents from reading (hq issue 333).
`duplicate-check` (`on`; `off` stops the triage of new issues), `judge-model` (`sonnet`; `haiku` or `opus`) and
`forge-owner` (the forge's owner of the repositories `fixed-by` names, for asking a delivery) steer the triage;
`stuck-after` (`2h`) is how long a merged fix may take to be delivered before it is said.
`stuck-after` (`2h`) is how long a merged fix may take to be delivered before it is said;
`delivered-not-resolved-after` (`1h`) how long an issue may stay in fixing once every fix is delivered before it is
said (hq issue 483).
```
{