Wearable preferences/NVS failure and reboot recovery PASS
Battery percent/filter/invalid/error retention and compact NET rates PASS
Wearable shell immediate navigation/draft and UTC clock PASS
RX8130 UTC / fixed Demo UTC+8 / day, month, year, leap rollover PASS
Wearable RAM structs: DevicePreferences=10 LoadedPreferences=24 UiState=72 NVSBlob=24 PASS
Wearable renderer round-safe Watch/Agent/Help/Settings; all sizes/themes; UTF-8 paging PASS
CJK subset generator coverage PASS (GB2312 Level 1 3755/3755, glyphs=5000, 中/这 covered)
Production raw button polling / all Settings Back paths / Settings Voice starts=0 / Approval ownership PASS (host)
Production Voice 999/1000 CANCEL, 1001 TRANSCRIBING; Confirm/Direct once-only transcript PASS
Production shell gestures / offline settings / Apply failure / Voice / Approval modal priority PASS (host)
Raw GPIO / 30ms debounce / >600ms Hold A / Settings Back / no Voice or trailing CLICK PASS (host)
Bounded Navigator paging/empty creation/capabilities/native choice semantics PASS
Network callbacks / new hello / generation / authoritative DONE / Voice interruption / stale operation PASS (host)
....
----------------------------------------------------------------------
Ran 4 tests in 1.586s

OK
Raw GPIO / 30ms debounce / >600ms Hold A / Settings Back / no Voice or trailing CLICK PASS (host)
Agent render / Read Screen / UTF-8 / redraw selection PASS (host only)
TAP version 13
# (node:1014503) ExperimentalWarning: The MockTimers API is an experimental feature and might change at any time
# (Use `node --trace-warnings ...` to show where the warning was created)
# Subtest: archived inspection grammar; mutations, composition and unknown tools need approval
ok 1 - archived inspection grammar; mutations, composition and unknown tools need approval
  ---
  duration_ms: 1.749875
  type: 'test'
  ...
# Subtest: production Pi pager never registers synthetic tool-call approval
ok 2 - production Pi pager never registers synthetic tool-call approval
  ---
  duration_ms: 0.443673
  type: 'test'
  ...
# Subtest: archived approval channel waits past the old limit using a controlled clock
ok 3 - archived approval channel waits past the old limit using a controlled clock
  ---
  duration_ms: 11.840516
  type: 'test'
  ...
# Subtest: a session has one owner and an existing runtime receives input
ok 4 - a session has one owner and an existing runtime receives input
  ---
  duration_ms: 20.868563
  type: 'test'
  ...
# Subtest: text activity batches by character threshold without splitting Unicode
ok 5 - text activity batches by character threshold without splitting Unicode
  ---
  duration_ms: 3.890735
  type: 'test'
  ...
# Subtest: text activity flushes on the throttle timer
ok 6 - text activity flushes on the throttle timer
  ---
  duration_ms: 30.085735
  type: 'test'
  ...
# Subtest: plain text removes noisy markdown and redacts credentials
ok 7 - plain text removes noisy markdown and redacts credentials
  ---
  duration_ms: 0.46324
  type: 'test'
  ...
# Subtest: tool summaries keep only a short safe action
ok 8 - tool summaries keep only a short safe action
  ---
  duration_ms: 0.730202
  type: 'test'
  ...
# Subtest: final reply excludes commentary, tools and prior assistant messages
ok 9 - final reply excludes commentary, tools and prior assistant messages
  ---
  duration_ms: 0.551154
  type: 'test'
  ...
# Subtest: registered Pi handlers emit live activity and settled final independently
ok 10 - registered Pi handlers emit live activity and settled final independently
  ---
  duration_ms: 443.06311
  type: 'test'
  ...
# Subtest: existing-session snapshot restores native final/recent text after overlay restart
ok 11 - existing-session snapshot restores native final/recent text after overlay restart
  ---
  duration_ms: 0.563958
  type: 'test'
  ...
# Subtest: official confirm/select/input/editor preserve native answers
ok 12 - official confirm/select/input/editor preserve native answers
  ---
  duration_ms: 1.55028
  type: 'test'
  ...
# Subtest: native abort/timeout/session close cannot replay replies
ok 13 - native abort/timeout/session close cannot replay replies
  ---
  duration_ms: 5.124059
  type: 'test'
  ...
# Subtest: target polling preserves focused select and open options
ok 14 - target polling preserves focused select and open options
  ---
  duration_ms: 4.403706
  type: 'test'
  ...
# Subtest: pending target request is not overwritten by a stale poll
ok 15 - pending target request is not overwritten by a stale poll
  ---
  duration_ms: 1.155288
  type: 'test'
  ...
# Subtest: approval polling preserves buttons, focus and in-flight decisions
ok 16 - approval polling preserves buttons, focus and in-flight decisions
  ---
  duration_ms: 1.332952
  type: 'test'
  ...
# Subtest: approval buttons submit their own ID and binary decision
ok 17 - approval buttons submit their own ID and binary decision
  ---
  duration_ms: 2.862363
  type: 'test'
  ...
# Subtest: unified target selector includes Pi and Codex
ok 18 - unified target selector includes Pi and Codex
  ---
  duration_ms: 1.895217
  type: 'test'
  ...
# Subtest: effort options follow selected model metadata and hide for Pi
ok 19 - effort options follow selected model metadata and hide for Pi
  ---
  duration_ms: 0.979008
  type: 'test'
  ...
# Subtest: an old pending approval stays actionable without a human decision
ok 20 - an old pending approval stays actionable without a human decision
  ---
  duration_ms: 1.710601
  type: 'test'
  ...
# Subtest: speech mode binds the selected device target and test has no arbitrary text
ok 21 - speech mode binds the selected device target and test has no arbitrary text
  ---
  duration_ms: 1.420747
  type: 'test'
  ...
# Subtest: native approval buttons preserve all offered decisions and labels
ok 22 - native approval buttons preserve all offered decisions and labels
  ---
  duration_ms: 1.335788
  type: 'test'
  ...
1..22
# tests 22
# suites 0
# pass 22
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 678.745742
........................................................................ [ 38%]
........................................................................ [ 77%]
...........................................                              [100%]
=============================== warnings summary ===============================
.venv/lib64/python3.11/site-packages/starlette/testclient.py:51
  /home/lighthouse/esp32-dev/.cache/agent-navigator-0.6b/server/.venv/lib64/python3.11/site-packages/starlette/testclient.py:51: DeprecationWarning: The anyio.abc.BlockingPortal alias is deprecated, use anyio.from_thread.BlockingPortal instead.
    _PortalFactoryType = Callable[[], AbstractContextManager[anyio.abc.BlockingPortal]]

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
187 passed, 1 warning in 6.67s
HTTP PASS: http://127.0.0.1:35315/health
Admin PASS: HTML and API status
WSS PASS: hello/hello_ack via ws://127.0.0.1:35315/device/ws
Gateway -> Device PASS: server_snapshot received
Device -> Cloud PASS: heartbeat and button_event recorded
Cloud -> Device PASS: display_message received
Pi -> Gateway -> Device PASS: RUNNING and DONE target states
gateway TCP/WebSocket smoke test passed
PI authenticated TLS WSS voice transport + FAKE STT + confirmed input: PASS
CODEX authenticated TLS WSS voice transport + FAKE STT + confirmed input: PASS
