make.tcl bootsupport re-vendor: punk::lib 0.5.1 (fixed compat lpop for the runner's toplevel boot); project 0.17.4
The runtests toplevel guard loads the bootsupport punk::lib snapshot -
this re-vendor puts the parity-fixed compat family there (the
testinterp guard already resolved the dev module via prefer-latest).
punkproject.toml 0.17.4 + CHANGELOG entry.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
@ -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.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).
- runtests (test tooling, rides this release): the harness now runs under a native Tcl 8.6 tclsh - guarded `punk::lib` compat loads (lpop family) at both boot levels, no-ops on Tcl 9 (fast `-discover-only` boot unchanged). Full-suite mode parity re-verified on Tcl 9.0.3 (`PARITY: ok`, baseline exec-14.3 only).
## [0.17.3] - 2026-07-21
- punkcheck 0.6.0 (G-095, goal achieved): concurrent writers to one `.punkcheck` file can no longer corrupt it or silently erase each other's records, and readers never see torn content. Saves are write-temp-then-atomic-rename (with reader-side retry for the Windows replace-window open denial); whole installer events hold an advisory sibling `.punkcheck.lock` (new `punkcheck::lock` namespace - holder pid/host/installer/timestamp in the lockfile, backoff-retry acquisition to a timeout that errors naming the holder, stale-break on provably-dead holder pid or age, in-process reference-counted re-acquisition; env overrides `PUNKCHECK_LOCK_TIMEOUT`/`PUNKCHECK_LOCK_STALEAGE`); deferred flushes merge own records into freshly-loaded file state; an mtime/size tripwire warns on protocol-bypassing writers; the duplicate-INSTALLER recovery raises a clean actionable error instead of prompting when stdin is non-interactive. Verified by a new concurrency suite (real child installer processes) on Windows Tcl 9.0.3 + 8.6.17 and linux (WSL tclsh 8.6.14).