Smoke workflow (just smoke)¶
End-to-end checks beyond default just ci (see verification.md for the offline merge bar vs this supplementary gate): Python smoke markers, host CLI paths, and (when Docker is available) Compose + runtime image behavior.
What runs¶
| Phase | Step id | What it checks |
|---|---|---|
| 1 | pytest_smoke |
uv run pytest -m smoke -v (tests/test_smoke.py) |
| 2 | host_alwm_offline_benchmark_and_validate |
alwm benchmark run on fixtures/benchmarks/campaign_micro.v1.yaml + alwm validate manifest |
| 3 | host_alwm_campaign_run_and_validate |
alwm benchmark campaign run on examples/campaigns/v1/minimal_offline.v1.yaml + validate campaign artifacts |
| 4 | docker_compose_config_all_profiles |
docker compose config --quiet for each profile used in just compose-help |
| 5 | docker_dev_orchestrator_help |
docker compose --profile dev run --rm --build orchestrator → alwm --help in the runtime image |
| 6 | docker_benchmark_offline |
docker compose --profile benchmark-offline run --rm --build benchmark-offline (fixture benchmark to out/benchmark-offline) |
Phases 4–6 are skipped when:
SMOKE_SKIP_DOCKER=1, ordockeris not onPATH(informational skip; not treated as a failure).
Failure recovery analysis¶
The script runs all phases even after a failure (no set -e on the whole run). Any non-zero step is recorded; at the end a Smoke failure recovery analysis block lists each failed step id and concrete recovery hints (venv, repo root, Docker daemon, image rebuild, host-parity commands).
Rough failure mode mapping:
| Failure prefix | Likely area |
|---|---|
pytest_smoke |
Python env / dev deps / imports |
host_alwm_* |
Wrong cwd, ALWM_REPO_ROOT, missing fixtures, ALWM_FIXTURE_MODE |
docker_compose_* |
Docker not running, Compose v2, invalid docker-compose.yml |
docker_dev_* / docker_benchmark_* |
Stale image (script uses --build), Dockerfile, bind-mount; runtime image includes bundled templates/ under /usr/local/lib/python3.11/templates so alwm benchmark run works without relying on repo layout inside site-packages |
Environment¶
| Variable | Meaning |
|---|---|
SMOKE_SKIP_DOCKER |
Set to 1 to run only pytest + host alwm steps (e.g. agents without Docker). |
ALWM_REPO_ROOT |
Repository root; defaults to the directory containing scripts/smoke.sh parent. |
CI¶
Default just ci remains ruff + mypy + full pytest (excluding tests/integration/). Smoke is a supplementary full-application gate for developers and release checks; run just smoke before merges that touch CLI, benchmarks, campaigns, or Docker.