phase: 06_sharer_quality_presets
**Phase 06 — final verification pass: 100% green.** - **Verified (all 6 tasks complete in working tree):** `#quality` select + `PRESETS` table; preset-driven capture request + `contentHint`; per-leg `legCap()`/`degradation` at both call sites; live `applyQuality()` with Overconstrained fallback + republish; `q` key cycle; `#stat-quality`/`#stat-codec` readouts; full e2e matrix (requests, committed params ×3, zero-cap, mid-share switch, unrescalable device, late-joiner first-offer, readout, `q`); realdisplay delivered-pixels `light` case. `test_sender_fidelity.py` **untouched and green** (regression canary). - **Gates:** `uv run ruff check . && uv run ruff format --check .` → clean (32 files); `uv run pyright` → 0 errors; `uv run pytest` → **284 passed, 5 skipped (realdisplay-gated), coverage 95%** (93s); `MIRROR_REALDISPLAY=1 uv run pytest -m realdisplay` → **4 passed, 1 skipped** (no audio source on host — documented platform condition). - **Completion criteria:** all 11 ✓ — sharp default reproduces old request; light ≤960×600@15fps/motion/round(cap×0.35)/maintain-framerate with moving viewer frames; mid-share re-prices with `peers.size` unchanged, no renegotiation, roster matches `getSettings()`; refused-rescale toasts "next share"; `q` cycles + toasts, text-field guard holds; readout exact + codec shape, both reset to `—` idle; realdisplay: light decoded ≤990px (measured 320×200), sharp clears `SHARP_FLOOR_PX`; no new env/wire/Python/asset; suite 100% green, coverage >90%. - **Docs:** README.md reviewed in full against code — Quality table, `q` key, env-var table, routes (`/share`), kiosk commands, key table, doc paths all consistent; **no fixes needed**. AGENTS.md — verified, no stale statements, no changes. PLAN.md untouched (diff = 0). - **Reported (per phase, not edited):** PLAN.md §6 line 204 still says "per-leg `maxBitrate` cap (default **12 Mbit/s**)" — code has defaulted to **25 Mbit/s** since phase 02; needs a user-approved one-line amendment. - **Next pending phase:** none — 06 is the last phase in `todo/`; the roadmap is complete.
This commit is contained in:
+11
-3
@@ -13,7 +13,7 @@ import socket
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
from collections.abc import Iterator, Sequence
|
||||
from collections.abc import Iterator, Mapping, Sequence
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
@@ -45,8 +45,15 @@ def _free_port() -> int:
|
||||
return probe.getsockname()[1]
|
||||
|
||||
|
||||
def _start(extra_args: Sequence[str] = ()) -> tuple[str, subprocess.Popen[str]]:
|
||||
"""Spawn a real `mirror serve` on a free port and wait for it to answer."""
|
||||
def _start(
|
||||
extra_args: Sequence[str] = (),
|
||||
extra_env: Mapping[str, str] = {},
|
||||
) -> tuple[str, subprocess.Popen[str]]:
|
||||
"""Spawn a real `mirror serve` on a free port and wait for it to answer.
|
||||
|
||||
`extra_env` overrides inherited environment variables (it wins over
|
||||
`os.environ`, so a developer's `MIRROR_*` cannot leak into a test that
|
||||
names the opposite value)."""
|
||||
import httpx
|
||||
|
||||
port = _free_port()
|
||||
@@ -74,6 +81,7 @@ def _start(extra_args: Sequence[str] = ()) -> tuple[str, subprocess.Popen[str]]:
|
||||
"PYTHONUNBUFFERED": "1",
|
||||
# A stray DEBUGPY in the developer's shell would stall the server.
|
||||
"DEBUGPY": "0",
|
||||
**extra_env,
|
||||
},
|
||||
)
|
||||
url = f"http://127.0.0.1:{port}"
|
||||
|
||||
Reference in New Issue
Block a user