You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

15 KiB

G-100 suite_tcl86 dependency set: Tk 8.6 + tklib, tcllib with critcl accelerators, punkshell runtests on the 8.6 runtime

Status: achieved 2026-07-26 Scope: src/buildsuites/suite_tcl86/ (recipe extensions, driver steps); 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 8.6 runtime) Goal: suite_tcl86 builds/installs the remaining runtime pieces punkshell's Tcl 8 testing depends on - Tk from fossil core-8-6-branch loadable by the suite's 8.6 windows runtime together with a matching tklib (installer.tcl where it does more than a straight copy), and tcllib installed via its documented installer machinery WITH its critcl-built C accelerators (tcllibc; critcl driving zig cc, bootstrapped by the suite-built tclsh86 - no MS toolchain) - and punkshell's own runtests runs against the suite-built 8.6 runtime with Tk-dependent suites unskipped. Acceptance: from the pinned zig and fetched sources the suite produces a Tk 8.6 the suite tclsh loads (package require Tk with a create/destroy-window verification recorded here) and a matching tklib whose packages resolve (a representative require recorded); a tcllib install via its installer whose accelerators load (package require tcllibc) with the accelerated-vs-pure comparison recorded; punkshell runtests runs against the suite 8.6 runtime and its census is recorded here against a same-day native/kit 8.6 baseline run (same include set), with every difference dispositioned - Tk-dependent suites run unskipped, and any 8.6-runtime-only failures are root-caused or baselined with reasons.

Context

Mirror of G-098 (suite_tcl90 dependency set, achieved 2026-07-20) for the 8.6 arc. Depends on G-099 (suite_tcl86 core buildsuite) - ACHIEVED 2026-07-26 (see goals/archive/G-099-suite-tcl86-buildsuite.md); the 8.6 runtime (tclsh86ts/ tclsh86t + tcl86t.dll + installed lib tree), thread 2.8.13, tclvfs 1.4.2 and the core/thread/tclvfs test-gate this goal extends now exist, so the dependency is met and G-100 is unblocked.

8.6-specific expectations (verify at activation):

  • Tk core-8-6-branch pairs with the 8.6 runtime; the 9.0 build_tk zig module was derived from tk9 makefile.vc object lists - the 8.6 lists/xlib arrangement differ, so expect a re-derivation rather than reuse.
  • tcllib trunk supports 8.5+; the same vendored critcl mechanism applies, with critcl driven by the suite tclsh86. tcllibc built per-generation (the punk9wintk903 vfs precedent carries tcl8/tcl9 tcllibc side by side under lib_tcl8/lib_tcl9).
  • runtests under 8.6: no tcl::process, so -jobs child spawning falls back to blocking execs which CONVOY on windows (documented) - run -singleproc 1 or accept serialized child walls for the census run; record which mode produced the census.
  • Census baseline: compare against the punk86-class kit runtime results on the same day/include-set (forward-slash path conventions on 8.6 kits noted in project memory) rather than against the 9.x census.
  • The kit-child 'src' package_mode launch added to runtests for punk kits (G-098 increment 7) applies to 8.6 punk kits too - a plain suite tclsh86 host takes the native path.

SEQUENCING: as for G-099 - proposed now, activation recommended after suite_tcl90's G-096 (achieved 2026-07-20) remainder closed and punk905_beta trial concludes.

Progress

2026-07-26 activation + increment 1 (dependency set built, census taken)

  • ACTIVATED by the user. Sources wired into both flows: sources.config gains tk (core-8-6-branch -> dir tk86), tklib/tcllib (trunk) and critcl (git 3.3.1); build.zig.zon gains the matching pins - tk freshly zig fetched (checkin 9986fdc267, 2025-03-17 = Tk 8.6.17), tklib/tcllib/critcl re-fetched and verified BYTE-IDENTICAL to suite_tcl90's pins (generation-neutral upstreams; what differs per suite is the shell running the installers and the critcl target). suite.tcl gains git-source support + the new staging items; the bootstrap driver's source_dirs/recipe_items match.
  • TK 8.6 RE-DERIVED (build_tk86/build_tk86.zig) from the staged 8.6 win/makefile.vc + rules.vc, not ported from the 9.0 module - the goal Context's expectation held. Full derivation record in src/buildsuites/suite_tcl86/README.md; the load-bearing differences: no tkPkgConfig.c (so NO CFG_* defines at all), the TCL_MAJOR_VERSION==8 naming arm (tk86t.dll, lib/tk8.6), the @TK_WIN_VERSION@ = $(DOTVERSION).0.0 manifest substitution (not the tcl-style releaselevel formula), and an 8.6 object inventory without tkIcu/tkImgListFormat/tkImgSVGnano/tkWinGDI/tkWinIco/tkWinSysTray. Products: bin/tk86t.dll + lib/tk86t.lib + the lib/tk8.6 script library + makefile-shaped pkgIndex.tcl.
  • TK ACCEPTANCE EVIDENCE (repeatable - tools/tk_smoke.tcl runs in the smoke step on every build, and a load-only check would pass with no usable display): tk_smoke OK: Tk 8.6.17 (Ttk 8.6.17) windowingsystem win32 screen 3840x2160 depth 32 widgets Label/TButton/Toplevel create+map+destroy clean. Both shells load it: pkg_smoke OK: Thread:2.8.13 vfs:1.4.2 registry:1.3.5 dde:1.4.6 Tk:8.6.17 (static AND dynamic).
  • TKLIB via its OWN installer (batch, packages-only, explicit -pkg-path so the installer's tcl_pkgPath-derived default can never place files off-tree) -> lib/tklib0.9. Representative require recorded: pkg_smoke OK: tooltip:2.0.4
    • a Tk-DEPENDENT package resolving through the installer-generated aggregate pkgIndex.
  • TCLLIB 2.0 installed the same way (md5:2.0.9 sha1:2.0.5 cmdline:1.5.3), and TCLLIBC built by critcl 3.3.1 driving zig cc under the suite-built 8.6 shell (tracked critcl_zig.config, target pinned win32-x86_64-zig - critcl otherwise probes PATH and falls back to its builtin msvc target). Accelerator evidence, both on every build: pkg_smoke OK: tcllibc:2.0 md5-critcl-accel:1 and the new tools/accel_bench.tcl - accel_bench OK: sha1 over 4198400 bytes - critcl 5.9ms vs pure-tcl 2661.4ms = 452.3x (digests identical, sha1 2.0.5, tcllibc 2.0). The bench loads BOTH implementations via ::sha1::LoadAccelerator and switches with ::sha1::SwitchTo, so the comparison is in-process and the digests are compared rather than assumed.
  • TEST TIERS extended on the G-107 policy pattern: test-tcllib / test-tklib (record tier, inside test-libraries) and the OPT-IN test-tk (excluded from test-libraries; winDialog.test/winMsgbox.test excluded by default - their message-injection automation blocks on a human under a batch shell).
  • HERMETIC-ENVIRONMENT FINDING (see Notes): TCL<major>_<minor>_TM_PATH was never scrubbed, so the suite shells were silently preferring repo-built tm modules over the tcllib the suite had just installed. Fixed in all three scrub sites before the census was taken.

punkshell runtests census (2026-07-26, both runs same day, same include set)

Mode: DEFAULT single-process sequential (-singleproc 1; no -jobs - 8.6 has no tcl::process, so parallel child spawning re-convoys on windows, per the goal Context). Identical invocation for both runtimes, full source-tree suite, no include filter: <shell> src/tests/runtests.tcl -report json.

  • BASELINE - native Tcl 8.6.17 (C:/Users/sleek/AppData/Local/Apps/Tcl86, which carries Tk 8.6.17, Thread 2.8.12, tcllibc 2.0, twapi): 101 files, Total 1003 / Passed 986 / Skipped 10 / Failed 7, 657s. Files failed: core/tcl/.../exec.test (ERROR invalid command name "tcl::build-info" - a 9-era core test under an 8.6 shell), modules/punk/ns/.../nslist.test (4), modules/punk/ns/.../nsprimitives.test (2 - the :::odd namespace-lookup class), modules/punkcheck/.../concurrency.test (1).
  • SUITE RUNTIME - out/bin/tclsh86ts.exe (8.6.18, this suite's static shell): 101 files, Total 1003 / Passed 987 / Skipped 10 / Failed 6, 601s.
  • DIFFERENCE SET (authoritative, scriptlib/developer/runtests_parity.tcl): exactly ONE - punkcheck concurrency_two_writers_no_corruption ERRORed in the BASELINE run and PASSED on the suite runtime. Every other per-file status, tally, failure identity, skip identity+reason and warning code is identical. DISPOSITION: flake under full-suite load, not a runtime difference - the file passes 6/6 in isolation on BOTH runtimes, twice each (verified same day). ZERO suite-runtime-only failures; nothing needed baselining.
  • TK-DEPENDENT SUITES RAN UNSKIPPED on the suite runtime: modules/punk/repl/testsuites/repl/consolebackends.test 3/3 PASS (its tkconsole backend drives a child repl on the suite-built Tk) and modules/opunk/console/testsuites/console/backends.test 7 passed / 1 skipped. That single skip is backends_tkconsole_widget_size_and_eof, whose tkavailable constraint requires the PUNK_TEST_TK OPT-IN env var (not Tk availability); it skips identically on the native baseline, and the opt-in's own pre-existing quirk is recorded in G-098's increment 6 notes.
  • Runtime-difference note (does not change any result): the suite runtime has no twapi, so its runs open with is_interactive cannot detect console ... without twapi and a punk::du slower-disk-operations warning that the native baseline (twapi present) does not print.

library test tiers - first censuses (2026-07-26, suite tclsh86ts.exe 8.6.18)

Beyond the acceptance text; run because the goal Context asks the G-107 policy-tier shape to follow for the new libraries.

  • thread (gate): 142 run / 126 passed / 16 skipped / 0 failed - GATE PASS (baseline still empty; constraint-driven skips only).
  • tklib (RECORD, new tier): 796 run / 684 passed / 112 skipped / 0 failed. Its Tk-dependent suites exercise the suite-built Tk, and nothing failed.
  • tcllib (RECORD, new tier): 64259 run / 61186 passed / 3032 skipped / 41 failed - names in out/testreports/tcllib.summary. Dominant classes: network-reaching suites (picoirc 20, httpd-proxy/cgi 4), installer/path assumptions (install-2.1/2.2, find-sf-/find-4.0, multi/multiop-5.2), plus matrix-16.7/16.8, tar-add, uri-4.1, example-, zipfile-encode-6.4/6.5. A record tier is evidence, not a gate criterion - no baseline is tracked and the step never fails the build on these.
  • tclvfs (gate): the tcllib install CHANGED this suite's census - vfsFtp-1.1.. 1.3 sit behind an ftp constraint that needs tcllib's ftp package (absent at the G-099 capture: 3 constraint skips), so they now RUN and reach the retired ftp://ftp.tcl.tk, the same external-service class already baselined for vfsUrl-1.2/2.1 (skips 8 -> 5 accordingly). expected_test_failures_tclvfs.txt extended with the three names and the cause; re-run confirms GATE PASS (51 run / 42 passed / 5 skipped / 4 failed, all baselined; vfsUrl-1.2 noted as a stale entry - which members of the family fail is network-timing dependent, so stale notes are expected and never fatal).

Remains for acceptance: nothing - the four acceptance clauses (Tk loadable + create/destroy verification, matching tklib with a representative require, tcllib installed by its own machinery with loading accelerators and a recorded accelerated-vs-pure comparison, and a dispositioned runtests census against a same-day 8.6 baseline with Tk suites unskipped) are all recorded above.

Notes

  • Hermetic-environment finding 2026-07-26 (fixed here, exposure recorded for suite_tcl90): scrubTclEnv cleared only TCLLIBPATH/TCL_LIBRARY/TK_LIBRARY, but tm.tcl also seeds module roots from env(TCL<major>_<minor>_TM_PATH) down through every lower minor. This machine points TCL8_6_TM_PATH at C:/repo/jn/shellspy/modules among others, so suite shells preferred a repo-built sha1-2.0.4.tm / md5 2.0.8 over the tcllib 2.0.5 / 2.0.9 the suite had just installed - a census through such a shell measures the machine. Scrub list now covers TCL8_0..8_7_TM_PATH + TCL9_0/9_1_TM_PATH in the per-step scrub (build_common.zig tcl_env_vars), suite.tcl's process-level unset and the bootstrap nested-build scrub. suite_tcl90 has the same exposure via TCL9_0_TM_PATH and was deliberately left untouched (out of this goal's scope) - worth a suite_tcl90-scoped fix.
  • zig 0.16 trap (recorded while pinning): zig fetch <url> resolves a BUILD ROOT before fetching, so it must be run from a directory containing a build.zig; from anywhere else it dies with the misleading "no build.zig file found, in the current directory or any parent directories". Also in the build.zig.zon header.
  • Activation freshness 2026-07-26: goals_xref.tcl score G-100 re-run at the proposed->active flip (user-directed activation). Top pairs G-105 / G-101 / G-116 / G-108 reviewed; the two that were only one-directional get the back-pointers below, G-116 was already recorded here, and the remaining hits are term noise - no new relationships.
  • Related: G-105 (buildsuite cross-target) - it names this arc as a target- dimension consumer; the tk/tklib/tcllib/critcl steps this goal adds must not preclude a per-target dimension (no per-target tree copies, per-target out prefixes).
  • Related: G-101 (8.6 kit container strategy) - the downstream consumer of this dependency set: whatever container it picks carries the Tk/tklib/tcllib/ tcllibc payload this goal produces.
  • Related: G-108 (debug buildsuite tier) - sibling suite-arc goal queued behind this arc; its -dbg/tcl::test variant pattern is suite_tcl90-scoped today.
  • G-116 relationship (recorded 2026-07-24 after overlap review): G-116's zig-built crypto-backend + static tcltls pattern (suite_tcl90) is the reference if the 8.6 dependency set later grows a tls battery - the bi-family payload contract it extends is generation-shaped, not 9-only.
  • G-005 relationship: same zig toolchain-policy lineage as G-099's note - G-005 owns the make.tcl-integrated vendored-extension build direction; the suites are its arm's-length proving ground.
  • G-099 (achieved, see goals/archive/G-099-suite-tcl86-buildsuite.md) delivered the patterns this goal extends: the build86.zig recipe + build_tclthread86/ build_tclvfs86 helpers (TEA-shape companion builds against the 8.6 stub lib), the whole-tree library install + tm-module derivation, and the suite_tcl90 G-107 (achieved - goals/archive/G-107-buildsuite-library-tests.md) policy-tier test-gate (test_gate.tcl) - a Tk/tklib/tcllib gate follows the same shape. Two 8.6-specific traps recorded there carry forward: the load-bearing MP_FIXED_CUTOFFS define and TCL_BROKEN_MAINARGS+console-subsystem entry handling (build86.zig comments + README DERIVATION). Also inherited from G-099 Notes: the G-106 powershell console-mode disableraw-via-server path is only tcl9-verified - now that a twapi-less 8.6 runtime exists, run the G-106 recipe against it (goals/archive/G-106-powershell-consolemode-fallback.md).