Skip to content

UAT: dashboard State card & Kid Mode toggle never reflect live state #169

Description

@BrettKinny

Symptom. For the entire 29-minute UAT session the dashboard's State card showed Idle
and the Kid Mode toggle showed off, regardless of actual state.

Evidence (dashboard screen recording, starts 19:41:22).

  • Frames at 19:41:32, 20:04:02, 20:05:48, 20:07:17 and 20:07:32 all show State=Idle /
    Kid Mode=off — including 20:07:17–20:07:32, when logs show state_changed → security
    had been relayed at 20:07:14; and the whole session ran with PiVoiceLLM ready kid_mode=True in xiaozhi logs.
  • The page was demonstrably live in those same frames: the vision-error age ticked
    2m → 4m → 5m, the sound-impulse counts changed, and the Listening pip went red. So it's
    not a frozen tab — the State/Kid-Mode widgets specifically aren't synced.
  • Backend is fine: snapshots/perception-state.json shows dotty-behaviour tracked
    current_state with last_state_change_t = 20:09:47 local (end-of-session forced idle),
    so the state pipeline works server-side; the dashboard UI layer is what's stale.

Impact. Made live UAT observation misleading (couldn't confirm state entries from the
dashboard; kid-mode status invisible). Also means the toggle's displayed position can
contradict the actual xiaozhi kid_mode config.

Next step. Trace where the dashboard State card / Kid Mode toggle source their state
(bridge-local variable vs polling dotty-behaviour / xiaozhi) and wire them to the live
values that the perception cards already use.


From the filmed UAT session 2026-07-11 (uat-sessions/2026-07-11/: results.csv, container logs, two video recordings). Discovered during AI-assisted video verification (Claude Fable 5 via Claude Code); human-reviewed before filing.

Activity

  1. added
    bugSomething isn't working
    area:bridgebridge.py + bridge/ dashboard service (Unraid-resident post-#36)
    area:dashboardBridge dashboard UI / HTMX templates
    needs-triageAwaiting triage (see docs/agents/triage-labels.md)
    ready-for-humanRequires human implementation or live-device verification
    status:activeReady to start, not blocked
    and removed
    needs-triageAwaiting triage (see docs/agents/triage-labels.md)
    on Jul 11, 2026
  2. BrettKinny commented on Jul 11, 2026

    @BrettKinny
    OwnerAuthor

    This was generated by AI during triage.

    Implemented in draft PR #171: the dashboard State card now reads dotty-behaviour's live current_state instead of a hardcoded idle, and PiVoice refreshes the shared Kid Mode state file on every turn with a safe environment fallback.

    RC verification: toggle Kid Mode and enter security/dance, confirming the dashboard and the next voice turn reflect the live values without restart.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:bridgebridge.py + bridge/ dashboard service (Unraid-resident post-#36)area:dashboardBridge dashboard UI / HTMX templatesbugSomething isn't workingready-for-humanRequires human implementation or live-device verificationstatus:activeReady to start, not blocked

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions