diff --git a/GOALS.md b/GOALS.md index 547ffdb6..e98c5836 100644 --- a/GOALS.md +++ b/GOALS.md @@ -153,7 +153,7 @@ Detail: goals/G-022-fossil-rename-punkshell.md Scope: src/make.tcl; src/runtime/ (mapping config - see G-024); bin/ (build outputs) Detail: goals/G-023-version-named-binaries.md -### G-025 [proposed] Punk executables self-report project version and build provenance +### G-025 [active] Punk executables self-report project version and build provenance Scope: src/vfs/_config/punk_main.tcl (subcommand dispatch); src/make.tcl (stamping build info into the vfs); src/vfs/ (stamp payload location); src/modules/punk/ (in-shell command - the single implementation) Detail: goals/G-025-exe-selfreport.md diff --git a/goals/G-025-exe-selfreport.md b/goals/G-025-exe-selfreport.md index 2cba0287..27a4c628 100644 --- a/goals/G-025-exe-selfreport.md +++ b/goals/G-025-exe-selfreport.md @@ -1,6 +1,6 @@ # G-025 Punk executables self-report project version and build provenance -Status: proposed +Status: active Scope: src/vfs/_config/punk_main.tcl (subcommand dispatch); src/make.tcl (stamping build info into the vfs); src/vfs/ (stamp payload location); src/modules/punk/ (in-shell command - the single implementation) Goal: a punk executable reports its identity from embedded data rather than its filename - a documented subcommand prints the punkproject.toml project version it was built from plus the input runtime binary name and vfs folder name used to assemble it - with the same-named command available in the punk module so scripts running in any punk shell (including tclsh-hosted ones like `tclsh src/make.tcl shell`) get the same report in-process without exec, stamp fields reported as absent rather than fabricated when there is no stamp. Acceptance: the build stamps project version, runtime binary name, and vfs folder name into the kit; the built executable invoked with the version-report subcommand prints those fields machine-parseably on stdout and exits 0 with no other output (G-015-compatible; no repl fallthrough); a same-named command in the punk module returns the same fields in-process (subcommand implemented as a wrapper over it - one implementation) and works from the code interp; the report distinguishes stamped provenance from live facts: a stamped kit reports its stamp, a `src`-mode or source-tree session additionally reports the live punkproject.toml version as a distinct field when it differs, and unstamped contexts (`tclsh src/make.tcl shell`, plain tclsh with punk modules) report stamp fields explicitly absent with live runtime facts (actual `info nameofexecutable`) still provided; the report is correct when the executable file has been renamed or copied; executables built before stamping existed fail gracefully with a clear message rather than fabricating values.