Repository navigation
Description
What this is
The buildable half of #866, split out so the umbrella can stay open while its end-to-end acceptance is blocked on the platform. #866 does not close with this issue, and this issue does not close #866.
#866 stays open as the gate until Birfy/bot-social#59 lands: on b1b0b7e7 a claimed guest still gets no_relationship with the correct room_id, so acceptance 1 ("the guest's first line arrives") cannot be observed anywhere yet. This issue covers everything that can be decided, written, and pinned with the fake server in the meantime.
The two ticket paths — only one of them needs a room_id
- Local FlyBot room (
#852/#864,sendShareTo): it has noface_roomsrow. Its in-room lines areroom-shareenvelopes over plain 1:1 —room-membership.js:1092-1113→flybotSend via: 'room-share'→social.js:1540→send_as_member— and their authority is the seat the ticket created. Aroom_idhere would failroomReachgate 1 (face_roomslookup) and come backroom_not_shared. Never send one on this path. A guest's room also only exists on our side asorigin: 'inbound-share'with a FlyBotremoteRoomId(war);joinis not a dispatched op (room-membership.js:1287ask,:1288invite,:1304leave,:1342line), so it falls through torecordInboundSharedRoom. - Platform room / claimed room (bot-social
#43,#50): the pair may share only that room, so the line must name it. This is the only path that gets the field.
Scope
- Step 0 — the fixture, before any code. The fake server in
plugins/social/test/social.test.js:67answers everysend_as_memberwith a message id, and no test in that file mentionsroom_not_sharedorno_relationship. It must learn room reach first: both Bots current members of that open room, the room'schat.publicgrant alive; noroom_id→no_relationship; another room →room_not_shared. Until it does, a green suite proves nothing and the negative controls cannot stand up. - Pass
room_idon the platform-room path only — the pair that shares an open face room and sends over 1:1. The call sites on main38629bf4areplugins/social/src/social.js:1540(transport),:1731and:1740(owner-typed line); the numbers in#866's first version (:1518,:1709,:1718) are stale. - Map the refusals:
room_not_sharedand a room-scopedno_relationshipeach get one sentence instead of a raw platform error.
Acceptance
- The fake server refuses as described in scope 1, and undoing that far end (answering every send again) reds exactly the room-scoped cases.
- A platform-room send carries
room_id; the same conversation without it is refusedno_relationship(asserted on the recordedsend_as_memberarguments). - A line into a local room never carries
room_id— asserted on the recorded arguments, not on the room's shape. - A send naming another room gets
room_not_shared, and after Leave / room close / the grant dying the next send is refused, each as a sentence. - No
room_idon a send that is not part of a room: the 1:1 path keeps today's behaviour, friendship and approvals included. - The PR body says in one line that the end-to-end case is blocked on
Birfy/bot-social#59, and quotes the probe output that shows it.
Related
#866 — the umbrella this was split from; stays open until bot-social #59 lands.
#852 / #864 — the local-room link, which must not gain a room_id.
bot-social #43 (the platform issue), #50 (merged b1b0b7e7), #59 (the platform prerequisite).
Activity
Birfy commentedon Oct 23, 2026
Written-by: Dev
Claimed on branch
fix/866-room-scoped-send— PR #886 (Fixes #881,Refs #866).Pin the room envelope hold rule and the local-room room_id guard (Thi…
Deliver shared-room mentions without a Sharing grant (ThinkFlowLab#1130)