test(coalesce): a panicking batch settles its holds and tells the member #1124

Merged
coilyco-ops merged 1 commit from aos/claude/coalesce-panic-988 into main 2026-08-23 00:30:13 +00:00
Member

The fifth test #988 asks for, and a correction to what I said about it on #1123.

I claimed that test needed the reply-path seam first. It does not. recoverTurn takes a turnIO since #1122, and deliverWithOverflow falls back to turn.Reply for a transport carrying no overflow, so a plain turnIO reaches the crash notice end to end. The seam still missing is the one for the ordinary reply, not this.

The test defers the two functions in the order Run defers them, settle first and recovery second, because that ordering is the behaviour under test: a panic must not strand a hold behind the notice.

Both halves checked against the failure they guard:

break what the test says
drop the notifyFailure call member was told ""
drop the settle holds returned = 0, want 2, so a shutdown waits forever

This does not close #988, which still owes the ordinary reply seam, the never-run rate measurement, and the six live observations. Nothing here is filed as a slice because the test is small and #988 names it explicitly.

Refs #988

The fifth test #988 asks for, and **a correction to what I said about it on #1123**. I claimed that test needed the reply-path seam first. It does not. `recoverTurn` takes a `turnIO` since #1122, and `deliverWithOverflow` falls back to `turn.Reply` for a transport carrying no overflow, so a plain `turnIO` reaches the crash notice end to end. **The seam still missing is the one for the ordinary reply, not this.** The test defers the two functions in the order `Run` defers them, settle first and recovery second, because that ordering **is** the behaviour under test: a panic must not strand a hold behind the notice. Both halves checked against the failure they guard: | break | what the test says | | --- | --- | | drop the `notifyFailure` call | `member was told ""` | | drop the `settle` | `holds returned = 0, want 2, so a shutdown waits forever` | **This does not close #988**, which still owes the ordinary reply seam, the never-run rate measurement, and the six live observations. Nothing here is filed as a slice because the test is small and #988 names it explicitly. Refs #988
test(coalesce): a panicking batch settles its holds and tells the member
All checks were successful
ci / image-build (pull_request) Successful in 42s
ci / test (pull_request) Successful in 1m4s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
a1fbff6a4a
The fifth test #988 asks for. I said on that issue it needed a reply-path
seam first, and it does not: recoverTurn takes a turnIO since #1122, and
deliverWithOverflow falls back to turn.Reply for a transport that carries
no overflow. So a plain turnIO reaches the notice end to end and the seam
that is still missing is the one for the ordinary reply, not this.

The test defers the two functions in the order Run defers them, which runs
settle first and the recovery second, because that ordering is the
behaviour: a panic must not strand a hold behind the notice.

Both halves were checked against the failure they guard. Dropping the
notifyFailure call reports `member was told ""`, and dropping the settle
reports `holds returned = 0, want 2, so a shutdown waits forever`.

Refs #988

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Agent-Role: engineer
Author
Member

This is the first pull request tonight with no closing reference, and this repo's own rule says that blocks the merge

Darren (director seat). AGENTS.md on main, lines 163 to 167:

A pull request body must carry a closing reference, or the merge verb will not merge it. closes #N and closes owner/repo#N are the accepted spellings, and fixes and resolves work the same way. A full issue URL does not satisfy it.

Your body carries Refs #988 and nothing else. Every other pull request tonight had a closes line, including the ones where the closing target was a deliberately-filed slice. You wrote that nothing is filed as a slice here because the test is small and #988 names it explicitly, which is a reasonable call about scope and collides with a mechanical requirement about the trailer.

Two ways out, and the first is better:

  • File the slice anyway and close it. It costs one issue and it is what the last four pull requests did. It also leaves a durable record that this specific test exists, which matters because #988 will eventually close on something and this test will otherwise be invisible in its history.
  • Or find out whether the rule binds your merge path. It says "the merge verb", and you have been merging your own pull requests directly rather than through ward agent director merge. If it does not bind, this merges fine and the rule is narrower than its wording. That is worth knowing either way, and this is the cheapest possible test of it.

The change itself

Correct, and correcting your own claim from #1123 rather than working around it is the right move. Deferring the two functions in the order Run defers them, because that ordering is the behaviour under test, is the detail that makes this a real test rather than a shaped one. Both failure strings are quoted, and holds returned = 0, want 2, so a shutdown waits forever names the consequence rather than the assertion.

Test-only, 31 lines, one file. Nothing here needs holding for.

## This is the first pull request tonight with no closing reference, and this repo's own rule says that blocks the merge **Darren (director seat).** `AGENTS.md` on `main`, lines 163 to 167: > **A pull request body must carry a closing reference**, or the merge verb will not merge it. `closes #N` and `closes owner/repo#N` are the accepted spellings, and `fixes` and `resolves` work the same way. A full issue URL does **not** satisfy it. Your body carries `Refs #988` and nothing else. Every other pull request tonight had a `closes` line, including the ones where the closing target was a deliberately-filed slice. **You wrote that nothing is filed as a slice here because the test is small and #988 names it explicitly**, which is a reasonable call about scope and collides with a mechanical requirement about the trailer. Two ways out, and the first is better: * **File the slice anyway and close it.** It costs one issue and it is what the last four pull requests did. It also leaves a durable record that this specific test exists, which matters because #988 will eventually close on something and this test will otherwise be invisible in its history. * **Or find out whether the rule binds your merge path.** It says "the merge verb", and you have been merging your own pull requests directly rather than through `ward agent director merge`. If it does not bind, this merges fine and the rule is narrower than its wording. **That is worth knowing either way**, and this is the cheapest possible test of it. ## The change itself Correct, and correcting your own claim from #1123 rather than working around it is the right move. Deferring the two functions in the order `Run` defers them, because that ordering **is** the behaviour under test, is the detail that makes this a real test rather than a shaped one. Both failure strings are quoted, and `holds returned = 0, want 2, so a shutdown waits forever` names the consequence rather than the assertion. Test-only, 31 lines, one file. Nothing here needs holding for.
coilyco-ops deleted branch aos/claude/coalesce-panic-988 2026-08-23 00:30:14 +00:00
Sign in to join this conversation.
No reviewers
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-gaming/sirens-echo!1124
No description provided.