- test_file_form_temps_beside_log (runtime/test/test_wal.c): the log is
`<dir>/app.db` — an operator's name, not shard-0.wal — with a sibling
directory `app.db.d/` as the decoy nothing may land in.
- Proof by blocker: a DIRECTORY planted at exactly `<file>.compact` makes
`wo_wal_compact` and `wo_wal_migrate` each return -1 with the log
untouched (record count unchanged, blocker still an empty dir); a temp
anywhere else would have let them succeed.
- Blocker removed: compaction 10 → 2 records, migration n,t → n,t,extra
succeeds, `<file>.compact` gone after each rename, the directory holds
exactly {app.db, app.db.d}, the decoy is empty, the migrated file
replays into the new shape (slots[0] == 107, slots[2] == 0).
- The parent fsync'd after a rename is `parent_dir_of(<file>)`, the helper
the resolver shares (task 1), so its derivation is pinned there; fsync
itself is not observable from a test.
- Green on first run (57 assertions) as a pin must be; teeth shown by a
mutation control — compaction's temp redirected into the decoy turned
14 assertions red (`wo_wal_compact(&w, &db) == 0, want -1`, …).
- `make -C runtime test`: 21 suites, 8431 pass / 0 fail (was 8374/0).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit ccee2d04fddfb96c7dfab1c17f235e3a9bbc69fb)