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
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
Flip G-101 (kit container strategy for zig-built Tcl 8.6 runtimes) to
active in both tiers per the user's activation instruction. SEQUENCING
prose updated to record the activation; goals_xref score re-run at
activation per the freshness rule - one new relationship recorded: a
Related: G-130 back-pointer (its ix86 runtimes are the second platform
the container decision must fit; G-153 delivered mk4 dual-arch).
goals_lint clean (83 active / 71 archived).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Activation freshness survey (goals_xref score G-070) found no new
overlaps; strong hit G-019 already Related in G-070 - reciprocal
back-pointer added to G-019 Notes. goals_lint clean (84 active / 70
archived).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Completion increment: fork pushed by the user; pin
16d2f460b89dfd819aa08ceb97dfebf37b9fa55a; ready-to-land
sources.config/zon records made concrete for both suites (zig-fetch
hash tclparser_punk-0.1.0-aKPixmovFABEMo61xgv1YjUqdgqe41ZiB-EucAgmM-We);
'zig build dual' re-verified via the lazy zon pins alone; kit-shell
load + parse round trips recorded (punk902z Tcl 9.0.2, punksys Tcl
8.6.13) PLUS beyond-acceptance ix86 runtime verification under the
32-bit verification kits (punkluck86 8.6.10, punk91ix86 9.1b0, WoW64)
- combined dll coverage Tcl 8.6.10/8.6.13/8.6.18 + 9.0.2/9.0.5/9.1b0,
x64 and ix86.
Achieved flip per the GOALS.md maintenance rules (acceptance met in
full, judged against the detail file; flagged in the session report -
the goal went proposed->achieved without an active phase): index entry
moved to GOALS-archive.md; reference sweep applied - G-070 (Scope both
tiers, Context, Related line gain the achieved/archive marker),
G-069/G-101/G-130 Notes gain pointers to the archived file (G-130's
also records the ix86 runtime verification its verification kits
enabled). The detail-file move goals/ -> goals/archive/ lands as the
adjacent pure-rename commit.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
G-154 (proposed): fork-as-upstream tclparser build lane at
c:/repo/jn/tclparser_punk - tcltk-depot parser 1.9 porting baseline
with the aspect chiselapp fossil lineage as a second byte-frozen
snapshot, dual-generation stubs dlls (tcl9tclparser19.dll /
tclparser19t.dll) dual-arch under the pinned zig 0.16.0, upstream
114-case testsuite gate. Seed increment verified green 2026-08-02
(fork commits 7c18555 + 16d2f46): builds via suite-matching lazy zon
tcl pins AND standalone, dual step, gate transcript Total 114
Passed 112 Skipped 2 Failed 0 both generations. Detail file carries
the upstream-landscape survey, draft suite consumption records, and
remaining acceptance items (push+pin, kit-shell load transcript).
G-070: Scope (both tiers), Acceptance reference clause and Context
repointed from the never-materialised TEMP_REFERENCE tclparser tree
to the fork repo (snapshots + dll oracle + corpus seed); Related
note to G-154 added.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Multiform per-form failure statuses (formstatus records, noformmatch errorcode
classes + -formerrors) are now sound suffix-viability verdicts: 'incomplete'
(viable) iff every supplied word was validly consumed as a prefix of the form
and the failure is pure exhaustion at end-of-input; anything already supplied
contradicting the form reports 'invalid'. Mechanism: viability-probe mode on
private::get_dict_form suppressing only the position-guarded pure-exhaustion
raises (count min-shortfalls, missing-required checks, adhoc option value at
end) while final validation of the consumed words stands as the soundness
backstop; multiform candidacy and parse_status's single-form formstatus record
confirm each classify-'incomplete' failure with one probe re-parse. Rendered
noformmatch form lines marked '(viable - needs more arguments)'/'(not viable)'
after the stable "form '<fid>':" anchor. Consumer contract documented in the
parse ('Multiform failure contract') and parse_status argdocs. Documented
conservatism: input ending inside a multi-member type clause reports invalid.
New testsuite formviability.test (acceptance scenarios, option position
guards, single-form record soundness, clause conservatism, message marking);
forms.test verdict pins deliberately updated (ms/idle incomplete->invalid for
type-screen rejections). punkshell 0.41.3 (patch: refined multiform error
classification/reporting at the shell surface).
Goal G-152 activated (user-directed) and flipped achieved 2026-08-02 with
acceptance verified via runtests (args subtree green; full-suite parity with
stashed baseline); entry archived to GOALS-archive.md, detail file to
goals/archive/ with verification evidence; consumer pointers pushed to
G-044/G-150 notes.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Activation-freshness overlap survey (goals_xref score G-153) re-run at
activation: all high-scoring pairs already carried as Related: notes
(G-101, G-130, G-131, G-105, G-116, G-110, G-063, G-026, G-108); no
goals drafted since G-153, no new relationships to record.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
G-153 [proposed]: fork-as-upstream metakit port under the pinned zig -
standalone core + Mk4tcl dll/static shapes, win32-x86_64 + win32-ix86
from day one, KitCreator patch audit vs the 2.4.9.8 baseline, dll smoke
under suite-built tclsh86t (the sdx-circularity probe enabler), mk4
x64<->ix86 interchange check, and ready-to-land sources.config/zon
record text for suite consumption. Non-contract Notes: G-101 records
metakit_punk as the mk4 porting vehicle superseding the TEMP_REFERENCE
metakit trees; G-130 gains the measured UCRT linkage + OS-floor
statement (Win10 zero-prereq, Win7/8.x need KB2999226, XP/2000
structurally out), the Windows 2000 placement with the luck-specimen
Win2k-clean import measurement, the SSE2 (pentium4) cpu-baseline rider,
and the lane-mechanics inventory (standardTargetOptions present;
critcl/baselines/punkres-PE32/punkbin-folder/twapi-x86 gaps); G-131
points at G-153 for its metakit arm. goals_lint clean.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
G-152 punk::args form-failure suffix-viability verdict: a candidate form
is marked viable iff every supplied word is a valid prefix and the
failure is pure exhaustion - fixing the witnessed false positive
(parse {frobnicate} classes the info form 'incomplete' identically to
parse {info}), documenting the noformmatch errorcode/formstatus class
vocabulary as a stable consumer contract, and marking viability in the
rendered per-form report. Enabler for G-044 completion; runtime
counterpart of the achieved G-074 static formcheck. Probe evidence in
the detail file. goals_lint clean.
Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com
G-149 punk::args configurable multi-form synopsis hint labels (the
hard-coded ' i -form N ...' column, repl-centric and unreachable for
(script) ids - identified during G-143).
G-150 punk::ns cmdhelp form narrowing + selection-sound auto_exec::hash
declaration (-regexprefail {^-} on the plain name value - the verified
fix for the latent 'Ambiguous arguments' on bare parse-withid; brings
the make.tcl help dry-run contract to 'i').
G-151 punk::args annotated success render (received-args landing
report - the punk::args-level supersession of make.tcl's interim
'dry-run: line accepted' line).
All proposed status; overlap surveys recorded per goal (punkargs family
via goals_xref; G-044/G-050/G-056 named as related, G-149<->G-151
cross-linked). goals_lint clean.
Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com
tool/buildsuite/help are multi-form punk::args definitions (one @form per
action, literal single-choice action leaders + choicelabels): 'help tool' /
'help buildsuite' render one synopsis line per action; 'make.tcl help
<subcommand> <action>' - equivalently '<subcommand> <action> -help', or a
0-based form index ('help tool 2') - renders that action's single-form
usage; unknown actions and out-of-range indexes are pointed punk::args
errors (exit 1). tool dispatch parses through the definition (unknown
actions/flags: exit-1 usage errors). User-approved deviation: the declared
positional model puts options before tool names ('tool build -test 0
<name> ...'); docs/agent guidance updated to match and a flag-shaped tool
name earns a stderr hint; the PUNKBOOT_PLAIN degraded scan keeps the
historic flag-anywhere parse. buildsuite driver-arg passthrough unchanged.
G-144 consumer follow-through: all 17 per-subcommand @form -synopsis
overrides retired (automatic @cmd -name bracket-notation synopses;
top-level make.tcl override kept deliberately). Pinned by new
punkexe/maketclhelp.test (12 tests); full punkexe subtree green (114
tests, 0 fail). Goal flipped to achieved and archived; punkshell 0.40.0.
Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com
Auto-generated synopses for (script)-prefixed constructed definition ids
now lead with the declared @cmd -name (the invocation name - e.g
'make.tcl modules' for (script)::punkboot::modules) instead of the raw
id, across punk::args::synopsis full/summary renders and the
usage/arg_error synopsis sections that funnel through them (punk::args
0.12.7 -> 0.13.0).
The fallback is gated on the (script) prefix only (user-confirmed
narrowing): (autodef) ids are excluded - their id-minus-tag IS the
invocation (arg_error's existing tag strip surfaces it) while their
@cmd -name is a display label ('destroy', 'Object: ::x');
(shared)/(package)/(default)/(widgetcommand) doc ids declare no
invocation-style -name today and render the id as before. Real command
ids render byte-identical (full args testsuite passes with no pin
updates). Six new synopsis.test pins: (script) full/summary/multiform/
surfaces, no-name constructed id, autodef unchanged, real-id
byte-identical.
Goal tiers: index entry archived to GOALS-archive.md, detail file moved
to goals/archive/ (G-143's pending-tense Related line rewritten to
reflect achievement + follow-through pointer: make.tcl's @form
-synopsis overrides are now optional, retirement under G-143 or a
follow-on edit). Docs: @form -synopsis directive known-case text,
synopsis -help, src/modules/AGENTS.md ergonomics bullet. Project
0.39.5 -> 0.39.6 (patch: latent capability, no shipped definition
renders differently today).
Bootsupport refresh (make.tcl modules + bootsupport): snapshot gains
args-0.13.0.tm and picks up two lagging source syncs -
mix/commandset::layout 0.2.0 -> 0.3.0, mix/commandset::project
0.4.0 -> 0.4.1, and the shellfilter 0.2.4 G-145 comment; superseded
copies pruned.
Assisted-by: harness=opencode; primary-model=openrouter/moonshotai/kimi-k3; api-location=openrouter.ai
G-146 [proposed] Fossil binary-glob seeding for generated projects:
the trailing fossil initial commit of a generated project aborts on
binary payload (layout bin/sdx.kit, injected zip-based .tm modules,
incoming G-136 .ico) because thin layouts ship no binary-glob setting.
Deferred twice already (G-087 -> G-012 territory); scoped as its own
goal with the glob-value and seeding-path decisions recorded as open
options and relationships to G-136/G-086/G-027/G-114/G-047 surveyed.
Assisted-by: harness=opencode; primary-model=opencode/kimi-k3; api-location=unknown
Layout .gitignore payloads are now stored inert as gitignore.in and
materialized to .gitignore at project generation, ending the
self-censoring-template hazard (live nested .gitignore files silently
untracked template content in git while fossil managed it fine):
- punk::mix::commandset::layout 0.3.0: layout_materialize_renames map;
layout_stage_chain renames inert payloads after composing all overlay
layers (.anti markers keep targeting store names); layout_materialize
withholds the in-place fast path from inert-payload folders so the
store is never renamed; inert+live name conflict errors loudly
- make.tcl thin-layout sync refreshes every vendor/punk layout's
gitignore.in from the canonical repo-root .gitignore (punkcheck-tracked
sync_layouts events); workflow text updated
- the four vintage payload variants eliminated as drift: all payloads
now byte-identical mirrors of root; modpod copy carried and its stale
.gitignore pruned
- materialize.test +5 G-012 characterization tests (25/25; mix subtree
71 pass / 1 known skip)
Verified end-to-end: generation from each affected layout yields a
byte-identical .gitignore (othersample .anti case yields none); root
edits propagate to payloads via make.tcl libs in both directions; the
fc1c474c force-added template files are back to ordinary git tracking
with no ignore rule matching them; modpod payload README trees are now
visible as ordinary trackable files.
Goal flipped achieved 2026-08-01 (user-confirmed; the custom/_project
acceptance clause is stale - that store level was retired by G-087
stage 5 after drafting; recorded in the archive record and detail
evidence). Reference sweep + archive moves per the flip protocol.
Project version 0.39.5.
Assisted-by: harness=opencode; primary-model=opencode/kimi-k3; api-location=unknown
The Tcl core delivers 'clear' to a transform stack before EVERY write op
(output-buffer flush-down; tclIORTrans.c ReflectOutput, gated on METH_CLEAR -
intentional and test-pinned, but under-documented: doc/transchan.n and TIP 230
scope clear to seek/read-side buffers). ::punkboot::ansistrip::transchan's
clear handler ran 'dict unset carry $chanid', discarding a split sequence's
held ESC tail at every write-chunk boundary: the next chunk's ESC-less
remainder ('0;1m', '1m') passed through unstripped as orphan fragment text in
piped usage tables, while the dropped ESC bytes kept the G-113 zero-ESC pin
green. The transform is write-only with no read-side state, so its
contract-conformant clear is a no-op - it no longer declares the op, the
per-write calls never fire, and the split-sequence carry survives every chunk
boundary. finalize still drops an end-of-stream partial sequence. No change in
textblock/punk::ansi (pre-transform stream verified well-formed during
diagnosis; exonerated).
Pin: maketclcolour.test gains maketcl_colour_help_tables_zero_remnants -
piped 'tclsh src/make.tcl help' for all 20 declared SUMMARIES subjects plus
bare 'help'/'-help', asserting exit 0, zero ESC bytes, zero orphan fragments
(two-step detector: strip complete sequences, then scan for [0-9;]+m not
preceded by ESC or an open bracket - a raw scan false-positives on ';1m' inside complete
multi-parameter SGR). Failing-first evidence: pre-fix the pin names exactly
the 5 fragmenting invocations (help, -help, help libs, help info, help
bootsupport); the 22-invocation NO_COLOR+PUNK_FORCE_COLOR pre-transform
corpus carries no legit text matching the detector.
Verified (tclsh 8.7a6, win32-x86_64): all 22 invocations byte-level clean;
PUNK_FORCE_COLOR=1 output intact (1177 complete sequences, 0 orphans); the 3
G-113 colour-policy pins pass unchanged; shell/testsuites/punkexe family (15
files, 102 tests) and shell/*** (127 tests) green, warnings pre-existing only;
'make.tcl packages' verified, layout + modpod make.tcl copies synced by the
build (punkcheck-managed outputs batched here per the carve-out).
Bookkeeping: goal flipped active -> achieved 2026-08-01, detail file archived
(goals/archive/G-145-piped-usage-ansi-remnants.md), G-056 Notes gains the
exoneration pointer; src/AGENTS.md colour bullet + src/tests/shell/AGENTS.md
suite description updated; project version 0.39.4 (patch) with CHANGELOG
entry.
Assisted-by: harness=opencode; primary-model=opencode/kimi-k3; api-location=unknown
G-143 make.tcl help depth: multi-form tool/buildsuite definitions and
per-action usage - @form sections with literal action leaders so help
shows which actions take <toolname>/-test, 'help <sub> <action>' renders
the single form, tool dispatch becomes fully declared, buildsuite keeps
its passthrough driver-args contract.
G-144 punk::args auto-synopsis @cmd -name fallback for non-command ids -
unblocks dropping make.tcl's hand-written ?...? @form -synopsis lines in
favour of the automatic bracket notation (retires the G-030 workaround
for (script):: ids).
G-145 remnant-free piped usage tables - root-cause and eliminate the
orphan CSI fragments ([0;1m / [0m / lone m) observed beside table borders
in piped help output; extends the G-113 zero-ESC guarantee to zero
sequence-fragment text.
All three born from the 2026-08-01 argdoc restyle evaluation (mechanisms
verified live on bootsupport punk::args 0.12.7). Overlap surveys recorded
in each detail file; goals_lint clean (83 active-index goals); xref score
reviewed per goal - the top term-scored unlinked pairs for G-143 (G-085,
G-021) checked and judged lexical-only, no relation recorded.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Index + detail-file mirror in step: the src/vfs/*.vfs.toml entry now reads
"the achieved G-115 surface carrying the achieved G-127 platform axis" -
same treatment the clause received when G-115 flipped (852d684a precedent).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Scope lines are the index's discovery mechanism (path-grep + goals_xref path
overlap): after the G-024/G-115 migration the old filenames matched nothing on
disk, so agents editing src/runtime/mapvfs.toml or src/vfs/*.vfs.toml would
silently miss these goals. Minimal swaps, index + detail-file mirrors in step:
- G-101/G-131: mapvfs.config -> mapvfs.toml (annotations unchanged)
- G-127: vendorlib_vfs.toml -> src/vfs/*.vfs.toml (the achieved G-115 surface
this goal adds the platform axis to); mapvfs.config -> mapvfs.toml
- G-141: vendorlib_vfs.toml -> src/vfs/*.vfs.toml (the achieved G-115
successor surface; format coordinated with G-127)
Archived G-024/G-115 records deliberately untouched (accurate history).
goals_lint clean; xref path discovery verified resolving to the reworded goals.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
G-024 - kit mapping converted to toml (tomlish-parsed), same-day activation->achieved:
- src/runtime/mapvfs.toml: [kit.<name>] / [group.<name>] / [scheme.<name>] tables
(header comment = user-facing spec). All 12 active line-format mappings migrated
(order preserved - identical bakelist rows vs the legacy parse); historical
comments carried over; mapvfs.config deleted here AND in the project-0.1 layout
(converted to mapvfs.toml there).
- make.tcl reader family under the unchanged G-121 model surface: mapvfs_locate
(toml > legacy; PUNK_MAPVFS_CONFIG env override = characterization seam),
mapvfs_parse dispatching on extension, strict mapvfs_parse_toml, deprecated
mapvfs_parse_config fallback (un-migrated generated projects keep baking, with a
NOTE; toml wins when both files exist). Shared toml helpers hoisted to
punkboot::lib (inline toml_untag copies removed).
- Strict entry-named validation: unknown keys/types/schemes, conflicting targets,
duplicate outputs, parse failures fatal (exit 3 pre-build). Full-bake
unresolvables split by nature: missing vfs folder (repo content) fatal per
entry; missing runtime file (environment - part-populated stores are legitimate)
entry-named recapped BUILD-WARNING + skip.
- Groups: @<group> selection in bake/bakelist, group/default/scheme notes columns
+ detail lines, groups listed in errors and argdoc choices. verify-ix86 wraps
the G-129 kits; bake_default=false excludes entries from full bakes.
- G-023 versioned scheme declared live ([scheme.punk8]/[scheme.punk9], group
versioned, bake_default=false pending G-023 activation): parse-time expansion
from punkproject.toml to punk<gen>-<version> / punk<gen>-dev / release-gated
punk<gen>; kit loop creates the plain name when absent and never overwrites it
on a normal bake. punk9-dev baked end-to-end; punk9 gate skip demonstrated.
- Consumer dedupe fix: several entries may share one runtime on one vfs -
kit-output enumeration and the kit-loop runtimes list process each distinct
runtime once (latent multiplication in the legacy format, unreachable there).
G-115 - declarative .vfs composition with drop-in preservation, same-day
activation->achieved:
- Sibling declarations src/vfs/<name>.vfs.toml ([payload.<name>]: source,
source_root src|packages, target, supersedes, replace) materialized by the new
VFSPAYLOAD phase (bakehouse/bake/vfslibs; selective bakes narrow; strict
entry-named errors). Drop-in-wins precedence via punkcheck -overwrite
synced-targets: undeclared or modified-since-install files preserved and
reported (changed-but-preserved NOTE = files_skipped minus sources_unchanged);
supersedes/replace are the explicit exceptions; an undeclared .vfs is untouched.
- vendorlib_vfs.toml relationship settled: folded/superseded - all six install
entries migrated into per-.vfs files for the 13 participating folders (first
materialization run reproduced every payload with zero tracked-content change);
file deleted; a leftover copy warns and is ignored.
- Demonstration kit punkdeclare (group declare-demo, bake_default=false,
smokerequire udp+tcllibc): VCS carries only the boot fauxlink; the whole
lib_tcl9 payload (tcludp vendor tree + tcllibc consent-gated packages tier)
rematerializes from the declaration - clean-tree rebuild smokes pass in-kit,
and drop-in survival was proven live (a foreign pkgIndex.tcl and an undeclared
note both survived; the foreign file genuinely won until removed, caught by the
G-133 smoke probe as designed). Payload ignored in both VCS (.gitignore +
derived ignore-glob; ignore-sync verification clean).
- Docs: src/vfs/README.md (format + precedence spec), src/vfs + src/runtime +
src + bin AGENTS.md, ARCHITECTURE.md (+lint clean), workflow text and
summaries/helptexts/argdoc; layout store seeds the convention (vfs README +
mapvfs.toml; machinery travels via the established make.tcl sync).
Verification: legacy-vs-toml identical kit rows; punkluck86 force-rebuilt under
both formats content-identical (identical 1.73MB runtime+stamp prefix, identical
2993-member payloads; whole-artifact byte identity is not a pipeline property -
consecutive same-config rebuilds differ in zip timestamp metadata, pre-existing);
punkexe suite 98 tests 0 failures incl. 5 new G-024 characterizations
(maketclbakelist.test: @group filter + PUNK_MAPVFS_CONFIG fixture tests) and
updated pins (payloadcheck declared list + punkdeclare; platform detail wording).
Goals: both flipped achieved 2026-07-31 with evidence in the detail files;
GOALS.md entries moved to GOALS-archive.md; live-tier reference sweep applied
(G-004/G-019/G-023/G-025/G-026/G-035/G-065/G-127/G-131/G-137/G-141) including
the G-127 mapvfs-seam retirement note (PUNK_MAPVFS_CONFIG) and a direct
G-137<->G-127 bridge replacing the archived G-024 one. Detail files move to
goals/archive/ in the follow-up pure-rename commit.
Also included as found: the developer's concurrent G-142 goal addition (GOALS.md
entry + goals/G-142-punkbin-listing-manifests.md), committed unmodified for
git/fossil coherence - not agent-authored.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Per-tier listing manifests with named groups (current/lts/vulnerable/archive) separating the listing surface from the sha1sums integrity ledger; activation assessed as immediately possible (no goal dependencies; G-141 libfetch surface coordination only).
Assisted-by: harness=opencode; primary-model=huggingface/moonshotai/Kimi-K3; api-location=unknown
Both goals flip proposed->active at user direction. Activation-freshness
overlap surveys (goals_xref score) recorded as Related: notes: G-024 gains
G-127/G-131/G-137 pointers, G-115 gains G-127/G-141 pointers (goals drafted
since the 2026-07-24 overlap reviews).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Status active -> achieved 2026-07-31 (acceptance walk in the detail
file); index entry moved to GOALS-archive.md; live-tier sweep: achieved
markers on the G-127/G-130/G-131/G-141 Related lines and the G-006
absorption note (interim trust flags libfetch + punk-runtime named);
actionable-note pushes to G-105 (server surfaces ready for cross-target
artifacts), G-101 (8.6 tier riding the mechanism; tclkit86bi sidecars),
G-067 (provenance/consent patterns to inherit), G-127 (the
no-alternate-mapvfs-seam finding from the e2e demonstration). xref
report: no unlinked pair had G-123 as its only bridge. Detail-file
rename to goals/archive/ follows as its own pure-rename commit.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
proposed -> active in both tiers. Activation-freshness survey re-run
(goals_xref score G-123) per the maintenance rules: strongest pairs
G-127 and interval-drafted G-141; back-pointer Related lines recorded
in the detail file for G-141 (lib-tier selectivity sibling sharing the
server-trust consent surface), G-127 (cross-target kit bakes consume
served tiers), G-130 (32-bit runtimes publish through the per-target
layout) and G-131 (win32-ix86 zipfs specimens are third-party tclkits
the provenance backfill covers).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Index entry + detail file. 'make.tcl libfetch' (G-139) fetches every
declared libpackages.toml artifact regardless of what the host or bake
consumes - already pinching on WSL (win32-x86_64 zips downloaded for a
linux-only bake; G-140 worked around it via the PUNK_LIBFETCH_CONFIG
test seam) and set to grow as G-004 migrates more vendored trees to
the punkbin lib tier. The goal derives the default fetch set from the
consumption declarations already in the tree (PACKAGES host needs +
the kit set's packages-sourced vfslibs targets) with narrow/widen
overrides, derivation reporting, and a VFSLIBS missing-source hint
naming the fetch the failing bake needs. Overlap survey recorded
(strongest live intersections G-127/G-115; relations
G-006/G-065/G-004/G-123/G-027).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
suite_tcl90: critcl_zig.config gains the linux-x86_64-zig cross target
(zig cc -target x86_64-linux-gnu.2.17 - the dynamic-glibc floor decision,
recorded in the goal file and fed to G-105). build905.zig gains the
tcllibc-linux step (critcl driver on the windows suite shell, stubs
linkage, no linux host; uuid.tcl excluded matching upstream's own
native-linux package shape) gated by the new tools/elf_gate.tcl
(G-133-equivalent ELF64/LSB/ET_DYN/x86_64 structural check - the
load-smoke stand-in for cross lanes). library-artifacts emits
lib/linux-x86_64/tcllibc-tcl9-r<N>.zip in the same run: target =
linux-x86_64, build_host_platform = win32-x86_64, full provenance set,
deliberately no [tests] section. build_id seeds now include the tier
path so same-named artifacts in different target tiers get distinct
identity digests (both suites' tool copies kept byte-identical). Step
lists (build905.zig -Dsteps default, suite.tcl) and README document the
lane and invocation.
Consumption: libpackages.toml declares tcllibc-tcl9-linux (target
linux-x86_64); vendorlib_vfs.toml install.tcllibc_tcl9_linux switches
punk9linux.vfs/lib_tcl9 - replace retires the hand-dropped tcllibc,
supersedes removes the stray tcllibc2.0 - so the last provenance-less
accelerator hand-drops in any kit payload are gone. punkshell902 baked
(G-133 payload arch scan: 6/6 match target linux-x86_64) and
WSL-verified: materialized-tier accel smoke plus baked-kit smokes
(default paths + a pinned variant proving the kit's own lib_tcl9
artifact tree loads with the accelerator engaged). Finding recorded:
the tclkit-902 runtime bundles its own lib/tcllibc2.0 which wins
default precedence - the origin of the retired stray folder name.
Determinism: back-to-back re-emission byte-identical for all three
artifacts; the zig Run session-env cache finding extended (FOSSIL_HOME
and invocation mode churn the key; the linux ELF .so observed
bit-stable across critcl re-runs, unlike the windows PE). Goal flipped
achieved with evidence in the detail file; G-105 notes carry the libc
decision as prior art. Docs: buildsuites AGENTS.md child index,
ARCHITECTURE.md buildsuites paragraph, CHANGELOG + punkproject 0.32.2.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
New proposed goal, flagged at the G-139 achieved flip: punk9linux.vfs's
linux-built tcllibc + stray tcllibc2.0 are the last provenance-less
accelerator hand-drops in any kit payload. G-140 commits a narrow zig
-target lane on the existing windows suite: critcl driving zig cc with an
explicit linux target section (stubs linkage - no cross-built runtime, no
linux build host), emitted as lib/linux-x86_64/tcllibc-tcl9-r<N>.zip through
the established G-138 machinery (record target=linux-x86_64,
build_host_platform=actual host), verified by a host-side ELF check +
byte-identical re-emission + a WSL accel smoke under an existing punkbin
linux Tcl 9 runtime, consumed via the G-139 declaration idiom
(libpackages.toml + vendorlib_vfs.toml supersedes/replace + a punkshell902
cross-target bake with in-kit record + WSL kit smoke). The libc/triple
decision (dynamic glibc floor direction) is recorded as direct input to
G-105's dynamic-libc and mapping items - back-pointer added to G-105 Notes
(non-contract). tcl8 generation dispositioned out of the committed set (no
linux tcl8 kit).
Overlap survey run (goals_xref paths across the scope): G-105 the strongest
live intersection (carried as Related with the lands-first framing);
G-116/G-130/G-060/G-123/G-004/G-065 carried; G-108/G-110/G-131 co-location
only. goals_lint clean.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Acceptance met in full (walk in the detail file's Progress): libfetch with
sha1 verification + beside-toml metadata + server-trust consent proven LIVE
against the canonical origin post-publication; PACKAGES_tcl<N> libs-step
materialization with punkcheck provenance; vendorlib_vfs.toml declarations
(source_root=packages + replace) with supersedes removing tcllib1.21 incl.
nested tcllibc 0.4 + md5c from the 8.6-family kits; punk86 kit-hosted
runtests vs the same-day baseline IDENTICAL (zero differences to
disposition); vendored trees removed in their own commit after the proven
bake (70d1838c); the post-removal verification bake shipped kits with
verifiable embedded provenance from the tcllib-vendorless checkout;
derived-project decision recorded (fc2376ca).
Index entry -> GOALS-archive.md record. Reference sweep: G-004's
pending-tense retirement line updated to delivered (+ the remaining
vendored trees named as its outstanding scope with the tcllib pattern as
template); actionable pointers pushed to G-006 (libfetch's trust gate = the
interim consent instance to absorb), G-065 (the artifact-fetch pattern to
absorb/reference), G-027 (derived-project library story via the layout
sync), G-123 (materialization twin + the live interim consent flag to
coordinate with). make.tcl workflow text updated to the landed consumption
shape (fetch -> tier -> PACKAGES phase + vfslibs packages lane); vfslibs
summary/help texts cover both source roots. Project 0.32.0 + CHANGELOG
(user-visible kit payload upgrade). goals_lint clean (82 active, 57
archived). Detail-file move to goals/archive/ follows in the adjacent
pure-rename commit.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Acceptance met in full (walk recorded in the detail file's Progress): emission
step landed in BOTH suites and demonstrated end-to-end - exceeding the
demonstrate-90/record-86-follow-through minimum - with byte-identical
re-emission verified, provenance-complete schema-v2 class=library records,
sidecars + per-tier sha1sums in the same step, publication left a deliberate
user step, punkbin layout docs recording the tier (punkbin repo commit
c38686a), and md5c dispositioned (dropped; tcllib's md5 prefers tcllibc,
which bundles the accelerator).
Index entry -> GOALS-archive.md record (file's established arrow-format
convention retained). Reference sweep: G-139 Context/Alternatives/Related
updated with achieved markers + archive path, and G-138's actionable
outcomes pushed to their consumers - G-139 (settled naming, md5c drop,
staging locations of the emitted r1 artifacts), G-123 (schema v2 landed
first for the library class - runtime-side v2 rides the lineage), G-004
(lib tier = the route for library binaries out of the tracked tree),
G-066/G-067 (zip tier recorded as the interim carrier for the .tm long
game). goals_xref report shows no unlinked pairs bridged only by G-138.
ARCHITECTURE.md buildsuites paragraph gains the lib-tier sentence
(architecture_lint clean); src/buildsuites/AGENTS.md child index updated
(also corrects the stale 'G-100 active' to achieved 2026-07-26).
Detail-file move to goals/archive/ follows in the adjacent pure-rename
commit per the Doc Restructures rule.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Index tags and detail-file Status mirrors flipped proposed -> active.
Activation-freshness overlap surveys re-run (goals_xref score, both goals):
no overlaps beyond the drafting-day survey - drafted and activated same day,
no goals drafted in the interval; survey notes recorded in both detail
files. goals_lint clean.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Motivated by the 2026-07-30 provenance investigation: the vendored tcllib
trees are hand-dropped 2023/2024 local builds whose only machine-readable
provenance is critcl's teapot.txt, while both buildsuites already build
tcllib 2.0 + tcllibc (zig cc) in their default step lists with full
provenance available at build time.
G-138: publish suite-built tcllib/tcllibc as immutable -r<N> <package>.zip
artifacts in a new punkbin lib/ tier - lib/allplatforms for platform-neutral
(user decision 2026-07-30), lib/<target> for binary packages - deterministic
punkzip assembly, embedded class=library artifact record (G-123 schema-v2
lineage), sidecars + sha1sums, deliberate-publish revision discipline (zig
non-reproducibility), md5c disposition required.
G-139: consume the tier - consent-gated make.tcl fetch into an untracked
bin/packages/<target> input tier mirroring bin/runtime/<tier> (user decision
2026-07-30), punkcheck-installed lib_tcl<N> materialization, tcllib/tcllibc
brought under vendorlib_vfs.toml declarations with supersedes removing
tcllib1.21/tcllibc0.4 from 8.6-family kits (kit-hosted runtests validation),
vendored-tree retirement sequenced after a proven artifact-path bake (G-004
payoff), derived-project story: fetch default / in-project suite build
alternative.
Interim-carrier framing recorded: the zip tier does not supersede the
G-066/G-067 .tm direction. Overlap surveys run (goals_xref); strongest live
relation G-123 (runtime-tier sibling) carried in both. Also recorded in
G-139 Context: lib_tcl8|9/test_old orphans moved to
TEMP_REFERENCE/retired_lib_tcl_test_old 2026-07-30 (were untracked).
goals_lint clean.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
The metakit checkout was renamed when the metakit_pooryorick variant arrived
beside it. Update the six reference sites (G-101 scope+detail, G-096 archive
note, suite_tcl90 README/build905.zig/suite.tcl vqtcl-removal comments) to
the new folder name. No functional change - comments and goal text only.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com