- 00-kanban.md rebuilt: ▶ NEXT PLAN pointer (iteration 4 — emitter, corpus, `woc build`) then six buckets — stories, in progress, done, pending, discarded, learnings. It tracked only the Rust runtime before, so the whole OOP track (wovm shipped, woc Tasks 1-8 shipped) was invisible. - Board now records iteration 3's known gaps instead of silently owing them: `?T` plumbed but unenforced; E205/E201/E203/E204 dead, so structural interface satisfaction is unchecked. - New discarded.md — settled rejections with reasons so they are not re-proposed: inheritance, `abstract` newtypes, Money/SKU/Float, Dynamic/cast/ macro/extern, AOT-to-C, Menhir, shared engine state, external deployer. - RECOVERED docs/plan/exploration/blue-green-vm/00-vision.md — gone from disk, never committed (gitignored path), cited by five docs incl. principle 12. - Root cause was broader: all seven forward-roadmap plans in docs/superpowers/plans/ were untracked and ignored, on one disk only. Rules were half-fiction — 33 of 34 exploration files were already tracked, so they swallowed only *new* files. - Dropped the docs ignore rules (exploration, oop-vm, superpowers/plans, examples/agent-loop, examples/mcp-think) with a do-not-re-add comment; added __pycache__/*.pyc. `tests/` stays ignored but warns that the next plan lands the corpus there.
12 KiB
Status board — what is done, what is next
The single place to learn where this project stands. Organised in six buckets: stories (the narrative arc), in progress, done, pending, discarded, learnings. Every phase doc carries a matching status banner; this board is the index.
Update this board in the same change that finishes work — move the item to done
with what actually landed, set the next in-progress item, and record any
rejection in discarded.md with its reason.
Statuses: ✅ done · 🔄 in progress · ⬜ pending · ⏸ parked
▶ NEXT PLAN
Story iteration 4 — single binary end-to-end.
Plan: compiler/plan/2026-08-01-wob-emit-e2e-single-binary.md ·
Story slice: docs/stories/language-runtime-database/04-single-binary-e2e.md
The bytecode emitter, the three-kind conformance corpus, and woc build. This
is the milestone where .wo source becomes a running self-contained binary —
compiler front (iteration 3) and VM core (iteration 2) both shipped, so it is
unblocked. Its inputs are the four ownership tables owner.ml now produces;
dump.ml's format-contract comments are normative for it, including the
requirement to coalesce borrow guards per operand.
Two tracks run in this repo. The critical path is the language track: iterations 3 → 4 → 5 → 6 → 7, ending at compile and run log-watcher. The Rust-runtime track is shipped-and-maintained, not advancing.
Stories
docs/stories/language-runtime-database/
— one language, one runtime, one database, one binary. Twelve iterations, each
an unsplittable slice with Given/When/Then acceptance and a pointer to the plan
that sequences its tasks. Read one, approve, then the next starts.
| # | Iteration | State |
|---|---|---|
| 1 | Principles doc | ✅ |
| 2 | VM core (wovm) |
✅ |
| 3 | Compiler front (woc) |
✅ (known gaps below) |
| 4 | Single binary end-to-end | 🔄 next |
| 5 | Language surface | ⬜ |
| 6 | Program mode + stdlib | ⬜ |
| 7 | log-watcher proof | ⬜ acceptance |
| 8 | Shard-actor runtime | ⬜ |
| 9 | Database engine | ⬜ |
| 10 | HTTP service layer | ⬜ |
| 11 | Fibers | ⬜ |
| 12 | Blue-green deploy | ⬜ |
In progress
| Track | Item | Where |
|---|---|---|
| Language | Iteration 4 — emitter, conformance corpus, woc build |
plan 3 |
Nothing else should be started until iteration 4 lands. Off-critical-path work is parked by explicit scope directive (2026-08-08).
Done
Language track — compiler + VM (OOP track)
| Status | Item | Doc | What actually landed |
|---|---|---|---|
| ✅ | Principles | ../00-principles.md |
13 principles, each with a why and a link to the doc that enforces it |
| ✅ | wovm VM core |
plan 1 | .wob v1 loader with full static validation, register interpreter (computed-goto + ISO-C fallback), arena with size-class free lists, borrow word, RC + budgeted Bacon–Rajan cycle collector, drop-map trap unwinding, containers, builtins, ICALL, CLI. 13 suites × 2 dispatch flavors + CLI smoke, ASan/UBSan clean |
| ✅ | .wob format contract |
oop-vm/00-wob-format.md |
Normative; twinned with runtime/src/wob.h |
| ✅ | woc compiler front |
plan 2 | Tasks 1–8: dune scaffold, diag (WO-E codes, two-site related errors, ordered dedup), newline-significant lexer at rt parity, declaration + statement/expression parser with skip-on-block and multi-error recovery, typechecker (field kinds, ?T plumbing, W201, E225, E214), MVS ownership pass with the four emitter tables, driver with directory discovery + cross-file programs. 14 + 264 checks |
| ✅ | Error catalog | oop-vm/01-error-catalog.md |
14 emitted codes + 10 reserved, each with the reason it is not yet emitted |
| ✅ | log-watcher .wo sample |
../examples/log-watcher/ |
Eight-file port authored docs-first with its .hx mapping table; compiles for real in iteration 7 |
| ✅ | Scalar cleanup | discarded.md |
Money/SKU/Float and the abstract allowlist removed; abstract flipped adopt → reject |
Known gaps carried out of iteration 3 — recorded, not silently owed:
?Tis plumbed but unenforced. Lexer/token/AST/parser/dump all handle?T; the semantics do not exist (WO-E211/E212/E213declared, never emitted — a probe returning?IntasIntexits 0). Owned by iteration 5, plan 8 Task 6, which is that iteration's first task because it blocks the log-watcher port. Seecompiler/nullable-types-implementation.md.- Structural interface satisfaction is not checked (
WO-E205dead), along with type mismatch, bad arity, and unknown-fn (E201/E203/E204) — all named in plan 2 Task 6's own must-fail list. Gaps in shipped work, catalogued as reserved. - Six further narrowings (W201 heuristic, E225 reach, dead code after
return, unresolved-callee drops, RC table ordering, residual b-side role) are listed in the plan-2 SDD ledger and in the affected files' own comments.
Rust runtime track — Stage 2 shipped, maintained
| 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 |
| ✅ | 04 tokio/axum cutover | done/04 | deps now: anyhow, serde, serde_json, libc |
| ✅ | 09a thread-per-core | 09 | scheduler.rs, SO_REUSEPORT, pinned wo-shard-<t> workers |
| ✅ | 09b sharded engine | 09 | shard.rs bus; Arc<Mutex<Engine>> deleted; interleaved ids |
| ✅ | 09c per-shard WAL | 09 | ack-after-fsync; boot replay; meta shard guard |
| ✅ | — keep-alive follow-up | 09 | reads ×3.4 → 770k/s |
| ✅ | — io_uring group commit | 09 | raw ring; 4.7× durable writes on real disk |
| ✅ | 16a PG wire client | 16 | hand-rolled protocol v3, zero crates |
| ✅ | 16b PG backup mirror | 16 | async JSONB upserts behind the WAL ack; RAM authoritative |
| ✅ | 13a class surface | 13 | class parses, CRUD serves |
| ✅ | 13b method execution | 13 | row-scoped txn per call; abort → 409 rollback |
| ✅ | — @table + indexed DML |
13 | secondary indexes, find_by, select Type{…}, REST filters |
| ✅ | C proving ground A–F | exploration/c-runtime/00-plan.md | 859k reads/s, 618k durable commits/s; found the ack-ordering + fd-ABA bugs the Rust port avoided |
Ecommerce sample (verified 2026-06-13): api.rest 17/17 expected statuses pass.
Pending
Language track — sequenced, on the critical path
| # | Item | Plan |
|---|---|---|
| 5 | Haxe-parity language surface — ?T forced handling first, then switch expressions, records, enum payloads, try/catch, statics, using, modules, is, pub(read), #if |
plan 8 |
| 6 | Program mode + systems stdlib — fn main, exit codes, fs/proc/net/time/json |
plan 9 |
| 7 | log-watcher proof — the sample compiles and detects a silent death live | plan 10 |
| 8 | Shard-actor runtime | plan 4 |
| 9 | Database engine binding | plan 5 |
| 10 | HTTP service layer | plan 6 |
| 11 | Fibers | vision §3, blue-green exploration |
| 12 | Blue-green deploy | spec — plan authored after iterations 9–10 |
Language track — parked until after iteration 12
Recorded 2026-08-08 by scope directive; nothing here lands before the log-watcher proof.
WO-W201@gc-suggestion refinement beyond the self-reference heuristicWO-E225broadened toref/multi/mapelement types and fn signatures- ADT container roster adoption (Stack, Queue, Set, Tree, Graph, …) — see the
roster in
compiler/nullable-types-implementation.md - Web framework as a
.wolibrary; UI (##uiSSR + live patches); script-based destructive migrations; MCP/agent wrapper over the management plane
Rust runtime track — not advancing while the language track runs
| Status | Phase | Doc | Notes |
|---|---|---|---|
| ⬜ | 05 hand-rolled JSON | 05 | removes serde/serde_json |
| ⬜ | 06 bespoke error type | 06 | removes anyhow |
| ⬜ | 07 inotify content watcher | 07 | wo dev hot reload |
| ⬜ | 08 sendfile static assets | 08 | needed by the parked UI track |
| ⬜ | 09d cross-shard subscriptions | 09 | LIVE fan-out; pairs with Stage 3 |
| ⬜ | 09e cross-shard transactions (2PC) | 09 | needed by fn checkout spanning shards |
| ⬜ | 09f observability & reshard | 09 | per-shard metrics, WO_RESHARD |
| ⬜ | 10–12 storage completion | 10, 11, 12 | snapshots, compaction, WAL rotation, mmap arena engine |
| ⬜ | 13c LIVE pricing push · Stage 3 wire layer · 13e at scale | 13 | replaces the 501 stub |
| ⬜ | 15a–15e MCP over streamable HTTP | 15 | 15e needs 13c + 09d |
| ⬜ | 16c–16f typed columns, lossless resync, restore, SCRAM | 16 |
Frontend — parked
| Status | Phase | Doc |
|---|---|---|
| ⏸ | 13d pricing UI | 13 |
| ⏸ | 14 MVC UI implementation (14a–f) | 14 |
| ⏸ | UI exploration track | exploration/ui/00-overview.md |
Discarded
Settled rejections with their reasons live in discarded.md —
inheritance, abstract newtypes, Money/SKU/Float, Dynamic/cast/
macro/extern, AOT-to-C, Menhir, shared mutable engine state, external
deployer daemon, destructive migrations in v1, and more. Argue against the
recorded reason rather than re-opening an entry as new.
Learnings
What attempts taught, shipped or not, in learnings.md —
plumbed-is-not-enforced, vacuously-passing goldens, exit-0-with-wrong-output,
the malloc-path ASan trick, deferred checks that never reach the runtime,
validate-once-at-the-boundary, and reference-implement-in-C-first.