# @garuda/device-cli — workflow-driven Tunnel simulator (device edge)

Simulates the `Skanixa-BX-TN` Tunnel and **publishes MQTT**, exactly as a real device would. Reads the
**published Workflow** (bound device, items-per-HU, RFID sequence) — *not* the Blueprint (the Blueprint is
the authoring layer above; the Workflow materialises it, ADR-0010). Swapping this for a hardware Tunnel
changes only this file (ADR-0006 swappable seam).

- `buildPass(cfg, hu, scenario)` — one tunnel-pass payload from the Workflow + scenario (happy/short/excess/invalid/writefail/notags/offline). No per-customer literals.
- `publishPass(client, pass)` — publish to `garuda/inward/device` (QoS 1).

The engine consumes via an EMQX **shared subscription** and reconstructs a `PassDevice` (device-simulator)
to run the existing engine unchanged. Driven end-to-end by `platform/acceptance`.
