Browse Source
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.commaster
3 changed files with 141 additions and 0 deletions
@ -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…
Reference in new issue