Mantle

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.

Verified and unverified behaviour
BehaviourHow it was checked
0.3.1 download, checksum, verify and install on a Linux laptopNot yet run against published 0.3.1 assets.
0.3.1 source: 508 native conformance scenarios, static worker builds, bundle verificationThe 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 sessionsPackage 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 laptopRun 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 verificationTagged-source CI, run 37148818459; release record.
0.2.0 retained workspaces, exec results, profiles, doctor, automation metadata, offline upgrades, acceptance runnerPackage 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 attachmentLive, 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, gatewayLive, 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 CLIOperator statement, not a measured observation.
ChatGPT device login, authenticated model and tool turns, token refresh, visual terminal correctness, full two-agent lifecycleNot verified end to end. See the qualification evidence.

02 / Bundles

Four assets per release.

Release assets
AssetContents
manifest.jsonThe 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.tarbin/mantle, bin/mantle-release, bin/mantle-acceptance; LICENSE, THIRD_PARTY_LICENSES.html, RUST_RUNTIME_LICENSE.html.
mantle-VERSION-x86_64-unknown-linux-musl.tarStatic bin/mantle-egress, bin/mantle-launch, bin/mantle-worker; the same notices plus MUSL_COPYRIGHT for musl 1.2.5.
SHA256SUMSChecksums 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.

03 / Verify and install

What each step proves.

The commands are on the start page.

  1. Download from the release page and compare source_commit in manifest.json with the tagged commit. Keep the manifest, both archives and SHA256SUMS in one directory.
  2. 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.
  3. Extract only bin/mantle-release from the checked GNU archive and run verify. No compiler is needed.
  4. install --prefix DIR stages the verified files under DIR/.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 than x86_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.
  5. The worker bundle is never activated by install. A new worker takes it through worker 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 ↗
508native scenarios in the 0.3.1 source
0 failed, skipped or unsupported
task spec          # validate the six domains
task conformance   # run all native scenarios
task check         # the repository gate

316 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.