Matrix mouth: read receipts on ack, presence from the brake #13

Merged
heimdall merged 5 commits from heimdall/mouth-receipts-presence into main 2026-11-08 16:26:11 +00:00

2026-11-08

Matrix mouth: re-read the brake before every join; pin the encoded presence path
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-08 16:24:17 +00:00
Matrix mouth: review fixes (stale brake at the join, no receipt while braked, presence on the backlog path, guarded receipt log)
- answerInvites takes a fresh brake read after the long-poll
- readUpTo reads the brake when each receipt would post; held brake drops it, one log line
- the brake read and offline presence PUT precede the full-backlog early return
- a throwing logger cannot reject the unawaited receipt call
- tests: fake keeps the raw path and honours abort signals; the braked-round carve-out is offline presence PUTs only

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-08 16:18:44 +00:00
Mouth tests: the no-wait probe fails fast instead of hanging
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-08 16:09:25 +00:00
bridge.md: ack posts her read receipt, presence follows her brake
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-08 16:04:50 +00:00
Matrix mouth: post each Persona's m.read receipt on her ack, set her presence from her brake
An ack posts her public m.read per room at the newest covered event, fire and
forget (never awaited, failure logged once, no retry). syncOnce reads the brake
once per round, passes it to answerInvites, sends set_presence on /sync and one
presence PUT on a released-to-braked transition (first braked round included).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-08 16:04:50 +00:00