5.0 KiB
EchoEar reboot history investigation — 2026-09-06
User reports loss of prior conversation context after power cycling and asks how the platform receives the conversation record.
Existing path verified in source
- Device receives final subject transcription and agent audio transcript events, queues them outside the WebSocket receive callback, and POSTs to
/device/v3/agent-sessions/{conversation_id}/turns:batch. - Backend authenticates the bound device, checks transcript retention and consent, deduplicates final turns, and writes
conversation_turn. The web app exposes these through Chat records → Conversation detail; API:GET /api/v1/conversations/{id}/turns. - This path uploads text, not near/far audio recordings. Earlier device logs contain successful HTTP POSTs during exchanges but did not distinguish accepted transcript counts. New firmware logs accepted/duplicate counts without logging transcript content.
- Each new connection creates a fresh provider session. Authorized platform context is supplied through
session_config.authorized_context, which firmware includes inLLMConfig.SystemMessages. Record storage and cross-session context are separate steps.
Defects and local changes
- Device omitted periodic session renewal. The server starts a lease on
session_started, andsession_updatedrenews it. Firmware now reads the server heartbeat interval, renews outside the audio callback using the existing reusable HTTP connection, and honorsstop_session. - Recent summary selection excluded all
FAILEDconversations. It now accepts ready summaries from completed or failed conversations while preserving tenant/subject checks and existing consent gates. No raw transcript bypass or automatic long-term memory creation was added. - Hardware normal completion requested extraction generation 1; the extraction processor ignores a generation below the highest stored turn sequence. Hardware completion, reported failure, and server stop-timeout recovery now schedule the latest stored sequence with a deduplicated terminal extraction key. Existing extraction consent and content safety checks remain.
Verification and pending work
Device update 2026-09-06 10:20: COM6 reconnected. Final heartbeat firmware 0x2ccf40 flashed with hash verification and booted to connected standby. The real user test session 157f866d-c364-4ae8-b169-50ca07024e5a completed normally with 3 turns (including the preceding diagnostic sentence) and 2 READY summaries. Periodic heartbeats succeeded. Native Volcano callbacks were received for input and output, but contain only device identity and do not honor the attempted per-session callback override in this low_load test. callbacks memory3 validates these as device_probe without writing transcripts; device upload remains canonical. User has been asked to power-cycle and ask which joke was just told; actual recall outcome is pending. See the newest section of volc-native-subtitle-callback.md.
Update 2026-09-06: Supersedes the deployment/test limitations below. The user-supplied Desktop PEM successfully authenticated root. Backend 0.78.3-rc.subtitle-memory1 is now deployed; independent PostgreSQL regression tests actually passed (not skipped), including failed-session memory eligibility and terminal extraction generation. Production has stored transcripts and READY summaries (one failed session has 50 turns). All three backend readiness checks pass. Native callback protocol smoke checks also pass; real provider callbacks and device reboot recall remain unverified because COM6 is absent. The latest firmware build is 0x2ccf40, still not flashed. See volc-native-subtitle-callback.md for deployment commands and outstanding checks. Earlier entries below are retained as investigation history.
- Firmware build passed:
firmware/echoear-platform-agent/build/voice-history-heartbeat-build.log; binary size0x2ccd50. go test ./internal/orchestration ./internal/httpapi ./internal/extractionpassed the available tests. New database regression cases cover failed/completed/active summary eligibility, other-subject exclusion, and extraction generation/deduplication. They were skipped, not validated against a database:TEST_DATABASE_URLis unset and Docker daemon is unavailable.- Firmware is not flashed. COM6 disappeared after the user's power cycle. COM3 is a different USB device; COM4/5 are Bluetooth ports. Do not flash them.
- Backend changes are not deployed. Existing deployment key was rejected for
root@121.41.46.238. Requested the actual SSH username; never request passwords/private key content. - Awaiting USB reconnection and server access. Next verify actual transcript row counts, summary READY status, subject consent state, extraction job status, new context inclusion, and a real power-cycle recall test. Do not claim that online records or memory restoration have been verified.
- Last verified flashed app remains HTTP-reuse version
0x2cc8a0; user confirmed continuous speech. Preserve its playback/display improvements and NVS during the next app-only flash.