- a leading '-' argument is no longer treated as a script name: all args stay in
::argv and the subcommand proceeds to the repl (tty) or stdin evaluation
(piped), matching stock tclsh
- '-encoding name fileName' sources the script with the named encoding;
incomplete -encoding forms fall through to the argv path as stock does
- lib: scriptlib names are refused with a pointer to the 'script' subcommand
(exit 1): the tclsh subcommand keeps plain-tclsh semantics, no punk modules
- also carries the piperepl dispatch work-in-progress this session's review
validated: TCLSH_PIPEREPL gate default enabled-unless-0 (G-103 patched-runtime
policy) and the no-arg branch (tty -> tclsh repl via dorepl; piped -> read
stdin + eval with tcl_interactive/dorepl 0)
- punkproject 0.19.0 + changelog entry
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
@ -5,6 +5,18 @@ 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.19.0] - 2026-07-23
- `bin/punk-runtime.cmd`: sha1 hashing (fetch verification, `list -remote` comparison) no longer depends on `Get-FileHash` - a script-defined function in Windows PowerShell 5.1 that vanishes on machines with a damaged PSModulePath while compiled cmdlets keep working (observed in the field: "Get-FileHash ... not recognized" under PS 5, making `list -remote` report spurious UPDATE AVAILABLE and fetch verification fail closed). Hashing now uses .NET directly (`Get-PunkFileSha1`), working on any PowerShell edition/state, with a one-time informational note when the damaged condition is detected. The bash payload's multi-tool sha1 probing was already robust and is unchanged.
- `tclsh` subcommand: stock tclsh argument forms - a leading `-` argument no longer errors as a
script name: all arguments stay in `::argv` and the subcommand proceeds to the repl/stdin
evaluation, matching stock `tclsh - args...`; `-encoding name fileName` is recognised and the
script is sourced with the named encoding (incomplete `-encoding` forms fall through to argv,
as stock). `lib:` scriptlib names are refused with a pointer to the `script` subcommand
(exit 1) - the tclsh subcommand keeps plain tclsh semantics and loads no punk modules.
Pinned by `src/tests/shell/testsuites/punkexe/tclshcmd.test` (new suite, also covering the
piperepl launch-state contract on patched kits).
## [0.18.9] - 2026-07-22
## [0.18.9] - 2026-07-22
- punk::mod 0.1.2: punk::apps `latest` app-version selection fixed (version-selection audit) - a plain lexical sort picked the LOWEST version as latest (and misorders 1.10 vs 1.9); now `package vcompare`-sorted highest, empty unversioned-main entries excluded. Audit outcome: all other punk-owned `[package versions]` consumers already sort with vcompare; naive sorts remain only in vendored third-party code (tcllib doctools, pattern-1.2.8.tm) - flagged, not edited, per the vendor no-edit policy.
- punk::mod 0.1.2: punk::apps `latest` app-version selection fixed (version-selection audit) - a plain lexical sort picked the LOWEST version as latest (and misorders 1.10 vs 1.9); now `package vcompare`-sorted highest, empty unversioned-main entries excluded. Audit outcome: all other punk-owned `[package versions]` consumers already sort with vcompare; naive sorts remain only in vendored third-party code (tcllib doctools, pattern-1.2.8.tm) - flagged, not edited, per the vendor no-edit policy.