- overview/hashing/store-api/backends/gc/ops specs + README index, all draft status with YAML frontmatter and cross-referenced ADR/OQ - ADR-001: substrate posture (store layer alkcall-free = family conformance, not deviation) + ops placement decided (feature-gated module, no consumer-waited deferral) - ADR-002: canonical git-blob-sha-256 + key encoding — the declared wire-format ADR (one-way door) - ADR-003: backend contract, sqlite/fs/mem tiers, pure-function dispatch, no migration, unknown-length buffering semantics pinned - ADR-004: exactly two production backends; manifest/path-tree layers are consumer-side (the corrected two-vs-three-backends framing) - ADR-005: pooled CAS, three liveness sources, delete windows with pin-before-publish + delete-time arbitration (race closed), no ambient scheduling - ADR-006: whole-blob verification; chunk-tree encodings excluded by scoping, not deferred on a paused consumer - open-questions.md: OQ-BL-01..06 resolved with ADR cross-refs; OQ-07 /08 externally-owned, OQ-09 deferred(scope) with SDD tracker task - AGENTS.md: status updated to Phase 1, gix-odb path corrected Verification: cargo test / clippy -D warnings / fmt --check clean
status, last_updated
| status | last_updated |
|---|---|
| draft | 2026-10-01 |
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; three questions
remain parked — OQ-07/OQ-08 externally-owned (alkgit seam mapping,
alkfs intake; carried for visibility, gating nothing here) and OQ-09
(ops namespace-visibility default, deferred(scope) until the first
embedded ops deployment). 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.
Lifecycle
Spec docs: draft → reviewed → stable → deprecated. A doc moves
reviewed when every open question it references resolves and an
architecture review pass clears it; 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.