The client says 12x and stops double-counting #95

Open
opened 2026-08-23 12:03:24 +00:00 by aiko · 0 comments
Owner

Parent

The client half of denpatou#58, split at the repo seam the way #85/denpatou#30 was. Decisions: ADR-0007, ADR-0016, denpatou#41's finding, denpatou#55's close-out.

What to build

The break-in count comes from the wire, and only from the wire.

  • The unprompted-turn announcement now carries a real count, minted by the go-between's coalescing. The receiver renders it at delivery — 12x on the break-in, the invocation line's existing 送信 · N件 shape — when it is greater than one.
  • The client-side merge (the reconnect-time squash in the unprompted handling) is retired. It was the only producer of a merged view, it short-circuited on any visible surface so it never fired where it mattered, and with the go-between coalescing upstream it can only double-count.
  • The count field's declaration stops being dead: the type, the producer and the render finally agree.

Acceptance criteria

  • A wire count of 3 renders as one break-in marked 3×; a count of 1 or absent renders unmarked.
  • The client-side merge code and its tests are deleted, not bypassed.
  • No client path invents or adjusts a count; the wire value is displayed as received.
  • Reviews run the code; test tail pasted, not paraphrased.

Blocked by

  • denpatou#58 — nothing here invents a count; the producer must exist first.
## Parent The client half of [denpatou#58](https://git.aiko.works/aiko/denpatou/issues/58), split at the repo seam the way #85/denpatou#30 was. Decisions: ADR-0007, ADR-0016, denpatou#41's finding, denpatou#55's close-out. ## What to build The break-in count comes from the wire, and only from the wire. - The unprompted-turn announcement now carries a real count, minted by the go-between's coalescing. The receiver renders it at delivery — `12x` on the break-in, the invocation line's existing `送信 · N件` shape — when it is greater than one. - The client-side merge (the reconnect-time squash in the unprompted handling) is retired. It was the only producer of a merged view, it short-circuited on any visible surface so it never fired where it mattered, and with the go-between coalescing upstream it can only double-count. - The `count` field's declaration stops being dead: the type, the producer and the render finally agree. ## Acceptance criteria - [ ] A wire count of 3 renders as one break-in marked 3×; a count of 1 or absent renders unmarked. - [ ] The client-side merge code and its tests are deleted, not bypassed. - [ ] No client path invents or adjusts a count; the wire value is displayed as received. - [ ] Reviews run the code; test tail pasted, not paraphrased. ## Blocked by - [denpatou#58](https://git.aiko.works/aiko/denpatou/issues/58) — nothing here invents a count; the producer must exist first.
Sign in to join this conversation.
No milestone
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
aiko/denpa#95
No description provided.