D+ as written in 5.7 was exact but kept two cells on the return stack while calling U> -> SWAP/U<, leaving its caller one return entry: any word calling a word that calls D+ (M+, D-, D=, Q.+, Q.-) would have a return address silently overwritten. The new D+ makes no calls. Both high cells wait on the return stack; the carry out of the low-cell add comes from sign tests -- if the low cells' top bits differ, there is a carry exactly when the sum's top bit is clear; if they match, exactly when both are set. Headroom (data cells under args / return entries): 4/1 -> 6/5. Checked against C over all 50625 edge-vector quadruples and 20000 pseudo-random pairs (weighted to top-bit cases and low sums wrapping to 0), at 32- and 64-bit cells, optimised and ASan+UBSan. Retargeting each of the four carry branches fails more than 13000 checks. 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.
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.