phase: 05_autohide_stage_controls
Build and Push Containers / test (push) Successful in 32s
Build and Push Containers / build-and-push-app (push) Successful in 8s

**Phase 05 final verification pass — all green.**

- Verified implementation in tree: staged `.cap`/`.actions` hidden at rest with container+children `pointer-events: none` (`app.css`); `revealStageControls()` with 3 s idle timer, `pointermove`/`pointerdown` + wall-keypress wiring, `unstage()` timer/attribute cleanup (`watch.js`); `tests/e2e/test_stage_autofade.py` (5 tests) present; `test_keyboard_wall.py` rest-state assertion updated per task 01.
- Gates: `uv run ruff check . && uv run ruff format --check .` — clean; `uv run pyright` — 0 errors; `uv run pytest` — **274 passed, 4 skipped** (realdisplay-gated), coverage **95%** (>90% ✓); `MIRROR_REALDISPLAY=1 uv run pytest -m realdisplay` — **3 passed, 1 skipped** (documented platform skip: no audio source on host).
- Dedicated phase suite `uv run pytest tests/e2e/test_stage_autofade.py` — **5/5 in isolation**.
- Criteria: idle opacity 0 + bottom-edge hit probe ✓; mouse reveal → 1 → idle fade → 0 ✓; keypress reveal + Exit visible/clickable/unstages ✓; grid rules byte-for-byte unchanged (CSS diff touches only the staged block; grid guard tests green) ✓; suite green, coverage >90% ✓; phases 01–04 suites all green (no regression) ✓.
- Documentation: README.md reviewed in full — all commands, env vars (incl. `DEBUGPY_*`, 25 Mbit/s default), `--allow-cidr`, kiosk/share key tables, index-page and auto-hide descriptions match the code; the only stale "12 Mbit/s" default lives in locked PLAN.md §6, README is correct — no change made. AGENTS.md: all facts (gates, test names, starlette 1.10, e2e flags, ~95% coverage) current — verified, no changes needed.
- Notable: no code changes were required this pass — the phase work was already complete and correct; nothing to fix.
- Next pending phase: none — phase 05 is the last in `todo/`.
This commit is contained in:
2026-11-02 19:41:54 -05:00
parent 80656a3592
commit f51d0fe9ae
31 changed files with 710 additions and 19 deletions
+10 -5
View File
@@ -618,12 +618,17 @@ class TestFocusVisibleControls:
" && document.activeElement.parentElement.id === 'watch-stage'"
), "staging must hand focus to the staged tile"
# The staged caption is legible while the tile holds focus (the
# opacity transition is 200 ms; wait for the settled value).
# The staged overlay is hidden at rest — caption bar and control
# cluster alike — so a shared terminal's bottom line is never
# covered (phase 05). 10 s stays green under task 02 as well: an
# Enter-press reveal lasts 3 s + 200 ms fade, so the settled `0`
# is always reachable inside the window.
viewer.wait_for_function(
"() => document.activeElement !== null"
" && getComputedStyle(document.activeElement.querySelector('.cap')).opacity === '1'",
timeout=5_000,
"() => { const tile = document.querySelector('#watch-stage .tile');"
" if (!tile) return false;"
" return getComputedStyle(tile.querySelector('.cap')).opacity === '0'"
" && getComputedStyle(tile.querySelector('.actions')).opacity === '0'; }",
timeout=10_000,
)
# m still works with focus sitting on the stage.