Field-driven follow-ons to G-121 from driving make.tcl with an msys/cygwin-runtime
tclsh (scoop msys2 tclsh8.6, tcl_platform(platform)=unix):
- bakelist: when the derived per-platform runtime store folder does not exist, a
stderr WARNING now shows the platform-canon derivation (tcl_platform os/platform
-> canon, observed mingw64-x86_64 under a MINGW64_NT MSYSTEM env) and the header
line carries (FOLDER MISSING) - every row reading runtime=missing now self-
diagnoses its non-per-entry cause. bake's "No executable runtimes found" exit
gains the same note when the folder is absent. Native-host output unchanged
(maketclbakelist.test 4 PASS).
- make.tcl shell 'help platforms' degraded to "punk::platform package not
available" on ALL hosts (not msys-specific): the module was absent from the
bootsupport snapshot. Added punk::platform to
src/bootsupport/modules/include_modules.config (pure Tcl, deps only Tcl's own
platform package); verified the full canon table renders via a piped
'help platforms' under tclsh90 src/make.tcl shell.
- G-013 Notes: recorded the msys raw-mode field finding (cursor placed at row 1
after each command under the msys pty class) as a raw-mode-default blocker
dimension - console/repl work, deliberately outside the make.tcl host/target
catering goal being drafted.
Claude-Session: https://claude.ai/code/session_01Jz7wkUsknJzyuJ3tgMaL2t
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Acceptance verified in full (evidence recorded in the detail file's Progress
section): bakelist under plain tclsh + punk902z with per-entry presence and
deployed state; selective 'bake punk91' refreshing only that kit's _build/bin
artifacts and punkcheck records (stat + punkcheck diffs, negative grep clean);
unknown-name no-build errors; bare bake kit-set parity; help/workflow contract
updates; maketclbakelist.test 4 PASS; punkshell 0.24.0 minor bump.
Index entry moved to GOALS-archive.md. Reference sweep: no pending-tense
live-tier mentions existed; mapvfs.config pointer updated to the archive path;
forward-pointing notes pushed as back-pointers to the live goals they serve
(G-024 parsed-model reader swap, G-023 scheme-expansion entry point, G-115
per-kit payload detail, G-057 single-kit icon verification, G-028 deployed
-state reporting sibling, G-101 kit-type non-assumption).
Detail-file move to goals/archive/ follows in the adjacent commit as a pure
rename (root AGENTS.md Doc Restructures).
Claude-Session: https://claude.ai/code/session_01Jz7wkUsknJzyuJ3tgMaL2t
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
use wart fixed (both payloads + rewrapped bin/punk-runtime.cmd, checkfile
ERROR-free, scriptwrap roundtrip + binscripts freshness suites green 35/0):
candidate lookup falls back to <name>.exe when the exact name is absent -
exact names (incl. extensionless unix artifacts in foreign -platform staging
folders) still match first. Verified live in a throwaway platform folder via
the .cmd (ps1 payload) and the bash payload driven directly (msys exe-magic
already masked the wart under msys bash; the fallback serves real unix shells).
make.tcl: new ::punkboot::runtime_materialization_warning (warn-only, local,
no network) - the kit loop compares each wrapped working runtime's beside-toml
revision against the highest -r<N> artifact revision in the same folder and
emits a recapped BUILD-WARNING naming the repair command. Verified live: toml
demoted to revision=1 fires the warning once + recap (and would have caught
today's stale-r1 punk9_beta incident at the first bake); current state silent;
no spurious rewraps. Pre-family runtimes (no toml) and direct -r<N> references
stay silent.
Docs: bin/AGENTS.md runtime-manager contract (suffixless use + guard note),
src/AGENTS.md Work Guidance bullet; G-121 Notes records the guard as
bakelist's acting-path complement; G-031 Notes records the make.tcl-shell
punkexe-surface question with the boot-core vehicle recommendation.
punkshell 0.23.1 + CHANGELOG.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
New proposed goal: 'bakelist ?kitname...?' informational lister (mapping +
runtime presence + deployed state; name filter doubles as per-kit detail) and
'bake ?kitname...?' selective baking with bare bake unchanged. Both defined
against the parsed mapping model so the G-024 toml conversion slides
underneath. Ergonomics decision record in Alternatives (bake -list and
action-grouped bake rejected per the G-112 stage-true principle; bare 'kits'
already rejected in the G-112 name-selection record). Overlap survey recorded:
substantive relations G-024/G-023/G-115/G-057/G-028/G-101 + archived
G-104/G-098 precedent. Delivers the mapvfs.config todo (comment retires when
the goal lands).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Each site read in context, not grep-replaced; bakehouse vs bake chosen per
meaning, and missing invocation arguments supplied where the reference
describes an unattended flow:
- G-005 Approach + Notes, G-006 Acceptance + body: 'make.tcl project' ->
'make.tcl bakehouse' (the full consumer build these goals integrate with;
no flags - conceptual references on a clean checkout, not recipes).
- G-057 Acceptance: 'make.tcl project' -> 'make.tcl bake' (icon embedding
lives in the kit-wrap stage and must hold for a bare bake; bakehouse
inherits).
- G-028 Context DELIBERATELY UNCHANGED: dated 2026-07-07 incident narrative -
the command actually run; history stays verbatim (alias keeps it readable).
- src/runtime/mapvfs.config todo: 'vfs' -> 'bake' wish, re-annotated - G-104
achieved WITHOUT the single-kit-by-name/list-kits item (still open).
- src/runtime/vendorlib_vfs.toml header: vfslibs now runs as a phase of bake
(G-112 fold), not 'as part of project'.
- shellexit.test + staticruntime.test rebuild comments: 'project' -> 'bake'
AND stale '(interactive y confirmation)' / bare vfscommonupdate corrected to
'-confirm 0' (piped y retired since G-030) - the missing-arguments class.
- punk.project layout store vfs READMEs (lib + modules): 'make.tcl vfs' ->
'make.tcl bake'; modpod template twins propagated via the punkcheck
layout->modpod sync (make.tcl modules run), never hand-edited.
Variant-phrasing sweep confirmed non-hits: G-115 '(vfs assembly)' names the
src/vfs payload tier (name retained), G-047 'make.tcl/project.new' is the dev
project.new command. Archive tier + CHANGELOG history untouched.
goals_lint + goals_xref refs clean.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
New informational pass in goals_lint (stem-sibling repair heuristic): a
live-tier reference to a version-suffixed filename that is MISSING while a
same-stem sibling exists on disk warns, naming the sibling(s) - the drift
signature of manually-versioned module bumps (libunknown), magic-scheme
conversions (config) and stamped bootsupport/vendored renames (fauxlink),
exactly the classes fixed in the preceding hygiene commit. References with no
stem-sibling stay quiet (proposed goals legitimately name future artifacts);
archive tier, globs, URLs, absolute paths and 999999.0a1.0 exempt; warnings
never fatal (Scope is contract text - the fix stays a directed edit).
Verified: clean on the current tree (incl. correctly-silent existing legacy
artifacts) and against a synthetic fixture exercising warn + all five silent
classes with per-file dedupe.
GOALS.md: front matter bumped v2 -> v3; version-section policy broadened per
user direction - bump for ANY change that could affect how an LLM interprets
or uses the system (contract, grammar, tooling behaviour, output shape);
liberal bumping endorsed. Format section gains Scope version-reference
guidance (glob or magic-version filename for stamped files; exact versions
only in dated prose). goals/AGENTS.md Verification describes the new check;
src/modules/AGENTS.md manual-versioning bullet gains bump step (4): the doc
reference sweep.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Activation gated on the G-112 rename core + G-104 contract (both achieved
today); score re-run recorded. First increment:
- suite_tcl86/: sources.config (source + self-description records - lists and
describes itself via 'make.tcl buildsuite list/info' with no make.tcl
edits), suite.tcl fork (folder-derived naming, {tcl tclthread tclvfs}
requireds, build86.zig recipe file), build86.zig pending-derivation skeleton
(staging succeeds, recipe fails with a clear message), build.zig.zon with
real zig-fetch hashes, README with the DERIVATION record.
- Thread 2.8 selection: thread-2-8-branch @ e14fa771ae (tagged thread-2-8-13,
2.8.13); configure.ac TCL_MAJOR_VERSION==8 guard confirms the pairing.
- 8.6 source records in BOTH flows: dev refs (core-8-6-branch -> tcl86,
thread-2-8-branch, tclvfs trunk 1.4.2-era) + zon per-checkin pins
(tcl 1d1d5cbd91 = 8.6.18 era).
- First staging run through 'make.tcl buildsuite build suite_tcl86' (a real
driver run through the G-104 surface): checkouts staged from the shared
hermetic store, TCL_PATCH_LEVEL 8.6.18 read from the tree.
- makefile.vc derivation findings recorded incl. two Context corrections:
8.6.18 DOES generate tclUuid.h; zlib is prebuilt-import in stock nmake
(zig-only recipe will compile compat/zlib statically).
Core-test census + baseline deliberately pending until a built tclsh86 exists
(recorded in Progress).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Acceptance evidence recorded in each detail file before the content-identical
archive moves:
- G-112: fresh-rebuild bake products BYTE-IDENTICAL to pre-rename vfs products
(punk91 zip-wrap + punk86 kit-wrap; vacuous punkcheck-skip pass caught and
redone), vfslibs phase runs inside bake, aliases + bakehouse dirty-refusal
verified live, docs/layout copies swept, punkexe suites 54/0 green.
- G-113: zero-ESC piped on tclsh90 + punk kit + 8.6, force overrides, real
Windows-console and WSL-pty mode=tty evidence, maketclcolour.test green;
manual-visual note recorded.
- G-104: list/info/build + self-description contract verified incl. a copied
tree; punk-kit hosting; docs in place.
Sweep: G-005/G-018/G-035/G-047/G-099 pending-tense references rewritten with
archive pointers; forward-notes pushed to G-108/G-061/G-105; G-099<->G-108
re-bridged with a direct Related line (their bridges were all archived).
Also: tclsh9.0.5-punk working runtime re-materialized to r2 (stale local
materialization exposed by the window's bake - G-118 piperepl pins green again).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Root README, src/README, src/AGENTS.md (full-build guidance, provenance command
list incl. bakehouse's default-on dirty gate, punk-exe-hosted builds,
verification), src/modules + src/lib + src/vfs + src/tests + src/tests/shell +
src/runtime AGENTS.md workflow references, and the rebuild-instruction comments
in scriptexec.test/tclshcmd.test. G-104's G-058 mention gains its archive
marker. Historical CHANGELOG entries untouched; goal-file contract texts
(G-005/G-006/G-057 Acceptance mention 'make.tcl project') left for
proposal-first user approval - the deprecated alias keeps them executable.
Layout make.tcl copies are punkcheck-synced build outputs - they refresh via
the normal sync channels in the acceptance build, never hand-edited.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
buildsuite group added as a declared passthrough (punk::args + fallback paths):
list discovers suites (dirs carrying suite.tcl; _build excluded), info renders
the manifest-derived detail, build forwards driver args untouched streaming
output and exiting with the driver's status (punk-kit-hosted runs launch the
driver via the kit's script subcommand, selected by the G-058 marker).
Self-description = manifest option: sources.config gains description/product/
doc/zigpin records parsed by both suite.tcl (strict; pinned-zig default now
reads zigpin - one source of truth) and make.tcl (tolerant). suite_tcl90
seeded with its records. Copied trees appear automatically (verified with a
throwaway copy). Contract documented in new src/buildsuites/README.md +
AGENTS.md, indexed from src/AGENTS.md. CHANGELOG extended under 0.23.0.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
vfs -> bake (kit assembly; vfslibs phase folded in so a bake cannot ship stale
binary libs), project retired -> bakehouse (packages + bake, -dirty-abort
default ON, refusal names the granular developer flow). project/vfs remain as
deprecated aliases: one-line stderr notice + pre-dispatch mapping; alias
argdocs mirror their targets so flags parse identically. vfslibs survives as a
standalone narrowing (in-session decision recorded in the goal file).
SUBOPTS/SUMMARIES/HELPTEXTS/SUBGROUPS/known_commands, end-of-run guidance,
plain gethelp and workflow text rewritten to the two-persona model (groups:
build & bake / promotion gates / source maintenance / deprecated aliases).
Verified: tabled + PUNKBOOT_PLAIN help; dirty-tree refusal via bakehouse and
via the project alias; alias help renders. punkshell 0.23.0 + CHANGELOG.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Activation-freshness scores re-run per the maintenance rules and recorded in
each detail file's Notes; new Related lines: G-104 -> G-108 (debug-tier
variants ride the same driver/self-description contract), G-113 -> G-061
(ConPTY could automate the interactive-colour verification). G-112 open
decisions resolved at activation (user-directed): vfslibs folds into bake
(standalone-narrowing survival decided in-session), project/vfs alias
deprecation window = until the 8.6 arc completes.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
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
Acceptance verified in full against the fixture punkbin server
(PUNKBIN_URL override): ahead/behind verdicts naming both revisions
(behind with fetch+use guidance), current annotation preserved,
pre-family no-basis note + sha1 hash-identity, no-name-fetch one-line
divergence note; ps1/bash verdict-line parity asserted per scenario;
runtimecmd roundtrip pin green; bin/AGENTS.md runtime-manager contract
records the surface. Suite evidence in the detail file's flip record.
Activation and flip both 2026-07-25 (user-directed activation; overlap
survey re-run at activation - only G-033 related, already recorded; no
new Related lines). Detail file: status achieved + activation/flip
evidence records (the goals/ -> goals/archive/ move itself rode the
previous commit as a pure 100% rename; this commit carries the flip's
content edits). Index entry moved to GOALS-archive.md. Reference sweep:
G-033's G-119 note updated to landed-state wording with the archive
path (its package-mode docs must not contradict the shipped freshness
contract on naming); goals_lint clean (83 active / 37 archived);
goals_xref report carries no G-119-bridged unlinked pairs.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
list -remote now states the relationship between the ACTIVE runtime and
the SERVER DEFAULT whenever both are known: explicit freshness: AHEAD/
BEHIND verdicts naming both revisions (BEHIND adds a fetch+use update
guidance line), an equivalent current verdict where the (= server
default) identity annotation did not fire, a different-series
incomparable note, and a stated no-revision-basis note for pre-family
actives - with sha1 VALUE-matching against the server sha1sums
identifying a byte-copy of a server artifact by content (support-file
rows excluded; first ordinal/C-collation match in both payloads). A
NO-NAME fetch prints the same verdict as a one-line note when the
active diverges from the resolved default (BEHIND carries an inline
'use <default>' hint - the artifact was just fetched). Revision basis:
-r<N> parsed from artifact-named actives, else the beside-toml revision
field (materialized working copies); the default's revision parses from
its defaults.txt name. Verdict lines are byte-identical across the
payloads; guidance lines keep each payload's program-name convention.
Help text (list/fetch sections) mentions the new surface;
bin/punk-runtime.cmd rewrapped (checkfile clean, no spacer resize).
New fixture-server suite
shell/testsuites/binscripts/runtimecmd_freshness.test: a child-process
http file server (new src/tests/testsupport/httpfixture.tcl) serves a
crafted punkbin layout behind the PUNKBIN_URL override; the ps1 payload
runs as the staged committed .cmd via cmd.exe (wrap-pinned path), the
bash payload directly under a probed msys/git bash (on windows the
polyglot routes unix shells to the powershell payload; WSL bash
rejected - WSL2 cannot reach a 127.0.0.1 fixture server). Covers the
five G-119 acceptance scenarios with per-scenario ps1/bash verdict-line
parity plus bash-side extras (different-series incomparable, fetch-mode
BEHIND hint): 7/7 pass; scriptwrap + binscripts subtrees 32 pass /
1 pre-existing skip / 0 fail (roundtrip, checkfile, WSL, dtplite
unaffected).
bin/AGENTS.md runtime-manager contract records the verdict surface;
src/tests + src/tests/shell AGENTS docs cover the new suite and helper.
punkshell 0.21.0 + CHANGELOG entry.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Acceptance verified in full: all 11 issue-list items dispositioned
(2026-07-24) with decided fixes landed (items 3/4/5/9 in 0.20.0, items 1/7
via the G-117-cycle patch rev, item 10 docs in 0.20.1, item 11 console test)
and items 2/6/8 documented-as-intended in the item-10 definitions; durable
doc home = punk::args::moduledoc::punkexe; tclshcmd.test 19 piped tests
green vs punk902z + punk9_beta; dorepl console-reopen path console-driven
(punkconsole gate, 21/21 with PUNK_TEST_CONSOLE=1).
Flip: detail file status achieved 2026-07-25 + flip evidence record; entry
moved to GOALS-archive.md; detail file to goals/archive/. Reference sweep:
ARCHITECTURE.md tclsh bullet marked achieved + G-118 removed from the
in-flux launch-surface list; G-031/G-032/G-077/G-120 notes updated with
archive markers and landed-state wording (G-032 now points at the shipped
punkexe moduledoc ids as its source material; G-077 notes the boundary text
to update when -e lands). goals_lint clean, architecture_lint clean,
goals_xref report carries no G-118-bridged unlinked pairs.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
New src/tests/testsupport/consoleinject.ps1: the G-106 recipe's injection
half as a committed helper - FreeConsole/AttachConsole to a target pid's
console, open CONIN$, type lines as WriteConsoleInput key events.
tclshcmd.test: constraint punkconsole (windows + PUNK_TEST_CONSOLE=1; normal
runs skip) gates two tests driving the reopen path end-to-end in the child's
OWN hidden console (outer Start-Process -WindowStyle Hidden wrapper owns a
fresh console; wrapper runs '<kit> tclsh' there with std handles redirected
to files; piped code sets dorepl; injected lines + exit 0 finish it).
Pinned: reopened flips 0 -> 1 at reopen with istty immutable at 0,
inputbuffer published empty, reopen notice silent by default and STDERR-only
under TCLSH_PIPEREPL_DEBUG=1, injected exit completes with code 0 - closing
the item-1/7 console-side residue. Deadlines + wrapper-tree kill keep the
tests hang-proof; the piped-harness HANG RULE stands for everything else.
Verified: PUNK_TEST_CONSOLE=1 run 21/21 against punk9_beta; normal run
19 pass + 2 console skips; shell/*** suite 64 pass / 4 skips / 0 fail.
AGENTS updates: src/tests/shell (tclshcmd bullet - coverage now exists,
refined hang rule), src/tests (testsupport index + .ps1 helpers wording).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
New punk::args::moduledoc::punkexe 0.1.0: (script)::punkexe dispatch
definition (package modes, subcommand enumeration, default reclassification)
+ (script)::punkexe::tclsh full contract (stock arg-form parity incl the
deliberate no -e boundary (G-077), lib: refusal, piperepl ::tclsh state
array + env gates, intended divergences recorded per item decisions 2/6/8)
+ summary definitions for script/shell/punk/shellspy. G-032-compatible: the
launcher help/parse wiring renders from these ids later.
punk::args 0.12.7: update_definitions handles tag-prefixed id namespaces
first-class - namespace_docpackages consulted with the tagged key (usage/
real_id on registered-but-unloaded (script)::* ids no longer no-such-id),
generic tag strip for the real-namespace probes, unqualified-ns warning no
longer fires for tag ids. args/ns/repl suites 352 pass 0 fail.
punk::repl 0.5.3: code-interp setup catch-requires the punkexe moduledoc
beside tclcore (both sites) so the docs are queryable in any punk shell.
ARCHITECTURE.md: tclsh subcommand bullet in the boot/launch chain
(architecture_lint clean). punkproject 0.20.1 + CHANGELOG.
Verified: fresh-interp usage-first render (real_id path); rebuilt punk902z
kit self-carries 0.1.0 (5298-char tclsh render); piped punk session renders
(script)::punkexe with no manual require.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
- GOALS.md: "Goals-system: v2" front matter; canonical "Goals system versions"
section; Scope structure rule (elements separated by '; ' at top level,
commas only inside parens/braces); Child DOX Index note in root AGENTS.md
- goals_lint.tcl: new finding for top-level commas in Scope lines
(paren/brace depth-aware)
- goals_xref.tcl: repo-local configuration via goals/xref.conf (path roots,
stop words, file extensions, reference containers, module dirs,
bare_path_roots, prefix_anchors); defaults byte-identical to previous
behaviour (verified on this tree)
- goals/AGENTS.md: cross-repo goal references drop the G- prefix; xref.conf
documented in Verification
- Scope delimiter normalisation across GOALS.md, GOALS-archive.md and all
detail files, live and archived: 224 lines, top-level commas only;
conservation verified (goals_xref report byte-identical pre/post, diff
hunks are Scope lines only). Archived tier converted under explicit user
approval; sanctioned exception recorded in GOALS-archive.md.
Assisted-by: harness=opencode; primary-model=openrouter/moonshotai/kimi-k3; api-location=openrouter.ai
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
build905.zig kit-family: 2 shared payload trees wrap 3 kits via zipfs_mkimg.tcl,
so the per-member embedded record needs a per-kit embed argument on the wrap
tool; -Doriginurl/-Dpackager join familyrev as b.option()s. build_id fork to
decide: random-per-configure (cache-busting) vs uuid-shaped digest of stable
identity inputs (reproducible, cache-friendly) - leaning the digest.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
family_artifacts.tcl runs after kits are built, so the embed lands at kit-family
staging and emission mounts each kit exe to READ the embedded record back -
sidecar fields derive from it (identical build_id by construction; emission
inherently verifies the embed exists). sha1/size stay sidecar-only; embedded
filename namespaced per the G-025 reconciliation.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Cross-references recorded after user-prompted overlap review (none of the four
files referenced its counterpart): G-117 embedded runtime record vs G-025
kit-layer stamp (record expected to survive kit wrap - two-layer provenance,
build_id linkage for the stamp's runtime field, namespaced filenames); G-118
item 10 refined to G-032-COMPATIBLE punk::args definitions as the docs home
(rendering/parsing/degradation stay with G-032; item-4 file-exists precedent
noted for G-032's reclassification rule); item 9 duplication interim pending
G-031; G-077 tclsh -e boundary note. G-118 Progress records items 3/4/5/9
landed (0.20.0) with verification evidence.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
User-approved draft from the publication-session design exchanges:
embed a copy of the artifact record in the attached image (embed-then-
hash ordering; sidecar + sha1sums stay the integrity authority) with a
punk-runtime 'info' action for stray/renamed binaries (zip-central-
directory read preferred over executing the target), AND harden the
record as schema v1: schema, build_id (embedded+sidecar correlation
uuid), origin (canonical repo built FOR - the timing-safe reframe of
first-published-on; mirrors preserve it), packager (declarative;
minisign noted as the verification complement), project/project_url,
license summary, build_host_platform. Emitted records gain brief toml
'#' comments for non-obvious fields (line-based consumers ignore them
by construction). Lifecycle fields deliberately rejected as repo-level
curation. Next emission after landing = r2; published r1 immutable.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Publication side-effects handled ahead of the punkbin push (b5c258f
there - first family -r1 artifacts + metadata + defaults flip to
tclsh9.0.5-punk-r1.exe):
- remote-only rows skip support files (the six metadata tomls now ride
in the server's sha1sums beside the runtimes; same extension set as
the local candidate filter).
- the '(= server default)' active marker also matches via the active's
beside-toml artifact identity: the default names an immutable -r<N>
artifact while the active is typically its materialized WORKING name,
so exact-name matching alone would never fire post-family.
Live-verified against the pushed server: no-name fetch resolves
tclsh9.0.5-punk-r1.exe + metadata; list -remote shows all three -r1
artifacts Same version, the default row marked, active
tclsh9.0.5-punk.exe annotated '(= server default)' through its toml
identity, and no toml leakage. G-067 note records publication done
(r1 immutable - next republish takes -Dfamilyrev=2). Rewrapped;
roundtrip pin PASS; layout copy refreshed. Project 0.18.8.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
User-approved draft giving the tcltls battery line a live goal home after
G-103's archive: backend choice (LibreSSL-portable vs no-asm OpenSSL) is
an in-goal decision, static link mirrors the tcllibc/tk shape, loopback
self-signed handshake + G-107 record-mode testsuite as verification, and
vendored prebuilt removal explicitly scoped OUT (recorded disposition
only - G-004-era work).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Final acceptance item closed by the punk9_beta/punk9bi_beta kit-wrap
trial (user go-ahead; quiet tree): make.tcl project wrapped both kits
over the family runtimes (the user's own earlier same-day build agreed -
punkcheck no-change), and probes UNDER each kit verified 9.0.5,
//zipfs:/app/tcl_library, PIPEREPL MACHINERY PRESENT, Thread 3.0.7
winning over the vfs payload's legacy thread3.0.1, vfs/tcllib/tcllibc
engaged, punk::args from the vfs side, and Tk create/destroy in both -
punk9bi_beta's Tk necessarily from the runtime's attached image
(punk9win_for_tkruntime.vfs carries none). Every acceptance clause is
now met; evidence recorded in the detail file.
Flip mechanics: Status achieved 2026-07-22; detail file to
goals/archive/ (content-identical move after edits); index entry to
GOALS-archive.md; reference sweep across 13 live goal files (archive
markers per the G-058 precedent - non-contract text only, Scope lines
untouched; pending-tense updates in G-099 arc-unblocked, G-108 family
production landed, G-018/G-023 naming-authority pointers). Forward
pointers pushed to live goals: G-101 (8.6-family deferral target),
G-067 (family -rN artifacts exist; publication user-gated with the
defaults.txt flip process).
Flagged (completion report): tcltls bi-battery line loses its goal home
with this archive - candidate goal on request; punk9wintk905.vfs legacy
thread3.0.1 payload cleanup can ride a future payload refresh; beta
promotion is the user's interactive trial per the *_beta convention.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
The per-platform default fetch runtime is a punkbin RELEASE DECISION, so
it now lives as server data (punkbin defaults.txt, c4d948f there) rather
than values baked into the payloads: updating the recommendation is a
one-line punkbin edit in the same change-set that publishes the artifact
it points at - immediate effect for every deployed punk-runtime, no
punkshell release, validated by punkbin's maintenance script, and
mirror-curatable. No pre-convention fallback per user direction (no
mirrors exist yet) - a server without the file gets an actionable
name-it-explicitly message, as does a platform without a recorded line.
Both payloads in parity (rewrapped; roundtrip pin PASS; twins + layout
copy refreshed): baked rt_default/runtime_available prong values removed
(the linux-arm one had already drifted from the server's actual artifact
name - the config-in-code failure mode this removes); default lookup
keys on the RESOLVED platform, so no-name 'fetch -platform <p>' now
works for foreign staging too (supersedes the foreign-name-required
rule); cached-copy fallback on network failure. ps1 fix: $arch? in
usage strings parsed as a variable NAMED 'arch?' - brace-delimited.
Verified: file:// happy path (local + foreign default), no-entry
platform, missing-manifest, and the LIVE server's 404 path (graceful
until punkbin c4d948f is pushed). Project 0.18.5.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com