Browse Source
New proposed goal: 'bakelist ?kitname...?' informational lister (mapping + runtime presence + deployed state; name filter doubles as per-kit detail) and 'bake ?kitname...?' selective baking with bare bake unchanged. Both defined against the parsed mapping model so the G-024 toml conversion slides underneath. Ergonomics decision record in Alternatives (bake -list and action-grouped bake rejected per the G-112 stage-true principle; bare 'kits' already rejected in the G-112 name-selection record). Overlap survey recorded: substantive relations G-024/G-023/G-115/G-057/G-028/G-101 + archived G-104/G-098 precedent. Delivers the mapvfs.config todo (comment retires when the goal lands). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.commaster
2 changed files with 79 additions and 0 deletions
@ -0,0 +1,75 @@ |
|||||||
|
# G-121 make.tcl bakelist + selective bake: list configured kits, bake by name |
||||||
|
|
||||||
|
Status: proposed |
||||||
|
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 <kitname ...>` 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 <kitname>` filters to the named entries; `make.tcl bake <kitname ...>` 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. |
||||||
|
|
||||||
|
## Context |
||||||
|
|
||||||
|
Recorded as a sibling-ergonomics wish during G-104's drafting (archived |
||||||
|
2026-07-25 - see goals/archive/G-104-maketcl-buildsuite-surface.md; also noted |
||||||
|
in archived G-098's notes and the src/runtime/mapvfs.config todo comment): |
||||||
|
"build a single configured kit by name + list configured kits". G-104 |
||||||
|
delivered the buildsuite list/info/build surface without this item - the kit |
||||||
|
wrap subsystem is a separate surface reading src/runtime/mapvfs.config. |
||||||
|
|
||||||
|
Today a bake is all-or-nothing: iterating on one kit (e.g punk91 during the |
||||||
|
G-120 work) rebuilds/deploys every configured kit, and discovering what WOULD |
||||||
|
be baked means reading mapvfs.config's custom line format by eye. The |
||||||
|
deploy-state question ("is bin/punk91.exe current with what a bake would |
||||||
|
produce?") has no surface at all - the stale-r1-runtime incident of 2026-07-25 |
||||||
|
(see the G-112 flip evidence) was exactly an invisible kit-state divergence. |
||||||
|
|
||||||
|
## Approach |
||||||
|
|
||||||
|
- `bake ?kitname ...?`: extend the existing verb's punk::args definition from |
||||||
|
`@values -min 0 -max 0` to optional kit-name values; the kit-build loop |
||||||
|
filters the parsed mapping to the named outputs. Unknown names error before |
||||||
|
any build, listing the configured names. `bin` (which builds kits "as for |
||||||
|
bake") stays full-set - out of scope. |
||||||
|
- `bakelist ?kitname ...?`: new subcommand in the informational SUBGROUP |
||||||
|
(verbs act, the informational group reports - the G-112 stage-true |
||||||
|
principle; a `-list` mode flag on bake was rejected for making a verb |
||||||
|
sometimes not act). Columns: kit name, type (kit|zip|zipcat), runtime name |
||||||
|
+ presence in the runtime store, vfs folder, deployed state. Name filtering |
||||||
|
doubles as per-kit detail (punk-runtime `list` precedent) - no separate |
||||||
|
`bakeinfo` word. |
||||||
|
- Both features consume one parsed-mapping helper so the reader swaps cleanly |
||||||
|
at G-024 time; scheme-expanded outputs (G-023) enter the same model as |
||||||
|
expansions when those land. |
||||||
|
- Discoverability nicety (decided in the work): the bake/bakelist argdocs may |
||||||
|
enumerate configured kit names as punk::args choices when the mapping parses |
||||||
|
at definition time, degrading to plain string args otherwise. |
||||||
|
- Piped output is ESC-free automatically (G-113 policy); keep bakelist's |
||||||
|
columns stable enough to grep. |
||||||
|
|
||||||
|
## Alternatives considered |
||||||
|
|
||||||
|
- `bake -list` flag - rejected: a verb that conditionally does not act |
||||||
|
recreates the semantics-blur G-112 removed. |
||||||
|
- Action-grouped `bake list|info|build` (G-104 buildsuite shape) - rejected: |
||||||
|
bare `bake` must keep meaning build-all, and a first positional that is |
||||||
|
either an action or a kitname is grammar mud. |
||||||
|
- Bare `kits` noun subcommand - rejected: the G-112 name-selection record |
||||||
|
already rejected 'kits' as colliding with kit runtimes; `bakelist` is |
||||||
|
self-locating next to `bake`. |
||||||
|
|
||||||
|
## Notes |
||||||
|
|
||||||
|
- Overlap survey 2026-07-25 (goals_xref paths over src/make.tcl, |
||||||
|
src/runtime/mapvfs.config, src/vfs/, punkexe suites + report review): |
||||||
|
src/make.tcl is a ubiquitous anchor (20+ goals, low scores, not |
||||||
|
substantive). Substantive relations: G-024 (owns the mapping FORMAT - this |
||||||
|
surface reads the parsed model and must survive the toml swap; its |
||||||
|
entry-level validation errors are what bakelist surfaces as per-entry |
||||||
|
state), G-023 (scheme-expanded output names join the listed/bakeable set |
||||||
|
when its generative naming lands), G-115 (sibling declaration surface for |
||||||
|
.vfs payload composition - per-kit payload detail could later join |
||||||
|
bakelist's per-kit view), G-057 (per-kit icon override would appear as |
||||||
|
per-kit detail; its acceptance already runs through the wrap steps this |
||||||
|
goal parameterizes), G-028 (deploy-failure/locked-exe naming is the acting |
||||||
|
sibling of bakelist's deployed-state reporting), G-101 (consumes mapvfs |
||||||
|
'kit'-type entries for 8.6 containers - the lister must not assume zip-only |
||||||
|
types). Archived precedent: G-104 (list/info surface shape + the wish's |
||||||
|
recorder), G-098 (wish also noted there). |
||||||
Loading…
Reference in new issue