Acceptance verified on the rebuilt punk91 kit (plain script mode): recipe
'chan close stderr; open NUL w' yields a channel auto-named stderr with
working puts stderr; console+repl+libunknown suites 105/105. Detail file
archived content-identically with evidence recorded; GOALS-archive record
appended; sweep: G-101 launch-ladder item (2) rewritten to reflect
achievement (in-place stdio repair now available on the 9.1 kit), G-011
gains a recycled-stderr consumer pointer. goals_xref report shows no
orphaned shared-archived-ref bridges for G-120; goals_lint clean.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Activation: proposed->active flip (user-confirmed), goals_xref score re-run
recorded in detail Notes (nothing beyond the drafting survey).
Holder named: punk::libunknown zipfs_tm_UnknownHandler's builtin-static
shortcircuit leaked its version-probe child interp 'ptest' whenever an
UNVERSIONED package require of a true static reached the handler -
'package vsatisfies $v' with zero requirement args throws wrong#args,
skipping both interp-delete lines. The leaked non-safe child holds
registrations on the process std channels, so 'chan close stderr' left the
OS handle alive and the slot occupied; the next open got a fileN name and
puts stderr failed (punk91/tclsfe-9.1b0 only: Thread is a true static there,
punk905 loads it from a dll so the block never fires).
Fix (0.2.2): auto-named probe interp deleted in try/finally; zero-requirement
requires accept any provided static version; probe errors fall through to the
normal tm search. Disposition recorded in the goal detail: leak, fixed - not
console-ownership machinery.
Verified: bin/punk91 src script recipe yields channel auto-named stderr with
working puts stderr; libunknown+console+repl suites 105/105 pass (tclsh90).
punkproject 0.22.1 + CHANGELOG.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
6 days ago
13 changed files with 243 additions and 70 deletions
Scope: src/scriptapps/bin/punk-runtime.ps1 + punk-runtime.bash (+ rewrapped bin/punk-runtime.cmd); bin/AGENTS.md (runtime-manager contract); src/tests/modules/punk/mix/testsuites/scriptwrap/ (roundtrip pin; behavioural fixture surface settled in the work)
Scope: src/scriptapps/bin/punk-runtime.ps1 + punk-runtime.bash (+ rewrapped bin/punk-runtime.cmd); bin/AGENTS.md (runtime-manager contract); src/tests/modules/punk/mix/testsuites/scriptwrap/ (roundtrip pin; behavioural fixture surface settled in the work)
Acceptance: against a fixture punkbin server (PUNKBIN_URL override): list -remote prints explicit ahead/behind verdicts naming both revisions (behind adds fetch+use update guidance) and keeps the (= server default) annotation for current; a pre-family active (no toml, no -rN name) yields a stated no-revision-basis note or its sha1 hash-identity when it value-matches a server artifact; a no-name fetch prints a one-line active-vs-default note on divergence; both payloads deliver identical verdict lines (fixture surface settled: shell/testsuites/binscripts/runtimecmd_freshness.test + testsupport/httpfixture.tcl); the runtimecmd roundtrip pin stays green; bin/AGENTS.md's runtime-manager contract records the new surface.
Acceptance: against a fixture punkbin server (PUNKBIN_URL override): list -remote prints explicit ahead/behind verdicts naming both revisions (behind adds fetch+use update guidance) and keeps the (= server default) annotation for current; a pre-family active (no toml, no -rN name) yields a stated no-revision-basis note or its sha1 hash-identity when it value-matches a server artifact; a no-name fetch prints a one-line active-vs-default note on divergence; both payloads deliver identical verdict lines (fixture surface settled: shell/testsuites/binscripts/runtimecmd_freshness.test + testsupport/httpfixture.tcl); the runtimecmd roundtrip pin stays green; bin/AGENTS.md's runtime-manager contract records the new surface.
Acceptance: the registration holder is named (module, proc, mechanism) with reproduction evidence; the disposition is recorded here (deliberate-and-documented, or fixed); a script-mode run of the recipe `chan close stderr; open NUL w` on the current 9.1 kit yields a channel auto-named stderr with working puts stderr, and the console + repl module suites (src/tests/modules/punk/console/, src/tests/modules/punk/repl/) pass.
Goal: identify what in the 9.1-kit script-mode boot path retains a registration on the process std channels (keeping their std slots occupied and their OS handles alive across an explicit chan close), determine whether that retention is deliberate console-ownership machinery or a leak, and land the recorded disposition so that closing a std channel frees its slot - restoring Tcl's std-channel recycling - without breaking console abstraction behaviour.
Goal: identify what in the 9.1-kit script-mode boot path retains a registration on the process std channels (keeping their std slots occupied and their OS handles alive across an explicit chan close), determine whether that retention is deliberate console-ownership machinery or a leak, and land the recorded disposition so that closing a std channel frees its slot - restoring Tcl's std-channel recycling - without breaking console abstraction behaviour.
Acceptance: the registration holder is named (module, proc, mechanism) with reproduction evidence; the disposition is recorded here (deliberate-and-documented, or fixed); a script-mode run of the recipe `chan close stderr; open NUL w` on the current 9.1 kit yields a channel auto-named stderr with working puts stderr, and the console + repl module suites (src/tests/modules/punk/console/, src/tests/modules/punk/repl/) pass.
Acceptance: the registration holder is named (module, proc, mechanism) with reproduction evidence; the disposition is recorded here (deliberate-and-documented, or fixed); a script-mode run of the recipe `chan close stderr; open NUL w` on the current 9.1 kit yields a channel auto-named stderr with working puts stderr, and the console + repl module suites (src/tests/modules/punk/console/, src/tests/modules/punk/repl/) pass.
@ -46,6 +46,48 @@ by absence: strip the suspected stage and re-run the recipe.
catch {package require punk::args::moduledoc::tclcore} ;#while tclcore is highly desirable, and should be installed with punk::args - it's not critical
catch {package require punk::args::moduledoc::tclcore} ;#while tclcore is highly desirable, and should be installed with punk::args - it's not critical
catch {package require punk::args::moduledoc::punkexe} ;#launch subcommand family documentation (G-118) - not critical
catch {package require punk::args::moduledoc::tclcore} ;#while tclcore is highly desirable, and should be installed with punk::args - it's not critical
catch {package require punk::args::moduledoc::tclcore} ;#while tclcore is highly desirable, and should be installed with punk::args - it's not critical
catch {package require punk::args::moduledoc::punkexe} ;#launch subcommand family documentation (G-118) - not critical