feat(fasl): ADR-0030 slice 3 — KIND-1/5 novel symbol+string relocs, v5 format, reader-visible fasl globalsVerified
Third Model A slice: novel SYMBOLS and STRINGS are now fasl-portable, and a fasl-defined global is reader-visible from the fresh REPL. v5 reloc wire format (the widening deferred from slice 2, built with its consumer): kind u32 | co-relative pos u32 | name bv | width u8 | home-pkg bv. .fco v4->v5, FUNCLFA v1->v2 (no silent cross-version reads). Two new kinds: KIND-4 (novel symbol-pool lea) and KIND-5 (novel string-pool lea, name bv = content). Emit: ag-resolve-symbol-patches / string-pool resolver novel branches record KIND-4/5 (arena-gated; cold build byte-identical). Load: pool-as- mint — intern the name/content into *ag-symbol-pool*/*ag-string-pool* and queue the site on the patch lists; the replay's per-action ag-emit-quote-pool lays fresh records registered where the reader looks, then patches the sites. Reader visibility: home-pkg payload + ag-loader-pkg-value-cell (interns via ag-intern-in-pkg onto the package alist) + a mint-map arm in ag-resolve-global-vaddr-patches so post-load REPL sites resolve to the SAME cell the fasl stored into (without it every fasl global read back unbound). spike::*marker* from a fresh REPL after load -> :SPIKE-MARKER. Value-type matrix green: defvar int/cons/keyword/string/symbol all round-trip through a fasl, with cross-boundary eq for the keyword and symbol. Debugging finds recorded for the next slice: KIND-4 must string-pool- intern the name FIRST (symbol records resolve the name slot through the string pool); fasl global cells diverge from post-load reads without the mint-map resolver arm; the keyword mint must register in *ag-keyword-pool-offsets* (not just vaddrs) or the next compiled :kw mints a second record and breaks eq. Gates: oracle 4/4 both sides; reader-visibility + matrix probes green; stage1 boots + handler-case BAD (cave#293/294 intact); native conditions typep T; build/funcl boots on the v5 embedded image; make build green, byte-identical fixed point held; tree-shake slice-clean (5 new cold defuns retained; the ~50-name backlog predates this work and needs its own manifest-refresh pass). Remaining Model A scope: Cat-2 pkgsym IMM64 sites (quote shape 3, direct calls, (function NAME)) for general fasls. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By:
Claude Opus 4.8 <noreply@anthropic.com>