2026-09-03 - (/loop) A closed gap that both surfaces still called open

differential   247  ->  263 cases
tests                1998

Arrived by hand again - the sixteenth wakeup that did not fire.

The thirteen data imports were already answered

The plan carried "13 imports name data, not a function - a thunk is the wrong answer and orbistoun has no other one" as a gap worth a skeleton. Listing them took one command - they are already marked [data]:

libc  _Stdout   libc  _Stderr   libc  _ZTVSt13runtime_error   libkernel  __stack_chk_guard  …

The C++ runtime's stream objects, vtables and locale ids, plus the stack canary. And then D307, which introduced the marking, turned out to carry its own correction: "what was deliberately not done (done in D323)".

D323 did it. One zeroed page per data import, and ImportResolver asks for it before the thunk table. The worker's relocation summary even says so - "imports name data and were given storage rather than a stub" - while orbistoun-cli imports, the surface anybody checks first, still ended with "and orbistoun has no other one yet". Corrected. D510.

Eighth stale work item this week, and the pattern is now clear enough to name: the text describing a problem lives somewhere other than the code that fixes it, so the description is never revisited. Six of the eight were found by working the item rather than by reading the queue, which called all six outstanding.

Also removed a doc comment duplicated line-for-line above describe_relocations.

strtok_r, and the property these cases cannot prove

247 -> 263 cases. Six sequences through the reentrant form, the same inputs as strtok's on purpose - the two must agree with each other as well as with the reference.

The replay path is shared, so the D508 wire was checked first: run_strtok_sequence named "strtok" outright, and every reentrant case would have run against the non-reentrant function. Taken from the case instead. The saveptr is this test's storage, threaded through every step of one sequence, exactly as a caller must.

These cases cannot distinguish a strtok_r that delegates to strtok - it would answer every one of them correctly and still be wrong, because two interleaved sequences would share a place. Said so in the helper rather than left to be assumed, and checked separately: orbistoun's reads the caller's pointer when text is null and writes the rest back, so it is right for the reason the cases do not reach. A test that would reach it needs two interleaved sequences, which the record format's one-subject-per-case shape does not carry - the same design step the wide-character family needs.

State

cargo test --workspace green - 119 suites, 1998 tests, 0 failures. Differential 263 cases, all agreeing. clippy --tests clean, fmt clean, identity scan clean on both.

Nothing committed. The day holds worklogs 292-359 and D466-D510.

Next: sprintf and vsnprintf are the last uncovered differential functions; the wide family and an interleaved-sequence shape both need a record-format decision first.