Browse Source

make.tcl vfscommonupdate outputs: punkcheck 0.6.0, punk::lib 0.5.1, cli 0.5.1 into _vfscommon; project 0.17.5

Batched punkcheck-managed build outputs. All mapped kits rebuilt and
redeployed against the refreshed _vfscommon (punkbi punksys punk86
punk91 punk905 punk902z) - shipped kits now preload punkcheck 0.6.0
(G-095 lock protocol) and punk::lib 0.5.1.

Verification: rebuilt punk86 (8.6.17) runs the punkcheck subtree +
compat suites 136 pass / 2 gated skips / 0 fail via runtests -
including the child-process concurrency tests that need the kit's
preloaded punkcheck to carry the lock API. Native Tcl 9.0.3 and 8.6.17
punkcheck subtrees re-verified 84/84. punk905/punksys sanity-probed
(punkcheck 0.6.0 + lock API present).

punkproject.toml 0.17.5 + CHANGELOG entry.

Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
master
Julian Noble 7 days ago
parent
commit
db08369654
  1. 5
      CHANGELOG.md
  2. 2
      punkproject.toml
  3. 25
      src/vfs/_vfscommon.vfs/modules/punk/lib-0.5.1.tm
  4. 39
      src/vfs/_vfscommon.vfs/modules/punk/mix/cli-0.5.1.tm
  5. 1256
      src/vfs/_vfscommon.vfs/modules/punkcheck-0.6.0.tm

5
CHANGELOG.md

@ -5,6 +5,11 @@ 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.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.
- runtests hardening (test tooling, rides this release): the runner's own requires are version-floored (`punk::args 0.12-`, `punk::lib 0.5.1-`, punk::path already floored) - the floors alone resurrect even the old fossilized kit; punkcheck's concurrency suite floors its child-side require so a stale kit host fails loud instead of mysteriously.
## [0.17.4] - 2026-07-21
- punk::lib 0.5.1: `punk::lib::compat::lpop` now matches the 8.7/9 builtin exactly on error paths too - out-of-range errors use the builtin's message and `{TCL VALUE INDEX OUTOFRANGE}` errorcode (previously a nonstandard `tcl_lpop ...` message), and variable-access failures (unset variable, whole-array name, missing array element) reproduce the builtin's message and errorcode naming the caller's variable. Validated by a differential parity matrix against the real builtin, pinned in the punk::lib compat testsuite; no known divergence remains (8.6's index parser already accepts TIP-176 `M+N` arithmetic).

2
punkproject.toml

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

25
src/vfs/_vfscommon.vfs/modules/punk/lib-0.5.0.tm → src/vfs/_vfscommon.vfs/modules/punk/lib-0.5.1.tm

@ -8,7 +8,7 @@
# (C) 2024
#
# @@ Meta Begin
# Application punk::lib 0.5.0
# Application punk::lib 0.5.1
# Meta platform tcl
# Meta license BSD
# @@ Meta End
@ -18,7 +18,7 @@
# doctools header
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools
#[manpage_begin punkshell_module_punk::lib 0 0.5.0]
#[manpage_begin punkshell_module_punk::lib 0 0.5.1]
#[copyright "2024"]
#[titledesc {punk general utility functions}] [comment {-- Name section and table of contents description --}]
#[moddesc {punk library}] [comment {-- Description at end of page heading --}]
@ -295,7 +295,7 @@ tcl::namespace::eval punk::lib::check {
if {$replversion eq ""} {
#not loaded - determine what version would be provided, without loading it:
#an unsatisfiable require triggers the package unknown scan (registering ifneeded
#scripts) then fails before any load (0.5.0 dev modules are alpha - below 999999).
#scripts) then fails before any load (0.5.1 dev modules are alpha - below 999999).
catch {package require punk::repl 999999}
set available [package versions punk::repl]
if {[llength $available]} {
@ -613,9 +613,20 @@ tcl::namespace::eval punk::lib::compat {
}
proc lpop {lvar args} {
#*** !doctools
#[call [fun lpop] [arg listvar] [opt {index}]]
#[call [fun lpop] [arg listvar] [opt {index ...}]]
#[para] Forwards compatible lpop for versions 8.6 or less to support equivalent 8.7 lpop
#upvar $lvar l
#[para] Index forms come from the running Tcl's core index parser (lindex/lrange/lreplace),
#[para] which accepts the same integer?\[+-]integer? / end?\[+-]integer? grammar on 8.6
#[para] (TIP 176) as 8.7/9. Behaviour - results, final list state, error messages and
#[para] errorcodes - matches the builtin; pinned by the compat testsuite (compat.test).
if {[catch {uplevel 1 [list ::set $lvar]} lreaderr lreadopts]} {
#variable access failed (unset variable, whole-array name, or missing array element).
#Probing with a plain read in the caller's frame - BEFORE creating the upvar link -
#reproduces the builtin's message and errorcode exactly (through a link, or once a link
#exists, the detail flattens: e.g 'no such variable' loses its TCL LOOKUP errorcode and
#a missing array element misreports as 'no such variable').
return -code error -errorcode [dict get $lreadopts -errorcode] $lreaderr
}
upvar 1 $lvar l
if {![llength $args]} {
set args [list end]
@ -628,7 +639,7 @@ tcl::namespace::eval punk::lib::compat {
for {set i 0} {$i < [llength $args]} {incr i} {
set idx [lindex $args $i]
if {![llength [lrange $subl $idx $idx]]} {
error "tcl_lpop index \"$idx\" out of range"
return -code error -errorcode [list TCL VALUE INDEX OUTOFRANGE] "index \"$idx\" out of range"
}
lappend path [lindex $args $i]
set subl [lindex $l {*}$path]
@ -9379,7 +9390,7 @@ namespace eval ::punk::args::register {
package provide punk::lib [tcl::namespace::eval punk::lib {
variable pkg punk::lib
variable version
set version 0.5.0
set version 0.5.1
}]
return

39
src/vfs/_vfscommon.vfs/modules/punk/mix/cli-0.5.0.tm → src/vfs/_vfscommon.vfs/modules/punk/mix/cli-0.5.1.tm

@ -7,7 +7,7 @@
# (C) 2023
#
# @@ Meta Begin
# Application punk::mix::cli 0.5.0
# Application punk::mix::cli 0.5.1
# Meta platform tcl
# Meta license <unspecified>
# @@ Meta End
@ -772,7 +772,6 @@ namespace eval punk::mix::cli {
-glob $fileglob
-max-depth 0
}]
#lassign [punkcheck::start_installer_event $punkcheck_file $installername $srcdir $basedir $config] _eventid punkcheck_eventid _recordset record_list
# -- ---
set installer [punkcheck::installtrack new $installername $punkcheck_file]
#set installer [punkcheck::installtrack new $installername $punkcheck_file stderr] ;#with debugchannel
@ -990,7 +989,6 @@ namespace eval punk::mix::cli {
} else {
puts -nonewline stderr "Z"
set did_skip 1
#set file_record [punkcheck::installfile_skipped_install $basedir $file_record]
$build_event targetset_end SKIPPED
}
$build_event destroy
@ -1180,7 +1178,6 @@ namespace eval punk::mix::cli {
} else {
puts -nonewline stderr "T"
set did_skip 1
#set file_record [punkcheck::installfile_skipped_install $basedir $file_record]
$build_event targetset_end SKIPPED
}
$build_event destroy
@ -1293,9 +1290,6 @@ namespace eval punk::mix::cli {
}
#------------------------------
#
#set target_relpath [punkcheck::lib::path_relative $basedir $target_module_dir/$basename-$module_build_version.tm]
#set file_record [punkcheck::installfile_begin $basedir $target_relpath $installername -eventid $punkcheck_eventid]
$event targetset_init INSTALL $target_module_dir/$basename-$module_build_version.tm
$event targetset_addsource $versionfile
$event targetset_addsource $current_source_dir/$m
@ -1306,24 +1300,11 @@ namespace eval punk::mix::cli {
$event targetset_addsource_virtual module_version $module_build_version
}
#set changed_list [list]
## -- --- --- --- --- ---
#set source_relpath [punkcheck::lib::path_relative $basedir $versionfile]
#set file_record [punkcheck::installfile_add_source_and_fetch_metadata $basedir $source_relpath $file_record]
## -- --- --- --- --- ---
#set source_relpath [punkcheck::lib::path_relative $basedir $current_source_dir/$m]
#set file_record [punkcheck::installfile_add_source_and_fetch_metadata $basedir $source_relpath $file_record]
## -- --- --- --- --- ---
#set changed_unchanged [punkcheck::recordlist::file_install_record_source_changes [lindex [dict get $file_record body] end]]
#set changed_list [dict get $changed_unchanged changed]
if {\
[llength [dict get [$event targetset_source_changes] changed]]\
|| [llength [$event get_targets_exist]] < [llength [$event get_targets]]\
} {
#set file_record [punkcheck::installfile_started_install $basedir $file_record]
$event targetset_started
# -- --- --- --- --- ---
set target $target_module_dir/$basename-$module_build_version.tm
@ -1338,7 +1319,6 @@ namespace eval punk::mix::cli {
#file copy -force $srcdir/$m $target
lappend module_list $target
# -- --- --- --- --- ---
#set file_record [punkcheck::installfile_finished_install $basedir $file_record]
$event targetset_end OK
} else {
if {$is_interesting} {
@ -1346,7 +1326,6 @@ namespace eval punk::mix::cli {
}
puts -nonewline stderr "m"
set did_skip 1
#set file_record [punkcheck::installfile_skipped_install $basedir $file_record]
$event targetset_end SKIPPED
}
prune_superseded_target_modules $event $basedir $target_module_dir $basename $module_build_version
@ -1358,17 +1337,6 @@ namespace eval punk::mix::cli {
continue
}
##------------------------------
##
#set target_relpath [punkcheck::lib::path_relative $basedir $target_module_dir/$m]
#set file_record [punkcheck::installfile_begin $basedir $target_relpath $installername -eventid $punkcheck_eventid]
#set changed_list [list]
## -- --- --- --- --- ---
#set source_relpath [punkcheck::lib::path_relative $basedir $current_source_dir/$m]
#set file_record [punkcheck::installfile_add_source_and_fetch_metadata $basedir $source_relpath $file_record]
## -- --- --- --- --- ---
#set changed_unchanged [punkcheck::recordlist::file_install_record_source_changes [lindex [dict get $file_record body] end]]
#set changed_list [dict get $changed_unchanged changed]
#----------
$event targetset_init INSTALL $target_module_dir/$m
$event targetset_addsource $current_source_dir/$m
catch {
@ -1382,7 +1350,6 @@ namespace eval punk::mix::cli {
|| [llength [$event get_targets_exist]] < [llength [$event get_targets]]\
} {
#set file_record [punkcheck::installfile_started_install $basedir $file_record]
$event targetset_started
# -- --- --- --- --- ---
if {$did_skip} {set did_skip 0; puts -nonewline stdout \n}
@ -1390,7 +1357,6 @@ namespace eval punk::mix::cli {
file copy -force $current_source_dir/$m $target_module_dir
puts stderr "Copied already versioned module $current_source_dir/$m to $target_module_dir"
# -- --- --- --- --- ---
#set file_record [punkcheck::installfile_finished_install $basedir $file_record]
$event targetset_end OK -note "already versioned module"
} else {
puts -nonewline stderr "f"
@ -1398,7 +1364,6 @@ namespace eval punk::mix::cli {
if {$is_interesting} {
puts stderr "$current_source_dir/$m [$event targetset_source_changes]"
}
#set file_record [punkcheck::installfile_skipped_install $basedir $file_record]
$event targetset_end SKIPPED
}
prune_superseded_target_modules $event $basedir $target_module_dir $basename $tmfile_versionsegment
@ -1687,6 +1652,6 @@ namespace eval punk::mix::cli {
## Ready
package provide punk::mix::cli [namespace eval punk::mix::cli {
variable version
set version 0.5.0
set version 0.5.1
}]
return

1256
src/vfs/_vfscommon.vfs/modules/punkcheck-0.4.0.tm → src/vfs/_vfscommon.vfs/modules/punkcheck-0.6.0.tm

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save