#302 asdf fasl: compile-time reader mints UIOP/VERSION-homed OS-UNIX-P instead of resolving it inherited from UIOP/OS — export timing during fasl-compile
closedPost-ADR-0031 residue (was masked by the retired name-keyed heal). The asdf fasl loads in 0.11s until a CO-RUN funcalls the designator UIOP/VERSION::OS-UNIX-P — a package-own record minted at fasl-COMPILE read time whose fn-cell is empty (os-unix-p is defined + exported in UIOP/OS; uiop/version should inherit). Post-load probes: UIOP/VERSION exists and (find-symbol "OS-UNIX-P" UIOP/VERSION) HITS — so the use/export wiring is right by end-of-load; the divergence is timing at compile: when uiop/version's source was READ during fasl-compile, uiop/os's export of OS-UNIX-P was apparently not yet visible to external-symbol-p / find-symbol-via-uses-walk (uiop's define-package expansion registers exports — check whether the fasl classifier's live-eval of those expansions defers the export registration relative to source-load, e.g. splice ordering from cave#300's classifier change). Repro: fasl-compile asdf.lisp (~250s), load, watch UNDEFINED-PKG-DESIGNATOR. Fix candidates: (a) make the classifier's define-package/eval-when splice preserve export-before-read ordering exactly as source-load; (b) loader-side late healing: when a package-own record's cell is empty at designator call, retry accessibility once (packages fully materialized) and alias the record. (a) is the honest fix.
FIXED in 7ab1a4b: KIND-4 relocs now carry the quoted symbol's home package (parallel patch-pos map at emit; loader interns through the ADR-0031 door before falling back to pool-as-mint). The first cut's guard required byte-vector-p on the package name and never fired — package names are STRINGs (widetag 0x0D) post-Phase-4; fixed to accept both. UNDEFINED-PKG-DESIGNATOR is gone: the asdf fasl's detect-os reloc now carries home=UIOP/VERSION, matching the source-load session's ground truth (the canonical os-unix-p really is UIOP/VERSION-homed — uiop's ensure-package runs before in-package). The load now dies one level deeper on a DISTINCT replay divergence — filed as its own issue.