Alp SDK v0.12 — ADR-0020: the SDK is plans-only, tan is the sole build executor

The SDK retires its own build executor. alp-sdk now emits only a build-plan and a system-manifest; the standalone Rust tan CLI becomes the sole executor and the whole user command surface — tan build / flash / run / emit / validate / doctor / monitor replace the retired alp CLI. Emitted plans can also be made hermetic, and a new --emit scaffold generates a standalone per-SKU Zephyr app.
Alp SDK v0.12 completes ADR-0020 Phase 4: the SDK stops running builds. alp-sdk is now plans-only — it emits a build-plan and a system-manifest — and the standalone Rust tan CLI is the sole executor and the entire user-facing command surface.
In practice that means tan build, flash, run, emit, validate, doctor, and monitor replace the retired standalone alp CLI and the removed west alp-build / alp-flash / alp-image / alp-clean / alp-size / alp-renode extensions; the west alp-quality, alp-migrate, alp-lock, and alp-emit commands survive as workspace maintenance verbs. Two capabilities ride along. build-plan path tokenization (planPathMode: tokened) rewrites every absolute path in an emitted plan to ${SDK_ROOT} / ${PROJECT_ROOT} / ${PYTHON} tokens, so a cached or relocated plan resolves against the checkout that consumes it instead of silently pinning the machine that emitted it. And a new --emit scaffold produces a buildable, standalone Zephyr application scaffold parameterized per target SKU — the application core is derived from the SKU’s own topology (E1M-V2N101 emits cores: m33_sm, not the Alif m55_hp), and pins: blocks resolve across SoM families via a macro-first board_alias join.
Splitting the planner from the executor is what makes both of those possible: a plan is now a portable artifact rather than a script bound to one machine, and the build surface is a single versioned Rust binary the IDE and CI share. The docs and examples across the tree were swept to speak tan, and the planner now wires each core’s alp.conf through Zephyr’s own EXTRA_CONF_FILE rather than the deprecated OVERLAY_CONFIG.
This is a tooling and architecture release — it adds no new silicon evidence. Two families still carry hardware evidence (the E1M-X V2N and the E1M-AEN801); every other family remains [UNTESTED] on real hardware. One migration note worth stating plainly: tan is a separate public binary (cargo install --git https://github.com/alplabai/tan-cli --bin tan) and is not installed by the SDK bootstrap — installing it is now the first step of a fresh setup.


