Browse Source

win32-ix86 verification kits repointed at minimal payloads punk8min.vfs / punk9min.vfs

The full punk8win/punk9win_for_tkruntime payloads shipped x64-only binary
packages into the 32-bit kits (user-observed): a higher-versioned x64 Thread
2.8.12 shadowed the LUCK runtime's working 32-bit 2.8.5 on plain package
require and broke the repl (tsv machinery), and x64-only dlls (tcludp etc)
failed with "couldn't load from current filesystem". Measured: forcing
-exact Thread 2.8.5 loaded fine, proving the backport's zipfs dll loading
works and the failure was purely wrong-arch version shadowing.

New minimal payloads: both startup fauxlinks (root main.tcl + the undroidwish
app/main.tcl hook) plus directory fauxlinks to MULTI-ARCH packages only -
those carrying a win32-ix86 platform subdir: iocp-2.0.2 (both majors, from
punk8win.vfs / punk9magicsplat.vfs) and twapi-5.0b1 (tcl8, from punk86.vfs).
No binary duplication in VCS (G-004); the pure-tcl module/lib set arrives via
the dll-free _vfscommon.vfs overlay.

Verified: both kits boot, resolve punk::args from _vfscommon, load Thread
(2.8.5 own-arch on LUCK / 3.0.5 static on sfe), iocp 2.0.2 (ix86 dll), twapi
(4.7.2 stable beats the linked 5.0b1 beta under prefer-stable on LUCK; 5.2.0
static on sfe), udp 1.0.11 on LUCK (own archive copy, no longer shadowed);
piped shell sessions evaluate cleanly on both with zero tsv-unavailable
noise. Remaining specimen quirk (out of payload scope): punkluck86 segfaults
at process exit AFTER a completed shell session (exit 139) - repl-teardown x
2019-era runtime interaction; the tclsh subcommand exits 0 with all four
packages loaded. punkexe subtree 69 tests 0 fail.

Claude-Session: https://claude.ai/code/session_01UEgomWq6kA6c4A8GswqqGW
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
master
Julian Noble 3 days ago
parent
commit
f4d1091d61
  1. 11
      CHANGELOG.md
  2. 2
      punkproject.toml
  3. 21
      src/runtime/mapvfs.config
  4. 1
      src/vfs/AGENTS.md
  5. 0
      src/vfs/punk8min.vfs/app/main.tcl#..+..+_config+punk_main.tcl#@punk%3a%3aboot,merge_over#.fxlnk
  6. 0
      src/vfs/punk8min.vfs/lib_tcl8/iocp-2.0.2#..+..+punk8win.vfs+lib_tcl8+iocp-2.0.2#@punk%3a%3aboot,merge_over#directory.fxlnk
  7. 0
      src/vfs/punk8min.vfs/lib_tcl8/twapi-5.0b1#..+..+punk86.vfs+lib_tcl8+twapi-5.0b1#@punk%3a%3aboot,merge_over#directory.fxlnk
  8. 0
      src/vfs/punk8min.vfs/main.tcl#..+_config+punk_main.tcl#@punk%3a%3aboot,merge_over#.fxlnk
  9. 0
      src/vfs/punk9min.vfs/app/main.tcl#..+..+_config+punk_main.tcl#@punk%3a%3aboot,merge_over#.fxlnk
  10. 0
      src/vfs/punk9min.vfs/lib_tcl9/iocp-2.0.2#..+..+punk9magicsplat.vfs+lib_tcl9+iocp-2.0.2#@punk%3a%3aboot,merge_over#directory.fxlnk
  11. 0
      src/vfs/punk9min.vfs/main.tcl#..+_config+punk_main.tcl#@punk%3a%3aboot,merge_over#.fxlnk

11
CHANGELOG.md

@ -5,6 +5,17 @@ The latest `## [X.Y.Z]` header must match the `version` field in `punkproject.to
Entries are newest-first; one bullet per notable change. See the root `AGENTS.md` Entries are newest-first; one bullet per notable change. See the root `AGENTS.md`
"Project Versioning" section for the bump policy. "Project Versioning" section for the bump policy.
## [0.28.1] - 2026-07-27
- The win32-ix86 verification kits (punkluck86 / punk91ix86) wrap new MINIMAL payloads
`punk8min.vfs` / `punk9min.vfs`: boot fauxlinks plus multi-arch binary packages only
(iocp-2.0.2 both majors, twapi-5.0b1 for tcl8, via directory fauxlinks - no binary
duplication), pure-tcl set via the dll-free `_vfscommon.vfs` overlay. The previous
full 64-bit payloads broke basic shell functionality on the 32-bit kits: a
higher-versioned x64 Thread shadowed the LUCK runtime's working 32-bit copy, and
x64-only dlls could never load. Both kits now run a working piped shell session and
resolve Thread/iocp/twapi (punkluck86 additionally udp) at correct architecture.
## [0.28.0] - 2026-07-27 ## [0.28.0] - 2026-07-27
- Kit boot finds its payload wherever the runtime mounted the attached archive (G-129): - Kit boot finds its payload wherever the runtime mounted the attached archive (G-129):

2
punkproject.toml

@ -1,4 +1,4 @@
[project] [project]
name = "punkshell" name = "punkshell"
version = "0.28.0" version = "0.28.1"
license = "BSD-2-Clause" license = "BSD-2-Clause"

21
src/runtime/mapvfs.config

@ -114,13 +114,20 @@ tclsh9.0.5-punk-bi.exe {punk9win_for_tkruntime.vfs punk9bi_beta zip}
tclkit-902-Linux64-intel-dyn {punk9linux.vfs punkshell902 kit linux-x86_64} tclkit-902-Linux64-intel-dyn {punk9linux.vfs punkshell902 kit linux-x86_64}
#G-129 verification runtimes: third-party 32-bit windows, bin/runtime/win32-ix86/ tier #G-129 verification runtimes: third-party 32-bit windows, bin/runtime/win32-ix86/ tier
# (see goals/G-129-kitboot-mountpoint-derivation.md). Kept active so both zipfs mount # (see goals/archive/G-129-kitboot-mountpoint-derivation.md). Kept active so both zipfs
# conventions stay covered by real kits. # mount conventions stay covered by real kits.
#These wrap the MINIMAL payloads punk8min.vfs / punk9min.vfs: boot fauxlinks plus
# multi-arch binary packages only (win32-ix86 subdir present: iocp-2.0.2 both majors,
# twapi-5.0b1 for tcl8), with the pure-tcl module/lib set arriving via the _vfscommon
# overlay. The original full punk8win/punk9win_for_tkruntime pairings shipped x64-only
# binary packages into 32-bit kits: a higher-versioned x64 Thread shadowed the runtime's
# working 32-bit copy (broke the repl), and x64-only dlls (tcludp etc) could never load
# (repointed 2026-07-27).
#androwish/undroidwish 8.6 zipfs backport (LUCK build): mounts its attached archive at the #androwish/undroidwish 8.6 zipfs backport (LUCK build): mounts its attached archive at the
# EXECUTABLE'S OWN PATH and has no tcl::zipfs::root - the boot derives the mount point # EXECUTABLE'S OWN PATH and has no tcl::zipfs::root - the boot derives the mount point
# from the runtime's own mount table. 8.6 payload. # from the runtime's own mount table.
tclsh8.6.10-luck-zip.exe {punk8win.vfs punkluck86 zip win32-ix86} tclsh8.6.10-luck-zip.exe {punk8min.vfs punkluck86 zip win32-ix86}
#apn tcl-sfe 9.1b0 32-bit: modern //zipfs:/app convention - proves the 32-bit target #apn tcl-sfe 9.1b0 32-bit: modern //zipfs:/app convention - proves the 32-bit target
# itself needs nothing special. Runtime carries no Tk, so pair the no-tk-payload vfs # itself needs nothing special. Runtime carries no Tk; Thread/twapi/sqlite3/tdbc are
# (its tk-carrying siblings ship x64 dlls a 32-bit runtime cannot load). # STATIC in this runtime (32-bit builtins - G-058 capture resolves them).
tclsh9.1b0-tclsfe.exe {punk9win_for_tkruntime.vfs punk91ix86 zip win32-ix86} tclsh9.1b0-tclsfe.exe {punk9min.vfs punk91ix86 zip win32-ix86}

1
src/vfs/AGENTS.md

@ -21,6 +21,7 @@ VFS (Virtual File System) folders define the runtime payloads that get wrapped i
- `src` mode loads unbuilt modules and libraries from the project's `src/` tree (`src/modules`, `src/lib`, `src/bootsupport`, `src/vendormodules`) instead of built output. It also runs an inline `#modpod` package-ifneeded scanner (using Tcl builtins only, since no punk modules are loaded at boot time) and sets `package prefer latest` so `999999.0a1.0` dev modules are preferred over stable bootsupport/vendored copies. - `src` mode loads unbuilt modules and libraries from the project's `src/` tree (`src/modules`, `src/lib`, `src/bootsupport`, `src/vendormodules`) instead of built output. It also runs an inline `#modpod` package-ifneeded scanner (using Tcl builtins only, since no punk modules are loaded at boot time) and sets `package prefer latest` so `999999.0a1.0` dev modules are preferred over stable bootsupport/vendored copies.
- `_config/punk_main.tcl` and `_config/project_main.tcl` derive the kit's payload location from the runtime's own zipfs mount table (G-129): zipfs presence keys on `tcl::zipfs::mount` (not `tcl::zipfs::root`, which the androwish/undroidwish 8.6 backport lacks), the mount base is the table entry whose archive file is `[info nameofexecutable]` (fallback: the mount containing the boot script), `//zipfs:/app` stays the expected modern answer rather than a compiled-in assumption, and a mounted archive that cannot be attributed to the executable is reported on stderr. The derivation lives in `::punkboot` procs (`zipfs_kit_mountbase`, `zipfs_mount_pairs`, `path_within`) that remain defined after boot for probing and tests. Both files carry identical copies of this logic (G-031 is the planned consolidation). Characterization: `src/tests/shell/testsuites/punkexe/kitmountpoint.test`. - `_config/punk_main.tcl` and `_config/project_main.tcl` derive the kit's payload location from the runtime's own zipfs mount table (G-129): zipfs presence keys on `tcl::zipfs::mount` (not `tcl::zipfs::root`, which the androwish/undroidwish 8.6 backport lacks), the mount base is the table entry whose archive file is `[info nameofexecutable]` (fallback: the mount containing the boot script), `//zipfs:/app` stays the expected modern answer rather than a compiled-in assumption, and a mounted archive that cannot be attributed to the executable is reported on stderr. The derivation lives in `::punkboot` procs (`zipfs_kit_mountbase`, `zipfs_mount_pairs`, `path_within`) that remain defined after boot for probing and tests. Both files carry identical copies of this logic (G-031 is the planned consolidation). Characterization: `src/tests/shell/testsuites/punkexe/kitmountpoint.test`.
- `punk8win.vfs` carries TWO startup-script fauxlinks resolving to `_config/punk_main.tcl`: root `main.tcl` (modern zipfs and metakit convention) and `app/main.tcl` (the undroidwish family sources `app/main.tcl` INSIDE the attached archive; the file is inert in kits whose runtime does not look for it). Fauxlink targets are link-location-relative (symlink semantics): `make.tcl`'s `merge_over` resolves them against the link file's own directory, which is indistinguishable from the old vfs-root-relative resolution for root-level links. - `punk8win.vfs` carries TWO startup-script fauxlinks resolving to `_config/punk_main.tcl`: root `main.tcl` (modern zipfs and metakit convention) and `app/main.tcl` (the undroidwish family sources `app/main.tcl` INSIDE the attached archive; the file is inert in kits whose runtime does not look for it). Fauxlink targets are link-location-relative (symlink semantics): `make.tcl`'s `merge_over` resolves them against the link file's own directory, which is indistinguishable from the old vfs-root-relative resolution for root-level links.
- `punk8min.vfs` / `punk9min.vfs` are MINIMAL payloads for the win32-ix86 verification kits (punkluck86 / punk91ix86 in `src/runtime/mapvfs.config`): both startup fauxlinks plus directory fauxlinks to MULTI-ARCH binary packages only - packages whose own tree carries a `win32-ix86` platform subdir (iocp-2.0.2 for both majors, twapi-5.0b1 for tcl8), linked from their existing homes in sibling `.vfs` folders so no binary is duplicated in VCS. Everything pure-tcl arrives via the `_vfscommon.vfs` overlay (which deliberately contains no dlls). Composition rule: an x64-only binary package must NOT be added to these payloads - a higher-versioned wrong-arch copy silently shadows a runtime's own working 32-bit package on plain `package require` (measured 2026-07-27: payload Thread 2.8.12 x64 beat the LUCK runtime's 2.8.5 and broke the repl), and wrong-arch-only packages surface as "couldn't load from current filesystem" at require time.
- `dev` mode loads built output from `<projectroot>/modules` and `<projectroot>/lib`; `src` mode loads unbuilt source from `<projectroot>/src/modules` etc. Use `src-dev-internal` to combine both with src priority. - `dev` mode loads built output from `<projectroot>/modules` and `<projectroot>/lib`; `src` mode loads unbuilt source from `<projectroot>/src/modules` etc. Use `src-dev-internal` to combine both with src priority.
## Work Guidance ## Work Guidance

0
src/vfs/punk8min.vfs/app/main.tcl#..+..+_config+punk_main.tcl#@punk%3a%3aboot,merge_over#.fxlnk

0
src/vfs/punk8min.vfs/lib_tcl8/iocp-2.0.2#..+..+punk8win.vfs+lib_tcl8+iocp-2.0.2#@punk%3a%3aboot,merge_over#directory.fxlnk

0
src/vfs/punk8min.vfs/lib_tcl8/twapi-5.0b1#..+..+punk86.vfs+lib_tcl8+twapi-5.0b1#@punk%3a%3aboot,merge_over#directory.fxlnk

0
src/vfs/punk8min.vfs/main.tcl#..+_config+punk_main.tcl#@punk%3a%3aboot,merge_over#.fxlnk

0
src/vfs/punk9min.vfs/app/main.tcl#..+..+_config+punk_main.tcl#@punk%3a%3aboot,merge_over#.fxlnk

0
src/vfs/punk9min.vfs/lib_tcl9/iocp-2.0.2#..+..+punk9magicsplat.vfs+lib_tcl9+iocp-2.0.2#@punk%3a%3aboot,merge_over#directory.fxlnk

0
src/vfs/punk9min.vfs/main.tcl#..+_config+punk_main.tcl#@punk%3a%3aboot,merge_over#.fxlnk

Loading…
Cancel
Save