Acceptance evidence in the archived detail file: embed verified in all three
family members (family_check), sidecar derived from embed with identical
build_id, 'info' identifies sidecar-paired/renamed-stray/pre-v1 files without
execution and flags doctored-sidecar disagreements, punkbin AGENTS.md schema
docs, roundtrip pin green, record survives make.tcl kit wrapping (punk9_beta
reads its runtime's r2 record in-kit), r2 re-emitted with full v1 records.
Sweep: achieved markers in G-025/G-057/G-108/G-116/G-118/G-119 (G-025's
survival expectation updated to confirmed). tclshcmd.test pins
::tclsh(reopened) publication on the rebuilt patched kits (G-118 items 1+7
landed+verified; Progress updated). build905.zig: packager git-identity leg
judges success by output not out_code (resolved 'unrecorded' on this host -
effective at next emission).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
@ -152,3 +152,7 @@ Acceptance: on a twapi-less suite runtime, raw enable/disable work via the fallb
### G-103 [achieved 2026-07-22] runtime kit family from buildsuites: plain / punk / bi kits with attached batteries + artifact metadata → detail: goals/archive/G-103-runtime-kit-family.md
Scope: src/buildsuites/suite_tcl90/ (kit assembly steps in recipe/driver; pattern for later suites), src/vfs/_config + src/runtime/mapvfs.config (as consumers of the new runtime names), punkbin repo layout + metadata (c:/repo/jn/punkbin; compatible repos), src/scriptapps runtime scriptset (punk-runtime list/use - renamed under G-097, achieved 2026-07-21)
Acceptance: suite_tcl90 produces named artifacts for at least plain, punk, and one bi (+Tk) kit; each verified self-contained from a path with no external Tcl visible (info library resolves into the attached zip; package require checks for Thread, vfs + representative vfs::* packages, tcllib module + tcllibc acceleration engaged; bi adds Tk create/destroy) with the checks recorded here; the punk kit demonstrates piperepl active by default and disabled via the documented env opt-out, the plain kit demonstrates stock behaviour (no patch); artifact metadata (variant, versions, target, source provenance) is emitted alongside the binaries in the punkbin layout and surfaced by the runtime scriptset's list/use; the naming scheme for family members is documented, with piperepl-patched runtime executables carrying 'punk' in the name to distinguish them from unpatched (e.g tclsh905punk.exe - the tcl-patchlevel / punk-version / separator questions resolved and the decision recorded here) and mapvfs.config consuming the punk/bi runtimes under the decided names; the 8.6 family variant is explicitly deferred to the G-101 container investigation (static vfs / metakit patching questions).
### G-117 [achieved 2026-07-24] Self-describing family runtimes: embedded artifact record + metadata schema v1 → detail: goals/archive/G-117-self-describing-runtimes.md
Acceptance: kit-family embeds the record in all three members with the embed-then-hash ordering documented; family_check verifies the embedded record exists and matches probed facts; 'punk-runtime info' identifies fetched-with-sidecar and bare-renamed copies via a non-executing zip central-directory read (cooperative probe documented as fallback) and flags embedded-vs-sidecar disagreement; v1 fields documented in punkbin AGENTS.md; build_id identical embedded+sidecar; '#' field comments emitted; parsing tolerates unknown fields/absent schema (pre-v1 r1 keeps working); both payloads in parity with the roundtrip pin green; r2 re-emitted carrying the full v1 record (r1 immutable as published).
@ -78,7 +78,7 @@ TCL_COMPILE_STATS similarly must be absent (not =0) for release performance.
- G-105 relationship (recorded 2026-07-24 after overlap review): debug members
join the family x target matrix - the -dbg<n> tier suffix composes with
-target as a dimension sibling, not a separate suite tree.
- G-117 relationship: debug-tier artifacts carry the same schema v1 record; the
- G-117 relationship (achieved 2026-07-24 - see goals/archive/G-117-self-describing-runtimes.md): debug-tier artifacts carry the same schema v1 record; the
-dbg<n> tier distinction belongs to the artifact-name/variant fields
family_check already probes, not new schema.
- G-116 relationship: its static crypto + tls battery enlarges the
@ -15,7 +15,7 @@ The subcommand is an extension of standard tclsh behaviour, not an exact emulato
## Issue list
All 11 items dispositioned by the user 2026-07-24 (activation session). Items 1 and 7 need a tclMain piperepl patch rev + suite rebuild and are batched with the G-117 cycle (item 2 stays document-only, no patch change).
All 11 items dispositioned by the user 2026-07-24 (activation session). Items 1 and 7 shipped via the tclMain piperepl patch rev in the G-117 cycle (G-117 achieved 2026-07-24 - see goals/archive/G-117-self-describing-runtimes.md); item 2 stays document-only, no patch change.
1. Reopen message noise: on the eof-with-dorepl console-reopen path the patch unconditionally prints "? reopen stdin from console" to STDOUT (tclMain_piperepl_905.c). Options: drop / move to stderr / env-gate (e.g TCLSH_PIPEREPL_DEBUG). Decision 2026-07-24: FIX - drop the message (stock tclsh prints nothing entering a repl); add a TCLSH_PIPEREPL_DEBUG=1 env gate re-enabling patch diagnostics. Patch rev, batched with the G-117 cycle.
2. tcl_interactive read divergence (gate open): a script-arg launch from a CONSOLE reads ::tcl_interactive as 1 where stock tclsh reads 0, because the patch links it to the tty flag before the startup script (the early link is load-bearing - it is how a piped script that sets dorepl opts into prompts/echo). Options: accept + document (current state, recorded in patches/README.md) / patch rev that preserves stock read semantics for script-arg launches while keeping the write lever. Decision 2026-07-24: ACCEPT + DOCUMENT - patches/README.md wording stands; no patch change; console dorepl sessions keep their automatic prompts.
@ -42,4 +42,5 @@ All 11 items dispositioned by the user 2026-07-24 (activation session). Items 1
- 2026-07-24 items 3/4/5/9 LANDED (punkproject 0.20.0): no-script forms set ::argv0 to [info nameofexecutable] (both repl and piped-eval paths); missing script file pre-checked with clean not-found + exit 1; machinery-absent console stdin fails fast via the app-punkscript terminal probe (piped degraded eval unchanged; patch-missing notice reworded to "note:", deliberate TCLSH_PIPEREPL=0 opt-out now quiet, old debug lines deleted); project_main.tcl carries the full mirrored dispatch (script-arg/dash/-encoding/lib: forms - previously single-arg-only with stale gate default) and both layout _config copies byte-synced. Verified: all mapvfs kits rebuilt; tclshcmd.test extended to 19 (tclsh_noscript_argv0, tclsh_script_notfound); shell/*** suite 64 pass / 2 goal-gated skips / 0 fail.
- 2026-07-24 overlap reconciliation (user-prompted review): cross-references recorded with G-025 (kit-layer stamp counterpart - see G-117 Notes for the record-survives-kit-wrap + filename-namespacing considerations), G-032 (item 10 refined: docs authored as G-032-compatible punk::args definitions), G-031 (item 9 duplication interim), G-077 (tclsh -e boundary note).
- Remaining for acceptance: patch-rev items (1, 7) via the G-117 suite rebuild cycle; item 10 definitions (G-032-compatible) also carrying the documented-as-intended records (items 2, 6, 8) and the G-077 boundary; console-driven test (item 11); ARCHITECTURE.md tclsh-subcommand bullet rides the item-10 docs change-set.
- 2026-07-24 items 1 + 7 LANDED and verified (G-117 cycle suite rebuild): reopen notice now TCLSH_PIPEREPL_DEBUG-gated with all reopen-path messages on stderr; ::tclsh(reopened) published (family_check gate probe asserts 0 at gate-open start / absent on plain+opt-out on all three family members; tclshcmd.test tclsh_pr_noarg_machinery pins it against the rebuilt punk9_beta). The console-reopen FLIP to 1 and the notice's console-side silence remain item-11 console-harness verification.
- Remaining for acceptance: item 10 definitions (G-032-compatible) also carrying the documented-as-intended records (items 2, 6, 8) and the G-077 boundary; console-driven test (item 11); ARCHITECTURE.md tclsh-subcommand bullet rides the item-10 docs change-set.
Goal: every family runtime carries a copy of its artifact metadata record INSIDE the attached image (e.g /app/punkbin-artifact.toml, written at kit-family staging time - necessarily WITHOUT the final sha1, which is computed over the finished binary and lives only in the sidecar toml + sha1sums), so a runtime separated from its sidecar remains identifiable via a punk-runtime 'info' action (embedded record and sidecar shown side by side, disagreements flagged); AND the metadata record is hardened as SCHEMA v1: schema (format version), build_id (uuid stamped in embedded AND sidecar - the offline correlation key for renamed copies), origin (canonical artifact repo the artifact was built FOR - mirrors preserve it; -Doriginurl, default punkbin), packager (declared identity; -Dpackager > env > git identity > unrecorded), project/project_url, license summary, build_host_platform - so records circulating on punkbin-compatible repos from different packagers stay interpretable and attributable.
Acceptance: kit-family embeds the record in all three members with the embed-then-hash ordering documented (embedded copy carries the v1 fields but no self-sha1; the sidecar + sha1sums remain the integrity authority); family_check verifies the embedded record exists and its variant/patchlevel/battery fields MATCH the probed facts for each member; 'punk-runtime info <name>' reports identity for (a) a fetched artifact with its sidecar and (b) a bare RENAMED copy with no sidecar - the embedded-read mechanism is decided and documented in the work (zip-central-directory read of the exe-appended archive by the host payload where available vs a cooperative probe that executes the target with a generated script, execution caveat stated) - and flags embedded-vs-sidecar disagreement; the v1 field set is documented in punkbin AGENTS.md with each field's semantics (notably origin's built-for-not-published-on meaning and packager's declarative-not-verified status, with minisign sidecars noted as the verification complement); family_artifacts emits all v1 fields with build_id present and IDENTICAL in embedded and sidecar copies, and the emitted records carry brief '#' comment lines documenting the non-obvious fields (toml-spec comments, ignored by the existing line-based consumers); punk-runtime metadata parsing tolerates unknown fields and absent schema (pre-v1 r1 records keep working); both payloads in parity with the roundtrip pin green; the next family emission after this goal lands is r2 carrying the full v1 record (r1 stays immutable as published).
@ -118,12 +118,31 @@ hosts without a zip reader.
and its gate probe verifies the G-118 patch rev (::tclsh(reopened) published 0
gate-open, absent plain/opt-out). v1 r2 artifacts emitted with sha1sums to
out/family/punkbin/win32-x86_64 (build_ids embedded==sidecar by construction).