writeonce/docs/00-status.md
shoney.arickathil d7304f23ec docs: status board at docs/00-status.md; gap-closure spec applied; recover lost doc
- Board renamed docs/plan/00-kanban.md -> docs/00-status.md and rebuilt: ▶ NEXT
  PLAN pointer (iteration 4 — emitter, corpus, `woc build`) then six buckets —
  stories, in progress, done, pending, discarded, learnings. It covered only the
  Rust runtime before, so the whole OOP track was invisible. All 16 inbound refs
  repointed; `Kanban:` banners renamed to `Status:`.
- New discarded.md (settled rejections with reasons: inheritance, `abstract`,
  Money/SKU/Float, Dynamic/cast/macro/extern, AOT-to-C, Menhir, shared engine
  state) and learnings.md (plumbed≠enforced, vacuous goldens, exit-0-wrong-
  output, malloc-path ASan trick, deferred checks that never reach the VM).
- 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. Dropped
  the docs ignore rules with a do-not-re-add note; added __pycache__/*.pyc.
- Repaired broken links across docs/, 270 -> 36: fixes a regression from the
  earlier reference/ -> .dev/reference/ move (relative paths at ../../ and
  deeper were skipped), plus depth and reorg drift. The 36 residual point at
  content that does not exist and need decisions, not paths.
- New spec docs/superpowers/specs/2026-08-10-logwatcher-gap-closure-design.md,
  applied: `and`/`or` verdict row; Part 3 gains `env` (six modules), swaps
  time.mono for iso/local, adds 22 bare core builtins; throw/time.mono/is cut
  (0 uses in the sample). Plan 8: Task 2 gains and/or, Task 5 drops throw,
  abstract+`is` task deleted, 8/9 renumber to 7/8. Plan 9 gains core builtins.
  Plan 10 gains the 307 -> 0 diagnostic gate. WO-E205 re-filed unreachable-by-
  design. types.ml header drops its false satisfaction-set claim. 00-code-
  review.md reduced to a stub — its rival Phase 1-4 roadmap retired.
2026-08-10 23:42:26 +02:00

13 KiB
Raw Blame History

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.

Iteration 4 proves the pipeline on the milestone grammar only — the emitter, corpus, and woc build exercise the grammar iteration 3 already compiles, not the log-watcher sample, which still needs ~200 constructs the front end cannot yet parse (iterations 5–6 work). Iteration 4 must not be judged against the sample (gap-closure spec, §6).

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:

  • ?T is plumbed but unenforced. Lexer/token/AST/parser/dump all handle ?T; the semantics do not exist (WO-E211/E212/E213 declared, never emitted — a probe returning ?Int as Int exits 0). Owned by iteration 5, plan 8 Task 6, which is that iteration's first task because it blocks the log-watcher port. See compiler/nullable-types-implementation.md.
  • Structural interface satisfaction is not checked (WO-E205 dead), 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 heuristic
  • WO-E225 broadened to ref/multi/map element 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 .wo library; UI (##ui SSR + live patches); script-based destructive migrations; MCP/agent wrapper over the management plane
  • throw (explicit raise) — cut 2026-08-10, 0 uses in the driving workload (log-watcher); catch frames ship without it
  • time.mono — cut 2026-08-10, 0 uses in the driving workload; returns when a workload needs monotonic math
  • is — cut 2026-08-10, 0 uses in the driving workload; emptied plan 8's old Task 7, which is deleted rather than deferred

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.