Files
le-mystere-professeur-zacus/Makefile
L'électron rare 5a0a6cc073 feat(tools): voice loop E2E smoke script
Add tools/macstudio/smoke_e2e.py exercising the full voice-bridge loop
(/health/ready, /tts, /voice/ws hello+stream+intent+TTS, /tts/cache/stats)
without requiring the ESP32 firmware. Three modes (tts/ws/full); generates
a French PCM16 16 kHz fixture via `say -v Thomas` + afconvert when needed;
saves received WAVs and a structured JSON report under /tmp.

Wires `make smoke-voice` and documents the smoke test under
tools/macstudio/README.md (prereqs, exit codes 0/1/2, typical latencies).

Local run hit /tts cache miss + WS round-trip in ~3 s with cache hit on
the second pass; cache delta logging confirmed.
2026-05-04 00:35:45 +02:00

84 lines
2.7 KiB
Makefile

PYTHON ?= python3
SCENARIO ?= game/scenarios/zacus_v2.yaml
FRONTEND_DIR ?= frontend-v3
.PHONY: bootstrap-validators bootstrap-docs scenario-validate audio-validate printables-validate export validate-runtime-bundle content-checks runtime3-compile runtime3-simulate runtime3-verify runtime3-test runtime3-firmware-bundle frontend-typecheck frontend-test frontend-build docs-build docs-serve all-validate images playtest hints-serve hints-test smoke-voice
bootstrap-validators:
bash tools/setup/install_validators.sh
bootstrap-docs:
$(PYTHON) -m pip install --user --break-system-packages -r tools/requirements/docs.txt
scenario-validate:
$(PYTHON) tools/scenario/validate_scenario.py $(SCENARIO)
audio-validate:
$(PYTHON) tools/audio/validate_manifest.py audio/manifests/zacus_v2_audio.yaml
printables-validate:
$(PYTHON) tools/printables/validate_manifest.py printables/manifests/zacus_v2_printables.yaml
export:
$(PYTHON) tools/scenario/export_md.py $(SCENARIO)
validate-runtime-bundle:
$(PYTHON) tools/scenario/validate_runtime_bundle.py
content-checks:
bash tools/test/run_content_checks.sh
runtime3-compile:
$(PYTHON) tools/scenario/compile_runtime3.py $(SCENARIO)
runtime3-simulate:
$(PYTHON) tools/scenario/simulate_runtime3.py $(SCENARIO)
runtime3-verify:
$(PYTHON) tools/scenario/verify_runtime3_pivots.py $(SCENARIO)
runtime3-test:
$(PYTHON) -m unittest discover -s tests/runtime3 -p 'test_*.py'
runtime3-firmware-bundle:
$(PYTHON) tools/scenario/export_runtime3_firmware_bundle.py $(SCENARIO)
frontend-typecheck:
cd $(FRONTEND_DIR) && pnpm typecheck
frontend-test:
cd $(FRONTEND_DIR) && pnpm test
frontend-build:
cd $(FRONTEND_DIR) && pnpm build
docs-build:
$(PYTHON) -m mkdocs build --strict
docs-serve:
$(PYTHON) -m mkdocs serve
all-validate: scenario-validate audio-validate printables-validate validate-runtime-bundle runtime3-compile runtime3-simulate runtime3-verify runtime3-test
@echo "All validations passed."
images:
$(PYTHON) tools/images/generate_printables.py --manifest printables/manifests/zacus_v2_printables.yaml
playtest:
uv run --no-project --with pyyaml python tools/playtest/run_playtest.py \
--scenario game/scenarios/zacus_v2.yaml \
--playtest game/scenarios/playtests/zacus_v3_60min_tech.playtest.yaml \
--snapshot game/scenarios/playtests/snapshots/zacus_v3_60min_tech.snapshot.json
hints-serve:
uv run --with fastapi --with uvicorn --with pyyaml --with pydantic --with httpx --with sse-starlette \
uvicorn tools.hints.server:app --reload --port 8300
hints-test:
uv run --with fastapi --with uvicorn --with pyyaml --with pydantic --with pytest --with httpx --with sse-starlette \
pytest tests/hints/ -v
smoke-voice:
uv run --with websockets --with httpx \
python tools/macstudio/smoke_e2e.py --mode full