MSG-48 ·
llmmsg-srvBrainstorm sessions follow speaking-order protocol end-to-end (cdw+hub) + coach violators + terse AI-shorthand brainstorm protocol in llmmsg-protocol.md
- Ref
MSG-48(#1080)- Project
llmmsg-srv- Status
- done
- Priority
- normal
- Type
- feature
- Assigned
- pm-llmmsgsrv-cc
- Created by
- wi-cli-whey
- Created
- 2026-06-15T03:51:42.332Z
- Updated
- 2026-06-15T04:54:24.643Z
- Closed
- 2026-06-15T04:54:24.642Z
Questions
No questions.
Event log
-
Elazar directive 2026-06-15: brainstorm via cdw must follow speaking-order protocol. ROOT CAUSE found in code: cdw sends kind=brainstorm with NO expects_replies (index.html:1465) + hub fires speaking-wheel ONLY when expects_replies=true (rule 928) => cdw brainstorm = unordered free-for-all fan-out today. Design dimensions: (1) cdw side - set expects_replies for brainstorm (coder-chatduo); (2) hub side - kind=brainstorm implies wheel/opinion-lifecycle: snapshot expected set, order, close (hub-llmmsgsrv); (3) coaching - extend existing rule-6-coaching hook hub.mjs:1685 to brainstorm violations (out-of-turn/barge/no-close); (4) protocol doc - terse AI-shorthand brainstorm section in docs/llmmsg-protocol.md, auto-serves via GET /protocol. Awaiting coder-chatduo (cdw brief) + hub-llmmsgsrv (wheel internals: does it enforce ORDER or just expected-set+deadline?) before design-to-Elazar. SEPARATE part b: 24/7 maintainer-gate agent (registered, 0 AROs) owning protocol - host-consistency caveat raised (whey sleeps; gate should be venus-resident per our own availability-first rule, or keep whey on).
-
BRIEFS IN (both code owners, falsifiable). KEY: speaking-order is 100% convention, zero hub code - wheel/lifecycle/nudgers are unimplemented rule-text; only runSilenceCheck interval exists. Coaching channel exists (stmtInsertMsg hub->sender ~1683-1702) but STATELESS. KEYSTONE primitive = hub brainstorm SESSION object {session_id,aro,opener,expected-set(online non-spectator),order,open/closed}, session_id stamped on seed+replies. Unlocks BOTH stateful coaching (out-of-turn/dup/no-close) AND cdw expected/replied/pending strip (coder-chatduo won't ship fuzzy heuristic without it). DESIGN RECOMMENDED to Elazar: session object + ADVISORY order (NOT hard frame-gating - fights async drain) + coaching->existing DM channel + cdw strip + terse AI-shorthand protocol in llmmsg-protocol.md. Owners on approval: hub-llmmsgsrv (schema+lifecycle+detectors), coder-chatduo (cdw strip), pm (doc). Awaiting Elazar tier-lock.
-
Elazar APPROVED design (yes). Owners: hub-llmmsgsrv (schema+lifecycle+detectors), coder-chatduo (cdw strip), pm (doc). Contract rulings locked: (1) attribution by OPEN-SESSION-IN-ARO not re= (cdw/replies lack re=); expected member's ARO msg while session open = reply; re= optional. (2) ONE open session per ARO invariant; new brainstorm auto-closes prior (superseded) - keeps attribution unambiguous + resolves concurrent-strip. (3) GET /active_sessions?aro= in v1 (cheap SELECT, no empty-strip-on-reload). (4) opener(Elazar/spectator) NOT a roster row; expected=online non-spectator members. Order=aro_config.sort_order ASC NULLS-LAST+name tiebreak (cols exist, populated this session). Advisory order, no frame-gating. cdw build ~half-day, no send-path change. NEXT: hub-llmmsgsrv posts schema+frame-contract for pm sign-off -> relay to coder-chatduo -> parallel build -> pm writes terse protocol into llmmsg-protocol.md in lockstep.
-
Shipped v2.13.1 + verified end-to-end on prod. Hub brainstorm-session lifecycle (open/reply/close + turn-hint prepend + coaching) + cdw 0.7.14 strip + terse §Brainstorm in llmmsg-protocol.md (mirrors hub hint strings verbatim, served at /protocol). Live smoke caught a reply-vs-open supersede bug (kind=brainstorm reply opened new session); hotfixed (0a51c6f, classifier checks open-session reply/close before the OPEN branch) + re-smoked clean with the real team (4/4 threaded, opener excluded, no supersede). Agents briefed in aro:llmmsg-srv-engineering; Elazar told GO.