4.1 KiB
bin/
Purpose
Built punk shell executables (kits with the punk boot layer), assorted build/experiment tooling, and plain runtime kits under runtime/. Executables here are build outputs - agents do not hand-edit binaries.
Generated polyglot .cmd scripts - never edit in place
The .cmd scripts here (e.g runtime.cmd) are punk MULTISHELL polyglots GENERATED by
punk::mix::commandset::scriptwrap::multishell from sources under src/scriptapps/:
payload scripts (<name>.ps1, <name>.bash, ...) plus a <name>_wrap.toml config,
spliced into the punk.multishell.cmd template. The polyglot structure is deliberately
fragile (mutual shell-hiding tricks, LF-only endings, cmd.exe's 512-byte label-scanner
constraints) - a hand-edit can silently break one of the participating shells.
When asked to "fix bin/.cmd":
- Edit the payload/config sources under
src/scriptapps/(never the output file). - Re-wrap from
src/scriptapps/:punk::mix::commandset::scriptwrap::multishell <name> -askme 0(output defaults to<projectroot>/bin; requires Thread + the punk::mix modules, e.g a punk shell or a tclsh with project module paths). - The wrapper runs
checkfile(the 512-byte label/boundary validator) automatically - heed ERROR output; "possibly bogus target" warnings are normal for polyglots. - Commit source AND regenerated output together: the scriptwrap test suite pins that a
re-wrap of the runtime scriptset reproduces
bin/runtime.cmdbyte for byte (src/tests/modules/punk/mix/testsuites/scriptwrap/multishell.testscriptwrap_runtime_cmd_roundtrip_no_drift), so drift in either direction fails tests.
Local Contracts
Launch package modes (built punk shells)
The first argument to a built punk shell may be a dash-delimited package mode composed of tokens from dev, os, src, internal (e.g. punksys src, punk902z dev-os). internal is the default and is always appended when absent. A first argument that is not a valid mode list is treated as a subcommand instead. Implementation: src/vfs/_config/punk_main.tcl (search all_package_modes).
src mode is the one that matters for verifying working-tree changes:
- Discovers the project root from the executable's location (exe in
bin/-> parent directory), not from the cwd - it works from any working directory as long as the executable resides in the project'sbin/. - Prepends
src/modules,src/modules_tcl<N>,src/bootsupport/modules{,_tcl<N>}andsrc/vendormodules{,_tcl<N>}to the module path, setspackage prefer latestso dev-numbered999999.0a1.0source modules beat kit-stamped snapshots on unversionedpackage require, and registers#modpodmodules fromsrc/modules(startup notice:src mode: registered N #modpod modules from .../src/modules). - Consequence:
punksys src/punk902z srcexercises current working-tree source with no kit rebuild; a plain launch (punksys) exercises the module snapshots baked into the kit at build time.package present <pkg>reporting999999.0a1.0(vs a release version like0.7.1) tells you which set a session is running - runbooks with version expectations must state the intended launch mode.
Interactive verification shells
- Interactive console/repl verification should cover both Tcl generations - behaviour can differ materially (e.g. the Tcl 8.6 windows console channel driver vs the Tcl 9 rewrite). Use a Tcl 8.6-based punk shell (
punksys.exe) and a current Tcl 9-based punk shell (named for the Tcl release it embeds, e.g.punk902z.exeat the time of writing - ask the user which is current rather than assuming).info patchlevelin-session confirms the runtime. runtime/win32-x86_64/holds plain tclkits/tclsh runtimes without the punk boot layer - use these for clean-environment probes isolating Tcl-level behaviour from punk (they may lack extensions such as twapi; add an external lib dir toauto_pathwhen a probe needs one).
Work Guidance
Verification
None - build outputs; behaviour is verified via src/tests/ and interactive runbooks.
Child DOX Index
runtime/win32-x86_64/- plain runtime kits (no child AGENTS.md needed; covered by this file's contracts)