@ -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.