From fbd19e912367bbfe4ca45282c495c35673fbba7f Mon Sep 17 00:00:00 2001 From: Julian Noble Date: Tue, 21 Jul 2026 19:07:02 +1000 Subject: [PATCH] make.tcl bootsupport re-vendor: cli 0.5.2 (mkzip fallback operative for make.tcl runs); project 0.17.6 Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com --- CHANGELOG.md | 4 ++++ punkproject.toml | 2 +- .../punk/mix/{cli-0.5.1.tm => cli-0.5.2.tm} | 18 +++++++++++++++--- 3 files changed, 20 insertions(+), 4 deletions(-) rename src/bootsupport/modules/punk/mix/{cli-0.5.1.tm => cli-0.5.2.tm} (98%) diff --git a/CHANGELOG.md b/CHANGELOG.md index c3d12009..e128b6f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ 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` "Project Versioning" section for the bump policy. +## [0.17.6] - 2026-07-21 + +- punk::mix::cli 0.5.2: the modpod zip build survives a failing `zipfs mkzip` by falling back to `punk::zip::mkzip` (the established path for zipfs-less interpreters), clearing the partial zip mkzip leaves behind and noting the interpreter + upstream ticket on stderr. Motivation: Tcl 8.7 builds predating core fix `c971e6c7c4` (tkt 7d5f1c13089d463e7796, "zipfs mkzip broken on Windows dotfiles") die with "non-unique path name" on dot-prefixed entries — hit by the templates modpod's layout `.fossil-custom` payloads when building under 8.7a6. Fallback-built modpods verified mounting identically under 9.0.3 and 8.7a6. + ## [0.17.5] - 2026-07-21 - punk86 kit restored to the build: mapped in `src/runtime/mapvfs.config` as tclkit-win64-dyn-8617 (Tcl 8.6.17) + punk8win.vfs, replacing the unmapped tclkit8613-era build whose fossilized kit-stamped `punk::args` 0.1.0 broke runtests under the kit ("invalid command name punk::args::define" - a stale registration satisfies an unversioned require, so `package unknown` never scans the modern paths). All kits rebuilt after a `vfscommonupdate`, so shipped kits now carry punkcheck 0.6.0 (G-095 lock protocol) and punk::lib 0.5.1. diff --git a/punkproject.toml b/punkproject.toml index e0155b4b..6e31fc01 100644 --- a/punkproject.toml +++ b/punkproject.toml @@ -1,4 +1,4 @@ [project] name = "punkshell" -version = "0.17.5" +version = "0.17.6" license = "BSD-2-Clause" diff --git a/src/bootsupport/modules/punk/mix/cli-0.5.1.tm b/src/bootsupport/modules/punk/mix/cli-0.5.2.tm similarity index 98% rename from src/bootsupport/modules/punk/mix/cli-0.5.1.tm rename to src/bootsupport/modules/punk/mix/cli-0.5.2.tm index 325f4f07..47d523f7 100644 --- a/src/bootsupport/modules/punk/mix/cli-0.5.1.tm +++ b/src/bootsupport/modules/punk/mix/cli-0.5.2.tm @@ -7,7 +7,7 @@ # (C) 2023 # # @@ Meta Begin -# Application punk::mix::cli 0.5.1 +# Application punk::mix::cli 0.5.2 # Meta platform tcl # Meta license # @@ Meta End @@ -951,8 +951,20 @@ namespace eval punk::mix::cli { set wd [pwd] cd $buildfolder puts "zipfs mkzip $zipfile #modpod-$basename-$module_build_version" - zipfs mkzip $zipfile #modpod-$basename-$module_build_version + set mkzip_failed [catch {zipfs mkzip $zipfile #modpod-$basename-$module_build_version} errMkzip] cd $wd + if {$mkzip_failed} { + #Known core defect: Tcl 8.7 builds predating core fix c971e6c7c4 error + #'non-unique path name' on dot-prefixed entries on Windows (core tkt + #7d5f1c13089d463e7796 'zipfs mkzip broken on Windows dotfiles') - hit by + #layout .fossil-custom/.fossil-settings payloads in the templates modpod. + #Fall back to punk::zip::mkzip, the established path for zipfs-less + #interps (stores unix-style permissions and folder entries - an accepted + #archive variant; modpod stubs read both shapes). + puts stderr "zipfs mkzip failed under Tcl [info patchlevel] ($errMkzip) - falling back to punk::zip::mkzip (known pre-c971e6c7c4 Tcl 8.7 zipfs dotfile defect - core tkt 7d5f1c13089d463e7796)" + catch {file delete -- $zipfile} ;#a failed zipfs mkzip can leave a partial target zip - punk::zip::mkzip refuses to overwrite + punk::zip::mkzip -base $buildfolder -directory $buildfolder/#modpod-$basename-$module_build_version -- $zipfile * + } } else { #use -base $buildfolder so that -directory is included in the archive - the modpod stub relies on this - and extraction would be potentially messy otherwise @@ -1652,6 +1664,6 @@ namespace eval punk::mix::cli { ## Ready package provide punk::mix::cli [namespace eval punk::mix::cli { variable version - set version 0.5.1 + set version 0.5.2 }] return