Repository navigation
0.16.1
Notes
Tag 0.16.0 points at commit 541cf55eb3efa7977aad6721f697668d1f029c28 and was not published.
release.yml releases only a commit whose gate.yml run concluded success, and main's gate on
that commit (run 40911403183)
failed cargo xtask check-advisories on RUSTSEC-2026-0418, which was published after the pull
request's gate passed and before main's ran. Release tags are write-once, so 0.16.0 cannot be
moved. 0.16.1 is the first published release of everything listed under 0.16.0.
That includes the Kubernetes namespace driver of design 34 and ADR 0047, as a development profile.
Exec on a cluster is unverified, and every exec start on the driver is refused
exec.sandbox-unavailable. Shared clean-room conformance follows in the next release: the
namespace lane reports its step 4 absent until story:remote-clean-room-conformance lands.
Security
libz-sysis 1.1.31, taking the fix for
RUSTSEC-2026-0418; it reaches the
workspace throughcurl-sysandlibgit2-sysundersubstrate-host.
THIRD_PARTY_LICENSES.htmlis regenerated for that revision. The advisory's build script prints
the build environment only when compiled withcc1.6.0 or later.Cargo.lockheldcc1.4.4
at0.16.0, in every revision of it onmainsince 2026-09-25, and still does, so this
workspace's locked builds did not print it.
Full list of changes: CHANGELOG.md, sections 0.16.1 and 0.16.0.
Built by this release workflow from f2fd606b88a0b778970e8babe9a96eb600cd57b2, the commit this tag names, after
.github/workflows/gate.yml concluded success for it: https://github.com/beyond10x/substrate/actions/runs/40943393646
Image
| image | ghcr.io/beyond10x/b10x-substrate-daemon:0.16.1 |
| digest | sha256:ab798921666cbbbcdbcc36da132b106dfcd7ee03bb7b0b5adcf7edbddc61ae88 |
| revision label | f2fd606b88a0b778970e8babe9a96eb600cd57b2 (org.opencontainers.image.revision) |
| platform | linux/amd64 |
Pull by digest, never by tag:
docker pull ghcr.io/beyond10x/b10x-substrate-daemon@sha256:ab798921666cbbbcdbcc36da132b106dfcd7ee03bb7b0b5adcf7edbddc61ae88Disposable MCP test image
| image | ghcr.io/beyond10x/b10x-substrate-mcp:0.16.1 |
| digest | sha256:77342f97515579f1c5b12c9aa4b6429d9e23d0dd9fbce97932ac34cb6346959d |
| posture | local stdio development/conformance testing |
Run by digest with stdin attached, no network, a read-only root and private temporary
state:
docker run --rm -i --network=none --read-only --tmpfs /tmp:rw,nosuid,nodev ghcr.io/beyond10x/b10x-substrate-mcp@sha256:77342f97515579f1c5b12c9aa4b6429d9e23d0dd9fbce97932ac34cb6346959dDevelopment contract bundle
| artifact | ghcr.io/beyond10x/b10x-substrate-wire:0.25.0 |
| digest | sha256:6f31a62628ae3e084134f4fe47900eaf2fc1932ced61c54ca9498f39b9c7e322 |
| contract status | development (dev.b10x.contract.status) |
Copy the exact OCI layout by digest, never by tag:
oras cp --to-oci-layout \
ghcr.io/beyond10x/b10x-substrate-wire@sha256:6f31a62628ae3e084134f4fe47900eaf2fc1932ced61c54ca9498f39b9c7e322 \
./substrate-wire-0.25.0:0.25.0Executor image
| image | ghcr.io/beyond10x/b10x-substrate-executor:0.16.1 |
| digest | sha256:e3ed53485640dc759760dd47eb08ec0eb9eea895aa8bcd630f60e5087ab6729e |
| revision label | f2fd606b88a0b778970e8babe9a96eb600cd57b2 (org.opencontainers.image.revision) |
| platform | linux/amd64 |
The static substrate-executor the Kubernetes namespace driver runs in its keeper and
exec Pods, on an empty base image. A daemon talks only to the executor of its own
release; before publication this workflow required the image's version handshake to
name substrate-executor/1, 0.16.1 and f2fd606b88a0b778970e8babe9a96eb600cd57b2, and its executable to
be static. Pin it by digest and verify its signature:
cosign verify \
--certificate-identity https://github.com/beyond10x/substrate/.github/workflows/release.yml@refs/tags/0.16.1 \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
ghcr.io/beyond10x/b10x-substrate-executor@sha256:e3ed53485640dc759760dd47eb08ec0eb9eea895aa8bcd630f60e5087ab6729eRelease binaries
| daemon | substrate-daemon-0.16.1-x86_64-unknown-linux-gnu.tar.gz |
| command-line client | b10x-substrate-0.16.1-x86_64-unknown-linux-gnu.tar.gz |
| checksums | SHA256SUMS (sha256:a5b3170fad432678b1da5f451145dc834d09e64b8c4d59ff6a16c3ba27aa49fc), signed in SHA256SUMS.sigstore.json |
| runs on | x86_64 Linux with glibc 2.35 or newer (Ubuntu 22.04, Debian 12 and later), libssl3 and zlib1g |
Both are exported from the pinned builder stage the images are built from; the daemon
archive holds the daemon of the image above, byte for byte. Each archive holds the binary,
LICENSE, THIRD_PARTY_LICENSES.html and README.md. Before release this workflow
refused any binary needing a newer glibc or an undocumented shared library and started
both in ubuntu:22.04@sha256:e0f80c829509ef4df9e76bd8944eb7b8ec25cbb379b112a7f9448b2c77a77c9b. Verify the signature first, then the archives:
cosign verify-blob \
--bundle SHA256SUMS.sigstore.json \
--certificate-identity https://github.com/beyond10x/substrate/.github/workflows/release.yml@refs/tags/0.16.1 \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
SHA256SUMS
sha256sum --check --ignore-missing SHA256SUMSKubernetes chart
| chart | oci://ghcr.io/beyond10x/charts/b10x-substrate version 0.16.1 |
| digest | sha256:23b9f96f5fbfb5f3c4091f32f6d7c0da52a657fbcb185a25c5d2a7d7883f03a0 |
| default image | ghcr.io/beyond10x/b10x-substrate-daemon@sha256:ab798921666cbbbcdbcc36da132b106dfcd7ee03bb7b0b5adcf7edbddc61ae88 |
| chart lane | https://github.com/beyond10x/substrate/actions/runs/40943393682 |
| chart lane absent, not passed | TLS key after the uid drop: reading the 0400 TLS key after the bootstrap drops to uid 65532 is not run on kind; Localhost AppArmor profile: the daemon under the substrate-host-exec-v2 Localhost AppArmor profile is not run on kind; Localhost seccomp profile: the daemon under the b10x-substrate/host-exec-v1-amd64.json Localhost seccomp profile is not run on kind; execution bootstrap: the execution bootstrap starting as root and dropping to uid 65532 is not run on kind |
The node-bound serving profile of ADR 0046: one StatefulSet pod per dedicated node, each
with its own ledger claim, addressed by its own host name. Install by version and check
the digest, the signature and the build provenance first:
cosign verify \
--certificate-identity https://github.com/beyond10x/substrate/.github/workflows/release.yml@refs/tags/0.16.1 \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
ghcr.io/beyond10x/charts/b10x-substrate@sha256:23b9f96f5fbfb5f3c4091f32f6d7c0da52a657fbcb185a25c5d2a7d7883f03a0
gh attestation verify oci://ghcr.io/beyond10x/charts/b10x-substrate@sha256:23b9f96f5fbfb5f3c4091f32f6d7c0da52a657fbcb185a25c5d2a7d7883f03a0 --repo beyond10x/substrate
helm install substrate oci://ghcr.io/beyond10x/charts/b10x-substrate --version 0.16.1 --values values.yamlConfinement lane
| recorded run | f2fd606b88a0b778970e8babe9a96eb600cd57b2 182 2026-10-29T20:02:30Z |
| command | bash scripts/delegated-lane.sh |
| where | a workstation with bubblewrap and a delegated cgroup v2 subtree, not this runner |
The fields are the commit, the delegated case count and when the run finished. The
delegated lane needs an exclusive delegated cgroup subtree that a hosted runner does not
have, so gate.yml reports it absent — not executed, not passed. This workflow does
not run it either: it refuses to publish without the recorded line above, and that line
must name this exact commit and the delegated case count this source declares.
Quota lane
| recorded run | f2fd606b88a0b778970e8babe9a96eb600cd57b2 7 2026-10-29T20:06:51Z |
| command | cargo xtask quota-fixture run |
| where | a workstation whose Docker runs the checked-in fixtures/quota-lab recipe, not this runner |
The fields are the commit, the number of real_quota_* cases and when the run finished.
Those cases need a filesystem mounted with project quotas, which neither gate.yml nor
the delegated lane has. This workflow does not run them: it refuses to publish without
the recorded line above, and that line must name this exact commit and the real-quota
case count this source declares.
Chart lane
| local record | f2fd606b88a0b778970e8babe9a96eb600cd57b2 4 2026-10-29T20:15:29Z |
| command | cargo xtask chart-lane cluster --node-profiles |
| where | a workstation kind cluster whose nodes load the Localhost seccomp and AppArmor profiles, not this runner |
The fields are the commit, the number of chart-lane scenarios and when the run finished.
The hosted chart lane (see Kubernetes chart above) cannot start the execution-enabled
pod, so it reports those scenarios absent. The local run installs the node profiles,
starts that pod, runs a confined exec through it and passes every scenario the source
declares; this workflow refuses to publish a chart without the recorded line above, and
that line must name this exact commit and that scenario count.
Namespace lane
| recorded run | f2fd606b88a0b778970e8babe9a96eb600cd57b2 8 2026-10-29T20:30:45Z |
| command | cargo xtask namespace-lane observe |
| where | a workstation kind cluster the lane creates and deletes, not this runner |
The fields are the commit, the number of namespace-lane observations and when the run
finished. The kind cluster those observations need outlasts what a hosted check may
take, so this workflow does not run them: it refuses to publish without the recorded
line above, and that line must name this exact commit and the observation count this
source declares.
The namespace lane's static checks ran in CI on this commit, and .github/workflows/namespace-lane.yml concluded success for it: https://github.com/beyond10x/substrate/actions/runs/40943393621
Verify the signatures
All three image and bundle artifacts are signed keylessly through Sigstore, and so are
any executor image (see Executor image above), any chart (see Kubernetes chart above) and any SHA256SUMS (see Release binaries). Each certificate identity is this workflow at the ref that
performed the release, so a signature from any other workflow, ref or repository fails:
cosign verify \
--certificate-identity https://github.com/beyond10x/substrate/.github/workflows/release.yml@refs/tags/0.16.1 \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
ghcr.io/beyond10x/b10x-substrate-daemon@sha256:ab798921666cbbbcdbcc36da132b106dfcd7ee03bb7b0b5adcf7edbddc61ae88
cosign verify \
--certificate-identity https://github.com/beyond10x/substrate/.github/workflows/release.yml@refs/tags/0.16.1 \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
ghcr.io/beyond10x/b10x-substrate-wire@sha256:6f31a62628ae3e084134f4fe47900eaf2fc1932ced61c54ca9498f39b9c7e322
cosign verify \
--certificate-identity https://github.com/beyond10x/substrate/.github/workflows/release.yml@refs/tags/0.16.1 \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
ghcr.io/beyond10x/b10x-substrate-mcp@sha256:77342f97515579f1c5b12c9aa4b6429d9e23d0dd9fbce97932ac34cb6346959dWhat this release does not claim
- The published wire contract remains a development bundle.
ghcr.io/beyond10x/b10x-substrate-wire:0.25.0remains a development bundle; OCI publication,
digest pinning and a verified signature do not make it a stable contract. A
stable-contract decision is its own ADR under atlas ADR 0019
(architecture/adr/0019-substrate-contract-release-and-conformance.md). - The image's default posture is development, not hosted. Its
EXPOSE 8080and
VOLUMEdescribe the static-bearer TCP posture that design 06, section 1, marks
development_only. The binary also implements the production TLS/Identity profile,
but a hosted deployment must explicitly supply that profile's certificates, trust
roots and authority settings; the default container command does not do so. - The MCP image is local test tooling, not production ingress. It has no listener,
authentication or remote transport and is intended for an attached stdio harness with
--network=none. Its tool surface is not a stable contract independent of Substrate. - The binary is not bit-for-bit reproducible. The digest above is recorded;
reproducing it from source independently is a later milestone. - The daemon archive is not a confined host by itself. Running a confined command
still needs bubblewrap and a delegated cgroup v2 subtree on the host; without them the
daemon answersexec.sandbox-unavailable. No arm64 or macOS binary is published. - The delegated execution lane is not exercised by CI. A host without a delegated
cgroup v2 subtree answersexec.sandbox-unavailablerather than running unconfined.
This release records a local run of that lane (see Confinement lane above); recording
an operator's run is weaker evidence than a runner executing it, and is not described as
if CI had run it. - Kernel project-quota enforcement is not exercised by CI. This release records a
local run of the real project-quota lane (see Quota lane above), with the same
limits as the confinement record.