Files
alkblobs/docs/architecture
glm-5.3-flash 1af9399900 docs(architecture): OQ-10 — postgres as the second shipped kv engine, a standing offer on a deployment trigger
Records the two-engine story the POC #5/#6 round established, in the
terms this crate's boundary uses (engine, not backend; trait contract
as the admission gate):

- OQ-10 (externally-owned standing offer): open the postgres-kv ADR
  when a multi-tenant replicator deployment materializes. Trigger is
  topology, not throughput — cross-machine write access to one pool
  (throughput pressure / sqlite's flatline is the early warning).
  Names the trigger-time work: PgKv impl + engine-posture deltas
  (synchronous_commit, pooling/prepared-statement discipline,
  autovacuum, ~40x storage overhead) + the sweep-safety proof
  (vacuum-stable list() cursor, exact-count sweep tests). Sequenced:
  sqlite stays Phase 1 mainline; evidence base is done and waiting.
- poc-postgres-kv-findings.md: engine deployment posture section —
  the three use cases (self-hosted git serving, p2p replicator nodes,
  agent-workspace pools) mapped onto the measured curves; per-node
  choice as the form of the fork; honker parity stack named for the
  pg side (LISTEN/NOTIFY + pgboss-rs, deployment layer).

No code changes; engine work parallelizes against the fixed contract.
2026-10-02 18:46:40 +00:00
..

status, last_updated
status last_updated
draft 2026-10-02

alkblobs — Architecture

Current State

Phase 1 (Architecture). Phase 0 (Exploration) converged — see docs/research/phase-0.md for the vision, the evidence trail, and the POC register (all POCs passed or were absorbed; POC code lives in standalone crates (/workspace/alkblobs-trait-poc, /workspace/alkblobs-largeblob-poc); findings live in docs/research/). No implementation exists yet (src/lib.rs is a placeholder).

The converged Phase 0 posture has been promoted into the specs and ADRs below. Two framing corrections from the convergence review are captured there — not inherited as hedges:

  • ADR-001 makes the substrate posture explicit: the store layer carries no alkcall dependency by design — which is conformance to the family pattern, not deviation from it — and the ops surface rides alkcall, feature-gated.
  • ADR-004 fixes the "two backends" framing: the crate ships exactly two backends (kv small / fs large — both required by measured scale economics); the path→hash mapping layer (the alkfs/alknet "vfs" shape) is a consumer-layer concern and must never become a third backend.

Architecture Documents

Document Scope Status
overview.md Purpose, consumers, layer map, dependency posture draft
hashing-and-keys.md Canonical hash, key encoding (the one-way door) draft
store-api.md Store facade: put/get/stat/range/pin/batch/sweep surface, errors, invariants draft
backends-and-dispatch.md Backend trait contract, shipped backends, size-threshold dispatch draft
gc-and-namespaces.md Pooled CAS, liveness seams, mark-and-sweep, delete windows draft
ops-surface.md alkcall-backed have/need + fetch/put ops, ACL mapping draft
open-questions.md Centralized OQ tracker (incl. promoted Phase 0 register) draft

Decision Records

ADR Decision Status
001 Substrate posture & ops-surface placement (conformance, not deviation) Accepted
002 Canonical hash + key encoding (the wire-format ADR; precedes any consumer) Accepted
003 Backend contract, shipped backends, dispatch policy Accepted
004 Exactly two backends; manifest layers stay above Accepted
005 Pooled CAS, liveness seams, mark-and-sweep, delete windows Accepted
006 Whole-blob verification; transfer encoding excluded by scoping Accepted

Open Questions

Tracked in open-questions.md. The Phase 0 register (OQ-BL-01..06) is promoted there with its resolutions; two questions remain parked — OQ-07/OQ-08 externally-owned (alkgit seam mapping, alkfs intake; carried for visibility, gating nothing here). OQ-09 (namespace-visibility default) resolved closed-by-default. Deferral policy (the "Schrödinger's code" rule): a decision this crate needs before shipping may not be deferred on a dependency that is itself waiting for this crate to exist. Two parking kinds remain legitimate: deferred(scope) on a deciding fact that exists independently of this crate, and externally-owned questions (how a consumer maps onto this crate) that gate no decision here — full definitions in the header of open-questions.md. A corollary worth restating, because it recurs: a fact this crate must create (its own first deployment, its own first consumer) is never a deciding input — decisions stand on evidence in hand, and future needs reopen via named requirements, not via waiting.

Lifecycle

Spec docs: draft → reviewed → stable → deprecated. A doc moves reviewed when every crate-owned open question it references resolves and an architecture review pass clears it — externally-owned OQs (OQ-07/OQ-08) gate nothing here by definition and do not block the lifecycle; their outcomes arrive through their owners' processes. stable when implementation verifies against it; deprecated when superseded (kept for reference). ADRs use a separate status set (Accepted | Proposed | Deprecated | Superseded), defined per ADR file. This tree is in draft pending the first architecture review cycle.