Skip to content

Remove the refused-send row: only the wire writes data (ADR 0061) - #557

Open
thebhef wants to merge 1 commit into
fix-python-toolchainfrom
task160-wire-rule
Open

thebhef wants to merge 1 commit into
fix-python-toolchainfrom
task160-wire-rule

Conversation

@thebhef

@thebhef thebhef commented Oct 8, 2026

Copy link
Copy Markdown
Owner

Owner ruling 2026-10-07: "I thought we weren't appending transmit
messages to the trace store anymore ... They should only come in from
echo." The one exception the echo-row change kept — a Tx ✗ row
appended when an enqueue was refused, "because there the queue did say
no" — is withdrawn. A refused send was still an intent written into
the store every consumer reads (decode, plots, per-message counts,
fps.tx, bus load, logger, Save Capture), so the store now takes no row
from any transmit intent, accepted or refused.

Removed:

  • append_refused_tx_row, UndeliveredTx, MAX_UNDELIVERED_RUNS, the
    AppState::undelivered_tx field and its clear-with-the-capture.
  • The paged trace record's tx_delivery field (host ipc.rs and the
    frontend types.ts), the trace's Tx ✗ label, its row class,
    tooltip and CSS.
  • The tests that pinned the old row and the marks' run-length bound.

What a refusal is now: the manual send's wire status to its caller
(not_connected / failed); a periodic with no room as a missed
period, and one whose route is down parks (ADR 0039); a batch a session
has gone away under is dropped and the next tick parks it; the peer's
own refusals stay the bus-health per-bus refusal count (ADR 0060).

The rule is written down where reviewers read it: ADR 0061 (a row is
the wire's account; an enqueue or send return is an intent and yields
no row, count or sample; a Tx row is an echo; the PEAK caveat — its
echo means "on the wire", not "acknowledged", so an error-passive
transmitter's echoes are withheld and the controller's TEC is the
wire's account of a failed transmission; backends without
receive_own_messages show no Tx rows), a CONTEXT.md entry, and a
paragraph in CLAUDE.md. ADR 0039 and ADR 0023 carry dated amendments
for the withdrawn row; README's transmit section is corrected.

Tests: a send no session carries, a send onto a gone adapter, a
periodic batch the session refuses (new, through fire_due) and an
accepted send each leave no row, no per-message count and no tx rate.

Verified: cargo test -p cannet-gui (1437 passed), clippy -p cannet-gui
--all-targets -D warnings, cargo fmt --check, rustdoc -D warnings for
cannet-gui, pnpm test (3765 passed), pnpm build.

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com

This was referenced Oct 8, 2026

thebhef commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner Author

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

This stack of pull requests is managed by Graphite. Learn more about stacking.

@thebhef
thebhef marked this pull request as ready for review October 14, 2026 21:09
@thebhef
thebhef force-pushed the fix-python-toolchain branch from f0faf9c to 6d33236 Compare October 15, 2026 00:13

thebhef commented Oct 22, 2026 •

Copy link
Copy Markdown
Owner Author

Merge activity

Owner ruling 2026-10-07: "I thought we weren't appending transmit
messages to the trace store anymore ... They should only come in from
echo." The one exception the echo-row change kept — a `Tx ✗` row
appended when an enqueue was refused, "because there the queue did say
no" — is withdrawn. A refused send was still an intent written into
the store every consumer reads (decode, plots, per-message counts,
fps.tx, bus load, logger, Save Capture), so the store now takes no row
from any transmit intent, accepted or refused.

Removed:
- `append_refused_tx_row`, `UndeliveredTx`, `MAX_UNDELIVERED_RUNS`, the
  `AppState::undelivered_tx` field and its clear-with-the-capture.
- The paged trace record's `tx_delivery` field (host `ipc.rs` and the
  frontend `types.ts`), the trace's `Tx ✗` label, its row class,
  tooltip and CSS.
- The tests that pinned the old row and the marks' run-length bound.

What a refusal is now: the manual send's wire status to its caller
(`not_connected` / `failed`); a periodic with no room as a missed
period, and one whose route is down parks (ADR 0039); a batch a session
has gone away under is dropped and the next tick parks it; the peer's
own refusals stay the bus-health per-bus refusal count (ADR 0060).

The rule is written down where reviewers read it: ADR 0061 (a row is
the wire's account; an enqueue or send return is an intent and yields
no row, count or sample; a `Tx` row is an echo; the PEAK caveat — its
echo means "on the wire", not "acknowledged", so an error-passive
transmitter's echoes are withheld and the controller's TEC is the
wire's account of a failed transmission; backends without
`receive_own_messages` show no `Tx` rows), a CONTEXT.md entry, and a
paragraph in CLAUDE.md. ADR 0039 and ADR 0023 carry dated amendments
for the withdrawn row; README's transmit section is corrected.

Tests: a send no session carries, a send onto a gone adapter, a
periodic batch the session refuses (new, through `fire_due`) and an
accepted send each leave no row, no per-message count and no tx rate.

Verified: cargo test -p cannet-gui (1437 passed), clippy -p cannet-gui
--all-targets -D warnings, cargo fmt --check, rustdoc -D warnings for
cannet-gui, pnpm test (3765 passed), pnpm build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@thebhef
thebhef force-pushed the fix-python-toolchain branch from 6d33236 to 9670a33 Compare October 26, 2026 22:42
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