@ -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).