.spec · reference · §9–§14
Registries.
Every variation point in LimniFS is a registry, never a match arm in core
code. This is the OCP backbone: adding a new algorithm, locator, classifier, or feature
is a row in a data file, not a code change.
§9 — Registry format
Every registry is a single TOML data file under registries/<name>.toml.
Each row has: id (numeric, stable, never reused), mnemonic
(kebab-case string), reference (RFC/paper), status (standard
/ experimental / deprecated), params (algorithm-specific), and a human
description.
§10 — AEAD registry
Authenticated encryption algorithms. 0x01 XChaCha20-Poly1305 is mandatory baseline.
| ID | Algorithm | Status |
|---|---|---|
0x00 | (none) | plaintext — no AEAD |
0x01 | XChaCha20-Poly1305 | standard (mandatory) |
0x02 | AES-128-OCB | standard |
0x03 | AES-256-GCM | standard |
0x04 | Ascon-128a | standard (embedded) |
§11 — Codec registry
Compression / transformation codecs. 0x00 store and 0x01 lz4 are mandatory for v0.1 conformance.
| ID | Codec | Status |
|---|---|---|
0x00 | store | standard (mandatory) — identity, no transform |
0x01 | lz4 | standard (mandatory) |
0x02 | zstd | standard |
0x03 | lzma | experimental |
0x04 | brotli | experimental |
§12 — Locator scheme registry
Where slabs live. file: is mandatory for v0.1 conformance; others are optional.
| Scheme | Status | Notes |
|---|---|---|
file: | standard (mandatory) | local filesystem; no range streaming |
http: / https: | standard | range requests |
s3: | standard | multipart + conditional PUT |
ipfs: | standard | CAR interop; multihash-compatible |
limni-p2p: | experimental | peer-to-peer |
§13 — Classifier class registry (Seine)
Drops are classified for codec selection. 0x00 binary is the fallback.
| ID | Class | Detection rule |
|---|---|---|
0x00 | binary (fallback) | entropy8 < 7.99 AND not sparse |
0x01 | already-compressed | magic ∈ {gzip, xz, zstd, …} OR entropy8 ≥ 7.99 |
0x02 | sparse | nul_ratio ≥ 0.99 over full drop |
0x03 | text/code | printable_ratio ≥ 0.95 AND nul_ratio ≈ 0 |
0x04 | media | magic ∈ {wav, flac, raw image, …} |
§14 — Feature-flag registry
Negotiates post-version capabilities. Required-flag-unknown ⇒
UnsupportedFeature(flag); optional-flag-unknown ⇒ ignore. ID ranges:
0x0000 reserved; 0x0001–0x00FF standard;
0x0100–0x01FF experimental; 0x0200–0xFFFF reserved.
| Flag | ID | Status | Reference |
|---|---|---|---|
| EC | 0x0001 | standard / optional | §16 |
| DMS | 0x0002 | standard / optional | §15 |
file: locator | 0x0010 | standard / optional | §12 |
http: / https: locator | 0x0011 / 0x0012 | standard / optional | §12 |
s3: / ipfs: locator | 0x0013 / 0x0014 | standard / optional | §12 |
zstd / lzma / brotli codec | 0x0020 / 0x0021 / 0x0022 | standard / experimental / experimental | §11 |
solid-blocks-v2 | 0x0100 | experimental / optional | §20.1 (deferred) |
rename-ops | 0x0101 | experimental / optional | §20.2 (deferred) |
dms-time-lock | 0x0102 | experimental / optional | §21.2 (deferred) |
.worked-example
Adding a new AEAD “Ascon-128” with id 0x05 requires only:
one new row in registries/aead.toml; one regenerated Rust binding in
limnifs-format. The 05-crypto crate’s registry module picks
up the new algorithm at link time. Zero consumer code changes.