Release-step-(9) commit of the Step 5 promotion outputs (packages mint +
vfscommonupdate, driven by the tcllibc-accelerated family runtime):
_vfscommon.vfs module swap commandstack 0.7.1->0.8.0, punk 0.2.8->0.3.0,
ansi 0.2.0->0.2.1, args 0.18.0->0.25.2, libunknown 0.2.4->0.3.1,
ns 0.9.3->0.11.0, moduledoc tclcore 0.4.0->0.4.2 + punkboot 0.3.1->0.3.2;
templates-0.2.0.tm modpod repacked; the three layout-store make.tcl copies
re-synced (verified byte-identical to src/make.tcl - carries the
libunknown package-provide guard swap 5c47f3b9 and the 0.65.x message
rework). Kits pick all of this up at the next bake.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Release-step-(9) commit of the src/bootsupport refresh (user-run 'make.tcl
bootsupport'): commandstack 0.7.1->0.8.0, punk 0.2.8->0.3.0, ansi
0.2.0->0.2.1, args 0.18.0->0.25.2, moduledoc tclcore 0.4.0->0.4.2,
libunknown 0.2.4->0.3.1, ns 0.9.3->0.11.0 - all seven verified
byte-identical to the minted modules/ tree. make.tcl regains committed
provenance for the tooling it boots from; the staleness gate is satisfied
by committed content again.
With it, at the G-176 follow-on's own due point ("before or with the
bootsupport/kit promotion"): the libunknown skip-guard swapped from 'info
commands ::punk::libunknown::package' (a proc the 0.3.x
commandstack-managed install no longer creates) to a 'package provide
punk::libunknown' probe - satisfied by every vintage's boot-site source
(verified in 0.2.4 and 0.3.1; tclsh-driven boot smoke green). Disposition
flipped to landed in the archived goal; goals_lint clean. No project bump:
promoted content already versioned (0.63.0-0.65.0 arc), guard swap is
interface/output-unchanged make tooling internals.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
make.tcl bootsupport: commandstack-0.6.0.tm now pulled from minted root
modules per the repointed manifest; superseded bootsupport copies
removed - packagepreference-0.2.0 auto-pruned (punkcheck DELETE),
commandstack-0.3/0.4 removed by hand (their punkcheck lineage names the
departed src/vendormodules source, so the prune conservatively left
them; the manifest is non-glob single-version intent).
make.tcl modules sync: layout manifest copies (basic, project-0.1) and
the templates-modpod copy pick up the repointed commandstack entry.
make.tcl vfscommonupdate: _vfscommon.vfs modules commandstack
0.4.1 -> 0.6.0, punk/packagepreference 0.2.0 -> 0.2.1 (next bake
carries the fixed pair into kits). Stale .punkcheck.lock from the
completed run removed (dead pid 128656, not committed).
Verified post-promotion: commandstack suite 33/33 on punk86,
packagepreference 6/6 on tclsh90 (bootsupport snapshots on the
runtests tm path).
Claude-Session: https://claude.ai/code/session_01TNn3C58Cpekt3CsZNLCqvR
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
commandstack 0.6.0:
- tokenid unique+monotonic per (renamer,command): counter increments the
real namespace variable (was an apply-local copy stuck at 1). Same-
renamer re-renames chain through the full stack, are removable by
exact token, and a third rename no longer collides on the parked name.
- get_next_command resolves via a maintained token->implementation dict
(O(1) dispatch, no lsearch stack scan; parked stacks keep dispatching).
- get_IMPLEMENTOR: ::tcl::info::cmdtype qualified in guard and call -
the builtin classification branch is reachable (undetermined on 8.6).
- debug validates its argument with a clean error naming on_off.
- Channel discipline: informational warnings debug-gated on stderr,
stray bare 'puts stderr' removed, errors stay errors.
- Records carry trailing did_rename 0|1 (leading token/renamer key order
contract unchanged); no-rename returns {implementation {} did_rename 0}.
- rename_command errors when -renamer appears in a non-leading position.
- get_stack raw-key-first (Rename_stack-parked stacks retrievable);
Rename_stack returns 1/0; Delete_stack errors while records are live.
- New delegation helper commandstack::next (PUNKARGS-documented, in help).
- known_renamers defaults reconciled to the vendored packages' actual
renamer strings (packagetrace packagesuppress).
punk::packagepreference 0.2.1: install re-install guard reads record key
'renamer' (was 'rename' - a second install threw instead of returning 0).
Tests: the five _GAP_ defect pins flipped to fixed-behaviour pins; new
pins for did_rename/key-order + token-map consistency, silent cycle with
debug off, -renamer misplacement, commandstack::next delegation incl
caller context, Rename_stack/get_stack parking, Delete_stack guard;
new packagepreference installguard.test (double-install returns 0,
uninstall/re-install cycle with fresh tokenid). commandstack suite 33/33,
packagepreference 6/6 - green on tclsh90 (9.0.3) and punk86 (8.6).
Live punk91 src smoke: packagepreference/auto_execok/cd renames working.
Claude-Session: https://claude.ai/code/session_01TNn3C58Cpekt3CsZNLCqvR
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Module (src/modules/commandstack-999999.0a1.0.tm, 0.4.1 -> 0.5.0):
- commandstack::help now returns a real dependency-free API overview (was
an empty string): rename/remove workflow, COMMANDSTACKNEXT delegation
contract, inspection commands, in-tree users.
- PUNKARGS documentation blocks added for every API proc (help, debug,
get_stack, get_next_command, basecall, rename_command, remove_rename,
show_stack, Delete_stack, Rename_stack, util::get_IMPLEMENTOR,
lib::splitx, lib::split_body), registered lazily via
::punk::args::register::NAMESPACES - no punk::args dependency added.
Tests (new src/tests/modules/commandstack/testsuites/commandstack/commandstack.test,
29 tests, green on tclsh90 9.0.3 + punk86 8.6):
- usage-driven characterisation of the behaviours in-tree consumers rely on
(punk::packagepreference, packagetrace, packagesuppress, punk auto_execok,
punk::nav::fs cd): record shape/key-order contract, implementation {} as
the no-rename signal, COMMANDSTACKNEXT/COMMANDSTACKNEXT_ORIGINAL
delegation, multi-renamer stacking with removal in any order, builtin
renames, remove_rename argument forms, show_stack fallback render,
get_IMPLEMENTOR/split_body/splitx, help, lazy punk::args registration.
- known defects pinned as _GAP_ tests: per-renamer tokenid stuck at 1
(apply-local counter var) so same-renamer re-renames stack duplicate
tokens whose dispatch bypasses intermediate layers, and a third rename
collides on the parked-implementation name; get_IMPLEMENTOR builtin
branch unreachable (unqualified info commands pattern inside
commandstack::util); Delete_stack under a live rename self-delegates to
recursion; stray bare puts stderr writes literal stderr to stdout.
- behavioural tests run in fresh child interps (module sourced by path,
::puts shim captures module warnings for assertion).
Docs:
- src/tests/AGENTS.md: new contract - test descriptions must be single
content line (multi-line descriptions make tcltest failure banners
multi-line; punk::tcltestrun parser then swallows all later events
including the summary line - discovered authoring this suite).
- src/tests/modules/AGENTS.md: commandstack child index entry.
- punkproject.toml 0.49.2 + CHANGELOG entry.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com