Status: draft, v0.1. AI-first, mesh-native. Breakende changes tot we het naar v1.0 vrijgeven.
1. Doel
Twee complementaire formaten voor data op de AiFER quantum-mesh:
.aif (capsule) |
.aifp (packet) |
|
|---|---|---|
| Levensduur | durable (Spine + Walrus-store) | ephemeral (mesh wire) |
| Content-id | BLAKE3 (32B), hex | sequence + origin |
| Signed | Ed25519 over CID | nee (transport layer auth) |
| Compressie | gzip (v0.1) → Zstd-dict (v0.2) | gzip-light |
| Transport | IndexedDB / Walrus | Trystero / WebRTC |
| Wire-encoding | CBOR | CBOR |
2. .aif Capsule
Envelope (CBOR-encoded):
{
cid: string, // hex(blake3(cbor(capsule)))
capsule: {
magic: "aif1",
kind: "note" | "post" | "message" | "profile" | "listing" | "capsule" | "checkpoint",
schema: number, // payload-schema versie binnen kind
createdAt: string, // ISO-8601
author: string, // hex(ed25519 pubkey, 32B)
parent?: string, // optional vorige CID (edit-chain)
compression: "none" | "gzip",
payload: bytes // CBOR-encoded payload, optioneel gzipped
},
sig: string // hex(ed25519_sign(cidBytes, authorPriv))
}
Verificatie
- Bereken
cid' = blake3(cbor(capsule))→ moet gelijk zijn aanenvelope.cid. ed25519_verify(sig, cid', author)→ true.- (Optioneel) decompress + cbor-decode
payload.
3. .aifp Packet
{
magic: "aifp",
seq: number, // monotonic per origin sessie
from: string, // 8-byte hex nodeId (== ferMesh nodeId)
kind: "delta" | "ping" | "ack" | "bloom" | "want",
payload: bytes,
ref?: string // optionele CID waarop deze delta voortbouwt
}
Geen handtekening — auth gebeurt op de transport layer (Trystero room password in v0.2, X3DH-achtig handshake in v1.0).
4. Data-besparing — geplande quantum-tech roadmap
| v0.1 (nu) | v0.2 | v1.0 | |
|---|---|---|---|
| Compressie | gzip via CompressionStream | Zstd + per-domein shared dictionary | Adaptive: AI kiest dict per peer-paar |
| Dedup | BLAKE3 content-id | Walrus erasure-coded chunks | Reed-Solomon over peer-set |
| Sync | volledige lijst-uitwisseling | Bloom-filter diff | Quantum-inspired probabilistic sync (peers wisselen signatures over hun set uit) |
| Samenvatten | n.v.t. | AI rolt 1000 messages op tot 1 .aif checkpoint |
AI extraheert semantische indexen, originelen mogen weg |
5. Identity
Node-keypair (Ed25519) wordt gegenereerd op eerste app-load en in
localStorage.aifer:identity:v1 opgeslagen. v0.2 verhuist naar IndexedDB +
PBKDF2-wrapped seed; v1.0 voegt zkLogin-derivatie toe (Sui-style).
6. Routing in de chain
.aifvan kindnote,message,post→ Lattice (FAST) voor directe finality, periodieke roll-up naar Spine..aifvan kindlisting,profile,checkpoint→ Spine (CANON) direct, want waardevol of identity-kritisch..aifpblijft altijd op de mesh; wordt nooit gepersisteerd voor langer dan één checkpoint-ronde.
7. Compatibiliteit & forward versions
magicvelden zijn versie-gestuurd:aif1,aif2. Decoders MOETEN onbekendemagicmetkind: "unknown"markeren en doorgeven, niet droppen.- Onbekende velden in
capsuleMOETEN behouden blijven (CBOR roundtrip).
8. Referentie-implementatie
src/lib/aif/ — codec.ts (encode/decode/sign/verify), store.ts
(IndexedDB), types.ts (shared types). Eerste consumer: Notes app
(src/routes/_authenticated/apps.notes.tsx).