diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f6a253a..3cbca877 100644 --- a/CHANGELOG.md +++ b/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 diff --git a/GOALS-archive.md b/GOALS-archive.md index 224af6a4..90663b22 100644 --- a/GOALS-archive.md +++ b/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.) diff --git a/GOALS.md b/GOALS.md index bbad2ffc..01cb059c 100644 --- a/GOALS.md +++ b/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 diff --git a/goals/G-146-fossil-binary-glob-seeding.md b/goals/G-146-fossil-binary-glob-seeding.md index 0bad161e..8b14acc2 100644 --- a/goals/G-146-fossil-binary-glob-seeding.md +++ b/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/ 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. diff --git a/punkproject.toml b/punkproject.toml index b2a8e83f..464946c0 100644 --- a/punkproject.toml +++ b/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 -