Task 4 of docs/superpowers/plans/2026-08-26-table-residency.md — the first behavioural change in the iteration. - db.c: one predicate, `table_is_durable`, gating the three EXISTING mutation sites. Kept as a function rather than an inlined condition so database/src/CODE-LOGIC.md's "nothing else may mutate storage" claim keeps holding — the choke points stayed three - the ack contract is untouched for durable tables: RAM applied, record staged, one commit before the ack, and a failed commit still removes the row - replay: a log holding records for a class the image now declares volatile is a real migration case, not corruption. apply_record returns -2 (distinct from -1), wo_wal_replay_ex reports the class id, and main.c names it and exits 2. `wo_wal_replay` stays as the NULL wrapper, so all 156 WAL unit checks are untouched - measured, not asserted: 50 inserts wrote 1500 WAL bytes into a durable table and ZERO into a volatile one. The file's SIZE proves nothing (it is fallocate'd to 1 MiB up front), so the gate measures the non-zero prefix BUG I INTRODUCED AND CAUGHT: the mismatch message first printed the class name with %s, but wo_str.data is `char data[]` with NO NUL terminator (obj.h) — a buffer over-read. Now %.*s with the explicit length, and re-verified under ASan. New gate `just residency` (8 checks), because everything above was otherwise a one-off manual measurement: restart behaviour, the zero-byte write path, the mismatch refusal (exit 2, names the class, NOT reported as corruption), and both compile-time refusals. Its own first run failed two checks for a bug in the script rather than the feature — `woc | grep` under `set -o pipefail` returns woc's exit 1 even when grep matches, since woc exits 1 whenever it reports diagnostics. Captures first now, with the reason noted inline. Also new: corpus run/table-volatile-inprocess pins that a volatile table is a FULL table in-process — same @unique enforcement, same index probe, same query surface. Only survival differs, and that is unobservable from inside one process. Gates: woc-test 557/0, 18 runtime suites 0 fail, cli_smoke OK, oop-e2e 119/0 (was 118), residency 8/0, employee 8/0, db-actor 8/0, site 21/0, ASan clean on the new replay path. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| actor | ||
| compile-fail | ||
| db | ||
| gc | ||
| lang | ||
| run | ||
| sample-logwatcher | ||
| sys | ||
| trap | ||
| README.md | ||
tests/corpus/ — the conformance spine
Fixture kinds, exact-outcome matching (byte-equal stdout / exact WO-E### / exact trap code / exact gc step+freed counts):
| dir | kind | landed by plan |
|---|---|---|
run/ |
compiles + runs, expected stdout | 3 |
compile-fail/ |
must fail with expected WO-E### |
3–4 |
trap/ |
must trap with expected code | 3–4 |
gc/ |
cycle collection scenarios | 3 |
actor/ |
shard/spawn/send (ASan+TSan) | 4 |
db/ |
insert/select + crash/replay | 5 |
lang/ |
Haxe-parity adoptions | 8 |
sys/ |
fs/proc/net/time/json stdlib | 9 |
sample-logwatcher/ |
ported log-watcher fixtures | 10 |
Runner: scripts/oop-e2e.sh (plan 3, task 2 — includes the how-to-add-a-fixture doc pointer docs/plan/oop-vm/02-corpus.md).