AOCI-CODE v0.1.0-rc8
Pre-release
Pre-release
·
68 commits
to main
since this release
AOCI-CODE v0.1.0-rc8 is built from a629e78ff0c327e3d96119f835d3631eca48c89d.
- Probe the atomic no-replace primitive instead of assuming it. Publishing a
staged file into a name that must not already exist usedrenameat2with
RENAME_NOREPLACEunconditionally on Linux, but the flag is a filesystem
capability rather than a kernel one: WSL's DrvFs answersEINVAL, so every
aoci initagainst a path under/mnt/cfailed with
init_volume_create_failed aoci.meta.txtwhile the identical repository
initialized on ext4. A Windows checkout was reachable from WSL for every other
purpose and not for this one. The flag is now tried first and, where a
filesystem refuses it outright, the same guarantee is built fromlinkplus
unlink:linkreportsEEXISTfor an occupied name and never replaces it,
so a refusal still leaves the existing bytes untouched. Being over-broad about
which errors select the fallback is safe by construction — the fallback
carries the identical guarantee — whileEEXISTand the other real answers
are always propagated. Verified on DrvFs and ext4, and an opt-in test takes a
directory so a filesystem no CI runner can reach is still checkable. - Publish a staged file on exFAT under macOS. The Darwin no-replace primitive,
renamex_npwithRENAME_EXCL, was assumed to answer on every filesystem,
and a probe run on two macOS runners showed it does not: exFAT returns
ENOTSUP, soaoci initcould not create a Volume on the one filesystem
macOS and Windows share on an external drive. It is the shape DrvFs produced
on Linux, found this time by measuring rather than by a report. The Linux
repair does not port — its fallback islinkplusunlink, and the
filesystems that refuse the flag are the msdos family, which has no hard
links — so Darwin reserves the name withO_CREAT|O_EXCL, which the kernel
either grants or answersEEXIST, and then fills it. Every failure after
the create removes the target, and both callers verify the published digest
instead of trusting the write. One trap is recorded in the source: on Darwin
ENOTSUPandEOPNOTSUPPare distinct errnos, unlike Linux, and
classifying only the second would have left the fix inert while looking
complete. The probe now measures exFAT, FAT32, and HFS+ as separate subtests
on disk images it creates itself, and a filesystem it cannot measure fails
instead of passing quietly. - Prove the upgrade axis. All three black-box suites build every fixture with
the binary under test, so a persisted preimage that changed between
releases is invisible to them by construction — two such defects reached
rc6 and rc7 and were caught by hand.scripts/blackbox/mcp_upgrade.py
downloads every release in this changelog, verifies it against its own
SHA256SUMS, builds and authors a repository toalignedwith it, and then
requires the binary under test to govern that repository without moving an
identity, demanding a Scope Change, or rewriting a formal asset: 14 checks
per released version over two configuration shapes. The second shape is the
point. Every releasedaoci initwrites an explicitcognition_budget
block, so a fixture built only byinitnever resolves the frozen
LegacyPolicyat all, and the suite stayed green against a deliberately
broken freeze;nobudgetstrips the block beforescan, reproducing every
repository created before the block existed, and only that shape turns red.
The suite runs on the nightly Full Confidence line because it needs Release
assets, and a download failure fails the run rather than skipping the
matrix. One exemption is deliberate: the newest changelog section may
precede its release by the one commit the cut takes, so a 404 for that
version alone is characterized rather than failed — the gate that must pass
is the one that creates the release. Any older missing release, any other
fetch error, and a matrix the exemption would empty still fail. - Fold current database items out of Maintain transport. Every Database
Cognition item in thecurrentstate carried its complete Entry text plus
evidence and binding hashes while feeding no decision: candidates are built
from the unbounded facts before the transport projection runs. A repository
with a 52-table domain that needed nothing paid twenty full Entries per
Maintain, and one 53 KB response was spilled to disk by its host. The
summary keeps the count, andaoci verify --jsonandaoci check --json
keep the full enumeration. The suites' host window drops with it from an
assumed 64 KiB to a measured 48 KiB: bisected on a real host, 49,429-byte
responses enter the model context and 51,916-byte responses arrive as a
2 KB preview of a file. The response above had passed the old gate and
died in production, which is the exact gap between assumption and
measurement. - Stop demoting delivered cognition to
invalidover a pending refresh. The
read path defaultedcognition_statetoinvalidand upgraded it only once
refresh_statussettled, so a receipt that had just passed a 10/10
Attestation readinvalidthe moment the working tree carried in-flight
edits — inviting a pointless Whole-Index redelivery instead of the Maintain
cycle the state was pointing at.invalidis now reserved for identity
breaks: no delivery in the session, or a receipt whose repository, service,
or index no longer matches. A reliable identity-matching receipt under a
pending refresh readsuncertain, which is what the refresh contract says
drift is. - Carry runnable
next_commandson terminal, blocked, and evidence-required
MCP results. The final Volumes Apply prescribed "Verify, Aggregate Check,
Guide" in prose — names that exist nowhere on the nine-tool surface — and a
blocked Maintain carried the bare token
explicit_orphan_remove_or_resolve_blockerwhile the command that clears
the block lived only in the CLI Guide; two hosts on two repositories stalled
on exactly that gap. The command suffixes now live once in the machine
contract, and the CLI Guide and MCP compose the identical spelling from
them. The prefix is the running server's own absolute, quoted executable,
becauseaociis whatever path the host's MCP configuration names and need
not be onPATH; when it cannot be resolved the field is omitted, since an
absent advisory beats a wrong command. Placeholders such as{agent}are
the Host's to fill. The field is additive and optional, and the scenario
suite executes every returned command as returned: Verify, Check, and Guide
exit 0 after the final Apply, and the acknowledge command clears the block
it was returned for. - Say what a raised budget does not buy, and why there is no staleness bypass.
The scale boundary stated a token ceiling and left the reader to infer that
raising it removes the limit. It does not: the budget bounds what may be
written, never what a model can receive, and a Whole-Index is delivered as a
chunk chain in which every round trip is a place a host compaction can void
the chain. A repository whose plan estimate runs to several hundred thousand
tokens has a role problem before it has a budget problem. The same guide now
records why a content-volatile file whose cognition never changes gets a
role change or a same-text resubmit rather than a per-file exemption from
staleness: the source binding is the property the write chain protects. - Make the release rehearsal run the release's own tooling.
release.ymlhad
moved to newercheckout,upload-artifact,download-artifact,
setup-go, andgoreleaser-actionversions whileci.yml,
full-confidence.yml, andrelease-rehearsal.ymlstayed on older ones;
every reference was correctly SHA-pinned with its version comment, so both
existing contract tests passed and nothing reported the divergence. The
rehearsal is the one that matters: it was packaging with older tooling than
the release it rehearsed, so a packaging difference between those versions
would clear the rehearsal and appear only in the tag-triggered signed run,
the one that cannot be cheaply retried. All three now matchrelease.yml
exactly, and a new contract test requires an action referenced by more than
one workflow to be pinned to one SHA, with no exceptions list. - Run the black-box gate when a black-box suite changes. Full Confidence's
push filter listed every internal package the suites exercise but not the
suites themselves, so a fix tomcp_scenarios.pyfor a Windows-only
attestation failure — section roots are written with forward slashes on
every platform while the fixture path arrives backslashed — shipped without
the gate that would prove it.scripts/blackbox/**joins the filter, and
the Windows run it triggered is the proof for the platform that failed.
The first public availability date for v0.1.0-rc8 is 2026-09-03.
See docs/install.md and docs/supply-chain.md for asset verification.