Matrix mouth: m.read follows a chat_read report, presence follows the turn #35

Merged
heimdall merged 4 commits from heimdall/mouth-read-through into main 2026-11-10 17:32:03 +00:00

2026-11-10

Heimdall
Read reports: a report that throws no longer wedges its room
The per-room tail was chained with .then(run), so a rejected run skipped every later report for that room and left the cleanup as an unhandled rejection. Chain on both outcomes and clean up on both. A test reaches it with a presence failure plus a throwing logger and fails on the old chain.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 17:31:59 +00:00
Heimdall
Matrix mouth: m.read follows a chat_read report, not the ack; presence follows the turn
An ack posted her m.read, so the receipt tracked the queue, not the model. The mouth now posts m.read only
at the event id Huginn reports in gamecult.persona.chat_read.v1, for an event it delivered to her in that
room, forward only, brake read fresh. The ack posts nothing. Presence is online within presenceGraceMs of
a read report, a send or an ack, unavailable after, offline under the brake; a change is PUT at once.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 14:17:35 +00:00