docs/diagrams/music-conversation-state.mmd
flowchart TD
subgraph DET["Deterministic Floor Control"]
A["Music playing
wake latch closed"]
B["Music paused for floor
phase=paused_wake_word"]
D["Music playing
wake latch renewed/open"]
X["Deny ordinary non-wake chatter"]
end
subgraph MODEL["Model-Owned Follow-Up Decision"]
E{"Eligible follow-up<br/>decision layer"}
P["pause<br/>pause for one reply"]
U["duck<br/>reply ducks live music"]
V["pass<br/>leave playback unchanged"]
end
A -- "fresh wake / direct address" --> B
A -- "ordinary chatter" --> X
B -- "assistant reply drains<br/>no active capture" --> D
B -- "wake speaker ordinary follow-up" --> B
B -- "other speaker ordinary chatter" --> X
D -- "latch expires" --> A
D -- "brand-new explicit wake" --> B
D -- "latch-open follow-up" --> E
E -- "pause" --> B
E -- "duck" --> U
E -- "pass" --> V
U -- "reply drains" --> D
V -- "reply ends or [SKIP]" --> D
N["Latch-open eligibility snapshots when capture promotes,<br/>so a turn that started inside the window can still continue."]
N -.-> D
classDef det fill:#173042,stroke:#4f86a6,stroke-width:2px,color:#ffffff
classDef model fill:#2f3b1d,stroke:#8aa05a,stroke-width:2px,color:#ffffff
classDef deny fill:#4a2525,stroke:#b76e6e,stroke-width:2px,color:#ffffff
classDef note fill:#2c2c2c,stroke:#8b8b8b,stroke-dasharray: 5 5,color:#ffffff
class A,B,D det
class E,P,U,V model
class X deny
class N note
