diff --git a/GOALS-archive.md b/GOALS-archive.md index 099aa85a..31567fc9 100644 --- a/GOALS-archive.md +++ b/GOALS-archive.md @@ -182,3 +182,7 @@ Acceptance: (1) `make.tcl bake` on a clean checkout produces kits byte-comparabl ### G-104 [achieved 2026-07-25] make.tcl buildsuite surface: list / info / build → detail: goals/archive/G-104-maketcl-buildsuite-surface.md Scope: src/make.tcl (buildsuite subcommand group); src/buildsuites/*/ (suite self-description contract: an 'info'/describe affordance per suite - suite.tcl action or manifest record); documentation (make.tcl help text, src/buildsuites README/AGENTS) Acceptance: list shows suite_tcl90 (and any copied tree) with descriptions sourced from the suites themselves; info renders the sources.config-derived table plus zig pin and products for a named suite; build forwards arguments and streams driver output, exiting with the driver's status; the surface works when make.tcl runs under a plain tclsh and under punk kit executables; help text documents the group; the self-description contract is documented where suite authors will find it (src/buildsuites docs) and holds for a tree created by copying suite_tcl90. + +### G-121 [achieved 2026-07-26] make.tcl bakelist + selective bake: list configured kits, bake by name → detail: goals/archive/G-121-bakelist-selective-bake.md +Scope: src/make.tcl (bake @values + new bakelist subcommand; SUBOPTS/SUMMARIES/HELPTEXTS/SUBGROUPS, help/workflow text); src/runtime/mapvfs.config (as read; todo-comment retirement); src/tests/shell/testsuites/punkexe/ (bakelist characterization if feasible); layout make.tcl copies via established sync channels +Acceptance: `make.tcl bakelist` under a plain tclsh and under a punk kit executable lists every kit output configured in the runtime mapping with name, kit type, runtime (present/missing), vfs folder and a deployed-state indication (bin copy absent/current/stale vs the build product), and `bakelist ` filters to the named entries; `make.tcl bake ` builds and deploys only the named kit(s) - a recorded verification shows the named kit's artifacts refreshing while other kits' _build/bin artifacts and punkcheck records are untouched - and an unknown name errors without building, listing the configured names; bare `make.tcl bake` processes the same kit set as before the change; help/workflow text documents both per the update contract and the mapvfs.config todo comment is retired to point here; a piped bakelist characterization test lands under punkexe if feasible (else the infeasibility is recorded here); project version minor-bumped with a CHANGELOG entry. diff --git a/GOALS.md b/GOALS.md index d823c323..5521a4df 100644 --- a/GOALS.md +++ b/GOALS.md @@ -393,6 +393,3 @@ Detail: goals/G-115-declarative-vfs-composition.md Scope: src/buildsuites/suite_tcl90/ (build_tcltls module + crypto-backend build, sources.config + build.zig.zon source records, kit-family bi payload + metadata extension, test_gate record step); src/vfs kit payloads carrying vendored tcltls binaries (current-state reference + recorded disposition only - removal stays G-004-era work); punkbin (as eventual artifact destination via the G-067 library class); consumers punk::imap4 / punk::netbox (package require tls) as verification context Detail: goals/G-116-suite-built-tcltls.md -### G-121 [active] make.tcl bakelist + selective bake: list configured kits, bake by name -Scope: src/make.tcl (bake @values + new bakelist subcommand; SUBOPTS/SUMMARIES/HELPTEXTS/SUBGROUPS, help/workflow text); src/runtime/mapvfs.config (as read; todo-comment retirement); src/tests/shell/testsuites/punkexe/ (bakelist characterization if feasible); layout make.tcl copies via established sync channels -Detail: goals/G-121-bakelist-selective-bake.md diff --git a/goals/G-023-version-named-binaries.md b/goals/G-023-version-named-binaries.md index a6b57f30..ab650feb 100644 --- a/goals/G-023-version-named-binaries.md +++ b/goals/G-023-version-named-binaries.md @@ -90,3 +90,4 @@ binary-artifacts repository). Revisit when the accumulation actually bites. icon-embedding step hooks the same kit wrap steps; its ordering constraint (icon the stub before payload append) interacts with this goal's every-build rewrite cadence. +- G-121 (archived) recorded that scheme-expanded output names should enter the parsed mapping model as expansions (::punkboot::lib::mapvfs_kit_outputs) so generated names join the bakelist / bake-by-name surface automatically when this goal lands - see goals/archive/G-121-bakelist-selective-bake.md diff --git a/goals/G-024-mapvfs-toml.md b/goals/G-024-mapvfs-toml.md index 4e88826e..939aca8f 100644 --- a/goals/G-024-mapvfs-toml.md +++ b/goals/G-024-mapvfs-toml.md @@ -75,3 +75,4 @@ with the G-014 direction of toml + tomlish for declared configuration. goal owns the runtime-to-vfs-to-executable mapping and schemes. Design the two as sibling grammars in one toml family (shared conventions, not two dialects); G-115's vendorlib_vfs.toml fold/supersede decision should cite this goal's scheme format. +- G-121 (archived) delivered the shared parsed-mapping reader (::punkboot::lib::mapvfs_parse + mapvfs_kit_outputs): the bake kit machinery, bakelist and the bake/bakelist argdoc kit-name choices all consume the model, never the file format - this goal's toml conversion swaps the reader implementation underneath that surface, and bakelist is where its per-entry validation errors surface (runtime/vfs missing rows) - see goals/archive/G-121-bakelist-selective-bake.md diff --git a/goals/G-028-file-locker-identification.md b/goals/G-028-file-locker-identification.md index 74c0fe45..ef767a5f 100644 --- a/goals/G-028-file-locker-identification.md +++ b/goals/G-028-file-locker-identification.md @@ -83,3 +83,4 @@ the kind of file this fails on. resource update hits the same locked-target failure class when an inspected or running kit is being re-wrapped - the locker-report helper covers the icon step's failures as well as deploy's. +- G-121 (archived) shipped bakelist's deployed-state column (bin/ vs src/_build: current|stale|absent|nobuild) - the reporting sibling of this goal's acting-path deploy-failure naming; a locked-exe deploy failure shows afterwards as deployed=stale - see goals/archive/G-121-bakelist-selective-bake.md diff --git a/goals/G-057-kit-icon-embedding.md b/goals/G-057-kit-icon-embedding.md index 40446a30..79640e75 100644 --- a/goals/G-057-kit-icon-embedding.md +++ b/goals/G-057-kit-icon-embedding.md @@ -84,3 +84,4 @@ delete-then-write). Requirements sketch agreed 2026-07-10: version/copyright resources from punkproject.toml - when it is drafted as a goal, reconcile with G-025's kit stamp and G-117's embedded artifact record so the three provenance surfaces tell one story. +- G-121 (archived) parameterized the wrap steps this goal's acceptance runs through: 'make.tcl bake ' now rebuilds a single kit for cheap icon-override verification, and a per-kit icon override would slot into bakelist's filtered per-kit detail - see goals/archive/G-121-bakelist-selective-bake.md diff --git a/goals/G-101-tcl86-kit-container-strategy.md b/goals/G-101-tcl86-kit-container-strategy.md index bb68333d..02d43c20 100644 --- a/goals/G-101-tcl86-kit-container-strategy.md +++ b/goals/G-101-tcl86-kit-container-strategy.md @@ -97,3 +97,4 @@ wrap), and only worth activating once G-099/G-100 land. exist; current kit downloads already use bare tclkit for console builds). Any future zero-flash launcher takes the w-suffix convention (punkw) rather than -gui/-cli (which in kit lineage encode Tk linkage, not subsystem). +- G-121 (archived) built bakelist/selective-bake over the parsed mapping without assuming zip-only types ('kit'-type entries list and bake by name), so 8.6 container entries join that surface automatically - see goals/archive/G-121-bakelist-selective-bake.md diff --git a/goals/G-115-declarative-vfs-composition.md b/goals/G-115-declarative-vfs-composition.md index 547a4141..827fe91c 100644 --- a/goals/G-115-declarative-vfs-composition.md +++ b/goals/G-115-declarative-vfs-composition.md @@ -59,3 +59,4 @@ for telling the two apart). declaration are the same design space (toml-declared, pinned, provenance-tracked external content) - G-065's upstreams feed the sources, this goal's declarations materialize the folder. Keep the schemas aligned. +- G-121 (archived) noted per-kit payload detail as a candidate later addition to bakelist's per-kit view (name filtering doubles as detail) once this goal's declaration surface exists - see goals/archive/G-121-bakelist-selective-bake.md diff --git a/goals/G-121-bakelist-selective-bake.md b/goals/G-121-bakelist-selective-bake.md index 701da25b..0894dac9 100644 --- a/goals/G-121-bakelist-selective-bake.md +++ b/goals/G-121-bakelist-selective-bake.md @@ -1,6 +1,6 @@ # G-121 make.tcl bakelist + selective bake: list configured kits, bake by name -Status: active +Status: achieved 2026-07-26 Scope: src/make.tcl (bake @values + new bakelist subcommand; SUBOPTS/SUMMARIES/HELPTEXTS/SUBGROUPS, help/workflow text); src/runtime/mapvfs.config (as read; todo-comment retirement); src/tests/shell/testsuites/punkexe/ (bakelist characterization if feasible); layout make.tcl copies via established sync channels Goal: make.tcl can report and selectively execute the configured kit matrix: `bakelist` lists the configured kit outputs (name, kit type, runtime with presence, vfs folder, deployed state) with optional per-kit name filtering, and `bake ` bakes and deploys exactly the named kits - bare `bake` unchanged (all configured kits). Both consume the PARSED mapping model, not the file format, so the G-024 toml conversion slides underneath without changing the surface. Acceptance: `make.tcl bakelist` under a plain tclsh and under a punk kit executable lists every kit output configured in the runtime mapping with name, kit type, runtime (present/missing), vfs folder and a deployed-state indication (bin copy absent/current/stale vs the build product), and `bakelist ` filters to the named entries; `make.tcl bake ` builds and deploys only the named kit(s) - a recorded verification shows the named kit's artifacts refreshing while other kits' _build/bin artifacts and punkcheck records are untouched - and an unknown name errors without building, listing the configured names; bare `make.tcl bake` processes the same kit set as before the change; help/workflow text documents both per the update contract and the mapvfs.config todo comment is retired to point here; a piped bakelist characterization test lands under punkexe if feasible (else the infeasibility is recorded here); project version minor-bumped with a CHANGELOG entry. @@ -57,6 +57,65 @@ kit-state divergence. already rejected 'kits' as colliding with kit runtimes; `bakelist` is self-locating next to `bake`. +## Progress + +- 2026-07-26 ALL ACCEPTANCE ITEMS VERIFIED - achieved flip. Shipped in punkshell + 0.24.0 (src/make.tcl; git commit "G-121: make.tcl bakelist + selective bake"). + Both surfaces (and the argdoc kit-name choices) consume the shared parsed + mapping model ::punkboot::lib::mapvfs_parse / mapvfs_kit_outputs / + mapvfs_match_outputs - the bake kit machinery's inline parse was replaced by + the same helper, so the G-024 toml conversion swaps the reader underneath. +- Verification evidence (native Tcl 9.0.3 tclsh90 driving the working tree on + windows win32-x86_64; punk902z kit exe via the punkexe suite): + - bakelist under plain tclsh AND under punk902z: all 10 configured entries + listed with name, type (kit|zip|zipcat), runtime + presence, vfs folder, + deployed state; runtime=missing rows for tclsh90magic and the linux + tclkit; piped output ESC-free (G-113). `bakelist punk91` filters to the + named row and adds the per-kit detail block (resolved paths/sizes/mtimes). + Deployed-state content-compare path proven live: equal bytes with + differing mtimes classified current. + - selective refresh: after deleting src/_build/punk91.exe, `bake -confirm 0 + punk91` rebuilt and deployed punk91 only. Recorded stat diff over ALL of + src/_build and bin: only punk91.exe, punk91.exe.vfs, raw_tclsfe-x64.exe + and bin/punk91.exe changed. punkcheck diffs (src/_build, bin, src/vfs + .punkcheck) mention only punk91's records; negative grep for every other + kit/vfs name (punk905, punk9_beta, punk9bi, punkbi, punksys, punk86, + punkmagic, punk902z, punkshell902, their vfs folders) clean. vfslibs phase + narrowed with printed skip notes for unselected vfs folders. + - unknown name: `bake nosuchkit` and `bakelist nosuchkit` exit 1 before any + build, listing the configured names; a flag-looking unknown adds the + flags-before-names hint (punk::args consumes options before values, so + `bake -confirm 0 punk91` is the canonical order). + - bare `bake -confirm 0`: same kit set as pre-change (punkbi, punksys, + punk86, punk91, punk905, punk9_beta, punk902z, punk9bi_beta processed; + the 2 historical missing-runtime warnings; no selective narrowing). + - characterization test landed: src/tests/shell/testsuites/punkexe/ + maketclbakelist.test - 4 PASS under punk902z (full-report row/vocabulary + + ESC-free, filtered detail, unknown-name errors on both surfaces with the + no-build guarantee); maketclcolour.test still 3 PASS. + - help/workflow text updated per the update contract (workflow verified + normal + PUNKBOOT_PLAIN=1, width <= 100); mapvfs.config todo retired to + point here; project version minor-bumped 0.23.3 -> 0.24.0 with CHANGELOG + entry; layout make.tcl copies synced via make.tcl packages; degraded-mode + (PUNKBOOT_PLAIN) dispatch carries trailing kit names for bake/bakelist. +- Design outcomes worth keeping: + - Discoverability nicety implemented: configured kit names render as + punk::args choices on bake/bakelist (-choicerestricted 0 - informational + only; handler validation stays authoritative and works when the mapping + cannot be parsed at define time). + - The enumeration helper replicates the kit loop's naming including the + duplicate-appname `_` disambiguation; parity assumes the + config keeps appnames unique (broken-config edge documented in the helper + comment). + - Dash-runtime ('-') entries list (runtime "-", no runtime file) but the kit + loop's historical existence-filter still never builds them - pre-existing + dead path, deliberately unchanged here. + - Selective bake fail-fasts on a selected kit whose runtime/vfs is missing; + bare bake keeps the historical warn-and-continue for the full set. + - runtime_materialization_warning's toml-revision core moved to + ::punkboot::lib::runtime_materialization_check, shared with bakelist's + rtrev=r notes tag (the reporting complement noted below). + ## Notes - 2026-07-25 (landed separately, same day as drafting): make.tcl bake now diff --git a/src/runtime/mapvfs.config b/src/runtime/mapvfs.config index 33a6a19e..c06860e2 100644 --- a/src/runtime/mapvfs.config +++ b/src/runtime/mapvfs.config @@ -66,8 +66,8 @@ tclsfe-x64.exe {punk9wintk903.vfs punk91 zip} # punk test suites - so new-runtime behaviour can be trialled interactively. Drop _beta on acceptance. # (punk905_beta trialled and PROMOTED to punk905 2026-07-21.) #'make.tcl bakelist ?kitname ...?' lists the kit outputs configured here (runtime/vfs presence + -# deployed state); 'make.tcl bake ?kitname ...?' bakes/deploys only the named kits (G-121 - -# see goals/G-121-bakelist-selective-bake.md; wish originally recorded in archived G-104). +# deployed state); 'make.tcl bake ?kitname ...?' bakes/deploys only the named kits (G-121, achieved - +# see goals/archive/G-121-bakelist-selective-bake.md; wish originally recorded in archived G-104). #5 tclsh905.exe {punk9wintk905.vfs punk905 zip}