diff --git a/GOALS-archive.md b/GOALS-archive.md index 90663b22..64aa3dab 100644 --- a/GOALS-archive.md +++ b/GOALS-archive.md @@ -290,3 +290,7 @@ Acceptance: against a tool-shaped multiform definition (literal action leaders; ### G-146 [achieved 2026-08-02] Fossil binary-glob seeding for generated projects (initial commit completes) → detail: goals/archive/G-146-fossil-binary-glob-seeding.md Scope: src/project_layouts/ (.fossil-settings payloads); src/make.tcl (thin-layout sync, if derivation chosen); src/modules/punk/mix/commandset/project-999999.0a1.0.tm (generation-time fossil commit path) Acceptance: dev project.new from each binary-affected layout (project-0.1, plus one injection-only layout e.g basic) completes its trailing fossil initial commit cleanly (FOSSIL_HOME diverted, no binary prompt/abort); the generated project's versioned .fossil-settings carries binary-glob with the recorded value; the seeding path (hand-authored per layout vs derived via the make.tcl template refresh) is decided and documented in this file; the G-136 relationship (icon payload is binary - same abort class) is recorded. (Achieved with a companion crlf-glob payload extension: a second abort class - CRLF endings on injected bootsupport content - surfaced once the binary aborts were fixed; decisions and verification in the archived detail file.) + +### G-154 [achieved 2026-08-02] tclparser_punk zig build: fork-as-upstream parser dll for kits and the G-070 oracle → detail: goals/archive/G-154-tclparser-punk-zig-build.md +Scope: external fork repo c:/repo/jn/tclparser_punk (gitea jn/tclparser - the build lane lands there); src/buildsuites/suite_tcl90/sources.config and src/buildsuites/suite_tcl90/build.zig.zon (ready-to-land tclparser records drafted in the detail file; landing them is suite-consumption era); src/buildsuites/suite_tcl86/sources.config and src/buildsuites/suite_tcl86/build.zig.zon (same - the 8.6 records); src/vendorlib_tcl8/win32-x86_64/tclparser1.8 and src/vfs/*/lib_tcl9/tclparser1.9 (vendored third-party parser packages - replacement targets at consumption, not touched by this goal); goals/G-070-pure-tcl-tclparser.md (consumer - parity oracle and corpus seed) +Acceptance: In c:/repo/jn/tclparser_punk under the pinned zig 0.16.0, 'zig build' (lazy zon tcl pins, no local source trees) and 'zig build dual' pass, producing tcl9tclparser19.dll and tclparser19t.dll for both windows arches; 'zig build test -Dtclsh9= -Dtclsh86=' passes the ported 114-case upstream suite for both generations under suite-built shells with the transcript recorded in this file; both upstream snapshots are landed byte-frozen with the provenance table and root LICENSE (license.terms verbatim); a punk kit-class shell for each generation loads the built dll and completes a parse-command round trip recorded in this file; and the fork commit is pinned with ready-to-land sources.config and build.zig.zon record text for both suites captured in this file. diff --git a/GOALS.md b/GOALS.md index 52cd76b8..d2e40cd0 100644 --- a/GOALS.md +++ b/GOALS.md @@ -270,7 +270,7 @@ Scope: lint surface (location settled in the work: punk::args dev helper, dev co Detail: goals/G-069-splitter-tclparser-lint.md ### G-070 [proposed] Pure-Tcl tclparser: parse-command API fallback with behavioural parity against the C library -Scope: src/modules/punk/lib-999999.0a1.0.tm (tclparser_tcl stub + dispatch; new module if size warrants - decided in the work); src/tests/modules/punk/lib/ (parity + fallback suites); external fork repo c:/repo/jn/tclparser_punk (read-only reference snapshots + the zig-built parser dll oracle - see G-154) +Scope: src/modules/punk/lib-999999.0a1.0.tm (tclparser_tcl stub + dispatch; new module if size warrants - decided in the work); src/tests/modules/punk/lib/ (parity + fallback suites); external fork repo c:/repo/jn/tclparser_punk (read-only reference snapshots + the zig-built parser dll oracle - G-154, achieved - see goals/archive/G-154-tclparser-punk-zig-build.md) Detail: goals/G-070-pure-tcl-tclparser.md ### G-072 [proposed] punk::args compound clause types: named alternates with per-element typing and per-alternate arity (try-class handlers) @@ -418,7 +418,3 @@ Detail: goals/G-151-punkargs-annotated-success-render.md Scope: external fork repo c:/repo/jn/metakit_punk (gitea jn/metakit - the port itself lands there); src/buildsuites/suite_tcl86/sources.config and src/buildsuites/suite_tcl86/build.zig.zon (ready-to-land metakit records drafted in the detail file; landing them is G-101-era consumption); TEMP_REFERENCE/{metakit_jnorthrup,metakit_pooryorick,KitCreator} (read-only patch/boot-chain reference - machine-local); goals/G-101-tcl86-kit-container-strategy.md (consumer decision record) Detail: goals/G-153-metakit-punk-zig-port.md -### G-154 [proposed] tclparser_punk zig build: fork-as-upstream parser dll for kits and the G-070 oracle -Scope: external fork repo c:/repo/jn/tclparser_punk (gitea jn/tclparser - the build lane lands there); src/buildsuites/suite_tcl90/sources.config and src/buildsuites/suite_tcl90/build.zig.zon (ready-to-land tclparser records drafted in the detail file; landing them is suite-consumption era); src/buildsuites/suite_tcl86/sources.config and src/buildsuites/suite_tcl86/build.zig.zon (same - the 8.6 records); src/vendorlib_tcl8/win32-x86_64/tclparser1.8 and src/vfs/*/lib_tcl9/tclparser1.9 (vendored third-party parser packages - replacement targets at consumption, not touched by this goal); goals/G-070-pure-tcl-tclparser.md (consumer - parity oracle and corpus seed) -Detail: goals/G-154-tclparser-punk-zig-build.md - diff --git a/goals/G-069-splitter-tclparser-lint.md b/goals/G-069-splitter-tclparser-lint.md index 1fb5d8f1..5da70c70 100644 --- a/goals/G-069-splitter-tclparser-lint.md +++ b/goals/G-069-splitter-tclparser-lint.md @@ -48,3 +48,8 @@ rendering.test) pin known behaviour but cannot flag novel drift against Tcl sema dialect features the comparison must understand), G-070 (pure-Tcl tclparser would let the lint run without the binary), G-004 (why the runtime must stay dependency-free). +- G-154 (achieved 2026-08-02, archived) built first-party parser dlls for both + Tcl generations from the tclparser_punk fork (c:/repo/jn/tclparser_punk) - + the lint's binary gate can widen beyond the punk9win kit once suite + consumption lands the fork's packages; see + goals/archive/G-154-tclparser-punk-zig-build.md. diff --git a/goals/G-070-pure-tcl-tclparser.md b/goals/G-070-pure-tcl-tclparser.md index e911df54..6095b49b 100644 --- a/goals/G-070-pure-tcl-tclparser.md +++ b/goals/G-070-pure-tcl-tclparser.md @@ -1,7 +1,7 @@ # G-070 Pure-Tcl tclparser: parse-command API fallback with behavioural parity against the C library Status: proposed -Scope: src/modules/punk/lib-999999.0a1.0.tm (tclparser_tcl stub + dispatch; new module if size warrants - decided in the work); src/tests/modules/punk/lib/ (parity + fallback suites); external fork repo c:/repo/jn/tclparser_punk (read-only reference snapshots + the zig-built parser dll oracle - see G-154) +Scope: src/modules/punk/lib-999999.0a1.0.tm (tclparser_tcl stub + dispatch; new module if size warrants - decided in the work); src/tests/modules/punk/lib/ (parity + fallback suites); external fork repo c:/repo/jn/tclparser_punk (read-only reference snapshots + the zig-built parser dll oracle - G-154, achieved - see goals/archive/G-154-tclparser-punk-zig-build.md) Goal: punk::lib's script-analysis machinery (tclword_to_scriptlist and the dependent analysis paths) runs on runtimes without the tclparser C binary, via a pure-Tcl implementation of the tclparser 'parse' command API covering at least the subcommands and token shapes punk::lib consumes - with behavioural parity verified against the C library rather than assumed, and the C parser still preferred where present (performance). Acceptance: the punk::lib tclparser_tcl error stub is replaced by a working pure-Tcl implementation of the 'parse' subcommands punk::lib currently uses ('parse command' at minimum; the full covered set enumerated in this file during the work), returning the same parse-tree shapes (ranges, token types, expansion handling) the C library returns for those calls; a parity testsuite compares pure-Tcl output against the C tclparser across a recorded probe corpus (representative punkshell module scripts plus edge cases: {*} expansion, comments, backslash-newline continuation, nested command substitution, braces/quotes in words) - parity tests capability-gated on the binary, pure-Tcl-only tests running everywhere; a documented punk::lib analysis entry point (e.g. tclword_to_scriptlist) demonstrably works under a plain tclsh with no parser binary on the package path; dispatch prefers the C parser when available with the fallback engaging automatically otherwise; the reference source consulted (the tclparser_punk fork repo - snapshot and checkin/commit identity per its src/reference provenance table) is recorded in this file. @@ -20,7 +20,8 @@ and aligns with the G-004 no-committed-binaries direction. It also widens where G-069 splitter cross-check lint can run. The behavioural reference is the punkshell-maintained tclparser fork at -c:/repo/jn/tclparser_punk (seeded 2026-08-02 - G-154): byte-frozen snapshots of +c:/repo/jn/tclparser_punk (seeded 2026-08-02; G-154, achieved - see +goals/archive/G-154-tclparser-punk-zig-build.md): byte-frozen snapshots of both upstream lineages (the aspect chiselapp fossil mirror at 1.4.1 and the tcltk-depot parser 1.9 Tcl 9 port - the candidate upstreams originally noted in the tclparser_tcl stub comments, surveyed and pinned) with a provenance table @@ -55,10 +56,11 @@ at src/modules/punk/args/moduledoc/parser-999999.0a1.0.tm. - Related: G-019 (dependency-scan module trimming - the main analysis consumer), G-004 (binary-free direction), G-069 (lint gains a binary-free substrate), G-055 (parity-verification workflow precedent). -- Related: G-154 (the tclparser_punk fork/build lane this goal's reference - snapshots and dll oracle come from; its testsuite gate transcript and - upstream-landscape survey live in that goal's detail file and the fork's - src/reference/AGENTS.md). +- Related: G-154 (achieved 2026-08-02 - see + goals/archive/G-154-tclparser-punk-zig-build.md) - the tclparser_punk + fork/build lane this goal's reference snapshots and dll oracle come from; + its testsuite gate + kit-shell transcripts and upstream-landscape survey + live in that archived detail file and the fork's src/reference/AGENTS.md. - The tclparser_tcl stub's partial char-loop sketch (in_dq/in_cb/escape state) is a starting point only; the reference source's Tcl_ParseCommand semantics are the contract. diff --git a/goals/G-101-tcl86-kit-container-strategy.md b/goals/G-101-tcl86-kit-container-strategy.md index 504c4a6e..4c66d463 100644 --- a/goals/G-101-tcl86-kit-container-strategy.md +++ b/goals/G-101-tcl86-kit-container-strategy.md @@ -179,6 +179,11 @@ unblocked; activation is the user's call. fork/suite boundary is held there: the fork owns the storage engine + mk::* binding only; kit boot machinery (kitInit/boot.tcl/setupvfs analogs) stays THIS goal's suite-side territory, and mk4vfs.tcl ships with tclvfs. +- G-154 (achieved 2026-08-02, archived) recorded pinned ready-to-land + sources.config and build.zig.zon tclparser records for suite_tcl86 (and + suite_tcl90) - a second fork-as-upstream package awaiting the same + suite-consumption era as the metakit records above; see + goals/archive/G-154-tclparser-punk-zig-build.md. ## Reference material (TEMP_REFERENCE, machine-local) diff --git a/goals/G-130-32bit-windows-buildsuites.md b/goals/G-130-32bit-windows-buildsuites.md index 67e421cd..47dc6e2b 100644 --- a/goals/G-130-32bit-windows-buildsuites.md +++ b/goals/G-130-32bit-windows-buildsuites.md @@ -91,6 +91,10 @@ the other's generation. and the kits' smoke-require declarations (punkluck86 Thread; punk91ix86 Thread iocp) probe resolution inside the built 32-bit artifacts - see goals/archive/G-133-bake-payload-consistency-checks.md. +- G-154 (achieved 2026-08-02, archived) produced win32-ix86 parser dlls from the + tclparser_punk fork and runtime-verified them under this goal's verification kits + (punkluck86 8.6.10 + punk91ix86 9.1b0, WoW64) - a first-party 32-bit package candidate + for this lane's payload growth; see goals/archive/G-154-tclparser-punk-zig-build.md. - 2026-08-02 CRT MEASURED (dumpbin /dependents import tables, recorded from the G-153 planning session) - the floor statement this goal's artifacts inherit. All zig-built suite binaries (tclsh9.0.5*.exe family, tclsh905.exe, suite_tcl86 tclsh86ts.exe / diff --git a/goals/G-154-tclparser-punk-zig-build.md b/goals/G-154-tclparser-punk-zig-build.md index 322bff70..2ad8bb62 100644 --- a/goals/G-154-tclparser-punk-zig-build.md +++ b/goals/G-154-tclparser-punk-zig-build.md @@ -1,6 +1,6 @@ # G-154 tclparser_punk zig build: fork-as-upstream parser dll for kits and the G-070 oracle -Status: proposed +Status: achieved 2026-08-02 Scope: external fork repo c:/repo/jn/tclparser_punk (gitea jn/tclparser - the build lane lands there); src/buildsuites/suite_tcl90/sources.config and src/buildsuites/suite_tcl90/build.zig.zon (ready-to-land tclparser records drafted in the detail file; landing them is suite-consumption era); src/buildsuites/suite_tcl86/sources.config and src/buildsuites/suite_tcl86/build.zig.zon (same - the 8.6 records); src/vendorlib_tcl8/win32-x86_64/tclparser1.8 and src/vfs/*/lib_tcl9/tclparser1.9 (vendored third-party parser packages - replacement targets at consumption, not touched by this goal); goals/G-070-pure-tcl-tclparser.md (consumer - parity oracle and corpus seed) Goal: The punkshell-maintained tclparser fork (c:/repo/jn/tclparser_punk - gitea jn/tclparser - tcltk-depot parser 1.9 porting baseline with the aspect fossil lineage preserved as an in-repo reference snapshot) builds standalone under the pinned zig toolchain as stubs-linked parser dlls for Tcl 8.6 and Tcl 9, for win32-x86_64 and win32-ix86 alike, gated by the ported upstream testsuite - so kit parser packages (today unprovenanced third-party dlls) and the G-070 parity oracle rest on a first-party, commit-pinned, provenance-carrying source referenced by the buildsuites the punkzip/metakit way (commit pin in sources.config plus zon tarball record) rather than on dormant third-party upstreams or opaque vendored binaries. Acceptance: In c:/repo/jn/tclparser_punk under the pinned zig 0.16.0, 'zig build' (lazy zon tcl pins, no local source trees) and 'zig build dual' pass, producing tcl9tclparser19.dll and tclparser19t.dll for both windows arches; 'zig build test -Dtclsh9= -Dtclsh86=' passes the ported 114-case upstream suite for both generations under suite-built shells with the transcript recorded in this file; both upstream snapshots are landed byte-frozen with the provenance table and root LICENSE (license.terms verbatim); a punk kit-class shell for each generation loads the built dll and completes a parse-command round trip recorded in this file; and the fork commit is pinned with ready-to-land sources.config and build.zig.zon record text for both suites captured in this file. @@ -105,14 +105,15 @@ driven from punkshell sessions with access to this goals tree. src/modules/punk/lib-999999.0a1.0.tm -> G-101 G-153 G-131 G-105 G-130 G-108 G-110 G-116 G-019 G-070 (dispositions above; src/vendorlib_tcl8 intersects no live goal). -- Draft sources.config record (both suites; name/dir chosen to match the - gitea repo name; the ssh origin ssh://git@pcm-gitea1.corp.intx.com.au:2222/jn/tclparser - is the push remote, the https web URL is the fetch/pin form): - `source tclparser git https://www.gitea1.intx.com.au/jn/tclparser tclparser` -- Draft build.zig.zon record (both suites; hash computed with the pinned zig - at landing time via 'zig fetch' from the suite dir per that file's TRAP - note): - `.tclparser = .{ .url = "https://www.gitea1.intx.com.au/jn/tclparser/archive/.tar.gz", .hash = "", .lazy = true },` +- Ready-to-land sources.config record (both suites; name/dir chosen to match + the gitea repo name; the ssh origin + ssh://git@pcm-gitea1.corp.intx.com.au:2222/jn/tclparser is the push remote, + the https web URL is the fetch/pin form; pinned 2026-08-02): + `source tclparser git https://www.gitea1.intx.com.au/jn/tclparser 16d2f460b89dfd819aa08ceb97dfebf37b9fa55a tclparser` +- Ready-to-land build.zig.zon record (both suites; hash computed with the + pinned zig 0.16.0 via 'zig fetch' from the suite_tcl86 dir per that file's + TRAP note, 2026-08-02): + `.tclparser = .{ .url = "https://www.gitea1.intx.com.au/jn/tclparser/archive/16d2f460b89dfd819aa08ceb97dfebf37b9fa55a.tar.gz", .hash = "tclparser_punk-0.1.0-aKPixmovFABEMo61xgv1YjUqdgqe41ZiB-EucAgmM-We", .lazy = true },` - Package identity facts: the dll provides `parser 1.9` for BOTH generations (PACKAGE_VERSION define; upstream-shaped for drop-in compatibility). The fork repo's own version is its zon .version (0.1.0), independent - @@ -152,9 +153,32 @@ bin/tools/zig-x86_64-windows-0.16.0/zig.exe): tcl9 (suite tclsh90szip, Tcl 9.0.5): all.tcl: Total 114 Passed 112 Skipped 2 Failed 0 (skipped constraint: 2 tcl8) tcl86 (suite tclsh86t, Tcl 8.6.18): all.tcl: Total 114 Passed 112 Skipped 2 Failed 0 (skipped constraint: 2 tcl9) -Remaining for acceptance: -- Push the fork, pin the commit, and make the sources.config/zon draft - records above concrete (zig-fetch hash from a suite dir). -- Kit-class shell load + parse-command round trip per generation, recorded - here (suite-shell load is proven via the gate; the kit-shell transcript is - the remaining acceptance evidence). +Completion increment 2026-08-02 (same day): the user pushed the fork to the +gitea origin; acceptance completed in full: +- Pin: origin/master = 16d2f460b89dfd819aa08ceb97dfebf37b9fa55a (the + port+build seed commit). The ready-to-land records in Notes are concrete + (zig-fetch hash computed from the suite_tcl86 dir under the pinned zig). +- 'zig build dual' re-verified via the lazy zon tcl pins alone (no local + source trees): 4 dlls green. +- Kit-class shell load + parse round trip (x64 dlls from the standalone zon + build; scratch kit copies per the locked-exe discipline): + punk902z.exe (Tcl 9.0.2 kit) + tcl9tclparser19.dll -> parser 1.9; + parse command 4-element result; parse list + getstring round trip OK + punksys.exe (Tcl 8.6.13 kit) + tclparser19t.dll -> parser 1.9; same + round trip OK + Built against 9.0.5/8.6.18 headers, loading in 9.0.2/8.6.13 kits - the + stubs contract covering the version spread as intended. +- BEYOND-ACCEPTANCE BONUS: the win32-ix86 dlls verified at RUNTIME too (the + Approach's G-130 deferral dissolved - the third-party 32-bit verification + kits already on hand cover it, WoW64): + punkluck86.exe (Tcl 8.6.10 ix86 kit) + win32-ix86 tclparser19t.dll -> + parser 1.9, round trip OK (the kit's punk::mix template-provider + warnings are its known vfs quirk, unrelated) + punk91ix86.exe (Tcl 9.1b0 ix86 kit) + win32-ix86 tcl9tclparser19.dll -> + parser 1.9, round trip OK + Combined coverage: Tcl 8.6.10/8.6.13/8.6.18 and 9.0.2/9.0.5/9.1b0, x64 and + ix86 alike, from two dll builds per arch. +All Remaining-for-acceptance items are resolved; every acceptance clause is +verified (builds standalone + dual, testsuite gate transcript above, +snapshots + provenance + LICENSE landed, kit-shell transcripts, pinned +records captured).