Evidence

Three different kinds of evidence stand behind this site, and they are not interchangeable. A measurement on a live kernel is the strongest; a model checked against the kernel source is weaker; an SMT proof about a hand-written model is weaker still. Each claim below says which kind it is.

Status as of 2026-09-11. Every live-kernel result from 2026-08-07 comes from one disposable virtual machine running a locally built binary. Nothing is deployed (ledger O-D3). A claim marked PROVEN means: measured on a live kernel, with the enforcement mode confirmed in the run's own output, and with a control that could have exposed a broken measurement.

1 · Measured on a live kernel

Linux 6.1, CONFIG_BPF_LSM=y, blocking mode, the 2026-08-07 build. Source of truth: the project's claim ledger. Nothing that is not in the ledger with a status is claimed here.

IDClaimStatus
D-01A process without a token (an autonomous process) cannot write a file.PROVEN
D-02The causal window is enforced: an expired token is worth nothing.PROVEN
D-03Every ordinary file-modifying operation reaches a hook — 16 of 17 operations mediated. The 17th, reading, was not, because the read guard was switched off in that run.PROVEN
D-04Network egress is mediated on the connectionless (UDP) path too.PROVEN
D-05There is a token source that works on a headless machine.PROVEN
D-06An application cannot issue itself a token.PROVEN
D-07The token request is authenticated: signature, anti-replay, caller identity, rate limit.PROVEN
D-08The operator can stop the protection without a reboot.PROVEN
D-09An unprivileged process cannot stop the protection.PROVEN
D-10Log-only mode forbids nothing.PROVEN
D-11A token is bound to the content being written (content hash).PLANNED
D-12A whitelist keyed on the process name (comm) can be bypassed with prctl(PR_SET_NAME).STATED
D-13Root can switch the protection off; it does not defend against root.STATED
D-14The results hold in a deployment.BLOCKED
D-15Process identity is bound to the executable file (inode + device), so a prctl(PR_SET_NAME) rename cannot borrow a whitelisted identity. Measured: the rename passes in name mode and is blocked in inode mode, while the real binary still writes.PROVEN
D-16TOCTOU (I5): with a live token the first write binds the inode; a pivot to a different inode is refused.PROVEN
D-17Multi-write: the bound inode may be written again with the same token.PROVEN
D-18op_class (I4): a WRITE-scoped token is refused on a NET-only axiom file; a NET-scoped token on the same file passes.PROVEN
D-19OP_BLOCK (I3): the protected file is refused even with a live token; the same token writes an unprotected file.PROVEN
D-20Fork inheritance (T07): a child with no token of its own writes via the parent's live token.PROVEN
D-21The whitelist is an op-class effect-scope, not a blanket exemption: a WRITE-scoped binary cannot open the network and a NET-scoped one cannot write, both without a token; OP_BLOCK overrides even an in-scope write.PROVEN

D-16–D-20 were measured on 2026-09-11 on the disposable VM in blocking mode, with a real token minted to the probe. What was measured is the effect — the write() allowed or refused — with two differential controls (the same file under a WRITE vs a NET token; the same token on an unprotected vs an OP_BLOCK file), so no result is explained by a missing token. The kernel's verdict names were not captured in that run, so this is one step short of the T08-level corroboration; a re-run that records them is still owed.

Open obstacles

The token-dependent paths — now measured with a real token

These paths need a process that holds a valid token. Until the authority existed (2026-08-07) no token was ever created on the test machines — the key-press source never attached — so every such test blocked for the trivial reason that there was no token. The project's 2026-08-07 summary withdrew those as evidence. On 2026-09-11 they were re-measured on the disposable VM in blocking mode, minting a real token to the probe (D-16 – D-20): the TOCTOU pivot, the multi-write to the bound inode, op_class against an axiom, an OP_BLOCK file with a live token, and fork inheritance all gave the expected allow/refuse. The discrimination is carried by two differential controls — the same file under a WRITE vs a NET token, and the same token on an unprotected vs an OP_BLOCK file — so none of the results is explained by a missing token.

What is still owed: that run captured the effect (the write() allowed or refused), not the kernel's verdict names, whose audit stream produced no journald lines. And content binding (D-11) remains planned — a token authorises writing a file, not writing a particular content.

Earlier results (2026-05-25, validation report v1.4)

On the long-running host, in blocking mode: T01 (a write with no token) was refused with EPERM, and T10 (writing the token map from user space) was refused even for root, because the map is frozen. The report also lists T03 (protected file) and T04 (op_class mismatch) as blocked; by the reasoning above those two results cannot tell a working rule from a missing token, and are not relied on here. T13 (root rewrites the axiom map) succeeded, as documented: a software layer does not stop root. The report's T08 result is superseded — see below.

When only a physical button can open the window

The design goal is that nothing outside the scope runs unless a person physically acts. Writing that rule down does not make it hold; where it is checked decides who can go around it. A check inside an agent can be bypassed by a child process the check never sees; a check in a service can be bypassed by not calling the service. A check in the kernel sees every process. Five conditions must hold together — two of them do not yet:

ConditionWhy it is neededToday
1 · Enforcement in the kernel, in blocking mode, on every write pathChild processes cannot slip past it.Measured on one disposable VM (D-01, D-03); not deployed (O-D3).
2 · The button is a signal no program can generateSynthetic input — a program driving the browser or the OS input, /dev/uinput, a readable shared secret — would let software press it. This site's own tests produce isTrusted clicks that way.Not met. The authority accepts a request signed with a shared secret protected by file permissions (O-D4); a hardware-key touch is not yet required.
3 · No whitelisted binary within reachA whitelisted process passes every guard without a token; a whitelisted interpreter extends that to every script.Depends on the operator's whitelist.
4 · No rootRoot can switch the layer off (D-13).Depends on the deployment.
5 · The press is bound to the specific actionOtherwise a person approves “something” and the process chooses what.Not met. Binding a token to the content written is planned (D-11); today it binds to the first file written.

With condition 2 met by a hardware key whose touch signs the specific request, and condition 5 by content binding, the rule becomes one that a process on the machine cannot go around. Against root, the check has to move lower still — a hypervisor or hardware.

2 · The emulator against the kernel source

The emulator on the main page is a model of dcc_core.bpf.c as built on 2026-08-07. It is checked in three ways:

This establishes that the model follows the source. It does not establish that the kernel behaves like the source says; that is what section 1 is for.

3 · The Z3 model

The check this site used to cite proved nothing

Until 2026-09-11 this page showed “6/6 invariants formally verified” and “isomorphism proven”. Each of the six checks added a rule of the form A implies B and then asked Z3 whether A and not B could hold. That combination is impossible for any A and B, so the check passes whatever the kernel does — with the error code set to a nonsensical value it still printed the same result. It has been withdrawn.

What replaces it

The write-path decision — the program on lsm/file_permission together with its axiom and token checks — is written out as one Z3 formula over all of its inputs, following the kernel source. Z3 proves 9 properties of it for every input, among them: an ordinary writer gets through only with a live token; an expired token never does; an OP_BLOCK file is refused to everyone but the loader, whitelist included; a second file with a bound token is always refused, even in log-only mode; every refusal is EPERM; and a whitelisted writer passes every other file without a token. Each property is also checked the other way: its premise can occur (it is not true merely because nothing satisfies it), and removing the one guard it depends on produces a counterexample.

The formula and the emulator are then run on the same 896 input combinations; they agree on all of them. Together with the conformance tests this is a chain — kernel source → emulator → formula → properties — but every link is a model. None of it is a measurement of the running kernel; section 1 is.

The invariants as they were published

Besides being unproven, several of the six published invariants said things the kernel does not do:

Invariant as published until 2026-09-11What the kernel doesStatus
I3 — a refused file access returns ENODEVEvery refusal returns EPERM. Masking a refusal as an absent device is planned, not built.WITHDRAWN
I4 — a refused connection returns ECONNREFUSEDEPERM, as above.WITHDRAWN
I6 — a token's op_class is checked at every LSM hookOnly on the write path, and only against a file that has an axiom entry. Connect, send, exec and read look at the token's age alone.CORRECTED
I1 — access requires a hardware key-press eventThat tracepoint does not exist on the 6.1 generic kernel; the measured build's token source is the authenticated authority (D-05 – D-07).CORRECTED
I2 — window 200 ms in the emulator, 500 ms in the kernel500 ms. The emulator now uses 500 ms too.CORRECTED
I5 — TOCTOU: a second file with a staged token is always refusedHolds, including in log-only mode.HOLDS

The earlier page also attributed these invariants to three BPF programs — dcc_token_validator, dcc_toctou_guard, dcc_scope_checker — that do not exist. The checks live in dcc_axiom_validator, dcc_network_guard and the other programs named on this site.

4 · Changes since the papers (2026-05-25)

5 · Limits

Kernel model: dcc_core.bpf.c, build 2026-08-07. Ledger statuses as of 2026-09-11. The implementation source is not public; the technical dossier is available under NDA — admin@metaspace.bio.