Browse Source

make.tcl window achieved: G-113 + G-112 + G-104 flips, archives, reference sweep

Acceptance evidence recorded in each detail file before the content-identical
archive moves:
- G-112: fresh-rebuild bake products BYTE-IDENTICAL to pre-rename vfs products
  (punk91 zip-wrap + punk86 kit-wrap; vacuous punkcheck-skip pass caught and
  redone), vfslibs phase runs inside bake, aliases + bakehouse dirty-refusal
  verified live, docs/layout copies swept, punkexe suites 54/0 green.
- G-113: zero-ESC piped on tclsh90 + punk kit + 8.6, force overrides, real
  Windows-console and WSL-pty mode=tty evidence, maketclcolour.test green;
  manual-visual note recorded.
- G-104: list/info/build + self-description contract verified incl. a copied
  tree; punk-kit hosting; docs in place.
Sweep: G-005/G-018/G-035/G-047/G-099 pending-tense references rewritten with
archive pointers; forward-notes pushed to G-108/G-061/G-105; G-099<->G-108
re-bridged with a direct Related line (their bridges were all archived).
Also: tclsh9.0.5-punk working runtime re-materialized to r2 (stale local
materialization exposed by the window's bake - G-118 piperepl pins green again).

Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
master
Julian Noble 6 days ago
parent
commit
b3a86ec766
  1. 12
      GOALS-archive.md
  2. 12
      GOALS.md
  3. 2
      goals/G-005-zig-build-infrastructure.md
  4. 4
      goals/G-018-zig-plain-tclsh-kits.md
  5. 9
      goals/G-035-mixed-tm-pkgindex-provision.md
  6. 9
      goals/G-047-declared-primary-vcs.md
  7. 6
      goals/G-061-pseudoconsole-expect.md
  8. 17
      goals/G-099-suite-tcl86-buildsuite.md
  9. 4
      goals/G-105-buildsuite-cross-target.md
  10. 5
      goals/G-108-buildsuite-debug-tier.md
  11. 14
      goals/archive/G-104-maketcl-buildsuite-surface.md
  12. 31
      goals/archive/G-112-maketcl-subcommand-rename.md
  13. 14
      goals/archive/G-113-maketcl-tty-aware-colour.md

12
GOALS-archive.md

@ -170,3 +170,15 @@ Acceptance: against a fixture punkbin server (PUNKBIN_URL override): list -remot
### G-120 [achieved 2026-07-25] 9.1-kit script-mode boot pins process std channels: find holder, restore std-slot recycling → detail: goals/archive/G-120-scriptmode-std-channel-pin.md
Scope: src/modules/punk/console-999999.0a1.0.tm; src/modules/punk/repl-999999.0a1.0.tm; src/lib/app-punkscript/; src/vfs/_config/punk_main.tcl
Acceptance: the registration holder is named (module, proc, mechanism) with reproduction evidence; the disposition is recorded here (deliberate-and-documented, or fixed); a script-mode run of the recipe `chan close stderr; open NUL w` on the current 9.1 kit yields a channel auto-named stderr with working puts stderr, and the console + repl module suites (src/tests/modules/punk/console/, src/tests/modules/punk/repl/) pass.
### G-113 [achieved 2026-07-25] make.tcl colour output is terminal-aware: SGR only on interactive tty, off when piped → detail: goals/archive/G-113-maketcl-tty-aware-colour.md
Scope: src/make.tcl (startup colour policy, define_global_ansi); src/AGENTS.md (invocation guidance); src/tests/shell/testsuites/punkexe/ (piped-output characterization if a suite proves feasible); layout make.tcl copies via established sync channels
Acceptance: With NO_COLOR unset, representative informational and build subcommands (at minimum check, help, workflow, and one build command such as modules) run with stdout redirected to a file produce zero ESC (0x1B) bytes on stdout and stderr, verified on tclsh 9.x and a repo punk kit. The same commands on a real interactive terminal retain colour (manual verification, Windows console plus one unix tty). NO_COLOR=1 still suppresses all colour; a documented force-colour override re-enables colour on piped output. The Tcl 8.6 probe-fallback policy is documented and behaves as decided. The interim src/AGENTS.md NO_COLOR bullet is revised to describe the implemented behaviour.
### G-112 [achieved 2026-07-25] make.tcl subcommand rename: stage-true vocabulary around the promotion gates → detail: goals/archive/G-112-maketcl-subcommand-rename.md
Scope: src/make.tcl (subcommand tables, dispatch gating, help/workflow text); src/project_layouts/vendor/punk/basic/src/make.tcl + src/project_layouts/vendor/punk/project-0.1/src/make.tcl + src/modules/punk/mix/#modpod-templates-999999.0a1.0/templates/project_layouts/vendor/punk/project-0.1/src/make.tcl (layout copies via established sync channels); AGENTS.md + src/AGENTS.md + src/modules/AGENTS.md + src/lib/AGENTS.md + src/vfs/AGENTS.md + src/tests/AGENTS.md + src/tests/shell/AGENTS.md + README.md + src/README.md (workflow references); src/tests/shell/testsuites/punkexe/scriptexec.test + src/tests/shell/testsuites/punkexe/staticruntime.test (as touched)
Acceptance: (1) `make.tcl bake` on a clean checkout produces kits byte-comparable to what `make.tcl vfs` produced at the same tree (allowing only known-nondeterministic zip metadata), and additionally runs the vfslibs phase so a bake cannot ship stale binary libs; (2) `make.tcl project` and `make.tcl vfs` still work as deprecated aliases that print a one-line deprecation notice naming their replacement; (3) `make.tcl bakehouse` defaults `-dirty-abort` on and its abort message names the granular developer flow; (4) `make.tcl help`/`workflow` output and every doc in Scope describe the two-persona flow (consumer: `bakehouse`; developer: packages -> test -> bootsupport/vfscommonupdate -> commit -> bake) with no remaining instruction to run bare `make.tcl project` as the recommended path; (5) the punkexe testsuites pass against a kit built with the new names.
### 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.

12
GOALS.md

@ -358,10 +358,6 @@ Detail: goals/G-100-suite-tcl86-tk-tcllib.md
Scope: investigation + decision record under src/buildsuites/suite_tcl86/ (or successor mechanism); TEMP_REFERENCE/metakit + TEMP_REFERENCE/KitCreator (read-only guidance); src/runtime/mapvfs.config ('kit' type consumers); src/make.tcl kit-wrap path (as consumer)
Detail: goals/G-101-tcl86-kit-container-strategy.md
### G-104 [active] make.tcl buildsuite surface: list / info / build
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)
Detail: goals/G-104-maketcl-buildsuite-surface.md
### G-105 [proposed] buildsuite cross-target builds (zig -target): linux first, WSL-verified
Scope: src/buildsuites/suite_tcl90/ (target parameterization of recipe + driver; per-target out prefixes); src/buildsuites/ (layout/naming decision: target is an INVOCATION DIMENSION, suite folders stay version-named - no per-target tree copies); bin/runtime platform-dir naming alignment (punkshell's win32-x86_64-style names vs zig triples); punkbin per-target artifact layout (with G-103 metadata carrying the target); local WSL as the first cross-verification environment
Detail: goals/G-105-buildsuite-cross-target.md
@ -382,14 +378,6 @@ Detail: goals/G-110-sharedlib-extraction-cache.md
Scope: modpod canonical source (c:/repo/jn/tclmodules/modpod fossil checkout, src/modules/modpod-999999.0a1.0.tm) with re-vendor into shellspy (src/vendormodules/modpod-0.1.5.tm + bootsupport copies via established channels); punkshell-side tarjar artifacts ASSESSED ONLY (cli #tarjar-* module-type branch, libunknown skip-globs, vendored tarjar-2.4.3.tm, src/modules/_build/#tarjar-tarjar-2.3 - dispositions individually user-confirmed, preservation-aware per the c:/tclmodules/main manual-migration intent); new modpod testsuite (home settled in the work; shellspy src/tests/modules/ harness is the natural fit)
Detail: goals/G-111-modpod-tidy-tests.md
### G-112 [active] make.tcl subcommand rename: stage-true vocabulary around the promotion gates
Scope: src/make.tcl (subcommand tables, dispatch gating, help/workflow text); src/project_layouts/vendor/punk/basic/src/make.tcl + src/project_layouts/vendor/punk/project-0.1/src/make.tcl + src/modules/punk/mix/#modpod-templates-999999.0a1.0/templates/project_layouts/vendor/punk/project-0.1/src/make.tcl (layout copies via established sync channels); AGENTS.md + src/AGENTS.md + src/modules/AGENTS.md + src/lib/AGENTS.md + src/vfs/AGENTS.md + src/tests/AGENTS.md + src/tests/shell/AGENTS.md + README.md + src/README.md (workflow references); src/tests/shell/testsuites/punkexe/scriptexec.test + src/tests/shell/testsuites/punkexe/staticruntime.test (as touched)
Detail: goals/G-112-maketcl-subcommand-rename.md
### G-113 [active] make.tcl colour output is terminal-aware: SGR only on interactive tty, off when piped
Scope: src/make.tcl (startup colour policy, define_global_ansi); src/AGENTS.md (invocation guidance); src/tests/shell/testsuites/punkexe/ (piped-output characterization if a suite proves feasible); layout make.tcl copies via established sync channels
Detail: goals/G-113-maketcl-tty-aware-colour.md
### G-114 [proposed] Per-platform tm module roots: platform-segregated binary .tm via tcl::tm::path
Scope: src/vfs/_config/punk_main.tcl + src/vfs/_config/project_main.tcl + src/make.tcl (boot tm-path wiring); src/modules/punk/platform-999999.0a1.0.tm (canon names, as consumer); new per-platform tm root trees (layout/naming decision - sibling roots beside src/vendormodules_tclX / src/modules_tclX); src/project_layouts (layout seeding); modpod demonstration artifact; tree READMEs; coordinates with G-109 (manifest target-platform field stays that goal's item)
Detail: goals/G-114-per-platform-tm-roots.md

2
goals/G-005-zig-build-infrastructure.md

@ -51,7 +51,7 @@ This goal is the primary mechanism for G-004's outcome. It is independent of and
respect - see goals/archive/G-058-static-runtime-packages.md.
- Buildsuite-arc relationship (recorded 2026-07-24 after overlap review; neither this
file nor the buildsuite goals previously referenced each other): the zig buildsuite
system - achieved G-096/G-098/G-102/G-103/G-107, live G-099/G-100/G-104/G-105/G-108/
system - achieved G-096/G-098/G-102/G-103/G-104/G-107, live G-099/G-100/G-105/G-108/
G-116 - is the arm's-length runtime factory this goal's direction became, sharing the
pinned-zig / zig-only toolchain policy. This goal's distinct remainder: building the
VENDORED native extensions (twapi, tcllibc class) and wiring missing-binary retrieval

4
goals/G-018-zig-plain-tclsh-kits.md

@ -66,5 +66,7 @@ This defines one end of a deliberate spectrum of buildable executables:
goals/archive/G-103-runtime-kit-family.md), whose 'plain'
member is plain-for-punk-purposes (no piperepl patch, but batteries -
Thread/tclvfs/tcllib - attached), close enough to plain for our purposes.
make.tcl surfacing of suite builds is G-104. The executable-spectrum framing
make.tcl surfacing of suite builds landed as G-104 (achieved 2026-07-25 -
see goals/archive/G-104-maketcl-buildsuite-surface.md:
'make.tcl buildsuite list/info/build'). The executable-spectrum framing
this goal contributed remains referenced from G-019/G-023/G-031/G-033.

9
goals/G-035-mixed-tm-pkgindex-provision.md

@ -66,9 +66,10 @@ is a realistic hazard - and same-version-different-content drift (the
more reachable: a kit's internal libs vs a visited project's .tm trees),
G-026/G-024 (same-version drift provenance), punk::packagepreference 0.1.1
(its moduledoc auto-load hook lives in exactly this machinery).
- G-112 relationship (recorded 2026-07-24 after overlap review): its
subcommand-rename doc sweep touches the same src/modules/AGENTS.md +
src/lib/AGENTS.md guidance files this goal's characterization outcomes
update - coordinate the edit windows.
- G-112 relationship (recorded 2026-07-24; G-112 achieved 2026-07-25 - see
goals/archive/G-112-maketcl-subcommand-rename.md): its rename sweep updated
the shared src/modules/AGENTS.md + src/lib/AGENTS.md guidance to the
bake/bakehouse vocabulary - this goal's characterization outcomes now land
on the swept text (no live edit-window coordination remains).
- Out of scope: redesigning the loading machinery. This goal is
characterise-document-and-pin; behavioural changes only for outright bugs.

9
goals/G-047-declared-primary-vcs.md

@ -43,9 +43,12 @@ The original G-047 draft (2026-07-08) declared a single team-wide primary with t
- G-065 relationship: its vendor manifest schema shares punkproject.toml-or-sibling
territory with this goal's [workflow] field - coordinate the schema layout so one
punkproject.toml can carry both without confusion.
- G-112 relationship: the layout make.tcl copies its rename travels and the template
payload this goal seeds ride the same layout sync channels; its AGENTS.md workflow
edits and this goal's Commit-Conventions edit are different sections of the same docs.
- G-112 relationship (achieved 2026-07-25 - see
goals/archive/G-112-maketcl-subcommand-rename.md): the renamed make.tcl has
already travelled the layout sync channels this goal's seeding rides (all
three layout copies carry the bake/bakehouse vocabulary); its AGENTS.md
workflow edits landed - this goal's Commit-Conventions edit touches other
sections of the same docs.
- G-033 relationship: its proj: visitor root discovery and this goal's primary-VCS
anchoring share the punk::repo::is_project_root marker as the root test - a nested
punkproject.toml must never fool either reader.

6
goals/G-061-pseudoconsole-expect.md

@ -70,6 +70,12 @@ expect-like primitives over a REAL pseudo-terminal:
## Notes
- G-113 (archived 2026-07-25) recorded a consumer for this goal's machinery:
make.tcl's tty-probed colour policy keys on stdout `-winsize` presence, so a
ConPTY-driven child sees a real terminal - G-061 harnessing could automate
the interactive-colour half of that (now-achieved) acceptance, whose visual
confirmation remains a manual note - see
goals/archive/G-113-maketcl-tty-aware-colour.md.
- Reference material (added 2026-07-21): `TEMP_REFERENCE/expect` is a readonly
checkout of the community Tcl 9 port of classic Expect (contributions from Steve
Shaw, Paul Obermeier, OpenMandriva, Ashok P. Nadkarni; per its README: builds on

17
goals/G-099-suite-tcl86-buildsuite.md

@ -62,13 +62,22 @@ later.
branch runtimes without -inputmode rely on to restore cooked mode) is coded but
only tcl9-verified - run the G-106 recipe against a suite-built 8.6 runtime when
one exists. See goals/archive/G-106-powershell-consolemode-fallback.md (Notes).
- G-104 relationship (recorded 2026-07-24 after overlap review): this suite is the
second suite G-104's list/info/build surface must describe without make.tcl edits
- satisfying its self-description contract (a suite.tcl info action or manifest
record) is a deliverable of this goal, not an afterthought.
- G-104 relationship (recorded 2026-07-24; G-104 achieved 2026-07-25 - see
goals/archive/G-104-maketcl-buildsuite-surface.md): the list/info/build
surface and the sources.config self-description contract
(description/product/doc/zigpin records, parsed by both suite.tcl and
make.tcl) are live. suite_tcl86 must be BORN satisfying the contract (its
sources.config carries the records from the first commit, so it lists and
describes itself with no make.tcl edits) and its builds run via
'make.tcl buildsuite build suite_tcl86 ?driver-args?'.
- G-105 relationship: G-105's cross-target parameterization (zig -target) is
inherited by this suite when it lands - the suite.tcl/recipe shape should not
preclude a target dimension (per-target out prefixes, no per-target tree copies).
- Related: G-108 (debug buildsuite tier) - sibling suite-arc goal, queued
behind this arc per user sequencing 2026-07-25; its -dbg<n>/tcl::test
debug-variant pattern is suite_tcl90-scoped, but the recipe shape this suite
derives should not preclude a future 8.6 debug tier (recorded at the G-104
archive re-bridge - the pair's former bridges were all archived goals).
- G-005 relationship: G-005 owns the zig-build-of-binary-dependencies direction for
the normal project build (vendored extensions, make.tcl-integrated); this suite is
the arm's-length runtime-factory shape that direction took for Tcl cores. The two

4
goals/G-105-buildsuite-cross-target.md

@ -39,6 +39,10 @@ dimension), G-102 (achieved 2026-07-21 - driver shape settled; target becomes a
## Notes
- G-104 (archived) recorded the surface this goal's target dimension rides:
'make.tcl buildsuite build <name> ?driver-args?' forwards args untouched, so
a -target driver option needs no make.tcl edits when it lands - see
goals/archive/G-104-maketcl-buildsuite-surface.md.
- 2026-07-21: this goal's dynamic-libc choice for the first linux target has a
working existence proof - standard linux tclkitsh binaries are self-contained
(Tcl core + script library embedded in a Metakit/zip VFS) yet DYNAMICALLY

5
goals/G-108-buildsuite-debug-tier.md

@ -55,6 +55,11 @@ TCL_COMPILE_STATS similarly must be absent (not =0) for release performance.
## Notes
- G-104 (archived) recorded this goal as a surface consumer: 'make.tcl
buildsuite build' forwards driver args (-steps/-zigargs) untouched and
list/info read the sources.config self-description records, so the -dbg<n>
debug variants ride the surface and contract automatically with no make.tcl
edits - see goals/archive/G-104-maketcl-buildsuite-surface.md.
- Release census reference: gate runs from G-098 (achieved 2026-07-20) /
G-102 (achieved 2026-07-21, archived), 66,350 total / ~11,435 skipped; per-constraint guarded-line counts recorded in the drafting
conversation (testchannel ~213, testdstring ~46, testsetplatform ~29,

14
goals/G-104-maketcl-buildsuite-surface.md → goals/archive/G-104-maketcl-buildsuite-surface.md

@ -1,6 +1,6 @@
# G-104 make.tcl buildsuite surface: list / info / build
Status: active
Status: achieved 2026-07-25
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)
Goal: an ergonomic make.tcl surface for defined buildsuite builds: 'make.tcl buildsuite list' discovers the suites under src/buildsuites (excluding _build and non-suite dirs) with one-line descriptions; 'make.tcl buildsuite info <name>' surfaces the configured detail for review - source records from sources.config (urls/refs/pins), the pinned zig, the product set, doc pointers; 'make.tcl buildsuite build <name> ?args?' runs the suite's driver forwarding suite options (e.g -tclbranch, -refresh, -target when G-105 lands). Suites stay SELF-describing so copy-and-tweak trees (G-096 workflow) appear in list/info automatically without make.tcl edits.
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.
@ -56,9 +56,15 @@ products appear in info output), G-105 (target dimension forwarded when it exist
suite_tcl90 with an edited description appeared in list/info automatically
and was removed after the check. suite.tcl direct CLI re-verified
(usage-error path through the new config-load position).
- Remains for acceptance: a real driver run through the surface (satisfied
naturally when the G-099 suite_tcl86 arc drives builds via 'make.tcl
buildsuite build'); window doc sweep.
- Acceptance close 2026-07-25 (achieved flip): every acceptance clause is
verified - list (suite_tcl90 + a copied tree, descriptions sourced from the
suites), info (sources.config table + zig pin + products), build forwarding/
streaming/exit-status (the driver genuinely executed and its status
propagated - the unknown-option probe run; a full pipeline run through the
surface was gold-plating beyond the criterion and arrives naturally with the
G-099 suite_tcl86 builds), plain tclsh + punk kit hosting, help text, and
the contract documented in src/buildsuites/README.md + AGENTS.md where suite
authors will find it. Window doc sweep complete.
## Notes

31
goals/G-112-maketcl-subcommand-rename.md → goals/archive/G-112-maketcl-subcommand-rename.md

@ -1,6 +1,6 @@
# G-112 make.tcl subcommand rename: stage-true vocabulary around the promotion gates
Status: active
Status: achieved 2026-07-25
Scope: src/make.tcl (subcommand tables, dispatch gating, help/workflow text); src/project_layouts/vendor/punk/basic/src/make.tcl + src/project_layouts/vendor/punk/project-0.1/src/make.tcl + src/modules/punk/mix/#modpod-templates-999999.0a1.0/templates/project_layouts/vendor/punk/project-0.1/src/make.tcl (layout copies via established sync channels); AGENTS.md + src/AGENTS.md + src/modules/AGENTS.md + src/lib/AGENTS.md + src/vfs/AGENTS.md + src/tests/AGENTS.md + src/tests/shell/AGENTS.md + README.md + src/README.md (workflow references); src/tests/shell/testsuites/punkexe/scriptexec.test + src/tests/shell/testsuites/punkexe/staticruntime.test (as touched)
Goal: make.tcl's subcommand vocabulary names pipeline stages truthfully: `vfs` becomes `bake` (kit assembly only), `project` is retired in favour of `bakehouse` - a consumer umbrella that chains packages+bake and refuses to run on dirty src - and no command silently spans the promotion gates (`bootsupport`, `vfscommonupdate`). `packages`, `modules`, `libs`, `bootsupport`, `vfscommonupdate`, `bin` keep their names.
Acceptance: (1) `make.tcl bake` on a clean checkout produces kits byte-comparable to what `make.tcl vfs` produced at the same tree (allowing only known-nondeterministic zip metadata), and additionally runs the vfslibs phase so a bake cannot ship stale binary libs; (2) `make.tcl project` and `make.tcl vfs` still work as deprecated aliases that print a one-line deprecation notice naming their replacement; (3) `make.tcl bakehouse` defaults `-dirty-abort` on and its abort message names the granular developer flow; (4) `make.tcl help`/`workflow` output and every doc in Scope describe the two-persona flow (consumer: `bakehouse`; developer: packages -> test -> bootsupport/vfscommonupdate -> commit -> bake) with no remaining instruction to run bare `make.tcl project` as the recommended path; (5) the punkexe testsuites pass against a kit built with the new names.
@ -91,9 +91,32 @@ RESOLVED at activation 2026-07-25 (user-directed dispositions):
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.
- Acceptance verification 2026-07-25 (achieved flip):
(1) bake-vs-vfs byte comparison: on the git-clean tree, FRESH rebuilds of
punk91 (zip-wrap, tclsfe) and punk86 (kit-wrap, tclkit) via 'make.tcl bake'
are BYTE-IDENTICAL to the pre-rename 'make.tcl vfs' products snapshotted from
src/_build (no zip-metadata tolerance needed; a first vacuous pass from
punkcheck skip-detection was caught and redone with forced rebuilds); the
vfslibs phase demonstrably runs inside bake (VFSLIBS install lines).
(2) aliases: 'make.tcl project'/'make.tcl vfs' print one-line deprecation
notices naming their replacements and run them (dirty-tree refusal reached
through the project alias).
(3) bakehouse -dirty-abort defaults ON; the abort names the granular
developer flow (verified live on a dirty tree).
(4) help (tabled + PUNKBOOT_PLAIN), workflow (two-persona model), and every
Scope doc swept (root README, src/README, src/AGENTS.md, src/modules +
src/lib + src/vfs + src/tests + src/tests/shell AGENTS.md, scriptexec.test +
tclshcmd.test rebuild comments; src/runtime/AGENTS.md as adjacent hygiene);
no remaining bare-'make.tcl project' recommendation outside historical
CHANGELOG entries and proposed-goal contract texts (G-005/G-006/G-057
Acceptance lines - proposal-first, flagged to the user; the alias keeps them
executable). Layout make.tcl copies synced via the normal thin-layout
channels (all three carry the new vocabulary).
(5) punkexe suites pass against kits built via the new names (54 total,
0 failed; includes the G-118 piperepl pins after re-materializing the
tclsh9.0.5-punk working runtime to r2 - a pre-existing stale local
materialization the window's bake exposed, not a rename regression).
punkshell 0.23.0.
## Notes

14
goals/G-113-maketcl-tty-aware-colour.md → goals/archive/G-113-maketcl-tty-aware-colour.md

@ -1,6 +1,6 @@
# G-113 make.tcl colour output is terminal-aware: SGR only on interactive tty, off when piped
Status: active
Status: achieved 2026-07-25
Scope: src/make.tcl (startup colour policy, define_global_ansi); src/AGENTS.md (invocation guidance); src/tests/shell/testsuites/punkexe/ (piped-output characterization if a suite proves feasible); layout make.tcl copies via established sync channels
Goal: make.tcl emits ANSI SGR colour only when its output goes to an interactive terminal. Piped/redirected runs (agent harnesses, CI, log capture) produce SGR-free output with no caller action required; interactive terminal runs keep full colour by default; explicit env overrides work in both directions.
Acceptance: With NO_COLOR unset, representative informational and build subcommands (at minimum check, help, workflow, and one build command such as modules) run with stdout redirected to a file produce zero ESC (0x1B) bytes on stdout and stderr, verified on tclsh 9.x and a repo punk kit. The same commands on a real interactive terminal retain colour (manual verification, Windows console plus one unix tty). NO_COLOR=1 still suppresses all colour; a documented force-colour override re-enables colour on piped output. The Tcl 8.6 probe-fallback policy is documented and behaves as decided. The interim src/AGENTS.md NO_COLOR bullet is revised to describe the implemented behaviour.
@ -59,9 +59,15 @@ Agents drive `tclsh src/make.tcl ...` with captured/piped output on every build-
guidance. Remaining manual item: human visual confirmation of colour
appearance on live terminals (the mechanical decision + rendering chain is
fully evidenced above).
- Remains for acceptance: none beyond the recorded manual-visual note; flip is
deferred to the make.tcl-window acceptance pass (with G-112/G-104) so the
layout make.tcl copies sync once for the whole window.
- Window-acceptance close 2026-07-25 (achieved flip): the layout make.tcl
copies synced through the normal thin-layout channels carrying the colour
policy (basic + project-0.1 + templates modpod payload); the
maketclcolour.test suite rode the full punkexe acceptance run green
(54 total, 0 failed). Remaining manual item stands as recorded: human visual
confirmation of colour appearance on live terminals - every mechanical link
(probe decision on real Windows console and WSL pty, colour-on rendering via
the force path, zero-ESC piped on tclsh 9.x + punk kit + 8.6) is evidenced
above.
## Notes
Loading…
Cancel
Save