Browse Source

G-112 rename core: bake/bakehouse stage-true vocabulary, deprecated aliases, vfslibs fold

vfs -> bake (kit assembly; vfslibs phase folded in so a bake cannot ship stale
binary libs), project retired -> bakehouse (packages + bake, -dirty-abort
default ON, refusal names the granular developer flow). project/vfs remain as
deprecated aliases: one-line stderr notice + pre-dispatch mapping; alias
argdocs mirror their targets so flags parse identically. vfslibs survives as a
standalone narrowing (in-session decision recorded in the goal file).
SUBOPTS/SUMMARIES/HELPTEXTS/SUBGROUPS/known_commands, end-of-run guidance,
plain gethelp and workflow text rewritten to the two-persona model (groups:
build & bake / promotion gates / source maintenance / deprecated aliases).

Verified: tabled + PUNKBOOT_PLAIN help; dirty-tree refusal via bakehouse and
via the project alias; alias help renders. punkshell 0.23.0 + CHANGELOG.

Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
master
Julian Noble 6 days ago
parent
commit
221c2c4fff
  1. 12
      CHANGELOG.md
  2. 25
      goals/G-112-maketcl-subcommand-rename.md
  3. 2
      punkproject.toml
  4. 236
      src/make.tcl

12
CHANGELOG.md

@ -5,6 +5,18 @@ The latest `## [X.Y.Z]` header must match the `version` field in `punkproject.to
Entries are newest-first; one bullet per notable change. See the root `AGENTS.md`
"Project Versioning" section for the bump policy.
## [0.23.0] - 2026-07-25
- make.tcl stage-true subcommand rename (G-112): `vfs` becomes `bake` (kit assembly, now
including the vfslibs phase so a bake cannot ship stale binary libs), `project` is retired
in favour of `bakehouse` - a consumer umbrella chaining packages + bake that REFUSES
uncommitted src by default (-dirty-abort defaults ON; the refusal names the granular
developer flow: packages -> test -> bootsupport/vfscommonupdate -> commit -> bake).
`project` and `vfs` remain as deprecated aliases printing a one-line notice (kept until
the 8.6 arc completes). `vfslibs` survives as a standalone narrowing for declaration
iteration. Help/usage tables regrouped (build & bake / promotion gates / source
maintenance / deprecated aliases); `workflow` output teaches the two-persona model.
## [0.22.2] - 2026-07-25
- make.tcl colour output is terminal-aware (G-113): piped/redirected runs produce fully

25
goals/G-112-maketcl-subcommand-rename.md

@ -70,6 +70,31 @@ RESOLVED at activation 2026-07-25 (user-directed dispositions):
- Deprecation window for the `project`/`vfs` aliases: keep until the 8.6 arc
(G-099/G-100/G-101 era) completes - revisit removal when that arc closes.
## Progress
- 2026-07-25 rename core landed (punkshell 0.23.0): vfs -> bake with the
vfslibs phase folded in (dispatch gate now {bakehouse bake vfslibs}), project
retired -> bakehouse (packages + bake; -dirty-abort boolean default ON via a
dedicated OPT_DIRTYABORT_ON fragment; refusal message names the granular
developer flow), project/vfs kept as deprecated aliases (one-line stderr
notice + command-word mapping before dispatch; alias definitions mirror their
targets' options so flags parse identically; degraded fallback mode forces
bakehouse's dirty default ON since its flag-only -dirty-abort cannot express
0). SUBOPTS/SUMMARIES/HELPTEXTS/SUBGROUPS/known_commands updated; groups
renamed to teach the model (build & bake / promotion gates / source
maintenance / deprecated aliases); end-of-run guidance, plain punkboot_gethelp
and ::punkboot::workflow_text rewritten to the two-persona flow.
Verified: tabled + PUNKBOOT_PLAIN help render the new vocabulary; bakehouse
and the project alias refuse a dirty tree with the granular-flow message;
help bake/vfs render (alias helptexts marked DEPRECATED).
- IN-SESSION DECISION (per the activation disposition): `vfslibs` SURVIVES as a
standalone narrowing - it serves quick iteration on the
src/runtime/vendorlib_vfs.toml declarations without a full bake, matching the
modules/libs narrowings of packages; its helptext names it a phase of bake.
- Remaining for acceptance: doc + layout-copy sweep (Scope docs, three layout
make.tcl copies via sync channels), clean-tree bake-vs-vfs byte comparison,
punkexe suites against a kit built via the new names.
## Notes
- Activation freshness 2026-07-25: goals_xref.tcl score G-112 re-run at the

2
punkproject.toml

@ -1,4 +1,4 @@
[project]
name = "punkshell"
version = "0.22.2"
version = "0.23.0"
license = "BSD-2-Clause"

236
src/make.tcl

@ -153,7 +153,7 @@ namespace eval ::punkboot {
variable foldername [file tail $scriptfolder]
variable pkg_requirements [list]; variable pkg_missing [list];variable pkg_loaded [list]
variable help_flags [list -help --help /? -h]
variable known_commands [list project modules libs packages vfs vfslibs bin info check shell vendorupdate bootsupport vfscommonupdate projectversion workflow]
variable known_commands [list bakehouse packages modules libs bake vfslibs bin info check shell vendorupdate bootsupport vfscommonupdate projectversion workflow project vfs]
}
@ -1519,10 +1519,14 @@ proc ::punkboot::punkboot_gethelp {args} {
append h "" \n
append h " $scriptname -help or $scriptname --help or $scriptname /? or just $scriptname" \n
append h " - This help." \n \n
append h " $scriptname project ?-k?" \n
append h " - this is the literal word project - and confirms you want to run the project build - which includes src/vfs/* checks and builds" \n
append h " $scriptname bakehouse ?-k? ?-dirty-abort 1|0?" \n
append h " - consumer build from a clean checkout: runs the packages stage (modules + libs) then bakes kit/zipkit executables to <projectdir>/bin" \n
append h " - refuses uncommitted src by default (-dirty-abort defaults ON: the bakehouse bakes from the committed recipe; pass -dirty-abort 0 to override)" \n
append h " - the optional -k flag will terminate running processes matching the executable being built (if applicable)" \n
append h " - builds/copies .tm modules from src to <projectdir>/modules etc and pkgIndex.tcl based libraries from src to <projectdir>/lib etc." \n \n
append h " - does NOT run the promotion gates (bootsupport, vfscommonupdate) - on a clean checkout they are already satisfied by the committed tree" \n \n
append h " $scriptname bake ?-k?" \n
append h " - assemble kit/zipkit executables from the promoted payload (src/vfs) and src/runtime runtimes into <projectdir>/bin" \n
append h " - includes the vfslibs phase; does not rebuild modules/libs and does not run the promotion gates" \n \n
append h " $scriptname modules" \n
append h " - build (or copy if build not required) .tm modules from src/modules src/vendormodules etc to their corresponding locations under <projectdir>" \n
append h " This does not scan src/runtime and src/vfs folders to build kit/zipkit/cookfs executables" \n \n
@ -1544,10 +1548,10 @@ proc ::punkboot::punkboot_gethelp {args} {
append h " $scriptname vfslibs" \n
append h " - propagate declared vendored platform-library packages into kit vfs lib_tcl<N> trees" \n
append h " - declarations (per-package per-kit, with superseded-version removal) live in src/runtime/vendorlib_vfs.toml" \n
append h " - also runs automatically as part of '$scriptname project'" \n \n
append h " - also runs automatically as a phase of '$scriptname bake' (and therefore of '$scriptname bakehouse')" \n \n
append h " $scriptname vfscommonupdate" \n
append h " - update the src/vfs/_vfscommon.vfs from compiled src/modules and src/lib etc" \n
append h " - before calling this (followed by make project) - you can test using '<builtexe>(.exe) dev'" \n
append h " - promotion gate: update the src/vfs/_vfscommon.vfs from compiled src/modules and src/lib etc" \n
append h " - before calling this (followed by '$scriptname bake') - you can test using '<builtexe>(.exe) dev'" \n
append h " this will load modules from your <projectdir>/module <projectdir>/lib paths instead of from the kit/zipkit" \n \n
append h " $scriptname info" \n
append h " - show the name and base folder of the project to be built" \n \n
@ -1561,14 +1565,18 @@ proc ::punkboot::punkboot_gethelp {args} {
append h " - print an ASCII data-flow overview of the build/release workflow (edit -> packages -> bootsupport -> kits)" \n \n
append h " $scriptname help ?subcommand?" \n
append h " - show usage for $scriptname or one of its subcommands (equivalent: $scriptname <subcommand> -help)" \n \n
append h " Deprecated aliases (transition window):" \n
append h " $scriptname project -> runs bakehouse (with a one-line notice)" \n
append h " $scriptname vfs -> runs bake (with a one-line notice)" \n \n
append h " Flags:" \n
append h " -confirm 0|1" \n
append h " - interactive y/n confirmation policy (default 1: prompt when stdin is a terminal, abort fast when it is not)." \n
append h " Use -confirm 0 for unattended runs: the bootsupport minor-staleness gate and the vfscommonupdate REPLACE" \n
append h " confirmation proceed without prompting; kits with a source/target kit-type mismatch are skipped." \n
append h " -dirty-abort" \n
append h " - abort build/promotion commands (project packages modules libs vfs vfslibs bin bootsupport vfscommonupdate) when src/ has" \n
append h " uncommitted VCS changes. Default is warn-only: artifacts built from dirty src have no committed provenance." \n
append h " - abort build/promotion commands (bakehouse packages modules libs bake vfslibs bin bootsupport vfscommonupdate) when src/ has" \n
append h " uncommitted VCS changes. Default is warn-only EXCEPT bakehouse (defaults ON there; -dirty-abort 0 overrides):" \n
append h " artifacts built from dirty src have no committed provenance." \n
append h " Warnings carry a plain PROVENANCE-WARNING: prefix (greppable in redirected output) and are recapped at the end of the run." \n
append h " Use '$scriptname check' to see the current provenance status. To evaluate uncommitted source without building," \n
append h " use '<builtexe> src' or '<builtexe> src shell'." \n \n
@ -1592,7 +1600,20 @@ All commands run from the projectroot with a native tclsh, e.g:
tclsh src/make.tcl <subcommand> -confirm 0 (see [K6])
RELEASE SEQUENCE (the order that satisfies the staleness + provenance gates)
TWO PERSONAS (stage-true subcommand model - one build stage, two promotion
gates, one bake)
----------------------------------------------------------------------------
CONSUMER (clean checkout, wants baked kits):
tclsh src/make.tcl bakehouse -confirm 0
= packages + bake in one uninterrupted run. The promotion gates are already
satisfied by the committed tree. bakehouse REFUSES uncommitted src by
default (-dirty-abort defaults ON: the bakehouse bakes from the committed
recipe; -dirty-abort 0 overrides).
DEVELOPER (changing payload): pass the gates explicitly - the commit is the
publishing act, not a build step. That is the RELEASE SEQUENCE below.
Deprecated aliases (transition window): 'project' -> bakehouse, 'vfs' -> bake.
RELEASE SEQUENCE (the developer order that satisfies the staleness + provenance gates)
----------------------------------------------------------------------------
(1) edit src/modules/foo-999999.0a1.0.tm code change [K1]
@ -1603,7 +1624,7 @@ RELEASE SEQUENCE (the order that satisfies the staleness + provenance gates)
(5) build tclsh src/make.tcl modules -confirm 0 (or 'packages' = modules + libs)
(6) build tclsh src/make.tcl bootsupport -confirm 0 run twice: 2nd pass must copy 0 files [K4]
(7) build tclsh src/make.tcl vfscommonupdate -confirm 0
(8) build tclsh src/make.tcl project -confirm 0 kits; close running kit shells first [K5]
(8) build tclsh src/make.tcl bake -confirm 0 kits; close running kit shells first [K5]
(9) commit tracked build outputs src/bootsupport, thin-layout script/
manifest copies (src/project_layouts +
templates modpod payload),
@ -1634,13 +1655,13 @@ DIAGRAM 1 - DATA FLOW: SOURCE -> BUILT PACKAGES -> PROPAGATION TARGETS
(the module set make.tcl itself src/vfs/_vfscommon.vfs/modules/ + libs
boots from; staleness-gated. (VCS-tracked kit payload source)
Project layouts store NO module |
snapshots - 'dev project.new' | make.tcl project (or: make.tcl vfs)
injects bootsupport into generated v
snapshots - 'dev project.new' | make.tcl bake (kit-assembly stage;
injects bootsupport into generated v consumer umbrella: bakehouse)
projects from the generating src/_build/<kit>.exe --deploy--> bin/<kit>.exe
shell at generation time - G-087) (see DIAGRAM 2) [K5]
DIAGRAM 1b - THIN-LAYOUT SYNC (part of modules/libs/packages/project runs)
DIAGRAM 1b - THIN-LAYOUT SYNC (part of modules/libs/packages/bakehouse runs)
----------------------------------------------------------------------------
src/make.tcl src/build.tcl src/bootsupport/modules*/include_modules.config
@ -1656,7 +1677,7 @@ DIAGRAM 1b - THIN-LAYOUT SYNC (part of modules/libs/packages/project runs)
kit outside any project can list and generate the punk.project layout)
DIAGRAM 2 - KIT ASSEMBLY DETAIL (inside 'make.tcl project' / 'make.tcl vfs')
DIAGRAM 2 - KIT ASSEMBLY DETAIL (the 'make.tcl bake' stage; incl. vfslibs phase)
----------------------------------------------------------------------------
src/runtime/mapvfs.config which vfs folder pairs with which runtime -> kit name
@ -1707,7 +1728,7 @@ KEY / NOTES
a pass copies 0 files (a converged second pass also proves prune tooling ran).
[K5] The deploy step cannot replace a kit exe that is currently executing. Close
running kit shells before step 8, or rerun 'make.tcl vfs -confirm 0'
running kit shells before step 8, or rerun 'make.tcl bake -confirm 0'
afterwards - the freshly built kits wait in src/_build. punkcheck records
mean the rerun only redoes the failed deploys.
@ -1719,7 +1740,7 @@ KEY / NOTES
- src/tests/runtests.tcl exercises the src/ trees directly (dev modules).
- '<builtkit>.exe dev' (or '<builtkit> src') runs a built shell against the
project dev modules - useful for testing built packages before they are
baked into kits via vfscommonupdate + project.
baked into kits via vfscommonupdate + bake.
[K8] What is VCS-tracked where (checkin targets after a build):
tracked: src/** (sources, src/bootsupport, src/project_layouts copies,
@ -1821,22 +1842,24 @@ if {[info exists ::env(PUNKBOOT_PLAIN)] && [string is true -strict $::env(PUNKBO
#single source for the subcommand one-line summaries: each subcommand definition's
#@cmd -summary and the top-level subcommand -choicelabels are both built from this.
variable SUMMARIES {
project "Full project build - packages plus kit/zipkit executables from src/vfs and src/runtime"
bakehouse "Consumer build from a clean checkout: packages then bake - refuses uncommitted src by default"
packages "Build .tm modules and pkgIndex.tcl libraries from src into <projectdir> (no kit executables)"
modules "Build .tm modules from src/modules, src/vendormodules etc into <projectdir>/modules etc"
libs "Build pkgIndex.tcl libraries from src/lib, src/vendorlib etc into <projectdir>/lib etc"
vfs "Build kit/zipkit executables from src/vfs and src/runtime into <projectdir>/bin"
bake "Assemble kit/zipkit executables from promoted payload (src/vfs) and runtimes into <projectdir>/bin"
vfslibs "Propagate declared vendored platform-library packages into kit vfs lib_tcl<N> trees"
bin "Install executables from src/bin into <projectdir>/bin, then build kits as for vfs"
bin "Install executables from src/bin into <projectdir>/bin, then build kits as for bake"
vendorupdate "Update src/vendormodules based on src/vendormodules/include_modules.config"
bootsupport "Update src/bootsupport modules from built project modules"
vfscommonupdate "Replace src/vfs/_vfscommon.vfs modules and libs with the project's built modules and libs"
bootsupport "Promotion gate: update src/bootsupport modules from built project modules"
vfscommonupdate "Promotion gate: replace src/vfs/_vfscommon.vfs modules and libs with the project's built set"
info "Show the name and base folder of the project to be built"
check "Show module/library paths and any potentially problematic packages for running this script"
projectversion "Advisory check: CHANGELOG.md vs punkproject.toml and src/ changes since last version bump"
workflow "Print an ASCII data-flow overview of the build/release workflow (edit -> packages -> bootsupport -> kits)"
workflow "Print an ASCII data-flow overview of the build/release workflow (edit -> packages -> gates -> bake)"
shell "Run the punk shell using bootsupport libraries"
help "Show usage for make.tcl or one of its subcommands"
project "DEPRECATED alias for bakehouse (one-line notice, then runs bakehouse)"
vfs "DEPRECATED alias for bake (one-line notice, then runs bake)"
}
#@cmd -help bodies for the constructed definitions below. Authored BLOCK-FORM
#(first value line whitespace-only) so the @normalize directive in each
@ -1845,14 +1868,20 @@ if {[info exists ::env(PUNKBOOT_PLAIN)] && [string is true -strict $::env(PUNKBO
#normalization (head-form values here would leak this file's indentation into
#the rendered Description column).
variable HELPTEXTS {
project
bakehouse
"
Run the full project build - includes src/vfs/* checks and builds.
Builds/copies .tm modules and pkgIndex.tcl based libraries from src to
<projectdir>/modules, <projectdir>/lib etc, propagates declared vendored
platform-libraries into kit vfs trees (as for vfslibs), then scans
src/runtime and src/vfs folders to build kit/zipkit executables and
installs them to <projectdir>/bin."
Consumer umbrella: run the packages stage (modules + libs) then bake
the kit/zipkit executables - the full path from a CLEAN checkout to
installed kits in <projectdir>/bin.
The bakehouse bakes from the committed recipe: by default it refuses
to run when src/ has uncommitted changes (-dirty-abort defaults ON),
pointing at the granular developer flow (packages -> test ->
bootsupport/vfscommonupdate -> commit -> bake). Pass -dirty-abort 0
to build anyway with PROVENANCE-WARNINGs.
Deliberately does NOT run the promotion gates (bootsupport,
vfscommonupdate): payload promotion is a confirm-gated, committed
act - on a clean checkout the gates are already satisfied by the
committed tree."
packages
"
Build (or copy if build not required) both .tm and pkgIndex.tcl based
@ -1872,23 +1901,32 @@ if {[info exists ::env(PUNKBOOT_PLAIN)] && [string is true -strict $::env(PUNKBO
<projectdir>.
This does not scan src/runtime and src/vfs folders to build kit/zipkit
executables."
vfs
bake
"
Scan src/vfs and src/runtime folders and build kit/zipkit executables
into <projectdir>/bin.
Does not first rebuild modules/libs - use 'make.tcl project' for the
full pipeline."
Assemble kit/zipkit executables: scan src/vfs and src/runtime folders,
build each configured kit from the promoted payload
(src/vfs/_vfscommon.vfs + custom vfs folders) and its runtime, and
install to <projectdir>/bin.
Includes the vfslibs phase (declared vendored platform-library
propagation into kit vfs lib_tcl<N> trees) so a bake cannot ship
stale binary libs.
Does not rebuild modules/libs and does not run the promotion gates -
built modules reach the kit payload only via 'make.tcl
vfscommonupdate' (committed for provenance). Consumer full path from
a clean checkout: 'make.tcl bakehouse'."
vfslibs
"
Propagate declared vendored platform-library packages into kit vfs
lib_tcl<N> trees.
Declarations (per-package per-kit, with superseded-version removal)
live in src/runtime/vendorlib_vfs.toml.
Also runs automatically as part of 'make.tcl project'."
Also runs automatically as a phase of 'make.tcl bake' (and therefore
of 'make.tcl bakehouse'); this standalone narrowing serves quick
iteration on the declarations."
bin
"
Install executables from src/bin to <projectdir>/bin, then check vfs
folders and build kit/zipkit executables as for the vfs subcommand."
folders and build kit/zipkit executables as for the bake subcommand."
vendorupdate
"
Update the src/vendormodules based on src/vendormodules/include_modules.config.
@ -1907,7 +1945,7 @@ if {[info exists ::env(PUNKBOOT_PLAIN)] && [string is true -strict $::env(PUNKBO
vfscommonupdate
"
Update the src/vfs/_vfscommon.vfs from compiled src/modules and src/lib etc.
Before calling this (followed by 'make.tcl project') - you can test using
Before calling this (followed by 'make.tcl bake') - you can test using
'<builtexe>(.exe) dev' - this will load modules from your <projectdir>/modules,
<projectdir>/lib paths instead of from the kit/zipkit.
Replacing the _vfscommon.vfs contents requires confirmation - see -confirm."
@ -1933,6 +1971,16 @@ if {[info exists ::env(PUNKBOOT_PLAIN)] && [string is true -strict $::env(PUNKBO
The text is embedded in make.tcl (::punkboot::workflow_text) so it is
available wherever make.tcl runs; its MAINTENANCE key states the
update contract for keeping it in step with build behaviour."
project
"
DEPRECATED alias for 'bakehouse' (G-112 stage-true rename) - prints a
one-line notice and runs bakehouse (packages + bake, -dirty-abort
default ON). Retained for a transition window."
vfs
"
DEPRECATED alias for 'bake' (G-112 stage-true rename) - prints a
one-line notice and runs bake (kit assembly including the vfslibs
phase). Retained for a transition window."
}
#shared option fragments composed into the per-subcommand definitions below
variable OPT_CONFIRM {
@ -1966,15 +2014,26 @@ if {[info exists ::env(PUNKBOOT_PLAIN)] && [string is true -strict $::env(PUNKBO
"Terminate running processes matching the executable being built
(if applicable) so the build can install over it."
}
#bakehouse (and its deprecated alias project) defaults the dirty gate ON:
#the bakehouse bakes from the committed recipe (G-112 two-persona model).
variable OPT_DIRTYABORT_ON {
-dirty-abort -type boolean -default 1 -help\
"Abort when src/ has uncommitted VCS changes - DEFAULT ON for this
subcommand: the bakehouse bakes from the committed recipe. A
consumer build on a clean checkout runs uninterrupted; uncommitted
developer changes get a refusal naming the granular flow
(packages -> test -> bootsupport/vfscommonupdate -> commit -> bake).
Pass -dirty-abort 0 to build anyway with PROVENANCE-WARNINGs."
}
#which shared option fragments each subcommand declares
#(shell and help have bespoke definitions below: shell passes trailing args
# through to the repl untouched, help takes a subject value)
variable SUBOPTS {
project {OPT_FORCEKILL OPT_DIRTYABORT OPT_CONFIRM}
bakehouse {OPT_FORCEKILL OPT_DIRTYABORT_ON OPT_CONFIRM}
packages {OPT_DIRTYABORT OPT_CONFIRM}
modules {OPT_DIRTYABORT OPT_CONFIRM}
libs {OPT_DIRTYABORT OPT_CONFIRM}
vfs {OPT_FORCEKILL OPT_DIRTYABORT OPT_CONFIRM}
bake {OPT_FORCEKILL OPT_DIRTYABORT OPT_CONFIRM}
vfslibs {OPT_DIRTYABORT OPT_CONFIRM}
bin {OPT_FORCEKILL OPT_DIRTYABORT OPT_CONFIRM}
vendorupdate {OPT_CONFIRM}
@ -1984,14 +2043,17 @@ if {[info exists ::env(PUNKBOOT_PLAIN)] && [string is true -strict $::env(PUNKBO
check {}
projectversion {}
workflow {}
project {OPT_FORCEKILL OPT_DIRTYABORT_ON OPT_CONFIRM}
vfs {OPT_FORCEKILL OPT_DIRTYABORT OPT_CONFIRM}
}
#synopsis fragments matching the shared option fragments (explicit @form -synopsis
#so usage shows the real invocation 'make.tcl <subcommand> ...' rather than the
#internal definition id)
variable OPT_SYNOPSES {
OPT_FORCEKILL "?-k?"
OPT_DIRTYABORT "?-dirty-abort?"
OPT_CONFIRM "?-confirm 0|1?"
OPT_FORCEKILL "?-k?"
OPT_DIRTYABORT "?-dirty-abort?"
OPT_DIRTYABORT_ON "?-dirty-abort 1|0?"
OPT_CONFIRM "?-confirm 0|1?"
}
foreach {sub optvars} $SUBOPTS {
set synparts [list "make.tcl $sub"]
@ -2034,10 +2096,12 @@ if {[info exists ::env(PUNKBOOT_PLAIN)] && [string is true -strict $::env(PUNKBO
"subject -type string -optional 0 -choices [list [dict keys $SUMMARIES]] -help {Subcommand to show usage for.}"
#top-level definition: the subcommand table rendered by 'make.tcl' / 'make.tcl -help'
variable SUBGROUPS {
"build & promotion" {project packages modules libs vfs vfslibs bin}
"source maintenance" {vendorupdate bootsupport vfscommonupdate}
"build & bake" {bakehouse packages modules libs bake vfslibs bin}
"promotion gates" {bootsupport vfscommonupdate}
"source maintenance" {vendorupdate}
"informational" {info check projectversion workflow help}
"interactive" {shell}
"deprecated aliases" {project vfs}
}
punk::args::define\
"@id -id (script)::punkboot"\
@ -2062,7 +2126,7 @@ if {[info exists ::env(PUNKBOOT_PLAIN)] && [string is true -strict $::env(PUNKBO
#resolve a mechanism used here (e.g pre-@normalize snapshots) degrades to the
#plain fallback immediately instead of erroring at first parse/usage.
punk::args::get_spec (script)::punkboot
punk::args::get_spec (script)::punkboot::project
punk::args::get_spec (script)::punkboot::bakehouse
punk::args::get_spec (script)::punkboot::help
punk::args::get_spec (script)::punkboot::shell
unset -nocomplain sub optvars defparts ov
@ -2219,6 +2283,30 @@ if {$do_help} {
exit $help_exitcode
}
#G-112 deprecated aliases - one-line mapping before any dispatch:
# project -> bakehouse (packages + bake, -dirty-abort default ON)
# vfs -> bake (kit assembly including the vfslibs phase)
#Kept for a transition window (until the 8.6 arc completes - see the G-112
#dispositions). The alias definitions above mirror their targets' options so
#flags parse identically; only the command word maps here.
if {[info exists ::punkboot::command]} {
switch -- $::punkboot::command {
project {
puts stderr "make.tcl: 'project' is DEPRECATED - use 'bakehouse' (packages + bake; refuses uncommitted src by default). Running bakehouse."
set ::punkboot::command bakehouse
}
vfs {
puts stderr "make.tcl: 'vfs' is DEPRECATED - use 'bake' (kit assembly incl. the vfslibs phase). Running bake."
set ::punkboot::command bake
}
}
if {!$::punkboot::punkargs_ok && $::punkboot::command eq "bakehouse"} {
#degraded fallback scan has flag-only -dirty-abort (no way to pass 0):
#bakehouse's documented default is ON, so force it here.
set ::punkboot::opt_dirty_abort 1
}
}
set forcekill $::punkboot::opt_forcekill
#puts stdout "::argv $::argv"
# ----------------------------------------
@ -2383,7 +2471,7 @@ if {![llength [info commands ::punkboot::exit_original]]} {
}
}
if {$::punkboot::command in {project packages modules libs vfs vfslibs bin bootsupport vfscommonupdate}} {
if {$::punkboot::command in {bakehouse packages modules libs bake vfslibs bin bootsupport vfscommonupdate}} {
set dirty_abort $::punkboot::opt_dirty_abort
lassign [::punkboot::get_src_provenance_warnings $projectroot "make.tcl $::punkboot::command"] have_scoped_dirty_check dirty_warnings
if {$have_scoped_dirty_check} {
@ -2392,7 +2480,16 @@ if {$::punkboot::command in {project packages modules libs vfs vfslibs bin boots
puts stderr " To evaluate uncommitted source without building, use '<builtexe> src' or '<builtexe> src shell'."
if {$dirty_abort} {
set ::punkboot::provenance_warnings_pending [list] ;#no recap needed - aborting adjacent to the warning
puts stderr "-aborted- (-dirty-abort given and src has uncommitted changes - commit first, or rerun without -dirty-abort to build with a warning)"
if {$::punkboot::command eq "bakehouse"} {
puts stderr "-aborted- bakehouse refuses to bake from uncommitted src (the bakehouse bakes from the committed recipe)."
puts stderr " Developer flow for uncommitted changes:"
puts stderr " make.tcl packages -> test ('<builtexe> src', src/tests/runtests.tcl)"
puts stderr " make.tcl bootsupport + make.tcl vfscommonupdate (promotion gates)"
puts stderr " commit -> make.tcl bake"
puts stderr " To build anyway without committed provenance: make.tcl bakehouse -dirty-abort 0"
} else {
puts stderr "-aborted- (-dirty-abort given and src has uncommitted changes - commit first, or rerun without -dirty-abort to build with a warning)"
}
exit 1
}
#Grace period for an attentive human to ctrl-c - only when stdin is a terminal
@ -3175,7 +3272,7 @@ if {$::punkboot::command eq "bootsupport"} {
#Project layouts store no bootsupport module snapshots - 'dev project.new' injects bootsupport
#into generated projects from the generating shell at generation time. Layout-carried scripts
#and bootsupport manifests are kept current by the thin-layout sync step (see DIAGRAM 1b in
#::punkboot::workflow_text), which runs during modules/libs/packages/project builds.
#::punkboot::workflow_text), which runs during modules/libs/packages/bakehouse builds.
puts stdout " bootsupport done "
flush stderr
@ -3187,7 +3284,7 @@ if {$::punkboot::command eq "bootsupport"} {
if {$::punkboot::command ni {project modules libs packages vfs vfslibs bin}} {
if {$::punkboot::command ni {bakehouse packages modules libs bake vfslibs bin}} {
puts stderr "Command $::punkboot::command not implemented - aborting."
flush stderr
after 100
@ -3200,7 +3297,7 @@ if {$::punkboot::command ni {project modules libs packages vfs vfslibs bin}} {
#install src vendor contents (from version controlled src folder) to base of project (same target folders as our own src/modules etc ie to paths that go on the auto_path and in tcl::tm::list)
if {$::punkboot::command in {project packages modules}} {
if {$::punkboot::command in {bakehouse packages modules}} {
set vendormodulefolders [glob -nocomplain -dir $sourcefolder -type d -tails vendormodules vendormodules_tcl*]
foreach vf $vendormodulefolders {
lassign [split $vf _] _vm tclx
@ -3240,7 +3337,7 @@ if {$::punkboot::command in {project packages modules}} {
}
}
if {$::punkboot::command in {project packages libs}} {
if {$::punkboot::command in {bakehouse packages libs}} {
#exclude README.md from source folder - but only the root one
#-exclude-paths takes relative patterns e.g
# */test.txt will only match test.txt exactly one level deep.
@ -3309,7 +3406,7 @@ if {$::punkboot::command in {project packages libs}} {
}
}
if {$::punkboot::command in {project vfslibs}} {
if {$::punkboot::command in {bakehouse bake vfslibs}} {
#G-037: propagate declared vendored platform-library packages into kit vfs lib_tcl<N> trees.
#Participation is per-package per-kit (kit vfs package sets intentionally differ - e.g. twapi
#versions vary per kit) - declared in src/runtime/vendorlib_vfs.toml, never blanket-copied.
@ -3400,7 +3497,7 @@ if {$::punkboot::command in {project vfslibs}} {
}
}
if {$::punkboot::command in {project packages libs}} {
if {$::punkboot::command in {bakehouse packages libs}} {
########################################################
lappend projectlibfolders lib
#exclude README.md from source folder - but only the root one
@ -3473,7 +3570,7 @@ if {$::punkboot::command in {project packages libs}} {
}
if {$::punkboot::command in {project packages modules libs}} {
if {$::punkboot::command in {bakehouse packages modules libs}} {
########################################################
#templates - thin-layout sync (G-087 stage 3; see DIAGRAM 1b in ::punkboot::workflow_text)
#sync boot scripts (build.tcl, make.tcl) and bootsupport include_modules.config manifests into the
@ -3584,7 +3681,7 @@ if {$::punkboot::command in {project packages modules libs}} {
}
}
if {$::punkboot::command in {project packages modules}} {
if {$::punkboot::command in {bakehouse packages modules}} {
#consolidated /modules /modules_tclX folder used for target where X is tcl major version
#the make process will process for any _tclX not just the major version of the current interpreter
@ -3623,7 +3720,7 @@ if {$::punkboot::command in {project packages modules}} {
}
}
if {$::punkboot::command in {project packages modules libs}} {
if {$::punkboot::command in {bakehouse packages modules libs}} {
set installername "make.tcl"
# ----------------------------------------
if {[punk::repo::is_fossil_root $projectroot]} {
@ -3671,14 +3768,15 @@ if {$::punkboot::command in {project packages modules libs}} {
#review
set installername "make.tcl"
if {$::punkboot::command ni {project vfs bin}} {
#command = modules
if {$::punkboot::command ni {bakehouse bake bin}} {
#command = packages/modules/libs/vfslibs - stops before kit assembly
puts stdout "vfs folders not checked"
puts stdout " - use 'make.tcl vfscommonupdate' to copy built modules into base vfs folder"
puts stdout " - use 'make.tcl project' to build executable kits/zipkits from vfs folders as well if you have runtimes installed"
puts stdout " Note that without the vfscommonupdate step, 'make.tcl project' will include any manual changes in the *custom* vfs folders but"
puts stdout " without the latest built modules."
puts stdout " calling 'builtexename(.exe) dev' will allow testing of built modules before they are put into the kits/zipkits via 'vfscommonupdate' then 'project'"
puts stdout " - use 'make.tcl vfscommonupdate' to promote built modules into the base vfs folder (promotion gate - commit for provenance)"
puts stdout " - use 'make.tcl bake' to build executable kits/zipkits from the vfs folders if you have runtimes installed"
puts stdout " Note that without the vfscommonupdate step, 'make.tcl bake' will include any manual changes in the *custom* vfs folders but"
puts stdout " without the latest built modules."
puts stdout " calling 'builtexename(.exe) dev' will allow testing of built modules before they are baked into the kits/zipkits via 'vfscommonupdate' then 'bake'"
puts stdout " - consumer full path from a clean checkout: 'make.tcl bakehouse'"
puts stdout "-done-"
exit 0
}
@ -5123,11 +5221,11 @@ if {[llength $failed_kits]} {
set had_kits [expr {[llength $installed_kits] || [llength $failed_kits] || [llength $skipped_kits]}]
if {$had_kits} {
puts stdout " module builds and kit/zipkit builds processed (vfs config: src/runtime/mapvfs.config)"
puts stdout " - use 'make.tcl modules' to build modules without scanning/building the vfs folders into executable kits/zipkits"
puts stdout " - use 'make.tcl vfscommonupdate' to copy built modules into the base vfs folder <projectdir>/src/vfs/_vfscommon.vfs"
puts stdout " - Note that without the vfscommonupdate step, 'make tcl vfs' (included in 'make tcl project') will build vfs based executables"
puts stdout " that include your current custom vfs folders in src/vfs, but with a _vfscommon.vfs that doesn't have the latest built modules"
puts stdout " calling 'builtexename(.exe) dev' will allow testing of built modules before they are put into the kits/zipkits via 'vfscommonupdate' then 'project'"
puts stdout " - use 'make.tcl modules' to build modules without baking the vfs folders into executable kits/zipkits"
puts stdout " - use 'make.tcl vfscommonupdate' to promote built modules into the base vfs folder <projectdir>/src/vfs/_vfscommon.vfs (promotion gate)"
puts stdout " - Note that without the vfscommonupdate step, 'make.tcl bake' (the kit-assembly stage of 'make.tcl bakehouse') will build vfs based executables"
puts stdout " that include your current custom vfs folders in src/vfs, but with a _vfscommon.vfs that doesn't have the latest built modules"
puts stdout " calling 'builtexename(.exe) dev' will allow testing of built modules before they are baked into the kits/zipkits via 'vfscommonupdate' then 'bake'"
} else {
puts stdout " module builds processed"
puts stdout ""

Loading…
Cancel
Save