DECOMPOSITION.md 5.8 only named these as "standard pictured-output definitions over UM/MOD and a hold buffer". They are now written out (5.8) and run on the golden model. D-13 (ruled 2026-10-03): the hold buffer takes 63 characters, as v3's; HOLD of a value outside 0-255, or into a full buffer, stores nothing and sets NODE-ERROR, which is what v3 did with its error flag. Behaviour follows v3 otherwise: digits 0-9 then A-Z, BASE outside 2..36 reads as 10, SIGN ( n -- ). Stack effects are the standard ones, as 5.8 already ruled (v3 took its double low cell on top). The buffer is 64 bytes, filled backwards from its end through HLD; `#` divides by the base in two UM/MOD steps. HOLD, SIGN and # end in a jump to the next word instead of a call, which saves two return-stack entries: with calls, the signed picture `.` needs overflowed the 9-deep return stack. New test file v4/tests/test_pictured.c, on a node of its own: test_foundation.c's hand-assembled words already fill 901 of a node's 1024 words. It re-assembles SWAP, OR, UM/MOD, LSHIFT, RSHIFT and C! as they are in test_foundation.c. Checked against a C reference (short division on 16-bit limbs) at 32- and 64-bit cells, optimised and ASan+UBSan (`make test`, `make sanitize`), 4716 checks per width: <# #S #>, <# # # 46 HOLD #S #> and the signed picture, in bases 10, 16, 2, 8, 36, 3 and the invalid 0, 1, 37, -5, on every pair of 15 edge cells; HOLD of 12 values; and a base-2 number that overflows the buffer (63 characters kept, NODE-ERROR set, nothing outside the buffer written). Six mutations all fail. Headroom: <# #S #> leaves 3 data cells and 2 return entries; the signed picture leaves 1 return entry. The depth is C!'s as written (C! -> LSHIFT -> SWAP), which is unchanged. Test results on the amd64 host only. This is a development check, not acceptance (JUSTIFICATION.md section 16). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v4/
StarForth v4: the 32-instruction F18-derived core. The design lives in
docs/v4.0.0/JUSTIFICATION.md (why) and docs/v4.0.0/DECOMPOSITION.md
(every v3 word mapped to a v4 fate).
The first deliverable is the hosted C99 golden model (JUSTIFICATION.md §10,
step 1). It must pass POST and hold K≡1.0 with 32- and 64-bit cells on all
three host ISAs.
Acceptance (JUSTIFICATION.md §16): v4 must be equivalent to v3 at any point
in time, with the same vocabularies and behaviour, on the F18-derived engine;
and every ISA, hosted and bare metal, must still reach its ok prompt.
make -C v4 test passing is a development check, not acceptance.
What exists so far is the single node: registers, circular stacks, memory, all
32 opcodes, and per-opcode and per-call-target heat. make -C v4 test builds
and runs the tests at both cell widths; make -C v4 sanitize repeats them
under ASan and UBSan. There is no compiler capsule, no POST and no K
measurement yet.