Releases and verification
What a release contains, and what is checked.
Current release: 0.3.1, pinned to Substrate 0.16.1; its manifest names the tagged source commit. Previous release: 0.2.0, published 2026-10-03 from commit 54710558ebe096a8e5faf98bbb430ff7f9eaa17e, pinned to Substrate 0.7.10. Earlier releases: release history.
01 / What is verified
Evidence, by kind.
| Behaviour | How it was checked |
|---|---|
0.3.1 download, checksum, verify and install on a Linux laptop | Not yet run against published 0.3.1 assets. |
| 0.3.1 source: 508 native conformance scenarios, static worker builds, bundle verification | The integration source records 508 native scenarios passing in the coverage ledger. No tagged-source CI record for 0.3.1 yet. |
0.3.1 on Substrate 0.16.1: worker up from the signed release archive, doctor, Claude Code, Codex and command sessions | Package tests and native scenarios with controlled provider, SSH, Substrate and filesystem IO. Not run on a live worker. |
0.2.0 download, checksum, verify and install on a Linux laptop | Run against the published 0.2.0 assets on 2026-10-29 with the install commands, naming 0.2.0: all checksums OK, mantle --version printed mantle 0.2.0. |
| 0.2.0 source: 499 native conformance scenarios, static worker builds, bundle verification | Tagged-source CI, run 37148818459; release record. |
| 0.2.0 retained workspaces, exec results, profiles, doctor, automation metadata, offline upgrades, acceptance runner | Package tests and native scenarios with controlled provider, SSH, Substrate and filesystem IO. No release record shows a 0.2.0 run on a live worker. |
The command agent kind (new in 0.3.0) | Package tests and native scenarios with controlled provider, SSH, Substrate and filesystem IO. Not run on a live worker. |
| Codex terminal attachment | Live, 2026-10-03: KubeVirt worker, signed Substrate 0.7.10, Mantle 0.1.3, Codex 0.153.4. Two 12-second attachments through 100×50 PTYs received 329,157 and 346,630 bytes and detached with exit 0; the second reused the same agent. Record. |
| Confined native Rust build, workspace isolation, gateway | Live, 0.1.2: a confined cargo check of a Rust package with native dependencies (62.76 s on the worker); two Codex workspaces passed marker-isolation checks; TLS to OpenAI through the gateway worked; an unlisted host and direct egress were refused. Audit. |
| 0.1.4 attachment with the corrected CLI | Operator statement, not a measured observation. |
| ChatGPT device login, authenticated model and tool turns, token refresh, visual terminal correctness, full two-agent lifecycle | Not verified end to end. See the qualification evidence. |
02 / Bundles
Four assets per release.
| Asset | Contents |
|---|---|
manifest.json | The exact source commit, Substrate revision and version, Rust toolchain, targets, GNU libc build environment, and every payload’s digest, size and mode. |
mantle-VERSION-x86_64-unknown-linux-gnu.tar | bin/mantle, bin/mantle-release, bin/mantle-acceptance; LICENSE, THIRD_PARTY_LICENSES.html, RUST_RUNTIME_LICENSE.html. |
mantle-VERSION-x86_64-unknown-linux-musl.tar | Static bin/mantle-egress, bin/mantle-launch, bin/mantle-worker; the same notices plus MUSL_COPYRIGHT for musl 1.2.5. |
SHA256SUMS | Checksums of the three files above. |
For 0.2.0 the manifest records glibc 2.39 and rustc 1.97.1; read the values for 0.3.1 from its manifest. GNU compatibility is limited to the recorded runtime; older glibc, macOS and ARM are not claimed. From 0.3.1 the build remaps the cargo home, the source export and the build target to /cargo, /mantle and /target, so the binaries name no directory of the build host. Archive metadata is deterministic (zero timestamps and owners); that does not promise bit-identical compilation on other toolchains or hosts. Releases 0.1.0 to 0.1.4 are source archives only.
- Download from the release page and compare
source_commitinmanifest.jsonwith the tagged commit. Keep the manifest, both archives andSHA256SUMSin one directory. - Check both archives against the manifest with
sha256sum. The checksums give integrity against the manifest you trust; a checksum file next to the archives is not independent publisher authentication. - Extract only
bin/mantle-releasefrom the checked GNU archive and runverify. No compiler is needed. install --prefix DIRstages the verified files underDIR/.mantle/generations/and activates the whole generation with one symlink rename. Concurrent installers serialize on a lock and give up after waiting five seconds. It refuses unmanaged files in the way, links inside the prefix, targets other thanx86_64-unknown-linux-gnu, and existing generations that were modified, including extra files or directories. Earlier generations are kept; configuration and credentials are outside the prefix. An interruption before activation leaves the previous installation in place.- The worker bundle is never activated by
install. A new worker takes it throughworker up --binaries; an existing worker needs an offline upgrade.
Development candidates: every CI run that passes the gate (pushes to main, pull requests, tags) builds and verifies a bundle from its exact commit and keeps it as a workflow artifact for 30 days. Its manifest names that commit.
04 / Build from source
Without a release bundle.
Needs Rust 1.97 (rust-toolchain.toml), go-task, the x86_64-unknown-linux-musl Rust target and a musl C toolchain (musl-tools on Ubuntu).
git clone https://github.com/beyond10x/mantle.git
cd mantle
git checkout 0.3.1
cargo install --locked --path crates/mantle
rustup target add x86_64-unknown-linux-musl
task build-worker
task build-worker writes the static helpers to ~/.cache/b10x-target/mantle/x86_64-unknown-linux-musl/release, which is the default of mantle worker up --binaries. Release 0.3.1 pins Substrate’s SDK to revision f2fd606b88a0b778970e8babe9a96eb600cd57b2 (0.16.1; release 0.2.0 pins 0.7.10).
05 / Specification
Behaviour you can inspect and check.
Six ESS domains describe the implemented behaviour: sessions, manifests, egress, the launcher, orchestration and operator workflows. Native scenarios run production code (SQLite transactions, parsers, TCP tunnels, PTYs, provider decisions, offline installation) with controlled external IO. They do not provision AWS or KubeVirt, run a Substrate daemon or attest to a live deployment.
Coverage ledger ↗0 failed, skipped or unsupported
task spec # validate the six domains
task conformance # run all native scenarios
task check # the repository gate316 authored and 192 generated scenarios: CLI 390, egress 69, launcher 49 (0.2.0: 499). Tagged-source CI has not yet run them for 0.3.1. Recorded results. Contributors need ESS 0.77.0 and AEP 0.68.0 on PATH. A green suite does not establish authenticated Claude Code or Codex qualification.
06 / For maintainers
Building and publishing a release.
Not needed to use Mantle.
Build
Install cargo-about 0.9.1, the Rust musl target and a musl C toolchain. Build only from a clean, exact checkout, with a new work directory and output path:
cargo run --locked -p mantle-release -- notices --check
cargo run --locked -p mantle-release -- build --source "$PWD" \
--revision "$(git rev-parse HEAD)" --work "$HOME/.cache/mantle-release-build-UNIQUE" \
--output "$HOME/.cache/mantle-release-bundle-UNIQUE"
Regenerate the committed notice with mantle-release notices when the locked dependency graph changes. The build exports the commit into an isolated tree checked against the raw committed tree and blob bytes, with a fresh target directory. Export attributes that rewrite or omit committed files are refused; Git replacement objects are ignored. Both artifacts are verified by running their version commands; source and compiler logs stay in the work directory. Existing binaries cannot be supplied or relabelled as the chosen commit.
Publish
Publication is an explicit operator command, after the required repository checks pass and the bot has created the tag:
mantle-release publish --manifest /path/to/bundle/manifest.json --source "$PWD" \
--tag VERSION --policy /path/to/private/gates-policy.json
It uses the installed b10x-gates gh bot wrapper, checks the local and fully dereferenced remote tag against the source, refuses an existing release, uploads only the verified assets and checks GitHub’s resulting asset digests. A failure may leave a partial release for inspection; the command never overwrites it. CI holds no publishing credentials, and no personal gh account writes.