make.tcl vfscommonupdate + modules ripple from the G-032 change-set
(driven with native Tcl903 per the recorded mkimg trap - kits assembled
archive-relative, no G-134 warnings): _vfscommon punkboot/core.tcl
regenerated from the 0.3.0 master; moduledoc::punkexe 0.3.0 -> 0.4.0 and
moduledoc::punkboot 0.1.0 -> 0.2.0 version renames; punk::mix templates
modpod repacked carrying the layout _config sweep (synced copies under
the #modpod-templates tree - punkcheck-managed, never hand-edited).
Claude-Session: https://claude.ai/code/session_01Y1diJnhjUxKgEG6EwYAzxj
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
The kit launch surface dogfoods punk::args. Boot core 0.2.1 -> 0.3.0:
new built-in 'help' subcommand + '-help' / '<subcommand> -help' render
tabled usage from the moduledoc::punkexe ids plus live registrations
(per-kit resolved_def clones (script)::punkexe.launcher/.launcherhelp);
unknown first arg naming no existing file (and no lib:* reference) is
refused with usage (stderr exit 1) instead of a silent script attempt;
buildinfo enforces its no-arguments contract through punk::args (pinned
one-liner + tabled usage, exit 2 unchanged). Registration extension
::punkboot::project_subcommand_info (summary/argsid/package/parse -
documented by moduledoc::punkboot 0.2.0): project subcommands appear in
help by registration alone and may opt arguments into declared parsing.
Carve-outs: tool-style kits keep help flags routed to their processor
(tomlish parity); tclsh intercepts a help flag only as sole argument
(stock dash parity); argsid-less registrations keep -help passthrough.
G-030 degradation doctrine: lazy guarded requires (normal boots never
load punk::args), PUNKBOOT_PLAIN=1 hook, plain-list fallback, rendering
degrades independently of parsing. 8.6 trap fixed en route: punk::args
choices-grid render needs punk::lib's lpop shim - guarded require added
(verified tabled help on metakit punk86).
moduledoc::punkexe 0.4.0: (script)::punkexe::help definition; top-level
refusal rule + help discovery; per-subcommand -help notes; buildinfo
rejection shape; passthrough-vs-parsed decision recorded.
Verified on zipfs (punk902z, punk91) and metakit (punk86) kits;
launcherhelp.test 22/22 (incl fake-thin-main registration harness +
metakit leg); punkexe subtree 140/136/4skip/0fail; full suite failures
(4) are pre-existing in untouched subsystems. Goal flipped achieved +
archive record + live-tier sweep (G-038 rewrite, pointers to G-077 and
G-089); detail-file move to goals/archive follows as a pure rename.
Layout _config trio + _vfscommon core seed hand-swept (byte-identical
to masters). GOALS.md staged as the G-032-removal hunk only - the
uncommitted G-159 draft entry is left to its author.
Claude-Session: https://claude.ai/code/session_01Y1diJnhjUxKgEG6EwYAzxj
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Acceptance fully met: per-defect dispositions recorded, module tarjar-free,
suite green (punk91 7/7, tclsh90 7/7, punk86 6/7 with the 8.6 zipfs
limitation recorded per G-034), 0.1.6 re-vendored with suite passing,
tarjar-artifact dispositions user-confirmed (all five keeps, none deleted).
Index entry moved to GOALS-archive.md; sweep updates pending-tense mentions
in G-029/G-109/G-157 and pushes actionable findings to G-034 (redirect =
zero-dep load path; 8.6 vfs::zip dll-load measured) and G-110 (8.6
copy-to-temp datapoint). Detail-file rename to goals/archive/ follows as a
pure-move commit.
Claude-Session: https://claude.ai/code/session_0156PuejSCGjgeGb7jiABrDU
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Tar-era connection API removed from modpod (connect/disconnect/get,
system::connect_if_not/myname/myfullname - broken since the tarjar era, no
callers anywhere); is_valid_tm_version fixed (versionparts substitution
error); make_mountable_zip debug output removed (the undeclared ansistring
dependency made -offsettype file error under the module's declared deps;
stray ::last_header global gone); struct::set dependency dropped; module
greps tarjar-free. The load stub gains the unwrapped #modpod-<pkg>-<ver>
redirect: an extracted folder beside the .tm is sourced directly - loads
with neither zipfs nor vfs::zip available.
Re-vendored 0.1.6 through the established channels (modpod checkout mint ->
vendormodules -> bootsupport -> modules staging -> vfscommon). First modpod
testsuite at src/tests/modules/modpod/testsuites/modpod/roundtrip.test:
wrap/load round-trips - real-disk + zipfs module paths, both -offsettype
forms, unwrapped redirect, probe-discovered binary payload (no committed
binaries). Green: punk91 tcl9.1 kit 7/7, native tclsh90 7/7, punk86 8.6.17
6/7 (zipfs-container test skips on 8.6 - recorded per G-034).
G-111 activated at user request (activation overlap survey recorded);
per-defect dispositions, run evidence and tarjar-artifact assessment
proposals in goals/G-111-modpod-tidy-tests.md - artifact dispositions
await user confirmation. GOALS.md G-111 Scope version reference repaired
to glob form per goals-system v3 drift rule.
Claude-Session: https://claude.ai/code/session_0156PuejSCGjgeGb7jiABrDU
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
New proposed goal consuming G-101 follow-on items 1-3: punkshell 8.6
kits bake on the suite-built mk4 head via make.tcl (sdx ladder
suite-shell rung as a shared seam with G-157 step 4, bi-class head
variant, parity bakes for kit.punk86/kit.punkbi passing existing gates,
clean-path boot comparison vs tclkit-baked siblings, no new committed
binary, third-party-tclkit disposition record). Detail file carries the
2026-08-03 overlap survey (strongest: G-157; G-131/G-130/G-110/G-116/
G-137 related; libfetch/bin siblings judged not related) and the
drafting decisions approved at review.
GOALS.md staged hunk-scoped: the concurrent uncommitted G-111
activation + modpod re-vendor working state is left untouched for its
own commit.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Follow-on to G-004, extending the commit ban from executables to
opaque-container VFS artifacts (metakit/cookfs and similar non-zip
containers), executable-headed or not. Index entry + detail file with
overlap survey; tracked instances inventoried (bin/sdx.kit,
src/bin/sdx.kit, layout-shipped project-0.1 copy); goals_lint clean.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Both goals flip achieved with full acceptance verification recorded in their
detail files (G-031: componentized boot proven on punkshell kits, a generated
project and tomlish; G-025: buildinfo stamp/report verified across kit,
renamed-copy, code-interp, tclsh-hosted and unstamped contexts). Detail files
move to goals/archive/ (pure renames; flip edits committed with the move);
index entries move GOALS.md -> GOALS-archive.md records. Reference sweep per
goals/AGENTS.md Archive rules: pending-tense mentions rewritten with archive
markers and actionable outcomes pushed to G-018, G-023, G-026, G-032
(registration model + buildinfo now concrete render sources), G-038 (piped
exitinfo quirk re-measured and recorded as its territory), G-089
(boot_state IS the packagemode hint surface), G-131 (mains collapsed - land
detection in the core), G-137 (stamp exists - reconcile RT_VERSION against
it). goals_lint clean (81 active, 75 archived).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
shellspy/punk/script/shell report the missing package by subcommand name and
exit 1 instead of a raw package-require trace - found adopting the shared
core in the tomlish kits (app-tomlish only; proven there first, master
replay identical by diff). Layout _config/_vfscommon copies refreshed.
tomlish adoption itself is committed in its own fossil (bbc68a3f) - the
G-031 derived-project proof.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
project_main.tcl reborn as the heavily commented thin-main sample (1132-line
2025-vintage monolith retired): ==CUSTOMIZE== blocks for project_subcommands
and launch_defaults with worked tool-style examples, fauxlink/rename guidance,
boot-core do-not-fork note, opt-out story incl the collision rule. Layout
project-0.1 _config hand-swept (outside sync channels per the 0.43.0 lesson):
thin punk_main.tcl + sample + punkboot_core.tcl master, punkboot/core.tcl
seeded in the layout _vfscommon.vfs; templates modpod mirror synced by the
modules step. Boot-entry guidance sections added to src/vfs/README.md (repo
and layout voices) covering the recommended _config-behind-the-fauxlink path,
plain root main.tcl alternative, one-startup-script rule, _config inertness;
src/vfs/AGENTS.md refreshed (ownership split, collision gate, G-129
derivation now consolidated in the core).
E2E on a freshly generated punk.project project (punk902z src script recipe,
FOSSIL_HOME diverted, shallow c:/T dir): generation completes incl fossil
initial commit; the project boots through its own _config trio via the
sibling master (core 0.1.0); a 'demo' subcommand added by editing ONLY the
generated thin main at its customization points dispatches in all three
launch forms (explicit args, bare via noargs, unknown-first via
unknownfirst).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
make.tcl modules/vfscommonupdate/bootsupport regeneration for increment 2:
_vfscommon.vfs/punkboot/core.tcl regenerated from the committed _config
master (every kit's merge now carries the boot core); layout copies of
src/make.tcl (basic, project-0.1, templates modpod source) pick up the
vfscommonupdate boot-core delivery step via the modules-step sync, with the
repacked punk::mix templates-0.2.0.tm promoted to _vfscommon and bootsupport.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
punk_main.tcl is now the thin project-owned main: publishes launch_args +
main_script, declares (empty) project_subcommands and launch_defaults at
==CUSTOMIZE== points, locates the boot core and sources it. Core candidates:
<vfsroot>/punkboot/core.tcl (in-kit via the _vfscommon merge), parent-dir
punkboot/core.tcl (nested app/main.tcl, undroidwish G-129), sibling
punkboot_core.tcl master (source-tree execution - the kitmountpoint
characterization shape). punkboot_core.tcl carries the boot machinery
extracted verbatim from the monolith; delta beyond extraction: contract
preamble with serviceable defaults, normscript from ::punkboot::main_script
instead of [info script], registration-model subcommand selection (project
additions merge in, built-ins cannot be shadowed, declared noargs/unknownfirst
defaults) with a dispatching default arm, ::punkboot::core_version 0.1.0.
make.tcl vfscommonupdate now regenerates _vfscommon.vfs/punkboot/core.tcl
from the _config master.
Parity evidence: full punkexe suite 110 pass / 0 fail against freshly baked
punk902z; kitmountpoint 4/4 across 8.6-backport / 32-bit-modern / 64-bit
runtimes incl the unattributed-mount stderr pin; registration model exercised
end-to-end via a scratch kit; 11-kit default bake with only known-baseline
warnings; punk86 (metakit/starkit, tcl 8.6.17) smoke green. cookfs branch
carried verbatim - no cookfs kit is currently mapped in mapvfs.toml to
exercise it (stale bin/punk9cook.exe is an old vintage, untouched).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
make.tcl modules/bootsupport/vfscommonupdate regeneration for increment 1:
utils-0.7.0.tm replaces 0.6.2 in src/bootsupport/modules and
src/vfs/_vfscommon.vfs/modules - the collision gate is now live for
make.tcl's guarded require (probed: a bootsupport-only tm path serves
0.7.0 and a collision fixture reports ok=0 status=collision). Layout
copies of src/make.tcl (basic, project-0.1, templates modpod source +
repacked punk::mix templates-0.2.0.tm in bootsupport/vfscommon) carry the
same gate hunks via the modules-step sync channel.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
A source .vfs carrying an actual root main.tcl AND a root fauxlink resolving
to main.tcl (or several such fauxlinks) baked whichever boot script merge
traversal met last - merge_over's fauxlink branch overwrites without warning.
New punkboot::utils::vfs_startup_script_report (0.7.0) censuses root
startup-script suppliers by RESOLVED fauxlink name (empty-nominalname links
included; nested app/main.tcl exempt per G-129). make.tcl consumes it with
the same guarded-require degradation as the G-125/G-133/G-134 checks and
refuses affected kits per-kit under FAILED KITS before any build product is
written - kits from other folders proceed, deployed binaries untouched.
Fixture characterization: startupscript.test (12 tests incl. a
real-source-tree sweep proving today's folders are collision-free);
bootlibrary.test re-run green. Outputs (mint 0.7.0 + bootsupport/vfscommon
promotion) follow in a separate commit.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Scope adds src/vfs/README.md (boot-entry guidance), the punk::args moduledoc
home and the make.tcl collision gate. Goal/Acceptance now require:
project_main.tcl reborn as the commented thin-main sample, README boot-entry
sections (repo + project-0.1 layout via sync channels), a punk::args::moduledoc
package for the boot-core API shipped via _vfscommon, and per-kit bake refusal
when a source .vfs carries both a root main.tcl and a main.tcl fauxlink
(today silently traversal-order-dependent - merge_over fauxlink branch
overwrites unwarned). Approach/Alternatives/Notes record the 2026-08-02
evidence: project_main.tcl unmapped in mapvfs.toml (layout-template-only),
tomlish shared-_config + sample.vfs drop-in exhibits, moduledoc::punkexe
delivery precedent. Status remains proposed - activation is a separate flip.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
User-directed follow-on to G-155 (2026-08-02): with punkshell alpha,
single-machine build infra and no evidenced third-party users, the
identifier keep-list becomes a candidate work-list while renames are cheap.
- goals/G-156-alpha-window-identifier-alignment.md: contract (proposed) -
punkcheck installer-identity migration (mint-named surface + ledger
strategy: rewrite vs rebuildable-cache re-record), BUILDCOPY -> BAKECOPY,
buildversion.txt disposition; census tool (fossil config-db lane per
G-016 caveats + bounded scan of user-confirmed roots, punkorigin.toml
primary marker + pre-G-087 fallbacks) with committed reconcile/freeze/
retire report; reconciliation honours G-027 docs-ownership split and
feeds its requirements; window-expiry condition recorded
- GOALS.md: G-156 index entry appended (activation is a user decision)
- goals/G-155-mint-stage-vocabulary.md: Related pointer to G-156 (Notes,
non-contract)
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Pure-rename move goals/G-101-tcl86-kit-container-strategy.md ->
goals/archive/ (content edits landed in the prior commit); GOALS.md entry
-> GOALS-archive.md record (acceptance as achieved). Live-tier sweep:
G-131 Depends-on rewritten (the metakit arm now EXISTS - kithead step,
kithead.c/boot.tcl = the mk4 half of its detection; zipfs-backport open
items move there); G-130 both pending-tense sites updated (mk4 decided,
ix86 head = follow-on parity item 4); G-110 gains the measured
dll-from-vfs temp-copy fact; G-141/G-147 survey mentions gain achieved
markers; archived G-153 record+detail Scope path fixed (goals/ ->
goals/archive/, the sanctioned broken-path fix). xref report: no
unlinked pair loses its only bridge (annotated pairs are one-directional
with live links). goals_lint clean (82 active / 72 archived).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Increment 3 - the kit-head (opt-in suite step "kithead"):
- build_kithead86/kithead.c: static Mk4tcl+vfs registration, preinit
reading boot.tcl from the exe's own mk4 file, post-init main.tcl pivot
(kbskit kitInit.c reduced to the 8.6 mk4 case; the 8.6.18 headers have
no Tcl_StaticLibrary - stock tclAppInit.c's file-local compat define
mirrored).
- build_kithead86/boot.tcl: kbskit boot.tcl mk4-only/8.6-only (tclInit
override, raw mk::select hand-eval of vfsUtils/vfslib/mk4vfs, mount +
encoding remount, in-kit init.tcl, auto_path reset).
- tools/mk4kit_attach.tcl: setupvfs role under the suite dynamic shell
(mount rw, lib trees + lf-normalized boot.tcl, tclvfs scripts with the
pkgIndex vfs entry rewritten to "load {} vfs").
- build86.zig: kithead exe (core+reg/dde+stubs as tclsh86ts, two-anchor
tclAppInit overlay, engine+binding via build_mk4tcl86 pub lists, static
tclvfs w/ STATIC_BUILD); artifact bin/tclsh8.6.18-mk4-r1.exe; smoke
asserts info library INSIDE the exe. No rechan needed (vfslib memchan
rides 8.6 reflected channels).
Increment 4 - the demonstration (hermetic env, PATH=System32, bare dir):
- head boots with library inside itself on a Tcl-free path;
- the RUNNING head ran sdx and wrapped a SEPARATE COPY of itself
(self-mount rider as specified);
- the starpack runs main.tcl from inside, reads vfs data, loads a
kit-only package, and loads thread2813t.dll FROM the vfs (dll clause
measured, not inherited).
Goal detail: Progress 3+4, Assessment (four candidates vs the four kit
expectations), Decision (mk4 = the 8.6 container and punk86 default;
zipfs backport stays the recorded G-131 second arm), Follow-on-to-parity
list; Status -> achieved 2026-08-02. Archive move follows separately.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
sdx.kit runs under the suite-built tclsh86t with NO tclkit in the chain:
starkit 1.3.3 + vfs::mk4 1.10.1 resolve from the suite-installed
lib/vfs1.4.2 (tclvfs trunk ships both scripts - the fact the 2026-07-26
survey missed), Mk4tcl 2.4.9.8 is the increment-1 fork-built battery, and
the wrap surface is proven not just the launch: qwrap WROTE an mk4 kit,
lsk/unwrap read it back, and the wrapped kit itself runs under tclsh86t
mounted at its own path. Goal detail: sdx-section RESOLVED marker +
Progress increment 2 with follow-on items (make.tcl suite-shell rung;
-runtime path waits on the kit-capable head).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Land the ready-to-land fork records in both flows and build the mk4
candidate's loadable shape as a suite battery:
- sources.config: source metakit git (gitea jn/metakit) pinned at
6a92b479 (the G-153-verified tree); matching build.zig.zon .metakit
lazy record (url+hash re-verified live via zig fetch at landing).
- build_mk4tcl86/: new extension module (build_tclvfs86 conventions) -
engine static lib (q4_UNIV set, -fno-exceptions -fno-rtti) + Mk4tcl.dll
(mk4tcl.cpp + bundled mk4too.cpp, USE_TCL_STUBS + BUILD_Mk4tcl) against
the suite stub lib; package version parsed from the staged
Tcl_PkgProvide; installs lib/mk4tcl2.4.9.8/{Mk4tcl.dll,pkgIndex.tcl}.
- build86.zig: build-mk4tcl step + install hook, pkg_smoke gains Mk4tcl,
bootstrapMode source_dirs/recipe_items rows; suite.tcl required-source
+ staged recipe item lists; README deliverable + selection records.
- goal detail: Progress increment record with the verification transcript
facts.
VERIFIED: suite.tcl build -steps {install install-libraries smoke} clones
the fork from the record, builds the dll, and pkg_smoke reports
Mk4tcl:2.4.9.8 in BOTH shells (tclsh86t dynamic AND tclsh86ts static).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com