#305 stage1: (save-image PATH) SIGSEGVs in AG-SAVE-IMAGE-ACTION — funcl-stage1-save-image-restart-evaluates fails
closedPRE-EXISTING on unmodified main at 7ab1a4b (verified: stashed the cave#303 fix, rebuilt build/funcl-stage1 from clean tree, identical crash), discovered by the cave#303 pre-push gate. Suite impact: test-fast-sharded shard 7 fails funcl-stage1-save-image-restart-evaluates (tests/bootstrap.el:3262) — the PRODUCER subprocess dies.
Repro (one run): printf '(save-image "/tmp/x.img")\n' | build/funcl-stage1 => SIGSEGV
gdb bt (baseline binary): #0 AG-SAVE-IMAGE-ACTION () <- +60ish bytes in, early #2 AG-REPL-EVAL-FORM-DISPATCH () #5 AG-REPL-EVAL-FORM () #10 AG-LOAD-EVAL-ONE ()
build/funcl (image-baked) may mask whatever stage1 trips on (the classic warm-layer masking). Suspect window: one of today's commits (ccc3cd8 ADR-0031 stage 1 intern door, or 7ab1a4b KIND-4 home relocs) touching state ag-save-image-action serializes, or an older break unmasked — the suite was last known fully green before this session. Next: gdb disas around the faulting address in AG-SAVE-IMAGE-ACTION to see which slot read faults, then diff the function's inputs across ccc3cd8^.
FIXED in 2beac09 — four stacked defects, each unmasking the next (all latent until 5cc5f39's geometry pushed the first one past the stack top):
funcl-stage1-save-image-restart-evaluates PASSES (4.2s, was 62s-then-crash); test-fast-sharded ALL 8 SHARDS PASSED; spike oracle green; --hosted 42; fixed point held.
Two latent stage1 landmines observed but NOT fixed here (filing separately if they bite): (a) every host-emitted arity-error/undefined-call raise path is an unpatched call+0 that falls through into the function body — arity errors in stage1 detonate instead of reporting; (b) the stage1 REPL cannot call several cold/warm functions by name with string args (crashes in the reporter — condition-report resolution).