writeonce/runtime/test
shoney.arickathil 0b9f09fc12 fix(db2-keys): stage the schema head before the first offset capture
- `seed` of docs/examples/residency (`resident: keys`) on a FRESH WO_DATA
  segfaulted rc 139 in both the dir and the file form; pre-existing.
- Root cause: the databasev2 12 head record was staged lazily INSIDE the
  first `wo_wal_append_*` (wal.c `stage()`), after db.c:78/293 had read
  `koff = wo_wal_next_offset(w)`; the first keys-resident row was re-pointed
  at the schema record and its first read folded "record header is
  malformed"; `wo_idx_probe` borrows with `msg == NULL` -> zero-page write.
- Fix: one helper `stage_schema_head` shared by `stage()`,
  `wo_wal_ensure_schema` and `wo_wal_next_offset` (no longer a pure inline):
  the head is staged before any caller observes `off + len`. Still lazy,
  never for a log that stays empty; head-stage OOM is `wo_wal_stage_fatal`.
  db.c untouched; compaction/migrate stage the head explicitly, unaffected.
- Failing test first: `test_keys_resident_fresh_log_first_row` (test_wal.c),
  the db.c:78 sequence call for call, then read-by-id, `wo_idx_probe`,
  replay. Pre-fix: `koff != 0` FAIL, `wo_row_read` -1 "record header is
  malformed", ASan SEGV `wo_wal_fold_row_at wal.c:1871` via `table.c:373`.
- Gates: test_wal 6650/0 (was 6629); `make -C runtime test` 21 suites
  8452/0 (was 8431); wovm-asan clean; residency `seed` + restart `order`
  under wovm_asan rc 0 on a fresh dir AND a fresh app.db; a control build
  with wal.c/wal.h reverted reproduces the SEGV.
- CODE-LOGIC §Schema migrations: "Head before any offset capture" bullet.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 631007839451fb970e9dec83338d19c09b3043ab)
2026-09-15 01:16:13 +02:00
..
.gitkeep feat(runtime): wovm VM core (Iteration 2) 2026-08-10 09:35:55 +02:00
cli_smoke.sh feat(runtime): wovm VM core (Iteration 2) 2026-08-10 09:35:55 +02:00
ecdsa_sign_vectors.h feat(crypto): ECDSA-P256 signing, RFC 6979 nonce (rv2 9 phase G1b) 2026-09-15 01:15:52 +02:00
gen_tls_record.py feat(tls): TLS 1.3 record layer (rv2 9 phase F1) 2026-09-15 01:15:31 +02:00
gen_x509.py feat(tls): X.509 basicConstraints + EKU chain hardening (rv2 9 F3c-net decision 6) 2026-09-15 01:15:31 +02:00
mkwob.c feat(runtime): wovm VM core (Iteration 2) 2026-08-10 09:35:55 +02:00
pkey_vectors.h feat(crypto): private-key DER parsing (rv2 9 phase G3a) 2026-09-15 01:15:52 +02:00
rsa_sign_vectors.h feat(crypto): constant-time RSA-PSS signing (rv2 9 phase G1a) 2026-09-15 01:15:52 +02:00
t.h feat(runtime): wovm VM core (Iteration 2) 2026-08-10 09:35:55 +02:00
test_arena.c fix(arena): poison-on-free — a freed block can never pass for a live object (language 44) 2026-09-15 01:16:13 +02:00
test_borrow.c feat(runtime): wovm VM core (Iteration 2) 2026-08-10 09:35:55 +02:00
test_builtin.c feat(runtime): wovm VM core (Iteration 2) 2026-08-10 09:35:55 +02:00
test_cont.c feat(runtime): wovm VM core (Iteration 2) 2026-08-10 09:35:55 +02:00
test_crypto.c feat(crypto): private-key DER parsing (rv2 9 phase G3a) 2026-09-15 01:15:52 +02:00
test_cycle.c feat(runtime): incremental tri-color mark-sweep replaces RC (7b Phase 3a) 2026-08-19 16:52:48 +02:00
test_fiber.c feat(runtime): fiber run queue + reduction budget (arc T2) 2026-08-20 07:03:40 +02:00
test_icall.c feat(runtime): wovm VM core (Iteration 2) 2026-08-10 09:35:55 +02:00
test_loader.c feat(runtime): wovm VM core (Iteration 2) 2026-08-10 09:35:55 +02:00
test_mailbox.c feat: bounded mailboxes + WO_T_ACTOR (trap 13); try-arm place-copy fix 2026-08-23 01:05:13 +02:00
test_obj.c feat(runtime): incremental tri-color mark-sweep replaces RC (7b Phase 3a) 2026-08-19 16:52:48 +02:00
test_objops.c feat(runtime): wovm VM core (Iteration 2) 2026-08-10 09:35:55 +02:00
test_proc.c feat(rt2): spawn_pty + resize — a child that believes it owns a terminal 2026-09-15 01:15:30 +02:00
test_rc.c feat(runtime): incremental tri-color mark-sweep replaces RC (7b Phase 3a) 2026-08-19 16:52:48 +02:00
test_table.c feat: O(1) read path — index probe wired end to end 2026-08-22 16:44:56 +02:00
test_term.c feat(rt2): term.size + term.width — the wmux ladder's last runtime asks 2026-09-15 01:15:30 +02:00
test_tls.c feat(tls): sans-io server handshake FSM (rv2 9 phase G2) 2026-09-15 01:15:52 +02:00
test_unwind.c feat: retire RC from the emitter and the format — .wob v4 (7b Phase 3b) 2026-08-19 17:07:43 +02:00
test_vm.c feat(runtime): wovm VM core (Iteration 2) 2026-08-10 09:35:55 +02:00
test_wal.c fix(db2-keys): stage the schema head before the first offset capture 2026-09-15 01:16:13 +02:00
test_wobbuild.c feat(runtime): wovm VM core (Iteration 2) 2026-08-10 09:35:55 +02:00
tls_driver_vectors.h feat(tls): sans-io TLS 1.3 client handshake driver (rv2 9 phase F3c-core) 2026-09-15 01:15:31 +02:00
tls_hs_vectors.h feat(tls): offline handshake verification (rv2 9 phase F3b) 2026-09-15 01:15:31 +02:00
tls_record_vectors.h feat(tls): TLS 1.3 record layer (rv2 9 phase F1) 2026-09-15 01:15:31 +02:00
tls_server_vectors.h feat(tls): sans-io server handshake FSM (rv2 9 phase G2) 2026-09-15 01:15:52 +02:00
wob_build.c feat: secondary indexes + @unique trap (iteration 9, Task 4; wob v3) 2026-08-15 12:57:32 +02:00
wob_build.h feat(runtime): wovm VM core (Iteration 2) 2026-08-10 09:35:55 +02:00
x509_vectors.h feat(tls): X.509 basicConstraints + EKU chain hardening (rv2 9 F3c-net decision 6) 2026-09-15 01:15:31 +02:00