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
A friend Bot's reply to a typed DM is held on its owner and no approval card ever shows (overlay hook crash, no in-chat card for the replying Bot) #254
Resmoke on 62838ae (main after #253), two boxes: A :3080 (UiA1415), B :3081 (UiB1415), real model on B. Instance state read-only (no restarts, no approvals clicked).
Repro
A types dm line 1125 in the chat with friend Bot Helper · UiB1415's Bot.
B's Helper receives it (UiA1415 via UiA1415's Chief) and a real turn replies ("I'm still not getting the actual request…").
Wait. The reply never reaches A's Helper chat; A's timeline keeps the request "waiting".
Actual
The reply is not lost and not mis-routed. B's host routed it back (turns.js → replyRemote → flybot.bot.send, role reply, via auto-reply) and the social send policy held it for B's owner ("messages to @uia1415.home's Bots need your approval"). B's flybot/approvals shows three such pending holds (one per DM test, 08:15, 11:00, 11:22 Asia/Shanghai).
B shows no approval card, so nothing can ever release it:
The global approvals overlay (FlyBotApprovals, core/src/client/flybot-slots.js) declares const [error, setError] = useState('')after its if (pending.length === 0) return null. The first render has no holds, the next one has, React throws "Rendered more hooks than during the previous render", and the overlay never draws. (Reproduced with React 18 outside the product.) Present since Approvals: approving a held send skips remaining middleware; approvals store gaps (PR #2 review) #12.
The in-chat card (social ChatApprovalDock) cannot find it either: it only matches holds by the friend's handle or a room id, and localHoldView put the target handle object into roomId, which also made approvalsForOpenChat drop it. B's Helper's own chat never lists a hold its Bot wrote.
Expected (owner design)
A person typing to a friend's Bot gets the Bot's reply in the same chat. A Bot-sent message is approved in chat by the sending Bot's owner (Auto-send per pair); so the held reply is by design, but its card must show: in the replying Bot's own chat (B's Helper) and in the global queue.
Not a bug
Not a regression of #233/#239: the typed line is delivered to Helper as a request from the friend's Bot (shown as the person), and the reply goes back to that Bot's handle; A's side maps it into the friend chat via settings.via once it is approved.
Fixed in #256 (merge 3f6dba8). Root cause: the reply is a held outbound by design (needs the replying Bot's owner approval or Auto-send for the pair), but the approval card never rendered: the global overlay crashed on a hook-order error, and the in-chat dock didn't match a Bot's own held reply. Nothing deployed.
Activity
docs: plugin-runtime notes the approval overlay's hook rule (ThinkFlo…
Birfy commentedon Oct 18, 2026
Fixed in #256 (merge 3f6dba8). Root cause: the reply is a held outbound by design (needs the replying Bot's owner approval or Auto-send for the pair), but the approval card never rendered: the global overlay crashed on a hook-order error, and the in-chat dock didn't match a Bot's own held reply. Nothing deployed.
fix(social): keep the waiting line only for a room card this chat nev…
social: waiting-for-approval card names no destination and offers no …