diff --git a/goals/G-103-runtime-kit-family.md b/goals/G-103-runtime-kit-family.md index 51a15f4f..6c0b2a67 100644 --- a/goals/G-103-runtime-kit-family.md +++ b/goals/G-103-runtime-kit-family.md @@ -101,6 +101,45 @@ names; projects and fingers consume short stable WORKING names; 'runtime use' (The acceptance's 'e.g tclsh905punk.exe' example predates this decision; the decided punk-marked shape is tclsh-punk....) +VFS-SYSTEM RELATIONSHIP (user observation 2026-07-21, assessment recorded): the +bi family is structurally what the existing .vfs kit system would generate with +the main.tcl fauxlink (-> _config/punk_main.tcl) left out - and make.tcl +half-proves the isomorphism: its zip-kit path extracts the runtime's attached +image, merge_overs it with the .vfs content and re-images the union onto the raw +exe via tcl::zipfs::mkimg (mkimg REPLACES the whole attached image - one archive +out), so runtime-zip and vfs-folder payloads are already treated as the same +species, and punk9wintk905.vfs's bin/ + lib_tcl9/ batteries are essentially this +family's payload list. Where the equivalence breaks is this goal's real design +content: + +- tcl_library provenance: the kit flow inherits the core lib by EXTRACTION from + the runtime underneath; a family runtime must guarantee it directly (the + suite's make-zipfs step already does). +- path setup: kit batteries are visible only because punk_main.tcl (punk::boot) + wires lib_tcl9/bin into auto_path/loading; with no main.tcl the stock zipfs + app hook falls through to plain interactive tclsh and nothing wires them - + family payload must sit where the STOCK boot searches, i.e. the installed + lib-tree layout, which the suite's out/lib already is (post-tclsh steps + install thread/tclvfs/tcllib/tcllibc/tklib there; build_tk delivers Tk + lib + dll). +- open at activation: staging-tree convention, payload layout inside the zip + (stock lib tree vs lib_tcl9-style + boot hook), and dll-load-from-zipfs for + Thread/Tk (core's copy-to-temp fallback; AV/cleanup caveats) - these, not the + zip mechanics, are the design work. + +SEPARATION vs SHARING: the generators stay separate - bootstrap position +(family runtimes must be produced hermetically with no punkshell available; +make.tcl needs a working shell, and the family runtime IS the bootstrap +product) and release axis (tcl-patchlevel + -rN vs punkshell version) both +force it; Scope accordingly casts src/vfs/_config + mapvfs.config as name +CONSUMERS. Sharing happens at the primitive (both generators bottom out in +zipfs mkimg over a staged tree) and at the CONTRACT: a family runtime's +attached image is exactly what make.tcl extracts and merges under every future +kit. Consequence: once family runtimes exist, punk9wintk905-class vfs folders +shrink toward pure punkshell payload (modules + main.tcl + twapi-class +vendored bits) - and this attached-image contract is the concrete payload +contract the sequencing note promises G-101. + ## Notes - 2026-07-21 (user): SEQUENCING CONFIRMED - G-097 (bin naming sweep, achieved 2026-07-21) first, then