Aligns the v1 architecture with the longer-horizon platform thesis so we can start implementation without the schema-level inconsistencies the prior review surfaced. ADRs (docs/adr/0001..0006): content-addressed dual-digest storage, append-only event log as source of truth, canonical CBOR manifests, control/data-plane contract, v1 tech stack (Python 3.12 / uv / FastAPI / SQLAlchemy Core + asyncpg / Alembic / cbor2 / blake3 / ruff / mypy / pytest / typer), OCI compatibility kept reachable. Architecture blueprint rewritten to v2: library-first (ffmpeg-shaped) module layout, materialised-view data model over the event log, upload-session and event-stream endpoints pinned, retrieval tiering promoted into the schema. Roadmap added (docs/ROADMAP.md) with three phases. WP-0001 rewritten as the Foundation plan (scaffold + kernels + local FS + minimal app). WP-0002..0005 created carrying the existing state_hub_task_ids forward semantically: ingestion API (T004), retention lifecycle (T005), S3-compatible backend (T006), guide-board pilot (T007). T001/T002/T003/T008 remain in WP-0001 with refined acceptance. README and AGENTS.md refreshed to reflect the new repo shape. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4.6 KiB
Roadmap
Status: living document Updated: 2026-05-15
The roadmap sequences artifact-store from "no code" to a credible
production v1 to the longer-horizon platform shape recorded in
docs/PLATFORM-AMBITION.md. Each row is a self-contained workplan with
its own acceptance criteria; nothing here is a binding milestone.
The sequencing principle is library-first (ffmpeg-shaped): foundational kernels and contracts before any consumer code. The HTTP server and CLI exist only after the core library can be exercised end-to-end against a local filesystem backend.
Phase 0 — Cleanup (done 2026-05-15)
- ADR-0001 through ADR-0006 accepted.
- Architecture blueprint rewritten to v2.
- Platform ambition and assembly experiment documented.
- Workplans re-sequenced.
Phase 1 — Foundation and pilot (v0.1)
Goal: ingest a real guide-board run end-to-end, against a local filesystem backend, with retention applied and events logged.
| ID | Title | Carries existing task IDs | Notes |
|---|---|---|---|
| WP-0001 | Foundation: scaffold, core kernels, local FS backend | T001, T002, T003, T008 | All of the library-shaped modules; no HTTP API yet beyond /health. |
| WP-0002 | Ingestion API + manifest surface | T004 | The HTTP API. Builds on WP-0001's library. |
| WP-0003 | Retention lifecycle | T005 | Retention engine, extensions, holds, deletion eligibility. |
| WP-0004 | S3-compatible backend (Ceph RGW target) | T006 | Second concrete adapter. |
| WP-0005 | Guide-board pilot ingestion | T007 | First real producer wired up. |
Exit criteria for v0.1: WP-0001 through WP-0005 done; a guide-board CMIS run round-trips through artifact-store with manifest, retention, and Statehub linkage; backend swappable between local FS and an S3-compatible store.
Phase 2 — Production hardening (v0.2 – v0.3)
| ID | Title | Notes |
|---|---|---|
| WP-0006 | Garbage collection + reference counting | Required by ADR-0001 global dedup. Mark-eligible already lands in WP-0003; this workplan does the byte-deletion pass. |
| WP-0007 | Resumable / chunked upload implementation | The wire shape lands in WP-0002; this workplan makes the implementation actually streaming. |
| WP-0008 | Auth, multi-tenancy, quota | OIDC integration; tenant namespacing; per-tenant rate limit and storage quota. |
| WP-0009 | Observability: metrics, tracing, structured logs | OpenTelemetry SDK; latency / throughput SLOs published. |
| WP-0010 | Event stream out (CDC) | NATS or Kafka topic of registry events; long-poll /events becomes a fallback. |
| WP-0011 | Signed manifests | Sigstore / cosign integration; signature recorded alongside manifest digest. |
Exit criteria for v0.3: a deployment is operatable by humans without internal knowledge; SLOs are measurable; access is authenticated; artifacts can be signed and verified.
Phase 3 — Platform features (v0.4 – v1.0)
| ID | Title | Notes |
|---|---|---|
| WP-0012 | OCI artifact /v2/ endpoint |
Implements OCI Distribution Spec on top of the same storage (ADR-0006). |
| WP-0013 | Content-defined chunking + global dedup at chunk level | FastCDC; chunked storage. Builds toward docs/ASSEMBLY-EXPERIMENT.md. |
| WP-0014 | Rust data plane extraction | Move dataplane.inproc to dataplane.remote (ADR-0004). |
| WP-0015 | WASM plugin host | Extension surface for indexers, redactors, scorecard generators. |
| WP-0016 | Cold-tier adapters | Glacier / Tape / IA classes; restore flow. |
| WP-0017 | Federation and replication | Signed manifest exchange between artifact-store instances. |
Exit criteria for v1.0: artifact-store is embeddable as a library, runs as a single-binary CLI, runs as a server, speaks OCI, federates between instances, and is fast enough to be a credible commercial substrate.
What this roadmap deliberately does NOT promise
- Specific calendar dates. Cadence is set by sessions, not quarters.
- A UI. UIs are out-of-tree (see
docs/PLATFORM-AMBITION.md). - ML-specific or container-specific features. Use OCI compatibility.
- A storage backend for every cloud. Adapters are community surface.
How to add a workplan
- Pick the next free
ARTIFACT-STORE-WP-NNNNnumber. - Create
workplans/ARTIFACT-STORE-WP-NNNN-<slug>.mdwith the frontmatter and task block format inAGENTS.md. - Cite the ADRs the workplan depends on in its
## Constraintssection. - Append a row to the appropriate phase table in this file.
- Notify the custodian operator to run
make fix-consistency REPO=artifact-store.
How to retire a workplan
- Set
status: donein the frontmatter when all tasks aredone. - Move the file to
workplans/archived/YYMMDD-ARTIFACT-STORE-WP-NNNN-<slug>.md. - Update this roadmap to reflect the new state.