26 tasks · 7 phases · ~22 files · 2026-09-05

The Meeting Room — one room for both benches

Mira leads every meeting, the Expert Meetings entry page becomes a room built on The Rookery's skeleton, either bench can sit in the other's room, every chair opens the same expert profile, and a Rookery seat can be consulted one to one.

26Tasks
7Phases
8Items from Sarah
1Shared in-meeting view, unchanged
The gist

Mira leads every meeting — the nameless Meeting Lead becomes Mira in name, color and voice, keeps every duty including the living document, and can no longer be excluded. One room, two benches — a MeetingRoomView for code projects is built on the same skeleton as The Rookery's room (question → who sits → the table → the bench → tell the room more), with the nineteen Rookery seats collapsed beneath as guests; Personal gets the development room collapsed beneath The Rookery. Mira chooses comes to the development bench, every chair opens the same profile, and one Rookery seat can be consulted rather than convened.

The problem

The Meetings tab for a code project stacks an intro bar, a Run-an-Expert launcher, meeting flags, conflicting signals, and five intent sections each with group cards, guided-topic pills, a Start Meeting button and a collapsible directory of mini cards carrying Consult / Chat / Run / report pips. Calling a meeting then opens an 845-line modal with its own expert grid. Sarah: “I feel kind of overwhelmed by the setup.”

The Rookery's room is one column and reads as a place. Between the two: the dev lead is a nameless facilitator while Mira leads the Rookery; the dev setup still offers to exclude the lead; only the Rookery can ask the host who should sit; each bench is invisible from the other's room; and profiles differ — an expanded three-line description in one, a brief and a tooltip in the other.

The in-meeting view with the living document is already shared by every format. Nothing there needs to change beyond labels.

Approach

Mira rides the Meeting Lead machinery, everywhere

The Rookery already proved the shape: same meeting_lead id, same DOCUMENT_UPDATE protocol, only the words are hers. MeetingLead.displayName / accentColor become Mira's for every format; the standard lead prompts take her identity and voice, keep every facilitation duty, and gain a closing “Mira's read” section in the living document. Stored transcripts keep their recorded names, so old meetings still say “Meeting Lead”.

Extract the room, don't duplicate it

RookeryRoomView's label, rule, who-sits card, table chair, chair card and context block become RoomChrome. Both rooms render from them, and every chair gains a hover “i” that opens the shared ExpertProfilePopover — the same gesture in both rooms.

A draft per room, keyed to the project

MeetingRoomDraft mirrors RookeryDraft but resets when it binds to a different project, so a question typed for Press Raven never appears under CodeRaven. The two drafts carry different things (presets and the Empty Chair versus prior meetings and intent groups); a shared generic would be mostly branches.

Guests resolve at the door

A Rookery seat in a dev meeting is resolved from the catalog by the draft and passed in the agents list — the kind-aware catalog invariant is untouched. buildAgentSystemPrompt gives a seat its charter and length ceiling instead of the generic role block, framed as a guest in the standard loop.

Mira chooses, on the dev bench

ExpertBenchRouter is RookeryRouter's shape with the development digest (every core expert with its description, grouped by bench, plus the pre-composed groups as known rooms). It returns two to four ids and a why-line, or one id flagged as a consultation. Fallback: keyword overlap against names and descriptions.

Consultation is a summons kind

SummonsKind.consultation is additive. The opening round for that kind asks the one seat to answer at depth with the ceiling lifted; later messages always reach the seat; Mira keeps the brief as in any sitting.

Decisions made for you

Judgment call

Mira may have a read in dev meetings

The old lead was forbidden an opinion; Mira in the Rookery “has takes when warranted.” Same person, same rule: one line, stated as hers, never taking an expert's lane. Reversible by deleting one sentence in buildLeadSystemPrompt.

Judgment call

Dev room offers “I choose” and “Mira chooses” only

The Rookery's “Everyone with standing” has no equivalent on a four-seat bench, and “Just ask who should sit” was dropped to keep the choice to two cards. Reversible by adding a case to MeetingRoomDraft.WhoSits.

Judgment call

Guided topics and group cards become the preset menu

The five intent sections leave the page; their rooms and topics live under “Start from a preset”, grouped by each intent group's question. Topics that opened the Suggested Meeting composer still do. Run an Expert moves to the sidebar — it is not a meeting action.

Judgment call

Mira's selection considers the dev bench only

She does not propose Rookery guests for a dev question; Sarah adds a guest by hand. Keeps the digest short and the why-line legible.

Judgment call

Personal's reverse collapse is the dev room, not guests in a sitting

A core expert cannot sit inside a Rookery sitting — that loop is seat-shaped (room order, ceilings, tensions). Personal shows the same development room code projects get, collapsed beneath The Rookery, minus the guest bench.

Judgment call

Rookery consultation is chosen on the table

When exactly one seat is chosen the table offers “a sitting” or “a consultation”. Consult from a chair, a profile, or the directory lands there with consultation selected. No fourth who-sits card.

The work

Phase 1 — Mira leads every meeting

4 tasksIdentity only; every duty stays.
  • Make MeetingLead resolve to Mira for every format (name, cmMira accent, role caption)
  • Give the standard lead prompts Mira's voice and identity while keeping the facilitation duties and the living document
  • Add "Mira's read" as the closing section of the standard living-document template
  • Rename the lead's mention token, bottom-bar button, settings label, and living-guide entry to Mira

Phase 2 — The lead is never optional

3 tasksMechanical; eight callers.
  • Remove the Meeting Lead toggle from StandupSetupSheet and drop the Bool from its onStart signature
  • Update every StandupSetupSheet caller (ProjectOverviewView ×3, TasksWidget, QuickTasksWidgetContent, QuickTasksSheet, JourneyArtifactCard, ExpertsView)
  • Remove the Meeting Lead toggle from QuickTaskDetailSheet; meeting quick tasks always convene with Mira

Phase 3 — Shared room chrome and the expert profile

3 tasksThe Rookery renders unchanged, from shared parts.
  • Extract RoomChrome (label, rule, choice card, table chair, chair card, context block) from RookeryRoomView into Views/Experts/Room/
  • Build ExpertProfile + ExpertProfilePopover reading AgentInfoCatalog for core experts and the seat charter for Rookery seats, with Seat and Consult actions
  • Rebuild RookeryRoomView on the shared chrome with the profile popover on every chair

Phase 4 — The meeting room for code projects

7 tasksThe page Sarah found overwhelming becomes the room.
  • Add MeetingRoomDraft (question, details, who sits, chosen ids in order, Mira's selection, prior meetings, context refs, per-project reset)
  • Add ExpertBenchRouter — Mira chooses 2–4 experts from the bench digest, with a keyword fallback
  • Build MeetingRoomView: question → who sits (I choose / Mira chooses / presets) → the table → the bench (five benches) → tell the room more
  • Seat Rookery guests in a code project: collapsed Rookery bench under the seating chart, guest ids allowed in the draft
  • Give guest seats their charter in buildAgentSystemPrompt and resolve guest agents for the meeting and transcript views
  • Route MeetingSetupPayload (flags, Mira handoff, follow-ups) into the room draft instead of the sheet on the Meetings tab
  • Reshape MeetingsTabContent: flags and signals above the room, run launcher into the sidebar, intent sections retired

Phase 5 — A consultation in The Rookery

3 tasksAdditive summons kind; old sittings decode unchanged.
  • Add RookeryMeetingConfig.SummonsKind.consultation and a consultation branch in runRookeryLoop (answer at depth, no opener ceremony, Mira keeps the brief)
  • Add RookeryDraft.consult(seatId:) and a sitting-or-consultation choice on the table when one seat is chosen
  • Consult from a seat's chair card, profile popover, and the Experts directory lands in the room as a consultation

Phase 6 — Personal's collapsed development bench

1 tasksThe reverse of the guest bench.
  • Replace Personal's collapsed intent sections with the collapsed MeetingRoomView (core experts only) beneath The Rookery

Manual Testing

5 tasksSarah's; the build cannot exercise a live meeting.
  • Call a dev meeting with "Mira chooses" and confirm the why-line and seats read rightuser
  • Seat a Rookery guest in a dev meeting and confirm the seat speaks in its own voiceuser
  • Consult one Rookery seat from Personal and confirm it answers directly rather than opening with its questionuser
  • Open expert profiles from both rooms and judge whether they read as who is availableuser
  • Confirm Mira's name and color on lead bubbles in a fresh dev meeting; old transcripts keep "Meeting Lead"user

Risks & edge cases

Edge case

Guest seats run in the weighted-random loop

A Rookery seat in a dev meeting gets 1–3 sentence turns, no room order, no standing tensions, no [silent]. Its charter and ceiling come through; its mechanics do not. The guest prompt says so, so the seat does not try to enforce them itself.

Edge case

Two names for one role across time

New lead messages are recorded as “Mira”; old transcripts keep “Meeting Lead”. Summary prompts still work because the transcript carries names.

Edge case

The room's height

Thirty-eight chairs in five benches is longer than nineteen. Benches collapse with counts and open by default; if it still reads as a wall, default the lower benches closed.

Edge case

Two entry points build the same meeting

The sheet remains for the Project Overview, Tasks and Journey callers, unchanged except for the toggle. The room is the primary path on the Meetings tab.

Edge case

The keyword fallback is crude

When Mira cannot be reached the fallback seats the three experts whose names and descriptions overlap the question most, and its why-line says so.

Out of scope

Reworking the in-meeting view's register (it is already the shared room; only labels change). Letting a core expert sit inside a Rookery sitting. Mira proposing Rookery guests for dev questions. Retiring StandupSetupSheet for the non-Meetings-tab callers. Rookery-style presets for the dev bench beyond the existing pre-composed groups and guided topics.

Final review

The plan reuses the two mechanisms that already work — the Meeting Lead machinery Mira already rides and the room skeleton Sarah already liked — and extends each across the boundary rather than inventing a third thing. Its weakest part is the dev bench's size: a chair design that suits nineteen seats may still be heavy at thirty-eight, and only seeing it will settle that. The guest-seat prompt is a hybrid (Rookery voice, dev loop) and may read oddly in a first meeting; the fix, if needed, is prompt text, not structure.

78/100

The uncertainty is almost entirely visual — whether the dev room reads as a room at first look — plus one judgment call (Mira allowed a read) that Sarah may reverse.