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
Removing a friend's Bot is silent and irreversible: no confirm/undo, re-invite fails with raw 'relationship_exists' #139
Environment: ThinkFlowLab/FlyBot main 1ac7104 (core, plugins/social, plugins/tree) on @deepseek-ai/dsh@0.2.0-rc.2, two fresh installs on one Linux box (A on :3080, B on :3081), Bot Social server https://47-80-69-220.sslip.io. Found in the scheduled two-instance UI self-test on 2026-10-16 (~19:35 UTC+8).
What happened
On B, Friends' Bots → SelfA1935 → "Helper · SelfA1935's Bot" → × ("Remove this Bot"). It disappears immediately, with no confirmation and no undo. The friend row stays with "No Bots shared yet".
There is no way back. Re-opening the same invite link gives Joining failed: Bot Social join_invite: invite is used. A fresh invite from A (Helper → Invite to this Bot → Create another invite link) gives Joining failed: Bot Social join_invite: relationship_exists. A has no "share again" for an existing friend.
A still sees the grant in Helper → Manage access ("Chief@chief.selfb1935.home / Revoke"), so A thinks B has Helper and B thinks it is gone.
Repro
A invites B to Helper; B accepts.
B clicks × on Helper.
B: + → Accept invite with the old link, then with a new link from A.
Expected
Remove asks once ("Remove Helper? SelfA1935 can share it again.") or offers Undo in the toast.
Removing is a real revoke (or at least visible to A), so both sides agree on who has access.
A new invite to an existing friend just re-grants that Bot (no relationship_exists), or B has a "Show hidden Bots" path.
Errors are plain English, not raw tool output ("This invite was already used. Ask SelfA1935 for a new one.").
Code pointer (hunch, verify)
Remove is the local hide from #90 (hidden-remotes.js): the hide is only forgotten after the grant disappears, so a still-granted Bot can never come back on B.
Fixed on main (566f1e6) by #141 (first half), #142 (review fixes) and #147 (other half).
Confirm: Remove asks once ("Remove Helper? {friend} can share it again."). Test: #139: Remove asks once; cancelling leaves the Bot.
Real revoke (feat(social): sync Bot avatars and decline grants on remove (#137, #139) #147): after the confirm, Remove calls decline_bot_grant on Bot Social, so the owner's Manage access no longer lists the grant. grant_not_found counts as already gone. An older server (404 or unknown tool) falls back to the local hide. Tests: #139: decline_bot_grant on Remove…, #139: old-server decline 404 falls back to local hide.
Plain-English errors: "You're already friends. That Bot is in Friends' Bots again." and "This invite was already used. Ask your friend for a new one." replace the raw relationship_exists / invite is used text.
Everything above is covered by mocked-server tests. I didn't re-run the two-instance flow against the live Bot Social server.
Activity
fix(social): name collisions, per-Bot grant leaks, Bot removal and ap…
feat(social): sync Bot avatars and decline grants on remove (ThinkFlo…
Birfy commentedon Oct 16, 2026
Fixed on main (
566f1e6) by #141 (first half), #142 (review fixes) and #147 (other half).#139: Remove asks once; cancelling leaves the Bot.decline_bot_granton Bot Social, so the owner's Manage access no longer lists the grant.grant_not_foundcounts as already gone. An older server (404 or unknown tool) falls back to the local hide. Tests:#139: decline_bot_grant on Remove…,#139: old-server decline 404 falls back to local hide.relationship_existsunhides that Bot andregrantedjoins restore it. Unrelated hidden Bots stay hidden (fix(social): Codex review follow-up for #141 (canonical grants, inbound backfill, scoped unhide) #142). Test:#139: regranted join unhides the Bot.relationship_exists/invite is usedtext.Everything above is covered by mocked-server tests. I didn't re-run the two-instance flow against the live Bot Social server.
Closing as completed.
Auto-send for one pair (my Bot → that person), shown and turned off i…
Social: neutral 'You already have …' on a re-accepted invite; clearer…
Name the link that keeps a removed friend's row (ThinkFlowLab#1001) (T…