persona mouth: open a direct room for a Persona; answer unknown kinds loudly #39

Merged
heimdall merged 2 commits from mouth-open-direct into main 2026-11-10 18:35:51 +00:00
Member

Mouth half of gamecult-chat:follow_up:mouth-open-direct (Huginn half: eureka-body cut-persona-open-direct.r1). New chat_open_direct request/receipt pair, golden fixtures in tests/fixtures/persona-chat-v4, unknown request kinds get a typed UnknownKind refusal plus a log line. Consent is the person's Matrix membership (invite pending, leave/ban = decline, sticky). One creation per person per UTC day, brake before each write, repeat by request id resumes.

🤖 Generated with Claude Code

Mouth half of gamecult-chat:follow_up:mouth-open-direct (Huginn half: eureka-body cut-persona-open-direct.r1). New chat_open_direct request/receipt pair, golden fixtures in tests/fixtures/persona-chat-v4, unknown request kinds get a typed UnknownKind refusal plus a log line. Consent is the person's Matrix membership (invite pending, leave/ban = decline, sticky). One creation per person per UTC day, brake before each write, repeat by request id resumes. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
New chat_open_direct request/receipt pair on the existing endpoint. The mouth
creates an unencrypted private DM, invites the person (the line is the invite
reason), says the line with a not-E2EE notice, and records the room in m.direct.
Consent is the person's own membership: pending invite and decline are read from
room state, and a decline stands until the person invites her. One creation per
person per UTC day, the brake read before each write, a repeat by request id
resumes. A request of an unknown kind now gets a typed UnknownKind refusal and a
log line instead of silence. Golden fixtures in tests/fixtures/persona-chat-v4.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Soul findings on 77975b9: concurrent opens could make two rooms; a decline in an
encrypted DM was ignored; the not-E2EE notice could be lost after a held first
line; the unknown-kind refusal echoed an unbounded agent name; isServed could
read a mouth that had not started. Tests now pin the brake read before each
write exactly, the two-member DM rule, and that project rooms are not scanned.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No labels
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
GameCult/Bifrost!39
No description provided.