Skip to content

docs(riverctl): correct the v0.2.135 incident record, the announcement was not lost - #693

Merged
sanity merged 1 commit into
mainfrom
fix/riverctl-correct-the-incident-record
Sep 10, 2026
Merged

docs(riverctl): correct the v0.2.135 incident record, the announcement was not lost#693
sanity merged 1 commit into
mainfrom
fix/riverctl-correct-the-incident-record

Conversation

@sanity

@sanity sanity commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

Problem

Three comments added by #688 say the response-multiplexing bug "broke the
freenet v0.2.135 release announcement". It did not. The announcement posted.

It is in the room, once, at 12:49:43 CDT, and a member replied to it 29 minutes
later. The journal gives the sequence:

[17:49:41Z] posting to River room 4uNUKFzZQCnzo4K2ecZ16cMsYEEfoaRS35z6exEsbvm4 (msg 88 bytes)
17:49:54  Error: Unexpected response type: ContractResponse(UpdateNotification { ... })
[17:49:54Z] FAILED with rc=1

FAILED with rc=1 is send_message_checked's log, so the send reported
failure and the script exited before reaching verify_converged.

So the bug is a false negative: the update was transmitted, applied by the
node, and converged into room state, and riverctl reported it as a failure.

Why this is worth its own PR rather than a footnote

The direction of the failure is the entire severity argument.

It is the inverse of freenet-core#4318, where riverctl printed "Message sent
successfully" while the room contract silently dropped the delta, losing the
v0.2.67/.68/.69 announcements. Every safeguard in announce-to-river.sh guards
that direction, and its comments say so at length.

Nothing guards this direction, and it has its own hazard: a reported failure
invites a retry, and a retry posts a duplicate release announcement to a public
room.
That retry was one command away here, and was avoided only because the
room was read back first. Filed as freenet-core#5640, which proposes the script
run its existing convergence check before reporting a send failure.

Leaving the wrong version in the source would mislead exactly the person most
likely to read it: someone hitting this again and deciding what it cost.

How the wrong claim got in

Inherited from a handoff summary and carried through three review rounds without
the room ever being checked. It was an inference from a script's exit code, and
the exit code was the thing under investigation. Four reviewers read the code
closely and none could have caught it, because it was never a claim about the
code.

The repo's own testing rules name this shape: a true artifact standing in for a
fact it does not establish. announce-to-river.sh exited 1 was true. "The
announcement is missing" did not follow.

Approach

Comments only, no behaviour change. The three sites now say the announcement
reported a failure for a message that had already landed, and await_response's
doc carries the evidence and the direction argument.

Testing

385 tests pass, cargo fmt --check clean. No code changed.

Related: #688, freenet-core#5640, freenet-core#4318.

https://claude.ai/code/session_015k3AmivdXMHWaZb8qGuQQz

…tion matters

Three comments added by #688 say the multiplexing bug "broke the freenet
v0.2.135 release announcement". It did not. The announcement posted.

It is in the room, once, and a member replied to it half an hour later.
The journal shows the send starting at 17:49:41Z, the message timestamped
17:49:43Z, and `FAILED with rc=1` at 17:49:54Z. That log line is
`send_message_checked`'s, so the SEND is what reported failure and the
script exited before reaching its convergence check.

So the bug is a FALSE NEGATIVE: the update was transmitted, applied by
the node and converged into room state, and riverctl reported it as a
failure.

The direction is the whole severity argument, which is why this is worth
a commit rather than a footnote. It is the inverse of freenet-core#4318,
where riverctl printed "Message sent successfully" while the contract
silently dropped the delta and three announcements were lost. Every
safeguard in `announce-to-river.sh` guards THAT direction. Nothing guards
this one, and this one has its own hazard: a reported failure invites a
retry, and a retry posts a duplicate release announcement to a public
room. That retry was one command away, and was avoided only because the
room was read back first. Filed as freenet-core#5640, which proposes the
script run its existing convergence check before reporting a send
failure.

How the wrong claim got in: it was inherited from a handoff summary and
carried through three review rounds without the room ever being checked.
It was an inference from a script's exit code, and the exit code was the
thing under investigation. Four reviewers read the code closely and none
could have caught it, because it was never a claim about the code.

No behaviour change; comments only. 385 tests pass, fmt clean.

Claude-Session: https://claude.ai/code/session_015k3AmivdXMHWaZb8qGuQQz
@sanity
sanity merged commit 2b6776e into main Sep 10, 2026
7 checks passed
@sanity
sanity deleted the fix/riverctl-correct-the-incident-record branch September 10, 2026 22:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant