The 2026-07-07 five-agent review of libabc found the core slice layer's edit/remove/pop primitives wrong at the memmove/index level. One bug is LIVE (s_purge feeds surviving empty runs into LSM/Y merges); the rest are armed bedrock: any new caller silently corrupts data. Repro-first per Issues.
Sx.h:794 s_purge — after Swap(p, $last(s)); --$term(s); the loop
++is past the swapped-in element, so a matching tail element survives. Live consumers: LSM.h:34 (LSMMerge) and Yx.h:37 purge empty runs; a surviving empty run reaches the slicer. Also int i vs size_t $len.
S.h:243 $rm — memmoves (len) elements instead of the whole tail
($len(s)-off-len); corrupts tail and reads OOB when off+2*len>$len. S.h:249 $rm1 moves 1 element instead of the tail. $rm1p is correct. Note $tailshift (S.h:222) contains exactly the right memmove.
S.h:222 $tailshift calls must(cond) — PRO.h:215 must(cond,msg)takes two args; the macro is a compile error at any use site. Dead.
BUF.h:249 u8sPop — memcpys from *s (head) but sheds s[1] -= len
(tail); returns the wrong bytes AND destroys the tail. Siblings u8sPop1/u8sPop32 correctly read from the decremented term.
Sx.h:524 sDrain — all-or-nothing Feed semantics, never advances
from, contradicting abc.mkd ("sDrain: write what fits, advance both sides"); sDrain1/$drain obey the convention. A drain-until-empty loop over it never terminates.
S.h:176 $feedf + BUF.h:164 $$feedf — a failed feed of the LAST
template byte/substitution still advances the cursor; the exhausted template then returns OK on truncated output. Live: LEX.c:263/295, FILE.h:716. Also $printf (S.h:147) counts the NUL as payload on snprintf truncation.
Sx.h:107 gFed bound g[1] + len > g[2] is pointer-overflow UB for
huge len; sFed (Sx.h:682) shows the safe subtraction form.
$rm mid-slice, u8sPop round-trip, drain loop, feedf exact-fit).
sDrain per contract (or rename to Feed — needs a ruling); feedf checks the last feed; safe bound forms.
s_purge fix must keep LSM/Y tests green (see ABC-007).sDrain: fix semantics vs rename; caller impact is zero today(no users), so contract-fix is the cheap moment — request a ruling.