Browse Source

G-139: derived-project story recorded; layout samplesuite1 sketch retired

The decision (per the acceptance, recorded in the goal detail): derived
projects obtain library binaries via the SAME fetch entrypoint by default -
generated projects receive make.tcl (libfetch + the PACKAGES phase) through
the established layout-sync/G-027 channels and declare their artifacts in
their own src/runtime/libpackages.toml; the copy-and-tweak in-project suite
build per G-104's self-description contract remains the documented
alternative (a tcllib/tcllibc-only suite needs no Tcl source tree - critcl
bundles its headers).

The pre-G-096 samplesuite1 sketch in the project-0.1 layout
(download_and_build.config, mingw64/gcc-era, self-described as SKETCH ONLY)
is removed and replaced by src/buildsuites/README.md in the layout,
documenting both routes for generated projects - the disposition the goal
Approach named. Goal Progress also records the r1 publication (punkbin
ee571ed, pushed) and the live canonical-origin libfetch verification.

Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
master
Julian Noble 4 days ago
parent
commit
fc2376ca5d
  1. 57
      goals/G-139-punkbin-library-consumption.md
  2. 36
      src/project_layouts/vendor/punk/project-0.1/src/buildsuites/README.md
  3. 57
      src/project_layouts/vendor/punk/project-0.1/src/buildsuites/samplesuite1/download_and_build.config
  4. 0
      src/project_layouts/vendor/punk/project-0.1/src/buildsuites/samplesuite1/tcl/empty_project_source.txt
  5. 0
      src/project_layouts/vendor/punk/project-0.1/src/buildsuites/samplesuite1/tk/empty_project_source.txt

57
goals/G-139-punkbin-library-consumption.md

@ -164,18 +164,45 @@ State at drafting worth recording:
(zig Run cache keys include the env) - immaterial pre-publication, and
exactly the deliberate-publish revision discipline's point; the tcl9
zips stayed byte-identical across three independent emissions.
- Remaining for acceptance: libs-step materialization of
lib_tcl<N>/allplatforms + lib_tcl<N>/<platform> from the tier with
punkcheck provenance; tcllib/tcllibc vendorlib_vfs.toml (or successor)
declarations with supersedes removing tcllib1.21 (incl. nested tcllibc
0.4 + md5c) from 8.6-family kits; punk86-family tcllib 2.0 upgrade
validated by kit-hosted runtests vs a same-day baseline (differences
dispositioned); vendored src/vendorlib_tcl8|9 tcllib-tree removal in its
own commit after a bake fed from the artifact path reproduces working
kits; a bake on a checkout without those trees shipping kits with
verifiable embedded provenance; the derived-project decision recorded
here (fetch default; in-project suite build per G-104 as the documented
alternative - the stale samplesuite1 download_and_build.config stub to be
replaced/removed when recording it). Also pending: publication of the r1
artifacts to the real punkbin origin (user step) so libfetch's canonical
path goes live end-to-end.
- 2026-07-30 r1 PUBLISHED (user-directed): all four artifacts + sidecars
copied into the punkbin repo's lib tier, build_sha1sums.tcl generated the
per-tier sha1sums (every hash byte-identical to the staging emission;
platforms.txt untouched), committed (punkbin ee571ed) and PUSHED to the
gitea origin together with the earlier lib-tier docs commit. The canonical
fetch path verified LIVE immediately after: 'make.tcl libfetch -force'
with no server flags fetched, sha1-verified and materialized all four
artifacts from the canonical origin - no consent gate, per the acceptance.
- 2026-07-30 phase 2 increment 1 (0.31.1): PACKAGES_tcl<N> deployment phase
(bin/packages tier -> lib_tcl<N>/allplatforms + lib_tcl<N>/<platform>,
punkcheck-tracked, embedded records riding along - verified deployed);
vfslibs schema gains source_root="packages" (missing-source errors name
libfetch) + replace=true (clean-slate same-name refresh - the old tcl9
hand-drops nested md5c/tcllibc INSIDE tcllib2.0); tcllib/tcllibc kit-vfs
declarations added for the 13 trees that carried hand-drops (8 win32 tcl9
trees get the pair + supersedes of the stray tcllibc2.0 name; punk9linux
gets only platform-neutral tcllib2.0 - its linux-built tcllibc siblings
stay, a linux lib-tier emission being future work; punk86/punk8win/
punk8_statictwapi upgrade via supersedes of tcllib1.21; punk86bawt
refreshes its bare tcllibc).
- DERIVED-PROJECT DECISION (recorded per acceptance, 2026-07-30): fetch via
the same entrypoint is the DEFAULT - generated projects receive make.tcl
(and thus libfetch + the PACKAGES phase) through the established layout
sync/G-027 channels and declare their artifacts in their own
src/runtime/libpackages.toml; the copy-and-tweak in-project suite build
per G-104's self-description contract remains the documented alternative
(a tcllib/tcllibc-only suite needs no Tcl source tree - critcl bundles
its headers). The stale samplesuite1 sketch in the project-0.1 layout was
REMOVED and replaced by src/buildsuites/README.md in the layout,
documenting both routes (the goal-named disposition).
- Remaining for acceptance: kit switchover bake (vfslibs across the
declared trees + selective bake of unlocked kits - punk86 for the 8.6
validation, punk905 as the tcl9 representative; punk91/punksys/punk9_beta
are live user shells this session, their vfs trees switch now and their
bakes happen at the next natural rebake); punk86 kit-hosted runtests vs
the same-day baseline (recorded: 1125 total / 1099 passed / 18 skipped /
8 failed in 5 files - exec.test, ns/nslist, ns/nsprimitives,
zip/zipaccel, stdin/runstdin; 1960s elapsed) with differences
dispositioned; vendored src/vendorlib_tcl8|9 tcllib-tree removal in its
own commit after the artifact-path bake proves out; the post-removal
bake shipping kits whose tcllib/tcllibc provenance is verifiable from
the embedded records.

36
src/project_layouts/vendor/punk/project-0.1/src/buildsuites/README.md vendored

@ -0,0 +1,36 @@
# src/buildsuites - building binary components for this project
This folder is where a project keeps BUILDSUITES: self-describing recipes that
build Tcl runtimes and binary library packages from external upstream sources
with a pinned zig toolchain. Most projects never need one - the default ways to
obtain binary components are lighter:
## Route 1 (default): fetch published artifacts
`tclsh src/make.tcl libfetch` fetches library packages (e.g. tcllib + the
tcllibc critcl accelerators) as verified zip artifacts from the punkbin
artifact server's lib tier into the untracked `bin/packages/<target>/` input
tier, sha1-verified, and materializes them for the libs build. Declare the
artifacts your project consumes in `src/runtime/libpackages.toml`
([artifact.<name>] entries with `name` = the immutable
`<pkgfolder>-<tcl8|tcl9>-r<N>.zip` artifact filename and `target` =
`allplatforms` or a platform-dir name - see the punkshell repo's copy for a
worked example). Runtimes are fetched the same spirit via
`bin/punk-runtime.cmd`. The canonical punkbin origin is trusted by default;
other servers require the explicit `-trust-server` flag.
## Route 2 (alternative): build in-project with a copied suite
Copy a real suite tree from the punkshell repo's `src/buildsuites/` (e.g.
`suite_tcl90`) into this folder and retarget it: every suite is
COPY-AND-TWEAK by contract - its `sources.config` declares its sources,
products and pinned toolchain, and `tclsh src/make.tcl buildsuite
list|info|build <name>` discovers and drives it with no make.tcl edits
(the G-104 self-description contract). Note a tcllib/tcllibc-only suite is
genuinely light: critcl bundles its own Tcl headers, so building the
accelerators needs only a driving tclsh + zig + the tcllib/critcl checkouts -
no Tcl source tree.
The pre-2026 `samplesuite1` sketch that used to live here (a mingw64/gcc-era
download_and_build.config outline) predated these mechanisms and was removed
when the fetch route landed (punkshell goal G-139).

57
src/project_layouts/vendor/punk/project-0.1/src/buildsuites/samplesuite1/download_and_build.config vendored

@ -1,57 +0,0 @@
#=======================================================
#configuration data for download and build of buildsuite
#=======================================================
#windows build mechanism: mingw64 -ucrt64 gcc
#other platforms build mechanism: gcc
#-------------------------------------------------------
set buildprefix <PROJECTDIR>/vendorbuild/samplesuite1
set basemakeflags [list -j 2]
set baseconfigflags [list --enable-64bit --prefix=$buildprefix]
set repofolder ~/.fossils
#-------------------------------------------------------
SOURCEDOWNLOAD -project tcl\
-mechanism fossil\
-localrepo tcl.fossil\
-branch core-8\
-remote https://core.tcl-lang.org/tcl
#etc.
#SOURCEDOWNLOAD tk...
#SOURCEDOWNLOAD thread...
#SOURCEDOWNLOAD -project critcl\
-mechanism git\
-branch master\
-remote http://github.com/andreas-kupries/critcl
#SOURCEDOWNLOAD -project tclbench\
-mechanism fossil\
-remote https://core.tcl-lang.org/tclbench
#CONFIGSTART tcl <SOURCEBASE>/win
#CONFIGSTART tk <SOURCEBASE>/win
#EXTRACONFIG tk --with-tcl=$buildprefix/lib --with-tclinclude=$buildprefix/include
#CONFIGSTART thread ???
#EXTRACONFIG thread --with-tcl=$buildprefix/lib --with-tclinclude=$buildprefix/include
#SOURCEDOWNLOAD -project zint\
-mechanism git\
-branch master\
-remote https://git.code.sf.net/p/zint/code

0
src/project_layouts/vendor/punk/project-0.1/src/buildsuites/samplesuite1/tcl/empty_project_source.txt vendored

0
src/project_layouts/vendor/punk/project-0.1/src/buildsuites/samplesuite1/tk/empty_project_source.txt vendored

Loading…
Cancel
Save