test-all-device · diff
git:20260811.ecbc2ee to git:20260818.c7abf35
4 added, 4 removed. Audit A to A.
---
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` uses
- `-m "not pod"` and does not exclude `sdma`. Take the expression from
+ `--exclude-level 4` and does not exclude `sdma`. 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). On a5, the underlying command excludes
- only pod tests, so SDMA remains in the sweep:
+ only level-4 tests, so SDMA remains in the sweep:
```bash
- pytest examples tests/st -m "not pod" --platform a5 \
+ pytest examples tests/st --exclude-level 4 --platform a5 \
--device <range-or-$TASK_DEVICE> --pto-session-timeout <timeout> -v
```
On a platform whose job separates SDMA tests, the underlying sweep command
is:
```bash
- pytest examples tests/st -m "not sdma" --platform <platform> \
+ pytest examples tests/st -m "not sdma" --exclude-level 4 --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 all applicable
passes.
8. If any tests fail, show the relevant error output and which device failed.