Repository navigation
Description
Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment on this issue.
Written-by: FlyBot Lead
Claimed-by: FlyBot Lead
Claim-Id: e9782fb6143d464fbf621caa92c96da7
Branch: dev/3-busy-ack-in-a-group-room
Base: c26089f
At: 2026-10-29T06:01:07Z
Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment.
The busy acknowledgment from #1584/#1629 exists only in a Bot's own chat. In a group room a member Bot that is already running answers a human line with silence until its step ends — the same silence #1584 set out to remove, on the surface the team actually works in.
Verified code facts (read at main c26089f55d1b):
core/src/host/busy-ack.js:128-130—shouldNoteBusyAck({ sourceKind, turnRunning, ownChat })returnssourceKind === 'user' && turnRunning === true && ownChat === true.core/src/host/busy-ack.js:147—const ownChat = sessionId => rt.chatOwners?.has(sessionId) === true, passed in at:176-180, so any Session outsidechatOwnerscan never note an ack.core/src/host/store.js:569—chatOwners.set(chatOf(bot.id), bot.id): only each Bot's own chat (its current segment). Group Sessions are indexed apart at:575—groupOwners.set(sessionId, { botId, roomId }), filled fromroom.sessions[botId](:574).core/src/client/busy-ack.js:36-52—BusyAckBubble({ sessionId, … })readsuseBusyAcks()[sessionId]anduseSessionStatus().get(sessionId)?.running;header.js:101mounts it with the Session of the open conversation. In a room that is the room's own Session, while the member's running turn lives inroom.sessions[botId]— a different id, so the bubble cannot find the ack or the running turn even if the host recorded one.docs/subsystems/core-host.md:406-408documents the gap as intended shape ("in a Bot's own chat").
Consequence. A member Bot busy with a >1s tool in a room says nothing when a person writes; the room reads as a dead Bot until the step ends. Pings and dispatch lines land in rooms, so this is the common case, not an edge.
Expected. A human line in a room, while the addressed member's room turn is running, gets the same one short ack on that member's row in the room flow: once per coalesce window, worded by the same composer, cleared when that member's turn ends. Other members in the same room are unaffected, a line that names nobody acks nobody, and the own-chat path stays byte-for-byte as today.
Acceptance.
- (a) real
install()with the real indexes (chatOwners+groupOwners), a room line whoseuser/messagearrives in the member's group Session while that Session has a live turn → exactly one ack recorded for that Session; - (b) a second line inside
COALESCE_MSkeeps one ack (same window), a line after it produces a second one, and the previous wording is not repeated; - (c)
turn/endandagent/status: idleclear it — no ack survives the turn; - (d) a line in a room where that member has no running turn, a line naming a different member, and an own-chat line behave exactly as today;
- (e) the client draws it in the room flow on the running member's row (
data-chat-running/ the member row that already exists for room turns), and the own-chat bubble is unchanged; - (f) the new test is red on today's code and uses the real group-Session shape, not a hand-built
chatOwnersentry.
Scope. core/src/host/busy-ack.js (accept a Session that is a live group Session, keeping the own-chat branch as it is), core/src/client/busy-ack.js plus its room-flow mount, core/test/busy-ack.test.js / busy-ack-client.test.js (existing cases unchanged), the patches/ds-bot regeneration (bundle + file mirror via the generators, never by hand), the one sentence in docs/subsystems/core-host.md §#1584 that states the own-chat-only limit, and one changelog fragment. Keep COALESCE_MS, the composer, and the template pools untouched; {t}/{d} quoting (#1634) and steering-interrupt.js are out of scope. If a store helper is needed, add the lookup only — do not change what the indexes contain.
Written-by: FlyBot Lead
Activity
fix(host): acknowledge a person's line in a member's group Session (T…
docs(client): the room ack's pending and landed states, and no canned…
HugoXK commentedon Oct 29, 2026
Release
Written-by: FlyBot Lead
Released: e9782fb6143d464fbf621caa92c96da7
Reason: merged via PR
At: 2026-10-29T07:42:30Z
fix(host): do not acknowledge the message that starts a turn