Browse Source

make.tcl: remove deprecated 'project'/'vfs' aliases (G-112 transition window closed)

The G-112 stage-true rename (0.23.0) kept 'project' -> bakehouse and
'vfs' -> bake as transitional aliases until the 8.6 arc completed; that
arc landed with G-099 and the new shape is settled. All alias plumbing
is removed from src/make.tcl: known_commands, the pre-dispatch mapping
switch, the punk::args definitions (SUMMARIES/HELPTEXTS/SUBOPTS/
SUBVALUES/VALUES_SYNOPSES), the "deprecated aliases" help group, the
plain-help block, the workflow-text mention and the degraded-mode
kitname collection. 'vfs' now gets an unknown-subcommand usage error;
'project' prefix-resolves to the read-only 'projectversion' check under
punk::args unambiguous-prefix matching (PUNKBOOT_PLAIN degraded mode
rejects both). Also trimmed a pre-existing trailing space (line 8990)
surfaced by git diff --check via the verbatim layout copies.

Docs: src/README.md, ARCHITECTURE.md, src/AGENTS.md (alias mentions
removed; also corrected the stale layout-sync trigger claim - the
thin-layout sync runs in modules/libs/packages/bakehouse, not
bootsupport), root AGENTS.md sync-step subcommand list ('project' ->
'bakehouse'). Historical records (CHANGELOG 0.23.0 entry, goals
archives, GOALS-archive) deliberately untouched.

punkshell 0.39.1 + CHANGELOG entry (make.tcl interface change - patch
per root AGENTS.md versioning policy).

Build outputs batched per src/AGENTS.md: thin-layout make.tcl copies
resynced via 'make.tcl libs -confirm 0' (basic, project-0.1, modpod
templates copy - all byte-identical to src/make.tcl), plus the lagging
store->modpod catch-up the same run performed (modpod layout copy:
mapvfs.config removed, mapvfs.toml + vfs/README.md added).

Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
master
Julian Noble 1 week ago
parent
commit
7cb0dc1333
  1. 2
      AGENTS.md
  2. 2
      ARCHITECTURE.md
  3. 7
      CHANGELOG.md
  4. 2
      punkproject.toml
  5. 6
      src/AGENTS.md
  6. 2
      src/README.md
  7. 55
      src/make.tcl
  8. 1210
      src/modules/punk/mix/#modpod-templates-999999.0a1.0/templates/project_layouts/vendor/punk/project-0.1/src/make.tcl
  9. 16
      src/modules/punk/mix/#modpod-templates-999999.0a1.0/templates/project_layouts/vendor/punk/project-0.1/src/runtime/mapvfs.config
  10. 34
      src/modules/punk/mix/#modpod-templates-999999.0a1.0/templates/project_layouts/vendor/punk/project-0.1/src/runtime/mapvfs.toml
  11. 31
      src/modules/punk/mix/#modpod-templates-999999.0a1.0/templates/project_layouts/vendor/punk/project-0.1/src/vfs/README.md
  12. 1210
      src/project_layouts/vendor/punk/basic/src/make.tcl
  13. 1210
      src/project_layouts/vendor/punk/project-0.1/src/make.tcl

2
AGENTS.md

@ -211,7 +211,7 @@ The project version is fully independent of module versions. A module bump (even
- `lib/` (root) — Build output target for `tclsh src/make.tcl libs`
- `modules_tcl8/`, `modules_tcl9/` — Tcl version-specific build output targets
- `lib_tcl8/`, `lib_tcl9/` — Tcl version-specific build output targets
- `src/project_layouts/` — Thin project layout payloads (structure, scripts, docs, manifests - no stored bootsupport/vfs module snapshots; G-087, achieved - see goals/archive/G-087-thin-project-layouts.md). The build's thin-layout sync step (`make.tcl modules`/`libs`/`packages`/`project`) keeps each layout's `src/make.tcl`, `src/build.tcl` and bootsupport `include_modules.config` copies current, and syncs the punk.project payload into the `punk::mix::templates` modpod source tree; `dev project.new` composes each layout's overlay chain (vendor then custom tier, `<name>@<base>` derived folders, `.anti` deletion markers - see the store README) via `layout_materialize`, injects bootsupport modules/libs from the generating shell at generation time, and seeds generated-project identity metadata (punkproject.toml, CHANGELOG.md, punkorigin.toml provenance baseline) programmatically. Agents must not directly edit files under `src/project_layouts/` unless the user explicitly names a path there or specifically requests layout changes; never hand-edit the synced copies (they are punkcheck-managed build outputs).
- `src/project_layouts/` — Thin project layout payloads (structure, scripts, docs, manifests - no stored bootsupport/vfs module snapshots; G-087, achieved - see goals/archive/G-087-thin-project-layouts.md). The build's thin-layout sync step (`make.tcl modules`/`libs`/`packages`/`bakehouse`) keeps each layout's `src/make.tcl`, `src/build.tcl` and bootsupport `include_modules.config` copies current, and syncs the punk.project payload into the `punk::mix::templates` modpod source tree; `dev project.new` composes each layout's overlay chain (vendor then custom tier, `<name>@<base>` derived folders, `.anti` deletion markers - see the store README) via `layout_materialize`, injects bootsupport modules/libs from the generating shell at generation time, and seeds generated-project identity metadata (punkproject.toml, CHANGELOG.md, punkorigin.toml provenance baseline) programmatically. Agents must not directly edit files under `src/project_layouts/` unless the user explicitly names a path there or specifically requests layout changes; never hand-edit the synced copies (they are punkcheck-managed build outputs).
## Repo-wide Notes

2
ARCHITECTURE.md

@ -87,7 +87,7 @@ Two layers with a deliberate dependency direction (the class never depends on th
## Build, provenance and kits
- **`src/make.tcl` is the single build entry.** Key subcommands: `modules`/`libs`/`packages` (repo-root build outputs), `vfscommonupdate` (regenerate `_vfscommon.vfs`), `bake` (kit assembly into `bin/`; optional kit names or `@group` selectors confine the run to those kits - G-121/G-024; `bake_default=false` entries build only when selected), `bakelist` (report the configured kit matrix with runtime/vfs presence, deployed state, groups and scheme roles), `vfslibs` (materialize the per-.vfs payload declarations - G-115), `bin`, `bakehouse` (packages + bake for a clean checkout; `project`/`vfs` remain as deprecated aliases - G-112 rename, achieved), `bootsupport` (snapshot refresh), `vendorupdate`, `check`, `workflow`, `projectversion`. Dispatch and help dogfood `punk::args` (G-030, achieved) and degrade to plain scan/help when bootsupport `punk::args` is stale (`PUNKBOOT_PLAIN=1` forces the degraded mode). Source: `src/AGENTS.md`.
- **`src/make.tcl` is the single build entry.** Key subcommands: `modules`/`libs`/`packages` (repo-root build outputs), `vfscommonupdate` (regenerate `_vfscommon.vfs`), `bake` (kit assembly into `bin/`; optional kit names or `@group` selectors confine the run to those kits - G-121/G-024; `bake_default=false` entries build only when selected), `bakelist` (report the configured kit matrix with runtime/vfs presence, deployed state, groups and scheme roles), `vfslibs` (materialize the per-.vfs payload declarations - G-115), `bin`, `bakehouse` (packages + bake for a clean checkout - G-112 rename, achieved; the transitional `project`/`vfs` aliases were removed 2026-08-01), `bootsupport` (snapshot refresh), `vendorupdate`, `check`, `workflow`, `projectversion`. Dispatch and help dogfood `punk::args` (G-030, achieved) and degrade to plain scan/help when bootsupport `punk::args` is stale (`PUNKBOOT_PLAIN=1` forces the degraded mode). Source: `src/AGENTS.md`.
- **Host vs target platform (G-122).** The kit surfaces separate what the driving tclsh IS from what a bake is FOR. Target-keyed: the `bin/runtime/<tier>` store a runtime is read from, `.exe` suffixing of runtimes and kit outputs, presence checks, and the pre-deploy process sweep's tooling (`tasklist`/`taskkill` vs `ps`/`kill`, skipped when the target's processes cannot exist on this host). Host-keyed: copy commands, path handling, filesystem case rules, prompts. The default target is the host canon except for cygwin-family hosts (msys2/cygwin-runtime tclsh - `tcl_platform(platform)` `unix` on windows), which target `win32-x86_64`; a `mapvfs.toml` entry may declare its own target and is then addressed in that platform's tier. `make.tcl check` prints the derivation. Zip-type kits assemble without zipfs in the driving tcl (raw-runtime split + `punk::zip::mkzip` + concatenation), and since G-124 they EXTRACT without it too: `punk::zip` reads a zip - plain, or attached to an executable under either offset convention - with stock Tcl only, so a bake needs neither zipfs nor tcllib to carry a runtime's `tcl_library` into the kit. Sources: `src/AGENTS.md`, `src/runtime/AGENTS.md`, `src/modules/punk/platform-999999.0a1.0.tm`, `src/modules/punk/zip-999999.0a1.0.tm`.
- **punkcheck** records every install/delete as events in per-folder `.punkcheck` directories - the basis for skip/copy change detection, superseded-module pruning and provenance. Single OO record lifecycle (G-094, achieved) with atomic saves and advisory event-scoped locking for concurrent writers (G-095, achieved).
- **Provenance gates.** Build/promotion commands warn on uncommitted `src/` changes (column-0 `PROVENANCE-WARNING:` token, `-dirty-abort` for strict mode); `vendorupdate` warns for dirty source-project checkouts.

7
CHANGELOG.md

@ -5,6 +5,13 @@ 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.39.1] - 2026-08-01
- make.tcl deprecated aliases removed (G-112 transition window closed): `project` and
`vfs` no longer map to `bakehouse`/`bake` - they now produce an unknown-subcommand
usage error. All alias plumbing is gone (dispatch mapping, punk::args definitions,
the "deprecated aliases" help group, plain-help and `workflow` mentions).
## [0.39.0] - 2026-07-31
- Target-keyed kit output locations (G-127): a kit whose mapvfs entry declares

2
punkproject.toml

@ -1,6 +1,6 @@
[project]
name = "punkshell"
version = "0.39.0"
version = "0.39.1"
license = "BSD-2-Clause"
url = "https://www.gitea1.intx.com.au/jn/punkshell"
#packager: declared identity for published artifacts (declarative, not proof -

6
src/AGENTS.md

@ -59,7 +59,7 @@ Recovery after a wrong path guess:
## Work Guidance
- Run `tclsh src/make.tcl packages` once after cloning to populate generated module and library assets.
- Use `tclsh src/make.tcl bakehouse` for full builds from a clean checkout (packages + bake; refuses uncommitted src by default - `-dirty-abort 0` overrides). The deprecated `project` alias maps to it with a notice.
- Use `tclsh src/make.tcl bakehouse` for full builds from a clean checkout (packages + bake; refuses uncommitted src by default - `-dirty-abort 0` overrides).
- Use `tclsh src/make.tcl modules` to build just the module packages.
- Use `tclsh src/make.tcl libs` to build just the library packages.
- Use `tclsh src/make.tcl packages` to build both modules and libraries.
@ -68,7 +68,7 @@ Recovery after a wrong path guess:
- All build/promotion commands (`bakehouse`, `packages`, `modules`, `libs`, `bake`, `vfslibs`, `bin`, `bootsupport`, `vfscommonupdate`) warn similarly when this project's own `src/` has uncommitted fossil/git changes (dirt outside `src/` is ignored). Warn-only by default EXCEPT `bakehouse` (aborts by default; `-dirty-abort 0` overrides); pass `-dirty-abort` elsewhere to make the check aborting. For evaluating uncommitted source without a build, prefer `<builtexe> src` / `<builtexe> src shell`. The check is `punkboot::utils::vcs_dirty_warnings` (optional scope argument) loaded guardedly from bootsupport - if the snapshot is stale/missing the check degrades to a skip notice (but `-dirty-abort` then aborts rather than silently losing the requested strictness).
- Provenance warnings (dirty-src gate + vendorupdate source-project check) print with a plain column-0 `PROVENANCE-WARNING:` token (grep for it in captured build output) and are recapped at the end of the run via make.tcl's wrapped `::exit`. Interactive terminal runs get a 3-second ctrl-c grace countdown before a dirty build proceeds; piped/agent runs skip it. `tclsh src/make.tcl check` reports the current src provenance status and what the build commands would do.
- Use `tclsh src/make.tcl vfscommonupdate` to rebuild `_vfscommon.vfs`. The REPLACE confirmation prompts on an interactive terminal; unattended/agent runs must pass `-confirm 0` (with the default `-confirm 1` and a piped/closed stdin, make.tcl aborts fast with guidance instead of reading stdin - do not pipe `y`).
- `tclsh src/make.tcl workflow` prints an embedded ASCII data-flow overview of the build/release workflow (release-ready command sequence, source→outputs folder flow, kit assembly, keyed notes). The text lives in `::punkboot::workflow_text` in `src/make.tcl` - embedded rather than a data file so it travels with the make.tcl copies seeded into generated projects. **Update contract (agents):** whenever build data flow changes - a make.tcl subcommand added/removed/repurposed, a source or output folder added or rerouted, a propagation target added, a gate (staleness/provenance/confirm) or deploy behaviour changed - update the workflow text in the same change-set. Keep it plain ASCII, max line width 100, and preserve the RELEASE SEQUENCE / DIAGRAM / KEY-NOTES / MAINTENANCE structure; verify by running `tclsh src/make.tcl workflow` (and once under `PUNKBOOT_PLAIN=1`). Adding/changing a subcommand also means: SUMMARIES + HELPTEXTS + SUBOPTS (+ SUBGROUPS) in `::punkboot::argdoc`, `known_commands`, the plain `punkboot_gethelp` text, and a project-version bump (make.tcl interface is product surface per root AGENTS.md). Layout make.tcl copies pick the change up via `make.tcl bootsupport` - do not hand-sync them.
- `tclsh src/make.tcl workflow` prints an embedded ASCII data-flow overview of the build/release workflow (release-ready command sequence, source→outputs folder flow, kit assembly, keyed notes). The text lives in `::punkboot::workflow_text` in `src/make.tcl` - embedded rather than a data file so it travels with the make.tcl copies seeded into generated projects. **Update contract (agents):** whenever build data flow changes - a make.tcl subcommand added/removed/repurposed, a source or output folder added or rerouted, a propagation target added, a gate (staleness/provenance/confirm) or deploy behaviour changed - update the workflow text in the same change-set. Keep it plain ASCII, max line width 100, and preserve the RELEASE SEQUENCE / DIAGRAM / KEY-NOTES / MAINTENANCE structure; verify by running `tclsh src/make.tcl workflow` (and once under `PUNKBOOT_PLAIN=1`). Adding/changing a subcommand also means: SUMMARIES + HELPTEXTS + SUBOPTS (+ SUBGROUPS) in `::punkboot::argdoc`, `known_commands`, the plain `punkboot_gethelp` text, and a project-version bump (make.tcl interface is product surface per root AGENTS.md). Layout make.tcl copies pick the change up via the thin-layout sync step in any `make.tcl modules`/`libs`/`packages`/`bakehouse` run - do not hand-sync them.
- make.tcl subcommands and flags are punk::args-declared (G-030): `tclsh src/make.tcl help ?subcommand?` or `<subcommand> -help` shows tabled usage; invalid arguments produce punk::args usage errors. The dispatch degrades to plain scan/help when the bootsupport punk::args (or its rendering stack) is stale or unavailable; `PUNKBOOT_PLAIN=1` forces the degraded mode for troubleshooting. The `::punkboot::argdoc` definitions are constructed (string-built) and use the G-045 authoring mechanisms — block-form help values + `@normalize`, explicit `@form -synopsis` — see src/modules/AGENTS.md "punk::args definition authoring ergonomics" before editing them or authoring similar definitions.
- Uncommitted `make.tcl`-generated outputs may be batched into one commit, regardless of how many `make.tcl` invocations produced them. This covers punkcheck-managed build outputs that are VCS-tracked: `src/bootsupport/`, `_vfscommon.vfs/modules` + `/lib`, declared per-kit `*.vfs/lib_tcl<N>/<pkg>` subfolders, the thin-layout sync copies (`src/project_layouts/vendor/punk/<layout>/src/{make.tcl,build.tcl}` + bootsupport manifest copies), and the module-shipped layout payload under `src/modules/punk/mix/#modpod-templates-*/templates/project_layouts/` (G-087: synced from `src/project_layouts` - never hand-edit the modpod copy). (Root `modules/`, `lib/`, `modules_tcl<N>/`, `lib_tcl<N>/` are gitignored and never committed.) Each module's old→new version rename is atomic; a regeneration reflects one build-output refresh, not independent hand-edits. This is a carve-out from generic "split aggressively" commit guidance for punkcheck-managed build outputs only — it does not cover user-curated VFS content (`_config/`, per-kit `*.vfs/` outside declared `lib_tcl<N>` subfolders, `_aside/`, `mkzipfix.vfs`, `_vfscommon.vfs/doc`), which commits separately per its own concerns.
- **Boot-precondition gate (G-125).** A bake refuses any kit whose merged `.vfs` supplies no tcl library: the kit is listed under `FAILED KITS` with a reason naming the cause, and NOTHING is written - no `src/_build/<kit>`, no deploy, and the previously deployed `bin/<kit>` is left byte-identical. This is deliberately a failure rather than a warning: the deploy step deletes the old kit before copying the new one, so the pre-gate behaviour replaced a working shell with an artifact that died at startup with `application-specific initialization failed: Cannot find a usable init.tcl`. The check is structural and non-executing (so it covers cross-target kits too): `init.tcl` in `tcl_library/`, `lib/tcl<major>.<minor>/` or `tcl<major>.<minor>/` - the third for runtimes whose archive mounts at the executable's own path rather than `//zipfs:/app`, so `[info library]` is `<exe>/tcl8.6` (the androwish/undroidwish zipfs backport for 8.6 does this) - plus one companion file a real Tcl library carries beside it (`tm.tcl`, `package.tcl`, `auto.tcl`, `clock.tcl`, `history.tcl`, `word.tcl`) or an `encoding/` directory - without that second test the `lib/BWidget1.10.1/init.tcl` every punkshell kit carries would answer for a tcl library it cannot provide. It reads the MERGED tree rather than asking whether extraction ran, so a `.vfs` that legitimately supplies its own tcl library (`src/vfs/punk8_statictwapi.vfs`, `src/vfs/punk9test.vfs`) builds and deploys unchanged. **Remedy when a kit is refused:** the usual cause is that the runtime's own payload could not be extracted - read the recapped `BUILD-WARNING` naming what was tried, then either fix extraction (a driving tclsh with no zipfs needs punk::zip >= 0.2.0 in bootsupport - see the extraction bullet above), point the kit at a runtime that carries a payload, or have the kit's `.vfs` supply a tcl library itself. The predicate is `punkboot::utils::vfs_boot_library_report` called through a guarded require, exactly as the dirty-src provenance check is: a stale or missing bootsupport snapshot degrades the gate to a `NOTE` rather than failing every kit. `tclsh src/make.tcl check` reports whether the gate is `ACTIVE` or `UNAVAILABLE`.
@ -81,7 +81,7 @@ Recovery after a wrong path guess:
- Zip-type kit assembly does not require zipfs in the driving tcl (G-122): with `tcl::zipfs::mkimg` present it is used as before, otherwise the image is assembled by concatenation (raw-runtime split + `punk::zip::mkzip` + append, the same `::punkboot::assemble_zipcat_image` helper the `zipcat` kit type uses). Both mount identically - tcl zipfs reads the archive with archive-start-relative offsets.
- Neither is EXTRACTING the runtime's own attached zip (needed to carry its `tcl_library` into the kit): `punk::zip` >= 0.2.0 reads a zip with stock Tcl only - no zipfs, no vfs::zip, no tcllib (G-124, the former tcllib `zipfile::decode` dependency is gone). The zipfs-less bake path splits off the executable prefix with `punk::zip::extract_preamble` and then reads the MEMBERS from the original runtime with `punk::zip::unzip`, never from the split-off intermediate: a runtime whose zip offsets are file-relative (the historical `zipfs mkimg` convention - `tclsh90b4_piperepl.exe` in the store is one) splits into a .zip whose offsets still count from the removed prefix, which plain zip readers reject. Reading the whole file at the derived base offset makes the two offset conventions indistinguishable to callers; `punk::zip::archive_info <file>` reports which one a given artifact uses. Verified 2026-07-26 by baking a zip kit from msys2's `/usr/bin/tclsh8.6` (no zipfs, no vfs::zip, no tcllib) and booting the result with its `tcl_library` present.
- What the RUNTIME must provide to be zip-kit-wrappable - which zipfs commands, mount conventions and startup hooks are supported - is documented in `bin/AGENTS.md` "Kit-wrappable runtime requirements (G-129)". Short form: `tcl::zipfs::mount` with pairwise no-arg output (`tcl::zipfs::root` NOT required), any attached-archive mount point (the boot derives it from the runtime's own mount table - the androwish/undroidwish 8.6 backport mounts at the executable's own path), a `main.tcl`/`app/main.tcl` startup hook, and a liftable library payload for the G-125 gate. The bake's runtime capability probe keys `has_zipfs` on `tcl::zipfs::mount` accordingly.
- Use `punk make.tcl bakehouse` or `punk902z make.tcl bakehouse` inside Punk shell when building binaries through Punk (the deprecated `project` alias still maps). Driving make.tcl from a built punk executable is supported for informational/update subcommands and for kit builds of *other* kits — the kit whose deployed executable is running the build is skipped with a warning (it cannot be replaced while running, and the pre-deploy process sweep must not kill the build itself; the sweep also excludes the build's own pid in all cases). Rebuild that kit from tclsh or a different kit.
- Use `punk make.tcl bakehouse` or `punk902z make.tcl bakehouse` inside Punk shell when building binaries through Punk. Driving make.tcl from a built punk executable is supported for informational/update subcommands and for kit builds of *other* kits — the kit whose deployed executable is running the build is skipped with a warning (it cannot be replaced while running, and the pre-deploy process sweep must not kill the build itself; the sweep also excludes the build's own pid in all cases). Rebuild that kit from tclsh or a different kit.
- **Punk-exe-hosted make.tcl runs in a pre-loaded interp, not a virgin one** — the kit's script-mode boot has already loaded much of the punk stack (punk, punk::lib, punk::repl, punk::console, punk::du, flagfilter, struct::set ...) and set process state (app-punkscript forces `::tcl_interactive 0` for script semantics; libunknown/packagepreference are active). Consequences make.tcl must (and now does) handle explicitly: `package require` of an already-provided package is a no-op, so anything make.tcl breaks in the interp (the accelerator-reload block forgets+destroys sha1/md5/struct::* — it re-requires what was loaded), and anything computed at package-load time (punk::repl's `::tcl_interactive` probe — the shell branch recomputes it before `repl::start`), must be restored deliberately rather than relying on later loads to re-fire. Also note the copies that run in this mode are the *kit's* pre-loaded modules, not the bootsupport snapshots make.tcl's paths would otherwise prefer — silent provenance mixing when versions diverge. When adding interp-surgery or load-time-state assumptions to make.tcl, test under both `tclsh src/make.tcl ...` and `<punkexe> src/make.tcl ...`.
- Binary images are platform-specific; build on each target platform rather than expecting a cross-platform flag.
- Remove `_build/` artifacts only when a clean/resync is needed, then rerun the relevant `make.tcl` command. Avoid partial cleans that break boot modules.

2
src/README.md

@ -38,7 +38,7 @@ e.g
tclsh src/make.tcl bake ;# assemble kit/zipkit executables from the promoted vfs payload + runtimes
# (consumer path from a CLEAN checkout: 'tclsh src/make.tcl bakehouse' = packages + bake in one run;
# 'make.tcl workflow' prints the full data-flow overview. 'project'/'vfs' remain as deprecated aliases.)
# 'make.tcl workflow' prints the full data-flow overview.)
```

55
src/make.tcl

@ -187,7 +187,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 bakehouse packages modules libs bake bakelist vfslibs bin info check shell vendorupdate libfetch bootsupport vfscommonupdate projectversion workflow buildsuite tool project vfs]
variable known_commands [list bakehouse packages modules libs bake bakelist vfslibs bin info check shell vendorupdate libfetch bootsupport vfscommonupdate projectversion workflow buildsuite tool]
}
@ -2603,9 +2603,6 @@ proc ::punkboot::punkboot_gethelp {args} {
append h " reported and build/test exit nonzero with fetch guidance (bin/punk-getzig.cmd)" \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
@ -2649,7 +2646,6 @@ gates, one bake)
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)
----------------------------------------------------------------------------
@ -3034,8 +3030,6 @@ if {[info exists ::env(PUNKBOOT_PLAIN)] && [string is true -strict $::env(PUNKBO
help "Show usage for make.tcl or one of its subcommands"
buildsuite "List, describe or run the defined buildsuites under src/buildsuites (zig runtime factory)"
tool "List, test or build the vendored tools under src/tools (zig) and install them to <projectdir>/bin"
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
@ -3283,16 +3277,6 @@ if {[info exists ::env(PUNKBOOT_PLAIN)] && [string is true -strict $::env(PUNKBO
(bin/punk-getzig.cmd). Build caches (.zig-cache/zig-out) are
deliberately left in place between runs for rebuild speed (both
git- and fossil-ignored)."
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 {
@ -3326,7 +3310,7 @@ 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:
#bakehouse 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\
@ -3381,8 +3365,6 @@ 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
@ -3396,8 +3378,8 @@ if {[info exists ::env(PUNKBOOT_PLAIN)] && [string is true -strict $::env(PUNKBO
OPT_TRUSTSERVER "?-trust-server?"
OPT_FORCE "?-force?"
}
#per-subcommand positional values (default: none). bake (and its deprecated
#alias vfs) and bakelist take optional kit names (G-121 selective bake).
#per-subcommand positional values (default: none). bake and bakelist take
#optional kit names (G-121 selective bake).
#Discoverability nicety: the configured kit names are offered as choices when
#the mapping parses at definition time - informational only (-choicerestricted
#0), so the handlers' own validation (which lists the configured names, and
@ -3428,7 +3410,6 @@ if {[info exists ::env(PUNKBOOT_PLAIN)] && [string is true -strict $::env(PUNKBO
kitname, all configured kits are processed except entries with
bake_default=false. An unknown name errors before any build.}"\
]
dict set SUBVALUES vfs [dict get $SUBVALUES bake]
dict set SUBVALUES bakelist [list\
"@values -min 0 -max -1"\
"kitname -type string -optional 1 -multiple 1${_kitname_choicepart} -help\
@ -3440,7 +3421,6 @@ if {[info exists ::env(PUNKBOOT_PLAIN)] && [string is true -strict $::env(PUNKBO
]
variable VALUES_SYNOPSES {
bake "?kitname ...?"
vfs "?kitname ...?"
bakelist "?kitname ...?"
}
foreach {sub optvars} $SUBOPTS {
@ -3518,7 +3498,6 @@ if {[info exists ::env(PUNKBOOT_PLAIN)] && [string is true -strict $::env(PUNKBO
"vendored tools" {tool}
"informational" {info check bakelist projectversion workflow help}
"interactive" {shell}
"deprecated aliases" {project vfs}
}
punk::args::define\
"@id -id (script)::punkboot"\
@ -3628,7 +3607,7 @@ if {$::punkboot::punkargs_ok} {
}
}
if {[dict exists $argd values kitname]} {
#declared -multiple: a list of the supplied kit names (bake/vfs/bakelist - G-121)
#declared -multiple: a list of the supplied kit names (bake/bakelist - G-121)
set ::punkboot::opt_kitnames [dict get $argd values kitname]
}
unset -nocomplain _opts _optname _var
@ -3688,10 +3667,10 @@ if {$::punkboot::punkargs_ok} {
lappend commands_found $a
}
}
#G-121: bake/bakelist (and the deprecated alias vfs) take optional trailing kit
#names - collect them here so the single-command check below still holds in
#degraded mode (the handlers do their own name validation).
if {[lindex $commands_found 0] in {bake bakelist vfs}} {
#G-121: bake/bakelist take optional trailing kit names - collect them here so
#the single-command check below still holds in degraded mode (the handlers do
#their own name validation).
if {[lindex $commands_found 0] in {bake bakelist}} {
set ::punkboot::opt_kitnames [lrange $commands_found 1 end]
set commands_found [lrange $commands_found 0 0]
}
@ -3744,23 +3723,7 @@ 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.

1210
src/modules/punk/mix/#modpod-templates-999999.0a1.0/templates/project_layouts/vendor/punk/project-0.1/src/make.tcl vendored

File diff suppressed because it is too large Load Diff

16
src/modules/punk/mix/#modpod-templates-999999.0a1.0/templates/project_layouts/vendor/punk/project-0.1/src/runtime/mapvfs.config vendored

@ -1,16 +0,0 @@
#single line per runtime executable. Name of runtime followed by list of kit configuration lists.
#Each kit config list is from 1 to 3 elements
#1) .vfs folder with path relative to src folder.
#2) name of wrapped kit binary to create (default to rootname of .vfs folder e.g myapp.vfs will create a kit named myapp (or myapp.exe) on windows)
#3) Type of kit to create (zip or kit) - default kit. kit for metakit or vlerq based kit, zip for more modern zipkit.
#
# e.g The following creates 2 zipkits from the same runtime and 2 different .vfs folder
# mytcl90kit.exe {mainapp.vfs myapp.exe zip} {test.vfs testapp.exe zip}
#
#if runtime has no entry - it will only match a .vfs folder with a matching filename e.g runtime1.exe runtime1.vfs
#Use a runtime with a name of dash (-) to build a .kit file from the .vfs folder using no runtime
#e.g
#- myproject.vfs
#- punk86.vfs
#
tclsh902z.exe {project.vfs project zip}

34
src/modules/punk/mix/#modpod-templates-999999.0a1.0/templates/project_layouts/vendor/punk/project-0.1/src/runtime/mapvfs.toml vendored

@ -0,0 +1,34 @@
# mapvfs.toml - kit output mapping (parsed with tomlish via make.tcl's ::punkboot::lib::mapvfs_parse).
# Maps runtime executables (<projectroot>/bin/runtime/<platform>/) and .vfs payload folders
# (src/vfs/) to the named kit executables a bake produces.
#
# [kit.<name>] - one table per kit output; <name> is the output executable's base name.
# runtime (required) runtime executable name, unsuffixed (a superfluous .exe is tolerated).
# Use "-" to build a runtime-less .kit file. A runtime with NO entry anywhere
# still auto-pairs with a same-named .vfs folder.
# vfs (required) .vfs folder name under src/vfs/ (e.g "project.vfs").
# type kit|zip|zipcat|cookit|cookfs (default kit). kit = metakit/starkit wrap,
# zip = zipfs image, zipcat = raw exe+zip concatenation.
# target (optional) target platform-dir name ('help platforms' lists them); defaults to
# the build host's own target. Decides the bin/runtime/<tier> store, .exe
# suffixing and process tooling. A property of the RUNTIME - entries sharing a
# runtime must not disagree.
# smokerequire (optional) packages the freshly built kit must plain-'package require'
# (advisory probe; failures are recapped BUILD-WARNINGs).
# group (optional) named grouping - 'make.tcl bake @<group>' / 'bakelist @<group>'.
# bake_default (optional boolean, default true; a group's bake_default is the members'
# default) false = excluded from full bakes, still bakeable by name/@group.
#
# [group.<name>] - optional group attributes: description, bake_default.
# [scheme.<name>] - generative version-named outputs (scheme = "versioned"): expands to
# <prefix>-<version> + <prefix>-dev + release-gated plain <prefix> from the punkproject.toml
# [project] version. Keys: scheme, prefix (default: table name), runtime, vfs, type
# (required), plus target/smokerequire/group/bake_default as for kits.
#
# The punkshell tree's src/runtime/mapvfs.toml header carries the full format spec.
# (The pre-toml mapvfs.config line format remains readable as a deprecated fallback.)
[kit.project]
runtime = "tclsh902z"
vfs = "project.vfs"
type = "zip"

31
src/modules/punk/mix/#modpod-templates-999999.0a1.0/templates/project_layouts/vendor/punk/project-0.1/src/vfs/README.md vendored

@ -0,0 +1,31 @@
# src/vfs - kit payload folders and per-.vfs payload declarations
Each `<name>.vfs` folder is the payload of a configured kit output (kit mapping:
`src/runtime/mapvfs.toml`), merged with the `_vfscommon.vfs` overlay at bake time.
## Per-.vfs payload declarations (optional)
A `.vfs` folder's payload can be DECLARED in a sibling toml file and materialized by the
build - while the folder remains the operative assembly area: dropping files in by hand
needs no declaration, and materialization never clobbers what it did not itself install.
A `.vfs` with NO declaration file is untouched - pure drop-in mode.
- Declaration file: `src/vfs/<name>.vfs.toml` (sibling of the folder, never baked into it).
- Processed by `tclsh src/make.tcl vfslibs`, and automatically as a phase of
`make.tcl bake` / `bakehouse`.
```toml
[payload.<entryname>]
source = "vendorlib/mylib1.0" # folder path, resolved per source_root
source_root = "src" # optional: 'src' (default) or 'packages'
# (<projectroot>/bin/packages - 'make.tcl libfetch' tier)
target = "lib" # optional: folder INSIDE the .vfs (default: the .vfs root)
supersedes = ["mylib0.9"] # optional: legacy sibling folders removed from target first
replace = true # optional: clean-slate the SAME-NAMED target folder first
```
Precedence (drop-in wins): materialization is punkcheck-tracked with
`-overwrite synced-targets` - undeclared files are never touched, and a file at a declared
path is only overwritten when the mechanism itself installed it and it is unmodified
since; a foreign or hand-modified copy is preserved and reported. `supersedes` and
`replace` are the explicit declared exceptions.

1210
src/project_layouts/vendor/punk/basic/src/make.tcl vendored

File diff suppressed because it is too large Load Diff

1210
src/project_layouts/vendor/punk/project-0.1/src/make.tcl vendored

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save