Plan kanban — backend: runtime, database, API
Status board for every phase doc under docs/plan/. Focus: the backend — the runtime, the database engine, and the REST/.wo-language API. Frontend phases are parked, not deleted. Each phase file carries a matching status banner; this board is the index.
Statuses: ✅ done · 🔄 in progress · ⬜ not started · ⏸ parked (out of backend focus)
Board
Track 1 — Runtime foundations (dependency removal, kernel primitives)
| Status |
Phase |
Doc |
Notes |
| ✅ |
01 crate scaffolding |
done/01 |
15 crates |
| ✅ |
02 epoll event loop |
done/02 |
runtime/netpoll_epoll.rs |
| ✅ |
03 hand-rolled HTTP |
done/03 |
+ keep-alive & pipelining (follow-up under plan 09) |
| ✅ |
04 tokio/axum cutover |
done/04 |
deps now: anyhow, serde, serde_json, libc |
| ⬜ |
05 hand-rolled JSON |
05 |
removes serde/serde_json — next in this track |
| ⬜ |
06 bespoke error type |
06 |
removes anyhow |
| ⬜ |
07 inotify content watcher |
07 |
wo dev hot reload |
| ⬜ |
08 sendfile static assets |
08 |
needed by parked UI track too |
Track 2 — Concurrency & scale-out (plan 09) — 🔄 in progress
| Status |
Sub-phase |
Notes |
| ✅ |
09a thread-per-core |
runtime/scheduler.rs, SO_REUSEPORT, pinned wo-shard-<t> workers |
| ✅ |
09b sharded engine |
shard.rs bus; Arc<Mutex<Engine>> deleted; interleaved ids; fan-out lists |
| ✅ |
09c per-shard WAL |
wal.rs; ack-after-fsync; boot replay; meta shard guard |
| ✅ |
— keep-alive (follow-up) |
reads ×3.4 → 770k/s; C phase-C sequence |
| ✅ |
— io_uring group commit (follow-up) |
netpoll_io_uring.rs raw ring; 4.7× durable writes on real disk |
| ⬜ |
09d cross-shard subscriptions |
LIVE fan-out, one message per shard — pairs with Stage 3 |
| ⬜ |
09e cross-shard transactions (2PC) |
needed by fn checkout spanning shards |
| ⬜ |
09f observability & reshard |
per-shard metrics, WO_RESHARD |
All numbers + find-and-fix stories: 09-concurrency-scaleout.md shipped notes and the benchmark table.
Track 3 — Storage & durability (plans 10–12)
| Status |
Phase |
Doc |
Notes |
| ⬜ |
10 storage foundations |
10 |
scope reduced: WAL framing/fallocate landed via 09c; @table(name:, index:) surface + RAM secondary indexes landed via 13 follow-up |
| ⬜ |
11 WAL & recovery |
11 |
remaining: snapshots (.data), compaction, WAL rotation — replay core shipped in 09c |
| ⬜ |
12 engine disk cutover |
12 |
mmap arena engine (C phase B is the proving ground) |
Track 4 — Language & API (.wo on the wire) — 🔄 in progress
| Status |
Phase |
Doc |
Notes |
| ✅ |
13a class surface |
13 |
class parses, CRUD serves, spec amended |
| ✅ |
13b method execution |
13 |
POST /api/<t>/:id/<method>; row-scoped txn; one WalRec::Txn frame per call; abort → 409 rollback |
| ✅ |
— @table + indexed DML (follow-up) |
13 |
@table(name:, index:); engine secondary indexes + find_by; select Type{…} in methods; ?field=value REST filters |
| ⬜ |
13c LIVE pricing push |
13 |
Stage 3 scoped: subscription registry, WS at /api/<t>/live, replaces the 501 stub |
| ⬜ |
Stage 3 wire layer |
../runtime/database/04-client-api.md |
full subscription engine + wire protocol; 13c is its beachhead |
| ⬜ |
13e pricing at scale |
13 |
wires demo to 09; hot-row reads |
| ⬜ |
15a MCP core + tools |
15 |
JSON-RPC 2.0 on POST /mcp; catalog-generated tools; durable-ack gated; stateless |
| ⬜ |
15b MCP resources |
15 |
wo:// URIs, templates, cursors |
| ⬜ |
15c MCP SSE + sessions |
15 |
first streaming response in rt; Mcp-Session-Id; GET stream |
| ⬜ |
15d service mcp surface |
15 |
ServiceKind::Mcp; 13b methods become tools |
| ⬜ |
15e MCP live subscriptions |
15 |
resources/subscribe + Last-Event-ID replay — needs 13c + 09d |
Ecommerce sample status (verified 2026-06-13, api.rest 17/17 expected statuses pass): route wiring, empty lists, 405 for un-exposed ops, 404 for unregistered routes, 501 Stage-3 stubs — all exactly as documented. fn checkout, on startup seeding, and status-lifecycle triggers await 13b-style execution + 09e.
Track 5 — C proving ground — ✅ done (A–F)
859k reads/s, 618k durable commits/s; found the ack-ordering + fd-ABA bugs the Rust port then avoided. Optional phase G (splice wo-db C++ engine) remains an idea.
Track 6 — Frontend — ⏸ parked (out of backend focus)
| Status |
Phase |
Doc |
Notes |
| ⏸ |
13d pricing UI |
13 |
MVC triplet exists as design artifact |
| ⏸ |
14 MVC UI implementation (14a–f) |
14 |
htmlx engine, SCSS subset, controllers, SSR, actions, live patching |
| ⏸ |
UI exploration track |
exploration/ui/00-overview.md |
00–08 design docs stay current |
Suggested order of play (backend)
13b — method execution ✅ shipped — methods run as row-scoped transactions over RPC
- 13c / Stage 3 LIVE with 09d fan-out (turns every 501 stub real; the ecommerce order-ops board's backend)
- 09e — 2PC (cross-shard
fn checkout — the canonical ACID demo end-to-end; 13b's single-shard txn is its building block)
- 15a/15b — MCP core, tools, resources (needs nothing unshipped; makes every app agent-callable — 13b methods become MCP tools in 15d; 15e waits on 13c + 09d)
- 05/06 dependency removal (mechanical, any time)
- 10–12 storage completion (snapshots/compaction; arena engine)