Skip to content

v0.6.0

Latest

Choose a tag to compare

@github-actions github-actions released this 24 Aug 05:56
· 192 commits to dev since this release
74bb07d

The first stable release of the Python tan, and the first that requires — and is gate-verified against — a released alp-sdk. v0.6.0-rc1 was a prerelease nothing upgraded onto, so everything in it reaches users here for the first time.

Highlights

  • tan renode is removed, along with all 27 published renode.* issue codes — the one breaking change, details below.
  • alp-sdk v0.16.0 or newer is now required. tan's planner mirror and every vendored fixture pin to that released tag, so the gates measure tan against the SDK you actually install rather than an unreleased dev commit.
  • Bootstrap stopped handing Fedora/Rocky/Arch hosts sudo apt-get install -y cmake — install commands are now selected per package manager, and a gap degrades to a host-neutral hint instead of a guessed package name.
  • tan build no longer drops flash_args.slot0_load_address for a variant declaring jlink_flash_device: null, and a dual-M55 AEN SoM that declares no per-role <role>_slot0 region is refused rather than mis-mapped.
  • tan doctor resolves git / py / python to absolute paths before spawning instead of by bare argv[0].
  • A bare tan invocation is meaningfully faster to startclick.testing, jsonschema, PyYAML and urllib.request are no longer imported on every run (427 → 279 modules).
  • tan run --flash can arm the flash confirm gate directly, with a real --confirm flag.
  • Scaffolded project READMEs pin their doc links to the released SDK tag rather than a moving main.

Removed

  • tan renode, its modules, and all 27 renode.* issue codes. This is the breaking change in this release:
    • Any script invoking tan renode ... must stop; the verb no longer resolves and exits as an unknown command.
    • Any consumer matching on a renode.* code in issues[] will never see one again — the codes are unpublished, not merely unused.

Changed

  • tan/core/shapes.py's dedup is finished — eight duplicate definitions are gone, with a gate so the next half-finished dedup cannot ship green.
  • The Windows %PATH% walk no longer builds a pathlib.Path per candidate, and an unreadable %PATH% entry is skipped rather than aborting the whole lookup.

Added

  • The pin-move-verify sender (ADR-0029 clause 5) — a PR that moves a pin value dispatches the proposed tuple to alp-e2e instead of spell-checking it.
  • A clean-container end-to-end run on a schedule, rather than only when something touches it.
  • A gate requiring a pinned hand-port to name which tan code it governs, and symbol-level checking of scripts/alp_cli/explain.py.

Fixed

  • tan/planner/ is re-synced with alp-sdk, closing an emit divergence where tan wrote no CONFIG_SPI=y for any GD32-bearing SoM while alp-sdk did.
  • A storage entry can no longer reach status: ok on a defaulted Devicetree label, and every planner site resolves against the project's own metadata root.
  • install.ps1 rolls back a failure during the backup renames, not only after them, and no longer reports a successful install that did not happen.
  • tan flash's expect_dpidr wrong-board guard round-trips a bare YAML hex, and a --core/--helper filter matching nothing now fails instead of passing silently.
  • tan size / image / clean / run / validate surface sdk.discovery-divergent in the text channel instead of only in JSON.
  • A postCommands step skipped for a missing tool reaches issues[] rather than vanishing.
  • A v* tag can no longer publish while a changelog fragment sits unfolded.
  • The vendored toolchain lock and bootstrap manifest are re-vendored against released alp-sdk v0.16.0, and CI now fetches tags for its alp-sdk clone so tag-dependent emit matches what a real checkout produces.

Install

install.sh (macOS/Linux) and install.ps1 (Windows) resolve latest through GitHub and will install this release — unlike v0.6.0-rc1, which was a prerelease they skipped. Asset names, the measured glibc floor, and the attestation verify command are in the ## Release assets block below.

Full detail: CHANGELOG.md · full diff

Release assets

Four archives, each a PyInstaller --onedir freeze of the Python
tan (tan-cli#349 -- was a single-file --onefile freeze; --onedir
fixes a 13-19s macOS startup regression caused by --onefile
re-extracting its runtime on every invocation). Unpack the archive
and run the tan/tan.exe inside; install.sh/install.ps1 do
this for you.

  • tan-x86_64-pc-windows-msvc.zip -- Windows x64
  • tan-x86_64-apple-darwin.tar.gz / tan-aarch64-apple-darwin.tar.gz -- macOS
  • tan-x86_64-unknown-linux-gnu.tar.gz -- Linux x64, frozen on Debian 11.
    It requires GLIBC_2.30 or newer -- measured from the
    binary's own bundled payload at build time, not assumed from the
    build image. Debian 11+ / Ubuntu 20.04+ / RHEL 9+ are comfortably
    above it.

There is no arm64 Windows and no arm64 Linux asset in this release,
and no -musl asset. A frozen binary has to be built on the
architecture it runs on, and this release builds on four runners; if
you need an arm64 Linux or arm64 Windows tan, install from source
(pip install ./python) and say so on the issue tracker.

  • Every archive + checksums.txt carries a GitHub build-provenance
    attestation. Verify with:
    gh attestation verify <downloaded-file> --repo alplabai/tan-cli