#291 Baked asdf: load-system hits INVALID-SOURCE-REGISTRY (escapes handler-case)
openOn the baked build/funcl-asdf image (asdf snapshotted via save-image), (asdf:load-system "alexandria") no longer crashes (cave#209 fixed) but raises INVALID-SOURCE-REGISTRY, and the condition ESCAPES (handler-case ... (error (e) ...)) — the top-level REPL handler prints it, not the local handler.
Two things to check:
- asdf source-registry config state may not be reconstituted on a baked image (compute-source-registry / initialize-source-registry re-runs and fails validation). The fresh-load path (build/funcl + (load "asdf.lisp")) reaches alexandria via central-registry without this error, so it is baked-image-specific state.
- The handler-case miss suggests INVALID-SOURCE-REGISTRY's condition-class hierarchy (inherit from ERROR) may not survive the bake (cave#204 mini-clos condition classes in the image), so
(error ...)clauses don't match it. Verify (typep c 'error) for a baked INVALID-SOURCE-REGISTRY instance.
Repro: printf '(asdf:load-system "alexandria")\n' | build/funcl-asdf (build via make build-asdf). Blocks a FULL baked load-system; the crash class (cave#209) is resolved.
FIXED 98bbe0a 2026-07-12. The INVALID-SOURCE-REGISTRY escape was because condition-parents (the name-based condition hierarchy that handler-case/condition-typep walk, stdlib.lisp) was not persisted across save-image. asdf's define-condition edges vanished on restore, so cond-name-subtypep returned NIL and handler-case couldn't match the (invalid-configuration warning) — even though typep worked (typep uses mini-clos mc-supers, which IS saved).
Fix: persist the condition registries (condition-parents/slots/reports) as image root index 7, mirroring mc-image-tables (index 6). Verified on build/funcl-asdf: handler-case now catches a raised invalid-source-registry, the source-registry fail-soft catches it, and load-system runs the FULL searcher chain instead of escaping.
NEXT BLOCKER (separate, filing/covered by directory gap): load-system still can't FIND a system, because both searchers need directory ENUMERATION and funcl has no
directory—UNDEFINED-DESIGNATOR: DIRECTORYfrom central-registry-search's probe-asd. probe-file works; there is no getdents syscall /directoryfunction at all (grep: only directory-namestring exists). This is the same on fresh-load and baked — a genuine missing CL feature (getdents64 = syscall 217 + dirent parse + wildcard match), not a baked-state bug. Implementingdirectoryis the last thing between here and a resolving load-system.