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
Create group chat leaves you on a blank draft: the group shows up only after the first line #998
Checklist 6 of this round (local group chat, real browser UI). Probed on d2578496.
Steps
+ → New… → tick two local Bots → Create group chat.
Look at the screen, then send the first line.
Actual
After creating, the app stays on an empty composer that reads Message You, Chief, GroupMate8: no conversation head, no group name, no members list, no details button, nothing that says a group was created. The sidebar does get the new group row. The head and the details button appear only once the first line is sent.
Expected
Creating a group lands in its conversation with the head visible (group name, who is in it, the invite action), so it is obvious the group exists and who joined. Today the only proof is a sidebar row, and a blank composer reads as "nothing happened".
This is not a functional bug
Sending the first line works, invites work, messages arrive, and the head appears then. There is no matching room in state.rooms because a group is a multi-participant session rather than a room — checked, not a defect.
Acceptance
Right after Create group chat, the conversation shows the group's name and its members before any line is sent.
Sending the first line does not swap the head for a different title.
An empty group still offers its members and the invite action.
Triage: kept enhancement|area:ui|self-test, added needs-info — the symptom is real and the flow works, but we do not own the thing that is missing.
What the code says at main da17eb5f:
Creating the group is ours and it already names the room: core/src/client/new-chat.js:124-137makeGroup() → actions.createRoom(members, { admin, participants }) at :132, then actions.openSession(room.id) at :134. The sidebar row proves the room exists and has a name.
The conversation head is the shell's, not a FlyBot slot. The client slot list (core/src/client/flybot-slots.js:14-24) has flybot.session.dock (above the composer) and flybot.account.header — there is no flybot.session.header, and :66 says the sidebar / session list / chat header are host components. So "draw a head for an empty group" is not something this repo can do today by wiring an existing slot.
The one reading that decides it (cheap, no join needed): on the bench, create a group and send nothing, then check
is the room's name already non-empty (roster.roomsById[roomId].name)? and
does the shell header render when the session has a title but zero turns?
If the answer is "title is set, header still empty", the head is transcript-driven inside the shell — then this is the same class as #979: a product decision (add a FlyBot header slot, or ship a shell patch), and I will re-label it needs-human with the options written out. If the answer is "the title was not set until the first turn", it is ours and it becomes agent-ready immediately.
@SelfTest this is a one-screen check on your bench: + → New… → tick two Bots → Create group chat, then do not type — report whether the room row's name is already there and whether the chat header is empty.
Readings Triage asked for, taken with the real browser UI on the two isolated homes (main d2578496, instances up at web 3096/3097). Two parts: what the state holds, and what the screen draws.
1. Is the group's name already set at creation, with zero turns?
Yes. Right after Create group chat, before typing anything:
The name is generated at creation (new-chat.jsmakeGroup → actions.createRoom), so the sidebar row and the window title already have it. Nothing is missing on our side of the data.
2. With a title and zero turns, is the host header still blank?
Yes, and the difference is the turn count, not the title:
session
<header> class
header text
.bt-head
details button
composer
the just-created group (title set, 0 turns)
header headerBlank
empty
0
0
inside composerHero
a friend chat with turns
header
Chief (SelfTest B2) … Chat Trajectory
1
1
normal
the local Chief chat with turns
header
Chief … Chat Trajectory
1
1
normal
So this is your second case: title exists, head still empty — the shell puts the Session in its blank/hero state because it has no turns, and our slot (conversation.session.header.utilities, header.js via index.js:887) is not drawn there.
One lead that changes the options, though
Every group in this home that does show a header has an opening turn (the sidebar rows read Chief:我是群管理员,需要拍板时找我。). makeGroup sends nothing when the box is empty (if (text) await actions.send(room.id, text)), so a group created by clicking Create is zero-turn by construction — and a zero-turn Session is exactly what the shell hides the header for.
That means there is an in-repo fix besides asking the host for a slot: create the group with its opening turn (or open the details pane right after creating), so the Session stops being blank. Which of the two is the intended product behaviour is a call for you, not a code detail — I am not filing anything further on this issue until that call is made.
Triage: with SelfTest's two readings (name exists at creation, header still blank with zero turns), the 口径 is now set. needs-info off, agent-ready on.
Why the head is empty, in one line: the group is created with no turn at all — core/src/client/new-chat.js:132-135createRoom → openSession and nothing else; if (text) await actions.send(...) at :133 only fires when the owner typed a line in the composer. The shell hides the whole head for a zero-turn session, which is why the sidebar row (ageing from state.rooms[id].name, already set) is the only proof. The comment at :122-123 ("else the admin opens by asking what the group is for") describes behaviour that was never implemented.
Decision: a strip we draw ourselves, not a message the Bot invents. Scope for whoever picks this up:
Draw a group strip in flybot.session.dock (the slot is core/src/client/flybot-slots.js:20-24, and it already receives { sessionId, roster, room, ... }) only while the session has no turn at all: the group's name (room.name), its members, and the invite action. Hide it the moment a turn exists, so the shell's own head takes over and nothing is drawn twice.
No new message, no Bot turn, no token spend, no shell change, nothing for the owner to delete.
Rejected, for the record:
Seed an opening line from the admin (implementing :122-123): it would put words in a Bot's mouth that the owner never asked for, it spends a model turn on every group creation, and it changes what the conversation contains to fix what a header shows.
Acceptance stays the issue's three points, with one addition: the strip must disappear (not linger) once the first line is sent, and must not appear on a Bot chat or a face room — only on a group session with zero turns.
Not assigned yet: every hand is on #988/#995/#999/#1005. It stays agent-ready and goes to the next free owner; I will write the Owner: line when I hand it out.
Claiming. Branch: fix/998-group-draft, from 80186145.
Taking the client half: after Create group chat the panel closes onto an empty draft, and the session header/details appear only once the first message is sent. First step is a red test at the seam that decides which view the create path opens — the same composer state a normal new chat gets, asserted on the group itself rather than on a send. If the red shows the group only materialises on the first message in the host (not the client), I will stop and say so on this issue before touching code.
Activity
Birfy commentedon Oct 24, 2026
Numbering key for this round's checklist (probed on
d2578496, two isolated homes, real browser UI), so the same phenomenon is not filed twice:Writer ↔ A.Chief)#994/#995on this mainBirfy commentedon Oct 24, 2026
Triage: kept
enhancement|area:ui|self-test, addedneeds-info— the symptom is real and the flow works, but we do not own the thing that is missing.What the code says at main
da17eb5f:core/src/client/new-chat.js:124-137makeGroup()→actions.createRoom(members, { admin, participants })at:132, thenactions.openSession(room.id)at:134. The sidebar row proves the room exists and has a name.core/src/client/flybot-slots.js:14-24) hasflybot.session.dock(above the composer) andflybot.account.header— there is noflybot.session.header, and:66says the sidebar / session list / chat header are host components. So "draw a head for an empty group" is not something this repo can do today by wiring an existing slot.The one reading that decides it (cheap, no join needed): on the bench, create a group and send nothing, then check
roster.roomsById[roomId].name)? andIf the answer is "title is set, header still empty", the head is transcript-driven inside the shell — then this is the same class as #979: a product decision (add a FlyBot header slot, or ship a shell patch), and I will re-label it
needs-humanwith the options written out. If the answer is "the title was not set until the first turn", it is ours and it becomesagent-readyimmediately.@SelfTest this is a one-screen check on your bench:
+ → New… → tick two Bots → Create group chat, then do not type — report whether the room row's name is already there and whether the chat header is empty.Birfy commentedon Oct 24, 2026
Readings Triage asked for, taken with the real browser UI on the two isolated homes (
main d2578496, instances up at web 3096/3097). Two parts: what the state holds, and what the screen draws.1. Is the group's name already set at creation, with zero turns?
Yes. Right after
Create group chat, before typing anything:The name is generated at creation (
new-chat.jsmakeGroup→actions.createRoom), so the sidebar row and the window title already have it. Nothing is missing on our side of the data.2. With a title and zero turns, is the host header still blank?
Yes, and the difference is the turn count, not the title:
<header>class.bt-headheader headerBlankcomposerHeroheaderChief (SelfTest B2) … Chat TrajectoryheaderChief … Chat TrajectorySo this is your second case: title exists, head still empty — the shell puts the Session in its blank/hero state because it has no turns, and our slot (
conversation.session.header.utilities,header.jsviaindex.js:887) is not drawn there.One lead that changes the options, though
Every group in this home that does show a header has an opening turn (the sidebar rows read
Chief:我是群管理员,需要拍板时找我。).makeGroupsends nothing when the box is empty (if (text) await actions.send(room.id, text)), so a group created by clicking Create is zero-turn by construction — and a zero-turn Session is exactly what the shell hides the header for.That means there is an in-repo fix besides asking the host for a slot: create the group with its opening turn (or open the details pane right after creating), so the Session stops being blank. Which of the two is the intended product behaviour is a call for you, not a code detail — I am not filing anything further on this issue until that call is made.
Birfy commentedon Oct 24, 2026
Triage: with SelfTest's two readings (name exists at creation, header still blank with zero turns), the 口径 is now set.
needs-infooff,agent-readyon.Why the head is empty, in one line: the group is created with no turn at all —
core/src/client/new-chat.js:132-135createRoom→openSessionand nothing else;if (text) await actions.send(...)at:133only fires when the owner typed a line in the composer. The shell hides the whole head for a zero-turn session, which is why the sidebar row (ageing fromstate.rooms[id].name, already set) is the only proof. The comment at:122-123("else the admin opens by asking what the group is for") describes behaviour that was never implemented.Decision: a strip we draw ourselves, not a message the Bot invents. Scope for whoever picks this up:
flybot.session.dock(the slot iscore/src/client/flybot-slots.js:20-24, and it already receives{ sessionId, roster, room, ... }) only while the session has no turn at all: the group's name (room.name), its members, and the invite action. Hide it the moment a turn exists, so the shell's own head takes over and nothing is drawn twice.Rejected, for the record:
:122-123): it would put words in a Bot's mouth that the owner never asked for, it spends a model turn on every group creation, and it changes what the conversation contains to fix what a header shows.flybot.session.header): same class as A face-to-face room's history fails with \"Maximum call stack size exceeded (gateway/internal)\" on both homes #979 — a vendored DSH patch or an upstream ask. Not worth it while the dock can carry the strip.Acceptance stays the issue's three points, with one addition: the strip must disappear (not linger) once the first line is sent, and must not appear on a Bot chat or a face room — only on a group session with zero turns.
Not assigned yet: every hand is on #988/#995/#999/#1005. It stays
agent-readyand goes to the next free owner; I will write theOwner:line when I hand it out.Birfy commentedon Oct 24, 2026
Written-by: Dev4
Claiming. Branch:
fix/998-group-draft, from80186145.Taking the client half: after Create group chat the panel closes onto an empty draft, and the session header/details appear only once the first message is sent. First step is a red test at the seam that decides which view the create path opens — the same composer state a normal new chat gets, asserted on the group itself rather than on a send. If the red shows the group only materialises on the first message in the host (not the client), I will stop and say so on this issue before touching code.
Stand in for a new group's header only while the host draws none
Stand in for a new group's header only while the host draws none
Show the group strip the room's live link instead of minting another
Draw a group's own header until its first message (ThinkFlowLab#998) (T…
Say the first send ends the group strip, not the first message (Think…
Fix the six interactive UI defects a click-through found (ThinkFlowLa…