2026-09-02 - (/loop) Bulk port batch 1: the bounded string and memory functions

First batch under D472. Eleven functions written from their specifications and tested against them - no guest run involved at any point, which is the whole claim the bulk approach rests on.

The measurement is the gap falling, not a title getting further:

documented   711 needed, 452 missing   ->   711 needed, 441 missing

What went in

All in orbistoun-libc/src/cstring.rs, each carrying its specification in a comment:

The three details worth having written down, because each is a specification saying the opposite of what the name suggests:

Eleven tests, and the first of each pair is the guard made to fail: memcpy_s refusing an oversized copy and scrubbing the destination, strcat_s refusing an append whose terminator would not fit, strnstr declining a match that starts inside its window but runs past it, wcsncpy_s refusing two characters plus a terminator in a field of two. The fitting cases are tested beside them so the guards are known to be discriminating rather than always failing.

What was deliberately left out

Method note

RSIZE_MAX is implementation-defined, so the Annex K functions deliberately do not assert a ceiling on it - the constraint they exist for is n <= s1max, and inventing a limit to look thorough would be inventing a constant (principle 3).

clippy --tests clean, fmt clean, orbistoun-libc tests pass, nothing committed.

Next batch: the Dinkumware C runtime internals - the _Atomic_* family, _Thrd_*, the file and system locks, _Stoul/_Stoull, the _F* float variants, and _Stdout/_Stderr, which are data objects rather than functions and need the ImportKind::Object path (D307) rather than a thunk.