Tests and validation¶
Run commands from the repository root. Choose checks for the changed ownership or contract; a prose change doesn't need flashing or a firmware rebuild.
Firmware and browser¶
With the pinned ESP-IDF v6.1 environment activated:
idf.py --preset normal build
idf.py --preset s3-normal build
idf.py --preset v2-normal build
Use affected presets rather than overwriting a local config or running set-target.
For cross-profile changes, use tools/test_hardware_profiles.py; its output belongs
under build/tests/hardware-profiles. See profiles.
Resolve managed components with an IDF configure first. Host tests then use the native compiler, CMake, Python and Node:
cmake --preset host-tests -S tests
cmake --build build/tests/host
ctest --test-dir build/tests/host --output-on-failure
The host suites cover settings/storage, motion, geometry, effects and output limits, owner/transport policies, OTA validation and shared wire fixtures. RMT and radio stubs establish software behaviour, not physical timing or interoperability. Platform-specific effect-frame baselines are documented in the dated frame validation.
For the embedded browser's labelled UI fixture:
python3 tests/mock_web.py
# Open http://127.0.0.1:8765/
Apps and workflows¶
swift test --package-path ios/EspurrControl
python3 -m unittest discover -s tests -p 'test_release*.py' -v
node --test tests/test_installer.mjs tests/test_workflow_guards.mjs
Follow the Apple and Android guides for builds and UI checks. Shared behaviour needs both phones and the mobile parity record. Compilation, rendered interactions, signed installation and real Bluetooth/OTA checks are separate evidence.
Local act smoke tests exercise release packaging and the combined Pages artifact with remote publication/deployment disabled. Site maintenance covers the strict docs build and link checks.
Physical acceptance¶
Record the exact source revision, board, settings and installation before claiming a hardware result. Check connector/power distribution, LED count/order/traversal, mounted motion, loaded timing, current/temperature, button feel, bond persistence, phone/watch handoff, interrupted updates, boot health and native rollback as relevant. Static linker headroom is not measured runtime heap or stack margin.
Current status separates implemented services from remaining qualification work. Dated results live in history.