Browse Source

G-140 drafted (user-approved): linux lib-tier emission - cross-built tcllibc

New proposed goal, flagged at the G-139 achieved flip: punk9linux.vfs's
linux-built tcllibc + stray tcllibc2.0 are the last provenance-less
accelerator hand-drops in any kit payload. G-140 commits a narrow zig
-target lane on the existing windows suite: critcl driving zig cc with an
explicit linux target section (stubs linkage - no cross-built runtime, no
linux build host), emitted as lib/linux-x86_64/tcllibc-tcl9-r<N>.zip through
the established G-138 machinery (record target=linux-x86_64,
build_host_platform=actual host), verified by a host-side ELF check +
byte-identical re-emission + a WSL accel smoke under an existing punkbin
linux Tcl 9 runtime, consumed via the G-139 declaration idiom
(libpackages.toml + vendorlib_vfs.toml supersedes/replace + a punkshell902
cross-target bake with in-kit record + WSL kit smoke). The libc/triple
decision (dynamic glibc floor direction) is recorded as direct input to
G-105's dynamic-libc and mapping items - back-pointer added to G-105 Notes
(non-contract). tcl8 generation dispositioned out of the committed set (no
linux tcl8 kit).

Overlap survey run (goals_xref paths across the scope): G-105 the strongest
live intersection (carried as Related with the lands-first framing);
G-116/G-130/G-060/G-123/G-004/G-065 carried; G-108/G-110/G-131 co-location
only. goals_lint clean.

Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
master
Julian Noble 2 days ago
parent
commit
8e6bd3e8a0
  1. 4
      GOALS.md
  2. 7
      goals/G-105-buildsuite-cross-target.md
  3. 130
      goals/G-140-linux-lib-tier-emission.md

4
GOALS.md

@ -406,3 +406,7 @@ Detail: goals/G-136-generated-project-icon-seeding.md
### G-137 [proposed] Kit version resources: RT_VERSION stamping from punkproject.toml via punkres
Scope: src/tools/punkres/ (VS_VERSIONINFO construction, set-version + field-level read-back - upstream at c:/repo/jn/zig/punkres); src/make.tcl (version stamping at the G-057/G-128 kit-icon seam, punkres arm); bin/*.resources.toml sidecar format + bin/AGENTS.md (version fields and status vocabulary); punkproject.toml (field source - configurable overrides); src/tests/ (characterization)
Detail: goals/G-137-kit-version-resources.md
### G-140 [proposed] Linux lib-tier emission: cross-built tcllibc (zig cc -target) for the punk9linux payload
Scope: src/buildsuites/suite_tcl90/ (critcl_zig.config linux target section; build905.zig cross-target library-artifacts lane; tools as touched); src/runtime/libpackages.toml + src/runtime/vendorlib_vfs.toml (linux-x86_64 artifact + kit-vfs declarations); src/vfs/punk9linux.vfs/lib_tcl9 (hand-dropped tcllibc + stray tcllibc2.0 - retirement targets); punkbin artifact repo (external, c:/repo/jn/punkbin - new lib/linux-x86_64 target folder); bin/packages/linux-x86_64/ (tier target as materialized); WSL verification (testsupport/wslprobe.tcl patterns + a punkbin linux-x86_64 Tcl 9 runtime as the smoke interpreter)
Detail: goals/G-140-linux-lib-tier-emission.md

7
goals/G-105-buildsuite-cross-target.md

@ -138,3 +138,10 @@ goals/archive/G-100-suite-tcl86-tk-tcllib.md), G-102 (achieved 2026-07-21 - driv
- G-110 relationship: its extraction-cache decision determines whether the
per-platform temp-copy cleanup characterized in these notes stays a wart or
gets replaced - the linux leg of this goal's verification feeds its evidence.
- G-140 relationship (drafted 2026-07-30): a deliberately narrower zig
-target lane landing first - cross-built linux-x86_64 tcllibc via the
library-artifacts machinery (stubs linkage, no cross-built runtime
needed). Its recorded libc/triple decision (dynamic glibc floor vs
musl-dynamic for a dlopen-able .so) is direct input to this goal's
dynamic-libc and triple<->canon items - take it as prior art at
activation rather than re-deciding.

130
goals/G-140-linux-lib-tier-emission.md

@ -0,0 +1,130 @@
# G-140 Linux lib-tier emission: cross-built tcllibc (zig cc -target) for the punk9linux payload
Status: proposed
Scope: src/buildsuites/suite_tcl90/ (critcl_zig.config linux target section; build905.zig cross-target library-artifacts lane; tools as touched); src/runtime/libpackages.toml + src/runtime/vendorlib_vfs.toml (linux-x86_64 artifact + kit-vfs declarations); src/vfs/punk9linux.vfs/lib_tcl9 (hand-dropped tcllibc + stray tcllibc2.0 - retirement targets); punkbin artifact repo (external, c:/repo/jn/punkbin - new lib/linux-x86_64 target folder); bin/packages/linux-x86_64/ (tier target as materialized); WSL verification (testsupport/wslprobe.tcl patterns + a punkbin linux-x86_64 Tcl 9 runtime as the smoke interpreter)
Goal: the punkbin lib tier serves a linux-x86_64 tcllibc built by the existing
windows suite - critcl driving zig cc with an explicit linux target (stubs
linkage: no cross-built Tcl runtime and no linux build host required) -
emitted through the established G-138 machinery (generation-tagged immutable
zip, embedded class=library record whose target is linux-x86_64 and whose
build_host_platform records the actual build host), verified functional under
the local WSL with an existing linux Tcl 9 runtime, and consumed by
punk9linux.vfs through the established G-139 declaration path - retiring the
last provenance-less accelerator hand-drops (tcllibc + the stray-named
tcllibc2.0) so every accelerator in every kit payload is artifact-fed and
self-describing.
Acceptance: a documented suite_tcl90 invocation produces
lib/linux-x86_64/tcllibc-tcl9-r<N>.zip from a critcl build driving zig cc via
an explicit linux target section in critcl_zig.config (the win32-x86_64-zig
pin pattern; no linux host in the build path), with the embedded record
carrying target = linux-x86_64, build_host_platform = the actual build host,
and the G-138 provenance set (checkout uuids, critcl version, zig version,
optimize mode, driving-shell patchlevel); the contained shared library
classifies as ELF x86-64 by a host-side structural check (the G-133
classifier or equivalent, recorded here); re-emission over an unchanged build
is byte-identical; the libc/triple decision (dynamic glibc with a pinned
version floor vs musl-dynamic - the .so must dlopen into existing
glibc-dynamic linux tclsh builds without mixing libcs) is made and recorded
here with rationale, explicitly feeding the G-105 decision item rather than
re-deciding it later; a WSL (or native linux) smoke on the MATERIALIZED
artifact tree under a linux-x86_64 Tcl 9 runtime (e.g. the punkbin
tclkit-902 artifact) proves package require md5 engages the critcl
accelerator from the tree (evidence recorded here); consumption lands via
libpackages.toml (target linux-x86_64) and a vendorlib_vfs.toml entry
switching punk9linux.vfs/lib_tcl9 with supersedes/replace retiring the
hand-dropped tcllibc and tcllibc2.0; a punkshell902 bake ships the
artifact-fed tree with its embedded record present in the kit payload, and a
WSL run of the baked kit loading md5 with the accelerator engaged is
recorded; publication to the real punkbin repo remains a deliberate user
step (build_sha1sums.tcl already handles arbitrary lib/<target> folders);
the tcl8-generation question is dispositioned (no linux tcl8 kit exists -
recorded as out of the committed set, with the mechanism staying
package-generic and generation-generic by construction).
## Context
Flagged at the G-139 achieved flip (2026-07-30): punk9linux.vfs kept its
linux-built tcllibc + tcllibc2.0 sibling folders through the switchover
because the win32-x86_64 artifacts cannot serve a linux kit - they are now
the last accelerator hand-drops in any kit payload, carrying the same
no-provenance profile the retired win32 trees had (and a stray versioned
folder name besides). The pure-Tcl side is already artifact-fed:
punk9linux.vfs receives the allplatforms tcllib2.0 artifact like every other
declared kit.
Why this does not wait for G-105: tcllibc is a stubs-linked extension -
critcl bundles its own Tcl headers and links nothing from a Tcl runtime, so
cross-compiling the .so needs only zig cc -target plus a critcl config
section; the installer/critcl DRIVER runs under the existing suite-built
windows shell. G-105's committed content (cross-built tclsh, WSL
core-testsuite baseline, per-target out prefixes, the general triple<->canon
mapping) is not on this goal's path; the smoke interpreter is an EXISTING
linux runtime punkbin already hosts.
## Approach
- Extend, don't fork: the emission tool is already package-generic and
records tier separately from build_host_platform (the G-138 record shape
anticipated cross-emission); the new work is the critcl_zig.config linux
section, a build905.zig lane invoking critcl with the linux -target and
emitting via the same tools/library_artifacts.tcl, and the WSL smoke.
- Triple direction (decided in the work, recorded here): dynamic glibc with
a conservative version floor (e.g. x86_64-linux-gnu.2.17-class) - the .so
must dlopen into existing glibc-dynamic linux tclsh builds (tclkit-902 is
the concrete consumer); a musl-libc .so inside a glibc process mixes
libcs. This mirrors and feeds G-105's recorded dynamic-libc analysis.
- Verification split: structural host-side (ELF class check, determinism)
vs functional WSL-side (materialized-tree accel smoke; baked-kit smoke) -
the wslprobe staging patterns apply (native-FS staging, never operate on
the checkout from inside WSL).
- Consumption is pure G-139 idiom: declare, fetch (the tier gains its first
linux-x86_64 target folder), vfslibs supersedes/replace, cross-target
bake per G-122 (punkshell902 already bakes target-keyed from windows).
## Alternatives considered
- Wait for G-105 and build tcllibc natively on the cross-built linux tclsh -
rejected as a dependency: stubs linkage makes the cross .so independently
buildable now; G-105 remains the runtime arc and gains this goal's libc
decision as prior art.
- Adopt the existing hand-dropped linux tcllibc as a third-party-class
artifact (G-123 ingest posture) - rejected: the copies are provenance-less
local builds of unknown vintage; the suite path exists and gives the same
provenance story as every other lib-tier artifact.
- Ship the win32 tcllibc record shape with a linux dll only (single-file
swap) - rejected: the zip carries the whole installed-shape folder; a
fresh critcl build against the pinned tcllib checkout is the honest unit.
## Notes
- Related: G-105 - the cross-target runtime arc; shares the zig -target
axis and the dynamic-libc analysis. This goal deliberately lands first on
a narrower lane and records the triple/floor decision as input to G-105's
mapping and baseline work (not a dependency in either direction).
- Related: G-116 - the tcltls battery would ride this same cross lane for
any future linux emission of its packages.
- Related: G-130 - target-family sibling (32-bit windows) on the same
package-generic emission mechanism.
- Related: G-060 - verification environments beyond WSL (qemu matrix) if
the smoke ever needs a non-WSL linux.
- Related: G-123 - punkbin server surfaces; the lib/linux-x86_64 folder is
a new target row in the documented layout.
- Related: G-004 / G-065 - posture: the retirement extends the
no-committed-binaries payoff to the linux kit payload.
- Anchors (archived): G-138 (the emission machinery and record schema -
goals/archive/G-138-punkbin-library-artifact-tier.md), G-139 (the
consumption idiom and the flip note that flagged this goal -
goals/archive/G-139-punkbin-library-consumption.md), G-122 (target-keyed
bake), G-102 (critcl -target pin finding).
- punk::platform survey item: linux-x86_64's record axes (tiers/buildsuite)
reviewed at landing - a library cross-build does not flip the runtime
buildsuite axis ('planned' per G-105); whether the lib tier axis needs a
value update is settled in the work.
- Overlap survey 2026-07-30 (drafting): goals_xref paths
src/buildsuites/suite_tcl90, src/vfs/punk9linux.vfs,
src/runtime/libpackages.toml, src/runtime/vendorlib_vfs.toml,
bin/packages, src/runtime/mapvfs.config - strongest live intersections
G-105 (cross-target axis - carried above), G-123/G-116/G-130 (carried),
G-108/G-110/G-131 (suite-tree co-location only, no contract
relationship), G-004/G-065/G-025 (posture, carried or not applicable);
no live goal owns the punk9linux tcllibc hand-drops.
Loading…
Cancel
Save