fix(gc): resolve cave#68 — implement REVIEW.md items 1-6 for the minor collectorVerified

Root cause of the post-minor corruption: REVIEW.md item 2.
Evacuation ignored gc-object-movable-p and moved SYMBOLS (pinned by
contract: pointer identity matters), breaking a raw reference class
to their records/name bvs; the resulting dispatch misses then fell
into SILENTLY UNPATCHED calls (rel32=0 — a call to its own
fall-through whose ret chain pops an operand as the return PC),
producing wild jumps far from the cause.

REVIEW.md items, all implemented:
1. The fallback allocation window bumps past OLD/pinned regions and
   CLAMPS at the first one above (gc-window-base-past-old /
   gc-window-limit-from) — a mutator window never intersects old
   space, in any cycle's region layout.
2. Pinning policy: non-movable widetags pin their region
   (+gc-region-young-pinned+); pinned entities heal in place via
   gc-minor-pin-fixpoint (alternating with cheney to quiescence);
   reclaim promotes pinned regions to OLD in place — map and cards
   intact, dead entities leak until full-MS. Forwarded corpses in
   pinned regions still resolve (young-ish heal gate).
3. Preflight gc-minor-large-fit-p: largest young entity extent vs
   largest contiguous virgin run, decided before the first
   forwarding write.
4. Visit mode 2 = non-mutating stale-check; minor end re-walks the
   stack (incl. saved-register slots) while the stub frame is live;
   (gc-stack-stale-count) reports it. gc-verify-to-space documents
   why a later REPL call cannot walk the (popped) stack.
5. gc-precise-stack-check mirrors the dynamic-rest innermost record
   (srsp+112 entry, raw nargs from stub-saved RAX).
6. argv root double-coverage documented as deliberate.

Also: unresolved patches now RAISE with the callee's name — gated
on *gc-raise-unresolved*, armed at the first collection, so host /
stage1 / cold-boot keep the designed silent-drop for tree-shaken
names (cave#34/#35). Large-object evacuation keeps *gc-evac-top*
past the object (latent window overlap); to-space grabs assert
monotonic; forwarding words assert below the evac cursor.

Validated: two reclaiming minors back-to-back with heap-valued REPL
defvars, intern, and cold-name calls all correct (minor 2, degen 0,
stack-stale 0, 3 regions pinned then promoted); test-gc + soak +
smoke green; bootstrap 202/202.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Anthony Green2026-06-12 21:01:12 -0400 df5170548d0df096536b16e2a5a4f6914062f3fe
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>