Browse Source

Goals: G-146 activated + achieved 2026-08-02 (user-directed) -> archive; punkshell 0.41.4

Single-session lifecycle: user-directed activation (activation-freshness xref
survey recorded in the detail file), implementation, acceptance verification.
Acceptance met: punk.project + punk.basic (plus minimal/sample-0.1) trailing
fossil initial commits complete cleanly with FOSSIL_HOME diverted; generated
projects carry versioned binary-glob; seeding path decided (hand-authored
per-layout payload, derivation rejected as semantic coupling) and documented;
G-136 relationship recorded. Companion crlf-glob finding and decisions in the
detail file. Index entry archived to GOALS-archive.md; the detail file's
goals/ -> goals/archive/ move follows as a pure rename. punkproject.toml +
CHANGELOG 0.41.4 (patch: generated-project fix).

Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
master
Julian Noble 1 week ago
parent
commit
0817343f84
  1. 9
      CHANGELOG.md
  2. 4
      GOALS-archive.md
  3. 4
      GOALS.md
  4. 87
      goals/G-146-fossil-binary-glob-seeding.md
  5. 2
      punkproject.toml

9
CHANGELOG.md

@ -5,6 +5,15 @@ 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.41.4] - 2026-08-02
- Generated projects complete their trailing fossil initial commit (G-146):
every vendor/punk layout seeds .fossil-settings/binary-glob (*) plus a
crlf-glob covering src/embedded/*, src/bootsupport/* and bin/*, so the
binary payloads generation injects (zip-based .tm modules, bin/sdx.kit)
and CRLF-carrying injected bootsupport files no longer prompt/abort the
commit.
## [0.41.3] - 2026-08-02
- punk::args 0.14.0 (G-152): multiform parse failures now report a sound

4
GOALS-archive.md

@ -286,3 +286,7 @@ Acceptance: 'make.tcl help tool' shows per-action synopsis lines (list; info; bu
### G-152 [achieved 2026-08-02] punk::args form-failure suffix-viability verdict (completion-grade classification) → detail: goals/archive/G-152-punkargs-form-viability-verdict.md
Scope: src/modules/punk/args-999999.0a1.0.tm (multiform failure classification + noformmatch errorcode/formstatus consumer contract + render marking); src/tests/modules/punk/args/testsuites/args/
Acceptance: against a tool-shaped multiform definition (literal action leaders; the info form requiring a value), parse of {info} reports form info viable and list/build/test non-viable; parse of {frobnicate} reports NO form viable (today's false 'incomplete' on the info form is gone); parse of {build -bogus} reports no form viable; the class vocabulary and errorcode/formstatus shape carrying the verdict are documented as a consumer contract in the module's own argdoc/doc surface; the rendered noformmatch output visibly distinguishes viable form(s) from impossible ones; existing args-suite pins pass unchanged apart from deliberately updated classification pins; the new verdicts are pinned in the args testsuite.
### G-146 [achieved 2026-08-02] Fossil binary-glob seeding for generated projects (initial commit completes) → detail: goals/archive/G-146-fossil-binary-glob-seeding.md
Scope: src/project_layouts/ (.fossil-settings payloads); src/make.tcl (thin-layout sync, if derivation chosen); src/modules/punk/mix/commandset/project-999999.0a1.0.tm (generation-time fossil commit path)
Acceptance: dev project.new from each binary-affected layout (project-0.1, plus one injection-only layout e.g basic) completes its trailing fossil initial commit cleanly (FOSSIL_HOME diverted, no binary prompt/abort); the generated project's versioned .fossil-settings carries binary-glob with the recorded value; the seeding path (hand-authored per layout vs derived via the make.tcl template refresh) is decided and documented in this file; the G-136 relationship (icon payload is binary - same abort class) is recorded. (Achieved with a companion crlf-glob payload extension: a second abort class - CRLF endings on injected bootsupport content - surfaced once the binary aborts were fixed; decisions and verification in the archived detail file.)

4
GOALS.md

@ -394,10 +394,6 @@ Detail: goals/G-141-libfetch-target-selection.md
Scope: punkbin artifact repo (external c:/repo/jn/punkbin - layout contract, src/build_sha1sums.tcl, per-tier listing manifests); src/scriptapps/bin/ (punk-runtime payloads); bin/punk-runtime.cmd (regenerated output) + bin/AGENTS.md; src/tests/shell/testsuites/binscripts/; src/make.tcl (libfetch coordination)
Detail: goals/G-142-punkbin-listing-manifests.md
### G-146 [proposed] Fossil binary-glob seeding for generated projects (initial commit completes)
Scope: src/project_layouts/ (.fossil-settings payloads); src/make.tcl (thin-layout sync, if derivation chosen); src/modules/punk/mix/commandset/project-999999.0a1.0.tm (generation-time fossil commit path)
Detail: goals/G-146-fossil-binary-glob-seeding.md
### G-147 [proposed] libfetch revision check: read-only report of newer server revisions for declared artifacts
Scope: src/make.tcl (libfetch check/report surface); src/runtime/libpackages.toml (declared revisions as input); src/tests/shell/testsuites/punkexe/maketcllibfetch.test (characterization); bin/AGENTS.md + src/runtime/AGENTS.md (report documentation)
Detail: goals/G-147-libfetch-revision-check.md

87
goals/G-146-fossil-binary-glob-seeding.md

@ -1,6 +1,6 @@
# G-146 Fossil binary-glob seeding for generated projects (initial commit completes)
Status: proposed
Status: achieved 2026-08-02
Scope: src/project_layouts/ (.fossil-settings payloads); src/make.tcl (thin-layout sync, if derivation chosen); src/modules/punk/mix/commandset/project-999999.0a1.0.tm (generation-time fossil commit path)
Goal: a project generated from any punkshell layout completes its trailing fossil initial
commit with no binary-content prompt or abort - the layout's .fossil-settings payload
@ -41,6 +41,84 @@ without prompts.
punkshell's own .fossil-settings/binary-glob via the G-012 template-refresh machinery
(a second derived payload class after gitignore.in).
## Decisions (2026-08-02)
- Value: binary-glob=* (with an explanatory comment header). A narrow glob would need
maintenance every time a payload class grows, and the failure mode of a stale narrow
glob is exactly the generation-time abort this goal removes; * also pre-covers the
G-136 icon seed (.ico is binary-class). Generated projects own their policy and can
tighten later.
- Seeding path: hand-authored per-layout payload. Derivation from punkshell's own
.fossil-settings/binary-glob (the G-012 gitignore.in pattern) was REJECTED as
semantically wrong, not just unnecessary: punkshell's own glob is repo policy that may
legitimately narrow in a G-004-era binary-free tree, while the generated-project value
must keep covering the binary content generation injects regardless - the two values
only coincidentally agree today. No make.tcl change (the Scope's "if derivation
chosen" arm was not taken; the existing modpod payload sync already carries .fossil-*
as layout content unchanged - make.tcl sync_layouts, exclude override).
- Coverage: all four vendor/punk layouts seeded uniformly (project-0.1 and minimal
already had .fossil-settings/ dirs; basic and sample-0.1 gained them, carrying only
the two new glob files). Derived (name@base) and custom-tier layouts inherit via the
overlay chain, so every layout the store can compose generates with the settings.
- CRLF companion (finding): with the binary abort fixed, a SECOND abort class surfaced
behind it - fossil's CRLF prompt on injected bootsupport content
(src/bootsupport/modules/voo-1.0.0.tm arrives with the generating shell's CRLF
endings; binary-glob=* does NOT suppress the CRLF warning class - measured, consistent
with the 2026-07-15 tablelist observation in punkshell's own tree). The layouts'
crlf-glob (previously src/embedded/* only, and absent from basic/sample-0.1) is now a
uniform payload covering src/embedded/*, src/bootsupport/* and bin/* - the trees whose
content the project owner does not author. crlf-glob=* was considered and rejected:
unlike the binary case, keeping fossil's CRLF warning on owner-authored files is
useful (punkshell's own posture is the same: narrow crlf-glob, wide binary-glob), and
the covered payload trees are structurally confined (injection targets bootsupport
only; bin/ carries layout-shipped utilities).
## Progress
- 2026-08-02 baseline reproduced (pre-fix): dev project.new g146p1 -layout punk.project
with HOME/FOSSIL_HOME diverted ends with 'Commit anyhow (a=all/y/N)?' EOF-aborting:
"Abandoning commit due to binary data in ./bin/sdx.kit" -> "fossil commit ... FAILED";
generated project had no .fossil-settings/binary-glob. (First-of-N abort: with binary
covered, the voo-1.0.0.tm CRLF abort was next - see Decisions.)
- 2026-08-02 landed: .fossil-settings/binary-glob (commented *) in all four vendor/punk
layouts + uniform crlf-glob (src/embedded/*, src/bootsupport/*, bin/*) replacing the
two src/embedded/*-only copies and absent-in-basic/sample files. No code changes:
project.new already installs layout .fossil-settings into generated projects
(project-999999.0a1.0.tm, exclude-override install), and make.tcl's store->modpod sync
already carries .fossil-* (verified: modpod punk.project copy received both files
byte-identical on the next 'make.tcl modules').
- 2026-08-02 acceptance verification (bin/punk91 src script driver, fresh scratch base
per run under c:/T/g146/<n> with exactly one .fossils subdir, HOME+FOSSIL_HOME
diverted, piped stdin so any prompt aborts):
- punk.project -> g146p1: "fossil commit ... OK", '-done-' reached; 342 files in the
initial commit including bin/sdx.kit and injected zip-based
src/bootsupport/modules/modpod-0.1.5.tm; all five .fossil-settings files tracked;
post-commit 'fossil changes' and 'fossil extras' both empty.
- punk.basic (injection-only layout) -> g146b1: commit OK; 251 files including the
injected zip-based modpod-0.1.5.tm (confirming basic is binary-affected through
injection alone); binary-glob + crlf-glob tracked; changes/extras empty.
- punk.minimal and punk.sample-0.1: commit OK, binary-glob present, changes/extras
empty (beyond-acceptance coverage).
- 'fossil test-commit-warning' in the interim (binary-glob-only) punk.project
checkout enumerated exactly one remaining would-warn file - voo-1.0.0.tm CRLF -
confirming the seeded binary-glob silences the whole binary class.
- MEASURED: fossil honours the checkout-root versioned settings files at the very
first commit while they are still uncommitted adds - the seeding works with no
ordering caveat.
- Layout machinery unaffected: materialize testsuite 25/25 PASS (runtests
materialize.test, native tclsh90); goals_lint clean.
- Agent E2E driver traps (recorded for reuse; driver in the session scratchpad):
scratch base path must be [file normalize]d - a lowercase c:/ drive letter presents
the same .fossils folder as two repodb candidates and the chooser prompt aborts under
piped stdin; the script must package require punk::mix::commandset::module as well
(default -modules creates a project module) alongside cap/templates/cli/layout/project.
- G-136 relationship (per acceptance): the icon seed is binary-class payload; the
seeded binary-glob=* covers it the moment G-136 lands - its acceptance no longer hits
the abort class this goal removed.
- 2026-08-02 acceptance met in full; flipped achieved and archived (index entry to
GOALS-archive.md, detail file to goals/archive/). Live-tier reference sweep: no
pending-tense G-146 references existed outside the index entry itself.
## Related
- G-136 (icon seeding injects binary .ico assets - its acceptance hits the same abort
@ -61,3 +139,10 @@ src/make.tcl src/modules/punk/mix/commandset/project-999999.0a1.0.tm + report un
list): relationships as above; G-031 (layout payload, no binary content) and the
project-commandset path-anchor hits (G-016 G-014 G-066 G-063 G-067 G-022) surveyed -
no relationship.
Activation-freshness survey 2026-08-02 (goals_xref score G-146, re-run at the
user-directed activation): all pairs at/above 0.35 already carried in Related
above; the remaining hits (G-034, G-089, G-101, G-065, G-020) are
path-anchor/term-only coincidences (shared project.tm path or the bare term
'binary') with no goal relationship - nothing new to record. No goal drafted
since the 2026-08-01 survey scores against this one.

2
punkproject.toml

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

Loading…
Cancel
Save