You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Accepting an invite briefly publishes the joiner's (unshared) Bot on the inviter's home: dead 'no longer shared with you' chat opens on load; friend invisible in Social #303
After B accepts A's per-Bot invite, A's home briefly publishes B's Chief (the joiner's talk-through Bot, which is not shared back) as a friend's Bot. That creates a 1:1 chat record on A. Seconds later the grant re-filter marks it gone + hidden. On the next load A opened that dead chat and showed: "Chief (@chief.selfb1622.home) is no longer shared with you, so messages to it cannot be delivered… Ask its owner for a new invite." A never had B's Chief. Meanwhile A's sidebar Social section is empty although A and B are friends.
Environment
FlyBot main a003044, dsh 0.2.0-rc.2, Node 24. Fresh A :3090 (SelfA1622) / B :3091 (SelfB1622) on one box, Bot Social prod (1870786). Self-test 2026-10-18 16:24–16:33 Asia/Shanghai.
Repro
Fresh A and B. A: Chief → Sharing → Invite to this Bot. B: Add friend → paste the link → talk through Chief. (Here via the local API social/create-invite / social/join-invite at 16:25:19.)
Wait about 30 s, then reload A's tab.
Actual
A's state gets a remote chat record session-6db076fb-… for @chief.selfb1622.home, created 16:25:53, 34 s after the join. Its Session holds only setup events (title Chief, model flybot-remote/@chief.selfb1622.home), with no messages. Now it is remote.gone: true, hidden: true.
On load A's main pane opened that chat with the "no longer shared with you" bubble. Screenshot: A's main pane titled "SelfB1622's Chief" with that single grey bubble.
A's sidebar Social section is empty. social/remote-bots on A returns home SelfB1622 with bots: [], and social/friends returns []. So the friendship exists but is invisible. B's sidebar lists SelfA1622's Chief as expected.
Right after the invite, flybot/social/status listed A's Chief granted: false while flybot/social/access said granted: true (grant grt_01M571V0VBVN3WZJ2A9208Q6JY). Rechecked at 16:36 and both now say granted: true, so this was a transient stale status during the same grant sync.
Hunch (code read on a003044; mechanism matches the timestamps, not stepped in a debugger)
remoteBots() (plugins/social/src/social.js L767–821) publishes the unfiltered roster first (applyRemoteRoster(unfiltered), L816) and re-filters only after syncOutgoingGrants() resolves (L810–815).
keepGrantedRemote() (L692–704) drops "the Bot that joined our invite" only via outgoingPeerHandles(). That set is still empty on the first pass, so @chief.selfb1622.home passes. remote.chats then creates a chat for it. The re-filter makes it gone/hidden (core/src/host/remote-chat.js L216–222), but the record and Session stay and can be opened on load.
Load never opens a hidden/gone chat; it falls back to the Main Bot.
Suggestion (design call for the maintainer): a friend with no Bots shared with me still appears once in Social as the person (for example SelfB1622 · no Bots shared), so a new friendship is not invisible. If the design is "Social lists only Bots granted to me", the empty section should at least say so.
social/status and social/access agree on granted at all times.
Seen again on main a526c75 while re-recording the README demos (fresh homes, Bot Social prod). #303 covers the dead chat opening on load; two more effects of the same "joiner's Bot gets published on the inviter's home" path:
A held reply lands in that dead chat. B accepts A's invite (talk through Chief) and messages A's Chief. A's Chief answers, and the reply is held (Auto-send off). A's view jumps to the @chief.<B>.home chat and shows the "Chief (@chief.….home) is no longer shared with you, so messages to it cannot be delivered… Ask its owner for a new invite." bubble. The Waiting for approval card (Approve / Reject) sits right under it. Approving works and the reply reaches B, so the notice is wrong and confusing exactly where the owner has to act. Expected: the card is shown in a chat that does not claim the Bot is unshared, or the notice is not shown for a chat that is the friend's DM thread.
First message after joining is refused. B sends a line within a few seconds of Add friend. A's log: flybot-social: message from @chief.<B>.home refused: Chief has not been granted to this sender, so it cannot be reached from outside. A's grants already holds @chief.<B>.home; the grant reaches A's local state only after a delay (same sync as in the issue text). A retry after ~20 s works. Expected: the receiving home syncs grants before it decides, or the sender is told "just joined, try again".
Not covered here, and not fixed by hiding the chat: a second invite between homes that are already friends answers "You're already friends. Their Bot is back in your list." and grants nothing, so the usual both-ways setup (each side invites the other) cannot be done by invite once a friendship exists.
Self-test on 2c9853d (with #334), 2026-10-18 20:25 Asia/Shanghai, fresh A :3095 and B :3096. On the inviter side, #334 holds: A got no chat for B's Chief, and A's remote-bots home SelfB2018 has bots: [].
On the joiner side, #334 broke something. B never gets A's Chief, and B's Chief now lists SelfA2018 in People with access. The new "sync grants before publishing an unseen Bot" path classifies the talk-through grant before the shared Bot is in inboundBots. Bot Social's join_invite answer has no bot field, so the shared Bot is never marked inbound. Then "outgoing grants win" drops the shared Bot. Details and a unit repro are in #342.
Activity
Birfy commentedon Oct 18, 2026
Seen again on main a526c75 while re-recording the README demos (fresh homes, Bot Social prod). #303 covers the dead chat opening on load; two more effects of the same "joiner's Bot gets published on the inviter's home" path:
@chief.<B>.homechat and shows the "Chief (@chief.….home) is no longer shared with you, so messages to it cannot be delivered… Ask its owner for a new invite." bubble. The Waiting for approval card (Approve / Reject) sits right under it. Approving works and the reply reaches B, so the notice is wrong and confusing exactly where the owner has to act. Expected: the card is shown in a chat that does not claim the Bot is unshared, or the notice is not shown for a chat that is the friend's DM thread.flybot-social: message from @chief.<B>.home refused: Chief has not been granted to this sender, so it cannot be reached from outside. A'sgrantsalready holds@chief.<B>.home; the grant reaches A's local state only after a delay (same sync as in the issue text). A retry after ~20 s works. Expected: the receiving home syncs grants before it decides, or the sender is told "just joined, try again".Not covered here, and not fixed by hiding the chat: a second invite between homes that are already friends answers "You're already friends. Their Bot is back in your list." and grants nothing, so the usual both-ways setup (each side invites the other) cannot be done by invite once a friendship exists.
fix(social): fail closed on a failed grant sync, wait on an empty ros…
Birfy commentedon Oct 18, 2026
Self-test on
2c9853d(with #334), 2026-10-18 20:25 Asia/Shanghai, fresh A:3095and B:3096. On the inviter side, #334 holds: A got no chat for B's Chief, and A's remote-bots homeSelfB2018hasbots: [].On the joiner side, #334 broke something. B never gets A's Chief, and B's Chief now lists
SelfA2018in People with access. The new "sync grants before publishing an unseen Bot" path classifies the talk-through grant before the shared Bot is ininboundBots. Bot Social'sjoin_inviteanswer has nobotfield, so the shared Bot is never marked inbound. Then "outgoing grants win" drops the shared Bot. Details and a unit repro are in #342.Fix the joiner never seeing the inviter's Bot after Add friend (Fixes T…
Keep live shares in People with access using Bot Social's reply_only (T…
Keep the conversation of a share that ended on the sidebar (ThinkFlow…