CUBELinux · The Builds to Date

Build record · 2026-09-23 · kernel 6.19.3-cubelinux0.7+ · newest build #85, booted on the workhorse · follows A Coordinate-Addressed OS
the store lives in the kernel a coordinate is an address a region is a seek 206 tests · 0 failures

In this document

Abstract

This is the running record of the CUBELinux builds: what the system is, what each build added, what the gates proved, and what is still ahead. The first whitepaper documents the design and is left untouched as that design record; this document records the builds, and it is written to be read on its own.

The store lives in the kernel. A coordinate is no longer only a way to name a record but a way to reach one — a lookup is a search over arithmetic addresses. A region is a way to query one: a box is found by seeking to the foot of its key span and reading forward. And as of today the whole path works on the metal: this machine boots CUBELinux, the kernel serves the store, writes are durable, listings return the store's records, and the log that makes writes cheap is now folded on a schedule instead of by hand.

Every number below is measured by a gate, by the test suite, or by a command whose output is quoted. Where something is not proven, it says so.

1. What CUBELinux is now

CUBELinux is a coordinate-addressed operating system. A coordinate is (space, point) — a 32-byte space selector and a 192-bit key produced by a space-filling curve (Morton by default) over three 64-bit axes. Records live at coordinates, not behind names; the space is a hard partition, so cross-space access is structurally impossible from a query. The store is in the kernel, the interface is cube(2), and everything above it is written against that interface — a name, a path, or a mount is a view at the edge, not the substrate.

Today that is a running system rather than a design:

2. Milestones reached

Dated, because a milestone is a thing that happened on a day:

whenmilestonehow it is known
2026-09-20/21The store moves into the kernel and the live store is converted in place — folded to the addressed format, sealed, every record and value preserved byte for byte.the store's digest before and after: same fnv1a64, 69,638 records
2026-09-21A region becomes a query: CUBE_OP_RANGE seeks a box's key span instead of scanning the space.verify-range, against userspace, over a box with a trap record inside the span and outside the box
2026-09-22The class mask travels with the record: format v4 widens the index entry, and CUBE_OP_FLAG_SCAN retrieves by class.verify-flag-scan, 18 matched records, both layouts, diffed against userspace
2026-09-23The kernel serves the live store on the metal. A listing walks the box's own 96 MiB sealed v4 store through cube(2) — 12 spaces — and every record userspace can see in the image is present in the kernel's answer.verify-enum-live, run on this machine, PASS
2026-09-23The walk terminates. A defect that made every enumeration re-serve the space forever — and took the front-end to 6.4 GiB twice, to the OOM killer — is fixed at its cause and bounded in the client. §8 names it.the walk ends on the contract's own rule: a cursor that stops moving; the front-end's resident size stays flat at 3–4 MB
2026-09-23The log folds on a schedule. cube-fold plus a daily timer; the operation no longer waits on a person.by hand: log 49,280 bytes → 0, active_slot 0 → 1, store sound afterwards
2026-09-23No red gates remain. The previous record carried one — verify-efi-boot — and re-running it is what retired the claim: the boot chain the box uses passes.verify-efi-boot, pass
2026-09-23The install gate and the way back are honest. The installer keeps a copy of the release it replaces instead of relying on a hand-made convention, and the preflight reads the boot entry rather than the running kernel.the preflight that refused this install now reports 17 of 17 and READY

3. The build line

The builds that changed the system's shape, in order:

buildwhat it changedhow it was checked
#49format v3 — the image carries its own addresses: a space table, a fixed-stride index, values in index order.the live store folded to v3 with the digest unchanged
#50the fold fixed on the box; the live store converted in place, sealed.gates run on the box, store walked both ways
#52the kernel can author its own boot record — one record in a reserved space, at the first write of a boot.verify-boot-record, the record read back three ways
#53the addressing primitives move into one shared file, and the driver uses it — no second copy of the key to drift from.verify-enum, verify-syscall
#55CUBE_OP_RANGE — a region is a seek: the box's key span, binary-searched and read forward.verify-range, against userspace
format v4 — a 16-bit class mask in both the index entry and the log entry, so a record's classification travels with it and survives a fold. Now the live store's format: the fold wrote it.verify-flag-scan, through both layouts, against userspace
CUBE_OP_FLAG_SCAN — classify at write time, retrieve by class later. The scan names a mask, a mode (any/all) and a scope (one space, or every space).verify-flag-scan — 18 matched records diffed line for line against userspace
one frame for every walk — get, enum, range and flag scan all return the class mask beside the key and value, so nothing has to be re-read to learn what a record is.verify-enum, verify-syscall, verify-flag-scan
#79the walk skips what the cursor has already returned. Every enumeration had been re-serving its space from the first record, so the cursor—the walk's only end signal—never stopped moving. Fixed in the kernel; bounded in the client.verify-enum-live on the box, PASS; verify-enum, verify-enum-cost, verify-frontend, verify-flag-scan, verify-file-store, all pass

4. What it does

Stated as capability, so it can be checked against the machine rather than believed:

5. The store and its interface

control block   two copies, 0x0000 and 0x0800   magic, slot size, active slot, generation
image slot      ×2 (the fold writes the idle one, then flips)
[header 46]                       magic, version, curve, extents, counts
[space table: space_count × 48]   space | first index | records
[index: record_count × 40 (v3) / 42 (v4)]   key | [flags] | value offset | value length
[values: packed, in index order]
log region                        the unfolded writes, drained by a fold

The index is fixed-size and sorted by key, so a reader computes a record's place as index_off + i × INDEX_ENTRY — a coordinate is an address, exactly as claimed. The format is described once, in drivers/cube/cube_format.rs, compiled by the kernel and included by userspace; two descriptions of one format is what once shipped an hour of unsupported-version.

A fold is safe to interrupt, and that is a property of the layout rather than a hope: the image lives in two slots, a fold writes the slot that is not active and then points the control block at it. Observed on this store: active_slot 0 → 1 with image_off 4096 → 25165824, and the log went from 49,280 bytes to 0.

Through cube(2) the operations are the verbs the design always named: PUT, GET, DEL, SYNC (fold), ENUM and SPACES (the bounded cursor walks), RANGE (the region seek) and FLAG_SCAN (by class). Each argument block is versioned by its own size field, so the interface grows by gaining a block rather than by being replaced — the coordinate block is 88 bytes, the walk's own is 64, and the kernel routes on the size it is given.

6. A region is a seek

The operation the address existed for is the region query — the records of a space inside a box — and it landed as a seek rather than a filter.

The key fact is about the curve, not the query:

Monotonicity. If p ≤ q on every axis, then key(p) ≤ key(q).

Under it, a box needs no decomposition at all: its two corner keys bound every key inside it, so the index is binary-searched for the foot of that span and read forward to its head — O(log n + span) instead of O(records). Every candidate is then decoded and tested for membership, because a span is a bound, not the set: keys of points outside the box also fall inside it, and returning them would be wrong.

Monotonicity belongs to a curve, not to the trait. Morton and RowMajor have it; Hilbert does not — it transposes and rotates the axes, so its corner keys say nothing about the keys between them, and seeking on them returns wrong answers. The store gates the seek on the curve, and a curve must opt in; it cannot inherit a bound by accident.

Measured over a 32,768-record space, asking 512-record questions:

curveregionentries examinedrecords returnedover-coverage
Mortonaligned 8³ at the origin5125121.00×
Mortonthe same 512 points, slid to (5,5,5)3,5785126.99×
Hilbertaligned 8³ at the origin32,76851264.00×

The 1.00× is exactness worth naming — for an aligned cube at the origin the span is the box's keys. The 6.99× is the honest cost of a bound: an unaligned box's span covers keys of points outside it, and those are examined and rejected. The 64.00× is the gate working — Hilbert has no span, so it walks.

The gate kernel/verify-range.sh boots the kernel and diffs its answer against userspace's over an unaligned box holding a deliberate trap — a record at (2,7,7), outside the box but inside the span — and the walk is correct only if it examines that record and rejects it.

7. What the gates prove

The gate wall, and what each gate proves. The rows marked today were run on 2026-09-23 — the cost, file-store and syscall gates last against build #85, and the box-side rows against whichever kernel was running when they were taken:

claimgateresult
the box's own store, walked through cube(2)verify-enum-livepass — today, on this machine
the walk answers in the kernelverify-enumpass — today
a walk costs what it returns (1.1× across a 40× store)verify-enum-costpass — today
a client, through the front-endverify-frontendpass — today
a class mask travels with the frameverify-flag-scanpass — today
a store that is a FILE, not a deviceverify-file-storepass — today
a region is a seek, not a filterverify-rangepass
cube(2) is the same storeverify-syscallpass
a fold writes what userspace holdsverify-kernel-checkpointpass
acknowledged writes survive a killverify-kernel-appendpass
a torn log entry is discardedverify-torn-tailpass
the kernel records its own bootverify-boot-recordpass
a sealed record is ciphertextverify-encryption + sealed-readpass
the kill switch, against a throwaway vaultverify-kill-switchpass
the boot chain the box usesverify-efi-bootpass — today; it was the one red gate in the previous record, and re-running it is what retired the claim

The board names 24 gates; the seven above marked today are the ones whose subject this week's work touched, and running those is the rule rather than sweeping the whole wall. The rest last passed with their subjects unchanged. The workspace suite — the crate tests that underpin all of the above — is 206 passed, 0 failed.

8. Defects the gates caught

Named, because each was found only by running the real thing, and a record that shows only the green is a ledger rather than a record:

9. What the future holds

Said plainly, and separated into what is next, what is a decision, and what is not claimed:

Next

Decisions, not open items

Not claimed

10. Checking this record yourself

Every claim above has a command behind it. On the machine that serves this site's store:

cube-image digest /var/lib/cubelinux/store.img    # version, records, errors
cube-image store-info /var/lib/cubelinux/store.img # generation, active slot, log used
kernel/run-all-gates.sh verify-enum-live.sh        # the box's own store, walked
cargo test --workspace --release                   # the workspace suite

The source is public: the tree, the database work and the kernel are three repositories under cubelinux.com/git, all of them readable anonymously — see the terms. The kernel repository is where cube(2) and the store live; the build line above names the commits that changed its shape.

How to read this document. It records a state, not an intention: the milestones are dated, the numbers are quoted from commands, and the sections on what is ahead name what is not done. If a claim here is not backed by a gate, a test, or a command whose output is shown, treat it as unproven — that is the standard this record is written to.