Runtime parity release. Brings the pinned Carbonyl runtime up to the current
v0.2.0-alpha.17 cut, fixes a pin split-brain that ran the QA-runner on a
7-week-old runtime, refreshes the Docker fallback to the maintained image, and
clears the third-party license attribution release-blocker.
Fixed
- Runtime pin split-brain —
.carbonyl-runtime-versiondeclared
runtime-tag=v0.2.0-alpha.17butruntime-hash=8f070d2720157bd0(the
alpha.5/6 M148 cut).carbonyl-agent installresolves via the tag, but the
qa-runner build and CI hash-consumers grepruntime-hashdirectly — so the
SDK and the qa-runner ran different runtimes, and the qa-runner's was
missing the alpha.13 input-FFI widening (right-click, key modifiers,
multi-byte input). Bumpedruntime-hashto099874f855c74a61(the alpha.17
runtime, headless + x11) in lockstep with the tag, and added a lockstep
invariant note so the two anchors can't silently drift again. (parity audit F1) - e2e prior-runtime leg was chronically failing — the
e2e.ymlmatrix's
regression leg pinnedruntime-dd69bef0ea4b2512, which upstream pruned
(carbonyl v0.2.0-alpha.10, only-latest-runtime policy), so the install 404'd.
Repinning to a durablev*tag then fails install-time version validation
(older carbonyl builds report a stale internal version string). Removed the
prior leg — a false-failure probe, not an SDK signal — leaving the meaningful
current-runtime leg (which passes). Redesign tracked in #127. - Rust
check.ymlclippy failure —rust:latestclippy rolled to 1.96 and
now flagscollapsible_matchon theparse_fixture.rsextension-parsing arms
under-D warnings. Collapsed the nestedif ext_data.len() >= 2bodies into
match guards (behavior-preserving — an unmatched guard falls to the_ => {}
no-op). Fixed the code rather than allowing the lint. - Flaky
test_handler_attached_only_once— the test counted every
logging.StreamHandleron thecarbonyl_agentlogger, but pytest's
LogCaptureHandlersubclassesStreamHandlerand leaks onto the logger under
the fuller CI test set ([dev,egress,cookies]+ hypothesis), so the count
flaked to 2. Reset the module's configure-once flag and strip leaked handlers
first, then count only the SDK's exact-type handler — measuring the real
attach-once behaviour independent of test ordering.
Changed
- Docker fallback now targets the maintained
ghcr.io/jmagly/carbonyl
runtime container (published upstream since carbonyl v0.2.0-alpha.10) instead
of the inactivefathyb/carbonylimage.browser.pypins it by digest
(ghcr.io/jmagly/carbonyl@sha256:26d990c3…); docstrings, README, CLAUDE.md,
and the SDLC design docs updated to match. The historical fathyb attribution
in the README acknowledgments is preserved. (parity audit F4a) - Third-party license audit now covers the full Rust workspace — resolves
the AGPL-wheel attribution release-blocker.scripts/gen-third-party-licenses.sh
generates over the workspace root (not justcarbonyl-fingerprint);
about.tomlaccepts the AGPL-compatible copyleft set (AGPL-3.0-onlyfor the
project's own crates,GPL-3.0forwreq-util— GPLv3 §13 makes it compatible
with the now-AGPL wheel — plusCDLA-Permissive-2.0for the Mozilla CA data);
THIRD_PARTY_LICENSES.txtregenerated (48 → ~198 crates, now including
wreq-util 2.2.6). A--checkstep is wired into.gitea/workflows/check.yml
to fail CI on attribution drift. (#99)
Added
- Multi-arch install-resolution test coverage — parametrized tests exercise
asset-name + download-URL construction and tag-over-hash preference for all
three consumer triples (linux-x86_64, linux-aarch64, macos-arm64) on the
x86_64 runner. Full multi-arch execution jobs remain gated on runner
availability (macos-arm64 runtime ships upstream since alpha.7; linux-aarch64
runtime pending upstream carbonyl#67/#116). (#98, agent-side) - Parity audit + release plan at
.aiwg/reports/carbonyl-parity-audit-2026-07-04.mdcovering the runtime pin,
trusted-input FFI gaps, distribution drift, and the outstanding backlog.
Docs
-
Code→docs reconciliation (doc-sync): README runtime-compat matrix + M148 badge
updated (dropped the removed prior-runtime CI claim, #127); ADR-003/SAD Docker
fallback documented as opt-in (CARBONYL_ALLOW_DOCKER) + digest-pinned; ADR-004
SHA256 "known gap" marked resolved; ADR-005 + pyproject license notes updated to
the AGPL/GPL-3.0-compatible posture (#99); release-runbook + ci-cd-scaffold
reconciled to CalVer and current CI. Audit:.aiwg/reports/doc-sync-audit-2026-07-04.md. -
GPG release-signature verification in
install.py(upstream added
per-asset GPG signatures in carbonyl alpha.15) is deferred to a tracked
follow-up. SHA-256 checksum verification remains in place. Signature
verification needs the maintainer's signing key pinned by fingerprint and a
real signed asset to validate the trust path end-to-end; it will ship once
that is designed and tested, rather than as unverified verification code.
(parity audit F4b)