Tree:
b0a4c6ef29
master
v0.1a
${ noResults }
10 Commits (b0a4c6ef29ead2fa9c76553f9b44c0efafa3cfda)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
b0a4c6ef29 |
buildsuites publish riders: librev default -> 2 (published-state record) + record path fix
librev defaults bumped 1->2 in both recipes with repaired help text (was "nothing published yet" while r1 had been published since 2026-07-30 - the manual-drift failure mode recorded in G-171's publish follow-on); the help now states the convention: the default IS the committed record of published state, bumped in the same work unit as each publish. Family-record comment fix (tcl90): the repairs-manifest pointer is artifact-relative - lib/tcllib<ver>/punkbin-upstream-repairs.toml in the mounted image (the attached zip roots at the staged base/, so the previous base/lib/... path named a location that does not exist to a reader inside the runtime). Probe-caught before publish; family kits rebuild before the replace. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
3 days ago |
|
|
72725deecb |
tcllib pkgIndex gate in both buildsuites: upstream ifneeded/provide skew (rest 1.7 vs 1.8) repaired before it reaches kits
'package require rest' fails in every punk kit built from stock tcllib: modules/rest/pkgIndex.tcl indexes 1.7 while rest.tcl provides 1.8, so Tcl runs the 1.7 ifneeded script, the file provides 1.8, and the require dies with "attempt to provide package rest 1.7 failed: package rest 1.8 provided instead". No version request can satisfy it. Upstream regressed this in tcllib checkin [0b3dd048f8] (2025-07-16), which bumped the provide and left pkgIndex.tcl (and rest.man) at 1.7; still unfixed on trunk/master, so the pin cannot be moved past it. Reported as https://core.tcl-lang.org/tcllib/tktview/523f7e055647611328efa2539717023d18b99ccd Four siblings share the class in the shipping tree: doctools::toc (2 vs 2.1), math::filters (0.3 vs 0.4), nettool (index sources a nonexistent nexttool.tcl), and tcl::chan::std (1.0.2 vs 1.2 - latent only, punkshell's own lib/virtchannel_base copy shadows it). tools/pkgindex_gate.tcl (byte-identical copies in both suites) sits between the tcllib installer output and the install tree. The index follows the file: the provide is what executes, so rewriting a file's provide down to its indexed version would misrepresent the code. It is a gate, not a silent fixer - an unrecorded defect fails the build (new upstream breakage and a genuine version bump are indistinguishable here, and the difference is a human decision), and an ALLOWLIST record matching nothing also fails, meaning upstream fixed it and the record must go. build905.zig had TWO consumers of the raw installer output - the install prefix and the kit-family base/lib/tcllib<ver> copy. Both now take the gated tree; repointing only the install would have left every kit broken while the fix looked applied. Verified: 440 indexed loaders checked, 5 repaired, exactly 5 single-line diffs and nothing else touched; an independent re-audit of the repaired tree reports 0 mismatches; rest 1.8, doctools::toc 2.1, math::filters 0.4 and nettool 0.5.4 all require cleanly against it; both gate failure arms exercised; the tool runs identically under Tcl 8.6.18 and 9.x; both zig recipes compile and construct their graphs under the pinned zig 0.16.0. No full suite rebuild was run - the fix reaches kits only after a rebuild, lib-tier r2 emission, publish, libfetch and bake. No project-version bump: buildsuites are a non-shipped surface. Claude-Session: https://claude.ai/code/session_01DeQ2aPnbsinpFABUTYK34k Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com |
4 days ago |
|
|
946a32da19 |
G-172 drafted (proposed) + the four recipe pins: distributed binaries get a baseline CPU floor
The published tclsh9.0.5 runtime family is AVX-512-only. A flagless
bin/punk-runtime.cmd fetch hands a fresh checkout the curated win32-x86_64
default (tclsh9.0.5-punk-r2.exe), which on a CPU without AVX-512 raises #UD and
is killed with STATUS_ILLEGAL_INSTRUCTION (0xC000001D, errorlevel -1073741795)
before writing a byte - no message, no prompt, no error. First reported as a
Windows-version difference (25H2 works, 23H2 does not); it is not one.
Cause: the recipes called b.standardTargetOptions(.{}) and no build path passed
-Dtarget/-Dcpu, so zig resolved cpu_model .determined_by_arch_os by NATIVE
detection and ReleaseFast auto-vectorised to the Zen 5 build host. Measured: all
six published tclsh9.0.5-* artifacts (punk + plain, r1 + r2, both -bi- variants)
carry 2756 zmm-operand instructions each - real EVEX encodings, first site at the
front of .text, and Tcl has no runtime CPU dispatch - as do bin/punk905.exe,
punk9-dev.exe, punk9_beta.exe, punk9bi_beta.exe, punkdeclare.exe and
punkfiledemo.exe. bin/punkzip.exe carries 1724 and bin/punkres.exe 1423, so a
bake on such a machine fails too. An older generation (punk901*, punk9.exe,
xcritcl.exe, tclsh90s*) is AVX2-only from an earlier host: same defect, milder
floor. Confirmed across three machines - Zen 2 dies, Zen 4 and Zen 5 run.
Pins applied to all four in-repo recipes (suite_tcl90, suite_tcl86, punkzip,
punkres): standardTargetOptions gains .default_target = .{ .cpu_model =
.baseline }, so a flagless build is portable while -Dcpu=native remains the
developer opt-in and -Dtarget=<triple> is unaffected. Floor chosen as baseline
(x86-64 v1) - for a Tcl interpreter the codegen delta against v2/v3 is
negligible set against the default runtime failing to start. This has to be a
recipe DEFAULT rather than a build-command convention: "remember to pass -Dcpu=
when publishing" is precisely what failed silently for six artifacts.
Verified by zig ast-check on all four recipes, and by reproducing the mechanism
with the same toolchain and optimize level on an equivalent recipe (flagless ->
x86_64 baseline, zmm=0; -Dcpu=native -> znver5, zmm=805). No suite build was
run: all four recipes gate on required_zig = "0.16.0" with a .lt SemVer compare,
which rejects the bundled prerelease bin/tools/zig-0.16.0-dev.254 - a separate
pre-existing defect, recorded in the goal's Notes and deliberately not fixed
here.
Nothing is rebuilt or republished, and no shipped surface changes, so no project
version bump. Recording the floor in the artifact metadata record, an audit tool,
punk-runtime surfacing it on use/run (fetch stays ungated - fetching for another
platform is a normal workflow), and the rebuild/republish with the defaults.txt
repoint all remain open as G-172.
Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com
|
5 days ago |
|
|
79b36ff121 |
G-101 increments 3+4: mk4 kit-head + end-to-end demonstration -> achieved
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
|
1 week ago |
|
|
de59ecc626 |
G-101 increment 1: suite_tcl86 consumes the G-153 metakit records
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
|
1 week ago |
|
|
a71d7bd377 |
buildsuite artifact identity fields default from punkproject.toml (punkshell 0.37.0)
G-117/G-123 lineage: project, project_url and packager in emitted punkbin-artifact.toml records (runtime family + library tier, both suites) now default from the enclosing project's punkproject.toml [project] table via a bounded walk-up from the build root (common.punkprojectField) - a copied suite reads its own project's manifest. Chains: project: -Dproject > manifest name > "punkshell" (was hardcoded); project_url: -Dprojecturl > manifest url > "unrecorded"; packager: -Dpackager > PUNKBIN_PACKAGER > manifest packager > git identity > fossil user default (new fossil-only fallback) > "unrecorded". Verified end-to-end: suite_tcl90 kit-family + library emissions and the suite_tcl86 library emission carry the manifest values, -D overrides win, family_check green. Root punkproject.toml gains an active url; dev project.new's seeded manifest now carries commented url/packager placeholders documenting the consumption site (punk::mix::commandset::project 0.4.1). Assisted-by: harness=opencode; primary-model=huggingface/moonshotai/Kimi-K3; api-location=unknown |
2 weeks ago |
|
|
f9c5d4ac60 |
G-138 increment 1: library-artifacts emission step, both suites, e2e verified
New tools/library_artifacts.tcl (suite_tcl90 + identical suite_tcl86 copy): emits the punkbin LIB tier from verified suite builds - installed-shape package folders as immutable <folder>-<tcl8|tcl9>-r<N>.zip artifacts (lib/allplatforms for pure-tcl tcllib, lib/<target> for the tcllibc critcl accelerators) with an embedded schema-v2 class=library punkbin-artifact.toml at the package root (embed-then-hash: sha1/size/built stay sidecar-only), toml sidecars and per-tier punkbin-format sha1sums.txt. Provenance: [provenance] class=suite-built (the G-123 schema-v2 lineage), tcllib/critcl checkout uuids, critcl version from the package's own teapot.txt, driving_tcl_patchlevel, toolchain/optimize. Determinism: punkzip assembly (sorted members) over a staging copy with file/dir mtimes synced from the install tree, the embedded record's mtime pinned to the package's pkgIndex.tcl - re-emission over an unchanged install verified BYTE-IDENTICAL in both suites. The dlls inside are not bit-reproducible across zig rebuilds, so -Dlibrev bumps only on deliberate publish (default 1 - nothing published yet). Wiring: 'library-artifacts' zig step in build905.zig (runs under the plain family kit - proof-doubling per kit-family-artifacts) and build86.zig (runs under the installed static shell; brings the G-117 identity options to that recipe), in the default step lists (suite.tcl + bootstrap steps parity). punkzip staged as an upstream git source like critcl (sources.config record + lazy build.zig.zon pin, commit 0882f0373e = v2.3.1, generation-neutral) and compiled host-native by the recipes (ReleaseSafe - real deflate work). Verified 2026-07-30: suite_tcl90 emitted tcllib2.0-tcl9-r1.zip (871 members) + tcllibc-tcl9-r1.zip; suite_tcl86 emitted the -tcl8- pair (different bytes, same shape - the generation tag is identity, not decoration). Materialized load tests: packages extracted from the zips resolve and load under the plain family kit (tcl9) and the static 8.6 shell, critcl accelerator engaged from the extracted tcllibc, sources proven via package ifneeded paths (the 8.6 first run tripped the recorded tm-path shadowing trap - hermetic re-run clean). md5c dispositioned: NOT published - md5x.tcl prefers tcllibc, which bundles the md5 accelerator. Evidence and decisions in the goal detail Progress section; suite READMEs document the step; punkbin layout-docs update is the remaining acceptance item. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
f89bd58c31 |
G-100 achieved: suite_tcl86 dependency set (Tk 8.6, tklib, tcllib + tcllibc) and an 8.6 runtests census
Extends the 8.6 buildsuite with the remaining pieces punkshell's Tcl 8 testing
depends on, all built from source with the pinned zig 0.16.0 toolchain only.
Tk 8.6.17 (build_tk86/build_tk86.zig) is a RE-DERIVATION from the staged 8.6
win/makefile.vc + rules.vc, not a port of suite_tcl90's build_tk.zig:
- no generic/tkPkgConfig.c in 8.6 -> no CFG_* defines at all
- rules.vc TCL_MAJOR_VERSION==8 arm -> tk86t.dll + lib/tk8.6 (vs tcl9tk90.dll)
- @TK_WIN_VERSION@ substitutes $(DOTVERSION).0.0, not the tcl-style
<dotversion>.<releaselevel>.<patchlevel> formula
- 8.6 TKOBJS carries no tkIcu/tkImgListFormat/tkImgSVGnano/tkWinGDI/tkWinIco/
tkWinSysTray; XLIBOBJS is a first-class makefile macro here (the 9.0
derivation had to recover those files by hand)
USE_TCL_STUBS + USE_TCLOO_STUBS against libtclstub86.a is the stock rules.vc
arrangement and keeps the dll loadable by both suite shells. tkMain.c is
compiled twice per makefile.vc, the ansi copy forced with -UUNICODE/-U_UNICODE
(verified the pinned zig cc defines neither for x86_64-windows-gnu, so the 8.6
core's ANSI/TCHAR arrangement is matched exactly).
tklib 0.9 and tcllib 2.0 install via their own installer.tcl (batch, packages
only, explicit -pkg-path so the installer's tcl_pkgPath-derived default can
never write off-tree); tcllibc is built by critcl 3.3.1 driving zig cc (tracked
critcl_zig.config, target pinned win32-x86_64-zig - critcl otherwise probes PATH
and falls back to its builtin msvc target). critcl compiles against its own
bundled headers chosen by the driving shell's version, which is why one config
serves both generations.
New evidence tools, run on every build:
tools/tk_smoke.tcl maps a real toplevel with classic + themed widgets,
updates, then destroys it - a load-only check passes
even with no usable display
tools/accel_bench.tcl same payload through sha1's critcl and pure-Tcl
implementations with the digests compared:
4MB -> critcl 5.7ms vs pure-tcl 2736ms = 477x
Test tiers (G-107 policy pattern): test-tcllib/test-tklib on the record tier
inside test-libraries, plus an opt-in test-tk (winDialog/winMsgbox excluded by
default - their message-injection automation blocks on a human under a batch
shell). First censuses on tclsh86ts.exe 8.6.18:
thread 142 run / 0 failed GATE PASS
tklib 796 run / 0 failed record
tcllib 64259 run / 41 failed record (names in the summary artifact)
tclvfs 51 run / 4 failed GATE PASS after baseline extension
The tclvfs baseline grew vfsFtp-1.1..1.3: they sit behind an 'ftp' constraint
needing tcllib's ftp package - absent at the G-099 capture, satisfied now that
the suite installs tcllib - so they run and reach the retired ftp.tcl.tk, the
same external-service class already baselined for vfsUrl-1.2/2.1.
punkshell runtests census (both runs 2026-07-26, identical flags, default
single-process sequential - 8.6 has no tcl::process so -jobs re-convoys):
native Tcl 8.6.17 1003 total / 986 passed / 10 skipped / 7 failed
suite tclsh86ts 1003 total / 987 passed / 10 skipped / 6 failed
runtests_parity.tcl finds exactly ONE difference: punkcheck
concurrency_two_writers_no_corruption failed in the BASELINE run and passed on
the suite runtime - a full-suite-load flake (6/6 twice in isolation on both
runtimes). Zero suite-runtime-only failures. Tk-dependent suites ran unskipped
(repl consolebackends 3/3, including the tkconsole backend on the suite Tk).
Two defects fixed in passing:
- scrubTclEnv never cleared TCL<major>_<minor>_TM_PATH, so suite shells
silently preferred machine/repo tm modules over what the suite had just
installed (a repo-built sha1-2.0.4.tm shadowed tcllib's 2.0.5, md5 2.0.8
shadowed 2.0.9) - any census through such a shell measures the machine. The
scrub list now covers TCL8_0..8_7 + TCL9_0/9_1 in all three sites (per-step,
suite.tcl process-level, bootstrap nested build). suite_tcl90 has the same
exposure via TCL9_0_TM_PATH and is deliberately untouched here (out of this
goal's scope) - pointers recorded in G-108 and G-116.
- build.zig.zon's .fingerprint was hand-authored, so 'zig build' from the
tracked suite dir died with 'invalid fingerprint' - the no-tclsh bootstrap
flow could never have run. Corrected to zig's computed value (its low half
is a checksum of the package name); 'zig build stage' now verified.
Goal flipped to achieved 2026-07-26 and archived; reference sweep updated G-005,
G-101, G-105 and ARCHITECTURE.md, and the archive-time xref pair G-101 <-> G-116
(whose only bridges were the archived G-100/G-103) gained a direct Related
pointer. No project-version bump - arm's-length build tooling, not shipped shell
behaviour.
Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com
|
2 weeks ago |
|
|
a20a64a2a1 |
G-099 achieved: suite_tcl86 zig buildsuite for Tcl 8.6 (runtime, thread 2.8, tclvfs, core-test gate)
Builds a Tcl 8.6.18 windows runtime from core-8-6-branch sources with the
pinned zig 0.16.0 toolchain only (no MS toolchain), forked from suite_tcl90
(duplication-with-a-note posture). Products (stock threaded-release naming -
rules.vc keeps the 't' SUFX on 8.6):
bin/tcl86t.dll + tcl86t.lib shared core (static zlib compiled in; no zlib1.dll)
bin/tclsh86ts.exe static shell (kit-class; dde/registry static)
bin/tclsh86t.exe dynamic shell against the dll
lib/libtclstub86.a stub lib for extensions
lib/tcl8.6/... script library tree (dde/reg dlls inside)
lib/tcl8/{8.5,8.6}/... tm modules; lib/thread2.8.13, lib/vfs1.4.2
Companions: thread 2.8.13 (thread2813t.dll, TEA installed shape from the
checkout's own pkgIndex.tcl.in) and tclvfs 1.4.2 (vfs142t.dll) build and load;
registry 1.3.5 / dde 1.4.6. No zipfs in 8.6 - exe+dll+on-disk lib tree only,
resolved hermetically (exe/dll-relative, TCLLIBPATH/TCL_LIBRARY unset in all
child runs).
Recipe: build86.zig + build_common.zig + build_zlib86/build_tclthread86/
build_tclvfs86 helpers; tools/ and src/main.zig copied verbatim (suite-agnostic).
Two load-bearing 8.6 findings recorded in the README DERIVATION and recipe
comments: MP_FIXED_CUTOFFS (the in-core libtommath ships no bn_cutoffs.c) and
TCL_BROKEN_MAINARGS + console subsystem for the gcc-class main() entry.
Test gates (suite.tcl test -> zig build test-gate/test-libraries) parse all.tcl
totals (exit codes untrusted) and gate against tracked dispositioned baselines.
First census + two-consecutive-run deterministic PASS (machine SuperBee):
core 46525 run / 2 failed (filename-16.12/16.13 admin-share self-globbing)
thread 142 run / 0 failed (empty baseline)
tclvfs 51 run / 2 failed (vfsUrl-1.2/2.1 external ftp.tcl.tk dependency)
Goal flipped to achieved 2026-07-26 and archived; reference sweep updated G-005,
G-100 (now unblocked), G-101 and ARCHITECTURE.md. No project-version bump
(arm's-length build tooling, not shipped shell behaviour).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
2 weeks ago |
|
|
81f69d913f |
G-099 active: suite_tcl86 born on the G-104 contract - sources pinned, staging live, derivation started
Activation gated on the G-112 rename core + G-104 contract (both achieved
today); score re-run recorded. First increment:
- suite_tcl86/: sources.config (source + self-description records - lists and
describes itself via 'make.tcl buildsuite list/info' with no make.tcl
edits), suite.tcl fork (folder-derived naming, {tcl tclthread tclvfs}
requireds, build86.zig recipe file), build86.zig pending-derivation skeleton
(staging succeeds, recipe fails with a clear message), build.zig.zon with
real zig-fetch hashes, README with the DERIVATION record.
- Thread 2.8 selection: thread-2-8-branch @ e14fa771ae (tagged thread-2-8-13,
2.8.13); configure.ac TCL_MAJOR_VERSION==8 guard confirms the pairing.
- 8.6 source records in BOTH flows: dev refs (core-8-6-branch -> tcl86,
thread-2-8-branch, tclvfs trunk 1.4.2-era) + zon per-checkin pins
(tcl 1d1d5cbd91 = 8.6.18 era).
- First staging run through 'make.tcl buildsuite build suite_tcl86' (a real
driver run through the G-104 surface): checkouts staged from the shared
hermetic store, TCL_PATCH_LEVEL 8.6.18 read from the tree.
- makefile.vc derivation findings recorded incl. two Context corrections:
8.6.18 DOES generate tclUuid.h; zlib is prebuilt-import in stock nmake
(zig-only recipe will compile compat/zlib statically).
Core-test census + baseline deliberately pending until a built tclsh86 exists
(recorded in Progress).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
2 weeks ago |