test-all-device · git:20260802.883cfe7 · 2026-08-02 · sha256 5b7665bddd2bebe4
test-all-device git:20260802.883cfe7A
Immutable. This exact content is served forever at /api/v1/blob/5b7665bddd2bebe4.
---
name: test-all-device
description: Run the full hardware (onboard) CI pipeline (examples + tests/st) with automatic platform and device detection. Use when the user asks to run all device/hardware tests or the full onboard CI locally.
---
# Run the full hardware CI pipeline with automatic device detection
Detection / isolation procedures referenced below live in
[`../../lib/onboard-detection.md`](../../lib/onboard-detection.md).
1. If `command -v npu-smi` is not found, tell the user to use `/test-all-sim`
instead and stop.
2. **Precheck + detect platform** (§A) — gate on real silicon, then read the
detected arch into `PLATFORM`.
3. **Extract CI timeout** (§D, `st-onboard-<platform>` job):
`--pto-session-timeout`.
4. **Select a device range** (§C, range ≤4) — or, when wrapping in
`task-submit`, let it pick via `--device auto --device-num <range size>`.
5. **Read the marker selector out of the same job** you took the timeout from.
`st-onboard-a2a3` is two pytest passes, not one: the sweep deselects
`-m "not sdma"` and a later step runs `-m sdma`. `st-onboard-a5` has no
marker filter. Take the expression from `ci.yml` rather than assuming, so
this skill cannot drift from the job it reproduces.
6. **Run through `task-submit`** (§E). The underlying command, on a platform
whose job carries the filter:
```bash
pytest examples tests/st -m "not sdma" --platform <platform> \
--device <range-or-$TASK_DEVICE> --pto-session-timeout <timeout> -v
```
Then the quarantined pass, after it — never at the same time, since the
point of the split is that no fault-injection case meets a device that has
already provisioned SDMA:
```bash
pytest examples tests/st -m sdma --platform <platform> \
--device <2 devs or $TASK_DEVICE> --pto-session-timeout <timeout> -v
```
Dropping either pass changes what you tested: a single flat sweep is not
what CI runs and reports failures CI never sees
([`../testing/SKILL.md`](../testing/SKILL.md), issue #1425).
Parallelism is auto-driven by `--device`: on hardware, one in-flight
subprocess per device (`--max-parallel auto` = `len(--device)`); see
`docs/testing.md` for the full reuse hierarchy.
7. Report the results summary (pass/fail counts per task), across both passes.
8. If any tests fail, show the relevant error output and which device failed.