Skip to content

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 05 Aug 10:37
· 368 commits to dev since this release
6dbf617

Twelve command-surface and contract fixes on top of v0.5.0 — including one where a second project's bootstrap could silently make tan build compile the wrong SDK — plus a README rewritten as a user-facing guide.

Highlights

  • tan kconfig works on the workspace tan itself bootstrapped. It resolved neither the workspace venv's west nor the bootstrapped ZEPHYR_BASE, so it failed against the exact environment the quickstart produces. (#453)
  • tan quality and tan migrate can succeed at all. Neither could pass the west extension's required argument, under any input. (#454)
  • A second project's bootstrap no longer silently repoints the first. ~/.alp/sdk-default is machine-global and last-writer-wins; project A could resolve project B's checkout and build it with ok: true and no warning. (#464)
  • tan debug-config infers a real hardware target instead of defaulting to native-host and writing a launch.json pointing at a binary the build never produces. (#456)
  • tan generate --all is re-runnable. It succeeded once, then always exited 3 because one of nine targets refused to overwrite — leaving the other eight rewritten. (#457)
  • tan renode honours --project. It resolved the build root from the CWD and its own remedy told you to build the wrong directory. (#470)
  • Silent failures made audible: tan pinmux printed nothing on exit 2 (#458), tan diff reported "no differences" on a board.yaml that tan validate rejects (#455), and tan bootstrap --print-env described a workspace bootstrap would never create (#459).
  • README rewritten from ~4,000 words to under 1,000: quickstart, command table, SDK selection order, JSON envelope contract.

Fixed

  • Four debug-config preconditions reclassified from exit 5 to exit 2 — user-fixable input was being reported as a tan crash. (#462)
  • bootstrap.workspace-orphan-refused no longer prints a stringified None for its destination, or advises dropping a --workspace the invocation never passed. (#469)
  • contract/issue-codes.json registered two codes twice, one pair disagreeing on severity. JSON duplicate keys are last-wins, so the published severity depended on file order. Deduped, plus a new gate that rejects duplicates. (#467)

Behaviour worth knowing

  • On a multi-core SoM, tan debug-config now needs --core <name>; without it, it exits 2 with debug-config.target-kind-ambiguous rather than guessing.
  • tan quality requires --profile, tan migrate requires one of --check / --preview / --apply. Both refuse at exit 2 before spawning west.
  • When the machine-global default SDK was last written by a different project's bootstrap, commands now emit a sdk.global-default-foreign-project warning instead of resolving silently.

Install

# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/alplabai/tan-cli/main/install.sh | sh
# Windows
irm https://raw.githubusercontent.com/alplabai/tan-cli/main/install.ps1 | iex
Platform Asset
Windows x64 tan-x86_64-pc-windows-msvc.zip
Linux x64 (glibc) tan-x86_64-unknown-linux-gnu.tar.gz
macOS x64 tan-x86_64-apple-darwin.tar.gz
macOS arm64 tan-aarch64-apple-darwin.tar.gz

The Linux binary requires GLIBC_2.30 or newer, measured from the frozen payload rather than the bootloader. There is no musl asset: a PyInstaller musl freeze runs only on musl distros, so install.sh probes for musl and refuses before downloading rather than failing at exec. Linux arm64 and Windows arm64 have no prebuilt archive — install from source on those hosts.

Verify a download:

gh attestation verify <downloaded-file> --repo alplabai/tan-cli

checksums.txt carries the SHA-256 of every asset; envelope-contract.json is the machine-readable command/issue-code contract consumers key off.


Full detail: CHANGELOG.md · full diff