WAITING has no treatment, and it happens in every successful turn #58
Labels
No labels
needs-info
needs-triage
ready-for-agent
ready-for-human
v2
wayfinder:grilling
wayfinder:map
wayfinder:prototype
wayfinder:research
wayfinder:task
wayfinder:ticket
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
aiko/denpa#58
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
WAITING(7d) has no treatment. Split from#15because it is not a failure at all — it is an ordinary state in the normal run of a turn, and it is the smallest independent piece of that issue.What the design says
docs/design/denpa-receiver/README.md:158:And
#15's own description: "the meter holds the idle floor, the PTT key goes dark reading 受け取った, 割り込み dims because there is nothing yet to interrupt."The design's longer note calls it "the state I left undrawn" — she has your words and has not started, so the meter holds its floor while the key goes dark.
Why it is separable
It depends on nothing. It is not keyed off connection state like the five fault screens, it needs no
詳細reveal, no hop reasoning, and no error text. It is a state treatment in the transmission band and the faceplate, both of which already exist and already switch onAiState.It is also the one piece of
#15that shows up in every successful turn rather than only when something breaks — so it is the piece most likely to be noticed, and the least likely to be reached if it stays bundled with a taxonomy that is out of v1.Acceptance
Related
#15— the five fault screens and the reconnect toast#10— the faceplate and the meter treatments per stateDone in
3f9fd61(implementation376bd0c), merged tomain, alongside #59.What was actually missing
The treatment already existed —
faceplate-spec.tshad 入力中 / WAITING with the idle floor, the dark key and 受け取った since#10. What was missing was that nothing entered the state on a turn. It was set only on a keystroke into the old footer (use-input-subtitle.ts:42,use-footer.ts:28), and a PTT release went straight to 送信中, which drew the halate band for the whole of the upstream's think time. So the state that "happens in every successful turn" happened in none of them.transmission.tspttUpnow returns WAITING.use-text-input.tsxhandleSendsets WAITING — the one place every typed surface goes through (pal composer, dock composer, pet-mode subtitle bar, footer).rgba(234,255,60,.2)/#5f5a3aper § 7d, and is disabled: a key that looks stood down but still fires would send an interrupt for a turn Hermes has not been handed yet.Acceptance
MeterSpecis IDLE's, asserted rather than duplicatedOne consequence worth your call
conversation-chain-startis only sent once Hermes has produced the whole turn (denpa/src/open_llm_vtuber/conversations/single_conversation.py:37—send_conversation_start_signalsruns after the finished text arrives, not when the turn is accepted). So the gap between "sent" and "she begins" is the entire think time, and the 2s return means the dock reads:rather than staying at 入力中 until she starts. The meter is unchanged either way — 待機 and 入力中 share the floor — so what actually differs for those seconds is the word, the PTT key coming back to 押して送信, and 割り込み un-dimming.
I built it exactly as written because you asked for the existing 2s and no new timer, and 待機 is at least truthful (nothing is arriving). But if you would rather 入力中 held until she answers, the fix is not a timer — it is that the 2s exists to un-stick a typing debounce, and a sent turn does not need un-sticking. Say the word and I will split it.
Also: sending text while she is mid-sentence interrupts first, and
setAiState's own guard (aiState !== THINKING_SPEAKING) may swallow the WAITING that follows within the same tick. Harmless — she is speaking again a moment later — but it means the barge-in path does not always show 入力中.Gate: 801 vitest across 54 files, 18 Rust.