Agent render / Read Screen / UTF-8 / redraw selection PASS (host only)
TAP version 13
# Subtest: positive inspection grammar; mutations, composition and unknown tools need approval
ok 1 - positive inspection grammar; mutations, composition and unknown tools need approval
  ---
  duration_ms: 1.829113
  type: 'test'
  ...
# (node:413948) 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: official Pi tool_call hook blocks until decision; approve/reject, timeout and runtime shutdown
ok 2 - official Pi tool_call hook blocks until decision; approve/reject, timeout and runtime shutdown
  ---
  duration_ms: 119.881057
  type: 'test'
  ...
# Subtest: accepted Pi approval waits past the old limit using a controlled clock
ok 3 - accepted Pi approval waits past the old limit using a controlled clock
  ---
  duration_ms: 4.301313
  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: 19.490305
  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.712088
  type: 'test'
  ...
# Subtest: text activity flushes on the throttle timer
ok 6 - text activity flushes on the throttle timer
  ---
  duration_ms: 30.30219
  type: 'test'
  ...
# Subtest: plain text removes noisy markdown and redacts credentials
ok 7 - plain text removes noisy markdown and redacts credentials
  ---
  duration_ms: 0.424978
  type: 'test'
  ...
# Subtest: tool summaries keep only a short safe action
ok 8 - tool summaries keep only a short safe action
  ---
  duration_ms: 0.71421
  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.483538
  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: 442.358535
  type: 'test'
  ...
# Subtest: target polling preserves focused select and open options
ok 11 - target polling preserves focused select and open options
  ---
  duration_ms: 6.703143
  type: 'test'
  ...
# Subtest: pending target request is not overwritten by a stale poll
ok 12 - pending target request is not overwritten by a stale poll
  ---
  duration_ms: 1.590296
  type: 'test'
  ...
# Subtest: approval polling preserves buttons, focus and in-flight decisions
ok 13 - approval polling preserves buttons, focus and in-flight decisions
  ---
  duration_ms: 1.845945
  type: 'test'
  ...
# Subtest: approval buttons submit their own ID and binary decision
ok 14 - approval buttons submit their own ID and binary decision
  ---
  duration_ms: 3.901252
  type: 'test'
  ...
# Subtest: unified target selector includes Pi and Codex
ok 15 - unified target selector includes Pi and Codex
  ---
  duration_ms: 2.987849
  type: 'test'
  ...
# Subtest: effort options follow selected model metadata and hide for Pi
ok 16 - effort options follow selected model metadata and hide for Pi
  ---
  duration_ms: 1.407312
  type: 'test'
  ...
# Subtest: an old pending approval stays actionable without a human decision
ok 17 - an old pending approval stays actionable without a human decision
  ---
  duration_ms: 2.515762
  type: 'test'
  ...
# Subtest: speech mode binds the selected device target and test has no arbitrary text
ok 18 - speech mode binds the selected device target and test has no arbitrary text
  ---
  duration_ms: 1.995997
  type: 'test'
  ...
1..18
# tests 18
# suites 0
# pass 18
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 687.802177
........................................................................ [ 52%]
..................................................................       [100%]
=============================== warnings summary ===============================
.venv/lib64/python3.11/site-packages/starlette/testclient.py:51
  /home/lighthouse/esp32-dev/.cache/demo-text-voice-baseline-0.5.1/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
138 passed, 1 warning in 6.12s
HTTP PASS: http://127.0.0.1:44787/health
Admin PASS: HTML and API status
WSS PASS: hello/hello_ack via ws://127.0.0.1:44787/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
