From 3476f3b99b45959cd6ee2beab613abf75d9bda13 Mon Sep 17 00:00:00 2001 From: Julian Noble Date: Mon, 20 Jul 2026 06:04:45 +1000 Subject: [PATCH] G-098 authored: suite Tk+tklib, tcllib with critcl accelerators, testsuite gating Per user direction and draft refinements 2026-07-20: matching tklib alongside Tk (pure-tcl, own installer.tcl where it does more than straight copy); tcllib installed via its installer machinery (installer.tcl/sak.tcl checked for non-copy behaviour) with critcl-built tcllibc driving zig cc; the totals-parsing test gate owns the 72-failure triage. goals_lint clean. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com --- GOALS.md | 4 +++ goals/G-098-suite-tk-tcllib-critcl.md | 40 +++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 goals/G-098-suite-tk-tcllib-critcl.md diff --git a/GOALS.md b/GOALS.md index 626e8eb3..2c2e7a36 100644 --- a/GOALS.md +++ b/GOALS.md @@ -349,3 +349,7 @@ Detail: goals/G-096-zig-buildsuite-piperepl.md ### G-097 [proposed] bin utility naming sweep: punk- prefix for remaining punkshell-own tools Scope: src/scriptapps/ + src/scriptapps/bin/ (bits, runtime, tclargs scriptset renames; selfsign experiment scripts), bin/ (regenerated wrapper twins + renamed experiment scripts, old names retired), src/tests/modules/punk/mix/testsuites/scriptwrap/ + src/tests/shell/testsuites/binscripts/ (roundtrip pins), bin/AGENTS.md + referencing docs Detail: goals/G-097-bin-utility-naming-sweep.md + +### G-098 [proposed] suite_tcl90 full punkshell dependency set: Tk+tklib, tcllib with critcl accelerators, and testsuite gating +Scope: src/buildsuites/suite_tcl90/ (recipe extensions, driver steps, testsuite gate), src/buildsuites/_build/ (tk/tklib/tcllib/critcl sources and outputs), bin/tools/ (pinned zig as consumed), src/tests/ (punkshell suites exercised against the suite-built runtime) +Detail: goals/G-098-suite-tk-tcllib-critcl.md diff --git a/goals/G-098-suite-tk-tcllib-critcl.md b/goals/G-098-suite-tk-tcllib-critcl.md new file mode 100644 index 00000000..9a21c00a --- /dev/null +++ b/goals/G-098-suite-tk-tcllib-critcl.md @@ -0,0 +1,40 @@ +# G-098 suite_tcl90 full punkshell dependency set: Tk+tklib, tcllib with critcl accelerators, and testsuite gating + +Status: proposed +Scope: src/buildsuites/suite_tcl90/ (recipe extensions, driver steps, testsuite gate), src/buildsuites/_build/ (tk/tklib/tcllib/critcl sources and outputs), bin/tools/ (pinned zig as consumed), src/tests/ (punkshell suites exercised against the suite-built runtime) +Goal: suite_tcl90 builds/installs the remaining runtime pieces punkshell testing depends on - Tk (fossil core.tcl-lang.org/tk) loadable by the suite's Tcl 9.0 windows runtime together with a matching tklib (fossil core.tcl-lang.org/tklib; pure-tcl, installed via its own installer.tcl where that does more than a straight copy), and tcllib (fossil core.tcl-lang.org/tcllib) installed via its documented mechanism (installer.tcl / sak.tcl checked for installation behaviour that is not just a straight copy) WITH its critcl-built C accelerators (tcllibc; critcl from github.com/andreas-kupries/critcl driving zig cc as the compiler, bootstrapped by the suite-built tclsh - no MS toolchain) - and the suite's test surface becomes a gate: suite.tcl test parses the all.tcl totals rather than trusting the exit code and fails on failures absent from a recorded expected-failure baseline. +Acceptance: from the pinned zig and fetched sources the suite produces a Tk the suite tclsh loads (package require Tk with a create/destroy-window verification recorded in this file) and a matching tklib whose packages resolve from the install (a representative tklib package require recorded); a tcllib install performed via its own installer machinery (installer.tcl/sak.tcl behaviour checked and recorded - module selection, pkgIndex/tm generation, critcl module handling) whose accelerators load (package require tcllibc) with a punkcheck-relevant hashing comparison showing the accelerated path engaged versus pure-tcl; critcl is version-pinned and driven with zig cc; suite.tcl test gates on parsed totals against a recorded expected-failure baseline and the current 72 core-test failures are dispositioned (fixed or baselined with reasons); punkshell's runtests can run against the suite-built runtime with Tk-dependent suites no longer skipped for lack of Tk. + +## Context + +Follow-on from G-096 (tracked zig buildsuite; zig 0.16.0 pin adopted 2026-07-20), per +user direction 2026-07-20: + +- Tk must be built to run ALL punkshell tests (Tk-dependent suites currently skip). +- A matching tklib may be required for Tk to function properly - believed pure-tcl, so + a fossil pull plus possibly its installer.tcl "depending on whether it does anything + special" (user wording). +- tcllib is mostly pure-tcl but its critcl-built accelerators make a huge performance + difference - without tcllibc, punkcheck hash checking is very slow. tcllib has an + installer.tcl and sak.tcl which should be checked for installation behaviour that + is not just a straight copy. +- critcl (github.com/andreas-kupries/critcl) may be required for the accelerators; + it needs a tclsh (the suite-built shell) and a C compiler (zig cc - keeps the + no-MS-toolchain policy; the mechanism is zig-version-agnostic). +- Testsuite state at goal creation: full Tcl core suite on the suite-built shell runs + 66350 tests, 72 FAILED (triage pending; native-runtime baseline on this machine is + exec-14.3 only), and all.tcl's exit code does not reflect failures - hence the + totals-parsing gate requirement. + +## Notes + +- Related goals: G-096 (the buildsuite this extends; its remaining items - piperepl + rebase/matrix and punk-getzig per-version fetch - stay with G-096), G-005 (zig build + infrastructure direction), G-060 (qemu cross-platform matrix - eventual multi-platform + consumer), G-021/G-020 (agent visual verification - a working Tk underpins those). +- The 72-failure triage is tracked HERE (gate clause), not in G-096, to avoid double + tracking. +- Fetch conventions follow suite_tcl90: fossil clones cached in ~/.fossils, checkouts + under src/buildsuites/_build with FOSSIL_HOME isolation and --nested; critcl is git, + not fossil - clone/pin convention to be settled in the work (git clone under _build + with a pinned tag/commit is the expected shape).