suite_tcl90 now assembles and verifies the G-103 family as part of the
default pipeline:
- kit-family: two staging trees (core, bi) wrap into working-name products
tclsh9.0.5.exe / tclsh9.0.5-punk.exe / tclsh9.0.5-punk-bi.exe under
out/family. Attached image mirrors the installed prefix - tcl_library/ at
the app root (stock C-boot position, no main.tcl - falls through to the
interactive shell), tm tree at tcl9/<ver>, batteries under lib/ with their
installed-shape pkgIndexes (../../bin -> /app/bin), dlls under bin/, plus a
one-line stock pkgIndex hook at lib/pkgIndex.tcl extending auto_path (the
tclPkgUnknown mid-scan growth mechanism tcllib's own index uses).
- tools/family_check.tcl: per-member self-containment verification from a
scratch dir with scrubbed env - patchlevel, zipfs tcl_library, tzdata/
encodings, attached tm modules, functional Thread (cross-thread eval), vfs
zip-mount round-trip, tcllib md5 + tcllibc accel engaged, piperepl
default-ON/opt-out per variant (::tclsh(istty) discriminator), Tk
create/destroy + tklib for bi. All three members PASS.
- kit-family-artifacts + tools/family_artifacts.tcl: punkbin-layout emission
(immutable -r<N> names via -Dfamilyrev, per-artifact toml metadata with
variant/sha1/versions/provenance/G-107 evidence, sha1sums.txt), run UNDER
the plain family kit itself. punkbin publication stays a user step.
- build_tclthread/build_tk return pkgidx+version facts; tclvfs configured
package generation shared between prefix install and family staging;
tm-module install list single-sourced; manifestUuid helper tolerates
repos without the fossil manifest setting.
- consumers: mapvfs.config entries punk9_beta (punk + punk9wintk905.vfs) and
punk9bi_beta (punk-bi + punk9win_for_tkruntime.vfs); working names copied
to bin/runtime/win32-x86_64 (untracked). src/runtime/AGENTS.md stale
runtime.cmd references updated to punk-runtime (G-097).
Full pipeline suite.tcl build PASS end-to-end; verification evidence
recorded in the goal Progress section. Remaining: punk-runtime list/use
metadata surfacing, kit-wrap trial of the new mapvfs entries.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
The Tk opt-in census surfaced that the full suite cannot run unattended in
the batch/suite-built shell: winDialog.test (72 cases) and winMsgbox.test (19)
pop real OS dialogs whose message-injection automation does not drive them
here, so each blocks waiting on a human. The first attempt hung there and the
engine correctly reported no-totals/fail.
Adds a dedicated file-exclusion mechanism: tools/test_gate.tcl gains -notfiles
(a Tcl list of test-file globs passed to the driver as one -notfile list
value - a flat -testargs cannot carry a multi-file list through the option
chain, since -notfile takes a single list arg), and build905.zig gains a
per-library -Dtestnotfiles-<lib> knob defaulting to each LibSuite's
default_notfiles. tk defaults to excluding winDialog.test + winMsgbox.test so
its census completes hands-off; -Dtestnotfiles-tk="" re-includes them for a
manual interactive run. The exclusion is recorded in the evidence summary
(notfiles key). Empty for every other library (no behaviour change).
Verified: tk census now completes unattended (9865 run / 8127 passed / 1711
skipped / 27 failed, result pass; log shows winDialog/winMsgbox in the driver
skip list); thread gate still PASS with notfiles {} recorded.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
The external libraries the suite builds and ships now run their own
testsuites under the suite-built shell as named recipe steps - evidence for
the exact zig-built combinations nobody upstream tests.
tools/test_gate.tcl generalized into the shared engine: -mode gate|record
(gate = parsed totals diffed against the tracked dispositioned baseline,
the core-gate mechanism; record = run must complete, failures recorded not
fatal), -driver selection (tcllib-family trees run via their own
support/devel/all.tcl - sak's underlying driver, standard aggregate totals,
per-file child interps), -summaryfile/-library line-record evidence
summaries for the G-103 artifact-metadata consumer (shape documented in the
goal detail file), file-error evidence capture (@+ blocks, runAllTests
error-exit sections). A run with no parseable totals FAILS the step in
every mode - infrastructure breakage must never masquerade as recorded
results. Core gate semantics unchanged; the core gate step now also writes
out/testreports/tclcore.summary.
build905.zig: steps test-thread test-tclvfs test-tcllib test-tklib test-tk
+ composite test-libraries (tk excluded - opt-in: interactive desktop, maps
windows, tens of minutes; intended before publishing bi-family artifacts).
Per-library -Dtestpolicy-<lib>=gate|record|skip and -Dtestargs-<lib>
invocation overrides - no recipe edits needed. Baselines staged in both
flows (suite.tcl item list + bootstrap recipe_items).
suite.tcl: test action takes -steps (default test-gate) and a -zigargs
passthrough (both actions); passes -j1 so combined test invocations
serialize (zig runs independent steps concurrently; thread's suite is
timing-sensitive).
Census results (suite tclsh90s.exe 9.0.5, zig 0.16.0): thread 143/0 failed,
EMPTY baseline, GATE PASS x3 identical consecutive runs; tclvfs 51/7
failed, all dispositioned (3x tcl9 glob-nomatch semantics through vfs
handlers, 4x dead-FTP network tests), GATE PASS x3 identical; tcllib WITH
tcllibc accelerators engaged (E tcllibc markers, crc32-critcl-* variants
running) RECORDED 62328/54 failed; tklib RECORDED 796/18 failed (widgetPlus
drift under Tk 9). No-totals failure path verified in both modes.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
The whole pipeline now lives in the zig recipe; Tcl remains the tool exactly
where a tclsh is guaranteed to exist - run by the FRESHLY BUILT suite shell
as build steps:
- New steps (native-host builds): smoke (static shell patchlevel; zip shell
patchlevel + attached tzdata/autoload), tklib / tcllib (their own installers,
batch, -pkg-path as a cached output dir installed into the prefix, + package
smokes incl withdrawn-Tk tooltip), tcllibc (critcl driving zig cc via the
tracked critcl_zig.config, module list parsed from tcllib's version.tcl,
pinned-zig dir prepended to PATH, + accel smoke), test-gate (tools/
test_gate.tcl - the parsed-totals gate vs expected_test_failures.txt,
-Dtestargs passthrough).
- Package landing moves into the recipe proper: thread pkgIndex.tcl
(build_tclthread), tk pkgIndex.tcl (build_tk), and the tclvfs script package
incl .in-template substitution + dll (build_tclvfs_shared
install_tclvfs_package) - all hooked to the install step.
- Step scripts: tools/test_gate.tcl, tools/suite_smoke.tcl, tools/pkg_smoke.tcl
(run under the built shell; assertions live in Tcl).
- Two windows-childproofing findings encoded: built-shell Runs execute the
CACHED artifact (no ../lib/tcl9.0 beside it) so each such Run gets
TCL_LIBRARY pointed at the source tree's script library (the zip smoke
deliberately excluded - its attached library is the thing under test); and
cached (non-side-effect) Runs spawn with stdout IGNORED, leaving the tcl
child without a stdout channel ('can not find channel named "stdout"',
critcl's logging) - such runs capture stdout to give the child a real pipe
while keeping caching.
- suite.tcl: thinned to the fossil dev flow - fetch live checkouts (git kind
now handled in the main loop for critcl's pin), stage the recipe, delegate
to the staged steps (run_zig_steps; 'test' delegates to test-gate). Default
-steps and the bootstrap default grow to the full pipeline short of
test-gate. critcl_zig.config + expected_test_failures.txt join both staging
lists. Docs updated (README two-flow section, sources.config two-surface
header, overlay section); .gitignore learns .zig-cache/ and zig-pkg/ (zig
0.16 extracts fetched packages into zig-pkg/ beside the manifest).
Verified (fossil flow): full pipeline PASS - suite_smoke static+zip, tklib
tooltip:2.0.4 under withdrawn Tk, tcllib md5/sha1/cmdline, tcllibc:2.0 with
md5-critcl-accel:1; 'suite.tcl test -testargs {-file http.test}' delegates to
the gate step (528/519/9/0 GATE PASS).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
A developer (no llm assistance, no punkshell modules - the driver stays
dependency-free plain tclsh) can now copy the suite tree and retarget
sources declaratively: urls/refs/pins live in sources.config (plain line
records 'source <name> <kind> <url> <ref> <dir>', parsed never executed;
fossil sources + the critcl git pin), and the build stage derives from the
suite FOLDER name so a copied tree stages into its own _build/<name>
isolated from the original. -tclbranch becomes a per-run override of the
declared tcl ref. Depth limit documented where the tweaker will read it:
same-major url/ref changes are config-only; version-class changes ripple
into build905.zig (checkout dir names, version-derived tm/dll/manifest
names).
README gains a Retargeting/copying section; its Sources section corrected
(stale per-stage fossil-store location from before the ~/.punkshell/fossils
move, and the G-098 sources were missing from the table).
Direction recorded in G-096 notes (2026-07-20): toml requirement DROPPED
for binary-build buildsuites; long-term intent is bootstrapping without a
pre-existing tclsh (zig acquisition = accepted root dependency; the
freshly built tclsh is the legitimate intermediate for tcllib/tklib
installers and critcl); zig-driver-vs-polyglot question recorded with the
current recommendation (zig hybrid; polyglot counselled against).
Verified: suite.tcl test -testargs '-file assocd.test' passes through
config load + fetch skip-logic + gate on the existing stage; stage
derivation for a copied name resolves to _build/<copyname>.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
The build016 experiment port lands in the tracked recipe (root_module/
createModule creation, addLibrary+linkage, .root_module.* method sweep,
linkSystemLibrary options arg, array_list.Managed, Io.Dir dir-walks with
b.graph.io, wrapfiletofile ported to the 0.16 entry/Io idiom). 0.14 support
deprecated per user direction; 0.14.1 remains archived on punkbin. Verified
on the pinned default (bin/tools/zig-x86_64-windows-0.16.0): build PASS,
shells 9.0.5, tcl-test parity 557/357/200/0 identical to the 0.14.1 build.
punk-getzig payload pins -> 0.16.0 (windows zip + linux tarball), re-wrapped
checkfile ERROR-free, ps1 twin refreshed. punkbin commit 54714d7 holds the
0.16.0 archive; push pending gitea recovery (server currently 500s).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
vqtcl was an old-tclkit experiment with no confirmed public upstream - wiring,
helper module, staging and docs removed (future tclkit work: TEMP_REFERENCE/
metakit + KitCreator). New 'test' action runs tests/all.tcl on the suite-built
static shell with -testargs passthrough; verified assocd/util/lindex: 557 run,
357 passed, 200 constraint-skipped (no C test commands in a release shell),
0 failed. install-libraries tm filenames synced to the tree's provided
versions (tcltest-2.5.11, http-2.10.2, platform-1.1.1) - the 2024-era names
made 'package require tcltest' fail on a filename/provide version conflict.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Recipe: b.host -> b.graph.host; redundant second UNICODE tclMain add into the
objs lib removed; exe's ansi tclMain compiled with -UUNICODE -U_UNICODE
-DTCL_ASCII_MAIN (zig cc windows-default defines made it a duplicate UNICODE
compile under 0.14.1 - lld duplicate Tcl_MainExW/commons). Driver: per-item
recipe staging, per-zig-version local caches (.zig-cache-<ver>; caches must
not be shared across zig versions), zig resolution -zig > PUNK_ZIG > pinned
bin/tools/zig-x86_64-windows-0.14.1 > PATH. Verified: PASS on 0.14.1 AND
regression PASS on 0.14.0-dev.2074; pinned-default no-option run PASS.
Pinned archive minisign-verified and published to punkbin (abcd87c).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
First real buildsuite: build905.zig (verbatim G-076-validated recipe) +
helper modules + tools, driven by suite.tcl which stages the recipe into
src/buildsuites/_build/suite_tcl90, arranges sources (tcl fossil
core-9-0-branch --nested with FOSSIL_HOME isolation; thread/tclvfs trunk;
zlib from the tcl tree's compat/zlib; vqtcl from a local dir), generates the
configure-products fresh checkouts lack (tclUuid.h, tclsh.exe.manifest,
thread.rc include), builds and smoke-tests. Verified PASS: static + zip
shells report 9.0.5 (checkout 1a9c3b9d96), Thread 3.0.1 builds from current
trunk (new generated-include fix in build_tclthread) and loads. The 2024
TCLSH_PIPEREPL/tclZipfs/tclCmdIL patches are now tracked under
suite_tcl90/patches with a semantics README (not applied by default builds).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com