Tree:
24fe206b56
master
v0.1a
${ noResults }
8 Commits (24fe206b567f3e10a71dcddba58cef6ea70850b0)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
b7c632b670 |
G-125 achieved: a kit that cannot boot is not deployed (punkshell 0.27.0)
The kit machinery already knew when it had failed to extract anything from a source
runtime, and under G-122 that notice became a recapped BUILD-WARNING - but the build
still assembled an artifact, DELETED the deployed kit and copied the new one over it,
closing running instances of the kit first. Field-observed 2026-07-26: an msys2-hosted
bake of punk91 produced a 49,501,792-byte bin/punk91.exe that failed at startup with
"application-specific initialization failed: Cannot find a usable init.tcl", by which
point the previously working kit was already gone. G-124 removed the particular cause;
this removes the class. A build tool should not make a working executable worse.
A bake now 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.
The gate sits immediately after the _vfscommon.vfs + <kit>.vfs merges and before the
kit-type assembly switch, the last point at which no build product exists; a refusal
appends to failed_kits, ends the punkcheck event FAILED and continues, so the punkcheck
records stay consistent with what is on disk. The merged src/_build/<kit>.vfs tree is
deliberately left behind - it is the evidence for the refusal.
It gates on the BOOT PRECONDITION, not on the extraction step having run. Some .vfs
folders legitimately supply their own tcl library (src/vfs/punk8_statictwapi.vfs,
punk9test.vfs and mkzipfix.vfs do today), and those must keep building - so the check
reads the merged tree. It is structural and executes nothing, which also makes it valid
for cross-target kits this host could never run, and costs 0.63ms per kit (measured over
200 iterations against the real src/_build/punk905.exe.vfs), so it runs unconditionally.
The predicate is punkboot::utils::vfs_boot_library_report (0.2.0 -> 0.3.0), called through
a guarded require modelled on the existing get_src_provenance_warnings: a stale or missing
bootsupport snapshot degrades the gate to a NOTE rather than failing every kit. Both
branches were observed live - before the bootsupport propagation 'make.tcl check' reported
UNAVAILABLE, after it ACTIVE. Scope was extended at activation (user-approved) to put the
predicate in that module rather than private to the build script, because a gate that
cannot be exercised cannot be characterized, and punkboot::utils is already where
make.tcl's provenance gate helper lives.
What qualifies as a tcl library: tcl_library/init.tcl (zipfs-attached kits) or
lib/tcl<major>.<minor>/init.tcl (starkit-style), AND at least one companion file beside it
(tm.tcl, package.tcl, auto.tcl, clock.tcl, history.tcl, word.tcl) or an encoding/
directory. The companion test is load-bearing: every punkshell kit carries
lib/BWidget1.10.1/init.tcl, so a check that looked for any init.tcl anywhere would pass a
kit with no tcl library at all. lib/tcllib2.0 is correctly not matched by the lib/tcl[0-9]*
glob. Verified against all 10 assembled trees in src/_build - both conventions are
represented (tcl_library for punk902z/punk905/punk91/punk9_beta/punk9bi_beta/punkmagic,
lib/tcl8.6 for punk86/punkbi/punksys, lib/tcl9.0 for punkshell902).
The no-extraction BUILD-WARNING was reworded from "will not initialise unless src/vfs/<x>
supplies one" - a consequence the build then ignored - to "will FAIL the boot-precondition
gate unless src/vfs/<x> supplies one". It stays a warning rather than becoming the failure,
because a .vfs that supplies its own library needs no extraction.
Verified 2026-07-27 end-to-end against a temporary fixture kit (a mapvfs entry pointing a
zip kit at a payload-free runtime, plus a vfs with no tcl library), with sentinel files
standing in for a previously deployed kit and a previous build product. Across the failing
run bin/punkgatefixture.exe (sha1 2a0700eb...) and src/_build/punkgatefixture.exe (sha1
12c50567...) were byte-identical with unchanged mtimes, and the kit was reported under
FAILED KITS with the cause named. Adding tcl_library/{init.tcl,tm.tcl} to that same fixture
vfs - extraction still yielding nothing - made it build and deploy normally, which is the
other half of the criterion. The fixture was removed afterwards and mapvfs.config restored
byte-identical to its backup. Real-kit bake through the gate: punk905 builds, deploys and
boots.
Characterization: 12 tests in modules/punkboot/utils/testsuites/utils/bootlibrary.test
(both conventions, the companion-file requirement and its BWidget decoy, near-miss
reporting, missing/empty trees, and a sweep asserting every assembled src/_build/*.vfs
tree still passes so the gate cannot fail kits that boot today) and 2 in
shell/testsuites/punkexe/maketclbootgate.test (the ACTIVE/UNAVAILABLE report, ESC-free per
the G-113 piped policy). Existing punkexe suites pass unchanged.
Documented in src/AGENTS.md with the remedy when a kit is refused, in ARCHITECTURE.md
beside the provenance gates, and in the embedded 'make.tcl workflow' data flow as key note
K10 (verified under the default and PUNKBOOT_PLAIN=1 paths, within the 100-column budget).
The achieved flip archives the entry and the detail file, and sweeps the live tier: G-127
(its output location inherits the never-written guarantee as long as the gate stays
upstream of the artifact write, and its payload/target mismatch reporting should share this
vocabulary), G-028 (the sibling "why bin/<kit> was not updated" surface in the same deploy
step) and G-101 (a new container type must land its library where the gate looks, or extend
the location list).
Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com
|
4 days ago |
|
|
c172912f4b |
G-121 achieved 2026-07-26: flip + archive record + reference sweep
Acceptance verified in full (evidence recorded in the detail file's Progress section): bakelist under plain tclsh + punk902z with per-entry presence and deployed state; selective 'bake punk91' refreshing only that kit's _build/bin artifacts and punkcheck records (stat + punkcheck diffs, negative grep clean); unknown-name no-build errors; bare bake kit-set parity; help/workflow contract updates; maketclbakelist.test 4 PASS; punkshell 0.24.0 minor bump. Index entry moved to GOALS-archive.md. Reference sweep: no pending-tense live-tier mentions existed; mapvfs.config pointer updated to the archive path; forward-pointing notes pushed as back-pointers to the live goals they serve (G-024 parsed-model reader swap, G-023 scheme-expansion entry point, G-115 per-kit payload detail, G-057 single-kit icon verification, G-028 deployed -state reporting sibling, G-101 kit-type non-assumption). Detail-file move to goals/archive/ follows in the adjacent commit as a pure rename (root AGENTS.md Doc Restructures). Claude-Session: https://claude.ai/code/session_01Jz7wkUsknJzyuJ3tgMaL2t Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
5 days ago |
|
|
d3dcc31dc4 |
goals system v2: semicolon Scope delimiters, version marker, lint delimiter check
- GOALS.md: "Goals-system: v2" front matter; canonical "Goals system versions" section; Scope structure rule (elements separated by '; ' at top level, commas only inside parens/braces); Child DOX Index note in root AGENTS.md - goals_lint.tcl: new finding for top-level commas in Scope lines (paren/brace depth-aware) - goals_xref.tcl: repo-local configuration via goals/xref.conf (path roots, stop words, file extensions, reference containers, module dirs, bare_path_roots, prefix_anchors); defaults byte-identical to previous behaviour (verified on this tree) - goals/AGENTS.md: cross-repo goal references drop the G- prefix; xref.conf documented in Verification - Scope delimiter normalisation across GOALS.md, GOALS-archive.md and all detail files, live and archived: 224 lines, top-level commas only; conservation verified (goals_xref report byte-identical pre/post, diff hunks are Scope lines only). Archived tier converted under explicit user approval; sanctioned exception recorded in GOALS-archive.md. Assisted-by: harness=opencode; primary-model=openrouter/moonshotai/kimi-k3; api-location=openrouter.ai |
6 days ago |
|
|
6a69cbf85c |
goals: xref reconciliation - kit/launcher/modpod cluster (G-019 G-023 G-028 G-029 G-031 G-057 G-077 G-089 G-109 G-111, recorded 2026-07-24)
Assisted-by: harness=opencode; primary-model=openrouter/moonshotai/kimi-k3; api-location=openrouter.ai |
7 days ago |
|
|
d0bfefdbcb |
G-095 achieved: punkcheck concurrent-writer safety (verification recorded); project 0.17.3
Acceptance verified in full (evidence in the detail file's Progress section): concurrency suite green on Windows Tcl 9.0.3 (runtests) and Tcl 8.6.17 (direct tcltest drive) plus a linux WSL tclsh 8.6.14 run from a native-filesystem staging - two-writer no-corruption/no-loss with a clean polling reader, lock timeout naming the holder, dead-pid and age stale-breaks, non-interactive duplicate-INSTALLER recovery. Real builds under the re-vendored 0.6.0 run with zero lock timeouts, zero tripwire warnings and unchanged decisions. Index entry moved to GOALS-archive.md; reference sweep: G-027's punkcheck note updated to achieved tense, G-028 gains the advisory-lock name-the-blocker precedent pointer. Detail file moves to goals/archive/ in the adjacent commit (pure rename). punkproject.toml 0.17.3 + CHANGELOG entry. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
ca95e134d2 |
goals: weave 2026-07-14 session residue - G-082 proposed (punk::args error selection), sibling notes in G-025/G-028/G-073/G-075
New proposed goal G-082: single-form parse error selection should prefer an optional argument's specific choice/type rejection over the generic "more values than can be assigned" overflow (regression vs punk::args 0.5.0 found while dogfooding in G-030; the -optional 0 workaround sites in make.tcl and the AGENTS authoring-ergonomics bullet are flagged for revisiting when it ships). Sibling notes parked in existing proposed goals: - G-028: make.tcl's name-only process-sweep misidentification (unrelated same-named executables) - full-path matching rides the same process-identification infrastructure as the locker report. - G-025: punk-exe-hosted make.tcl runs the kit's pre-loaded module copies, not bootsupport snapshots - a self-report surface for running-interp module provenance would make the mixing observable. - G-073: reciprocal relation to G-082 (both want the "surface the specific rejection" seam in validation error reporting). - G-075: synopsis renders the definition id rather than @cmd -name - consider a fallback for non-command ids when reworking id rendering. goals_lint: unchanged (only the pre-existing G-078/G-081 index-mirror findings). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
ae04b3f8c9 |
GOALS: two-tier index restructure - summary-only GOALS.md, canonical Goal/Acceptance in detail files, archive-on-flip
- GOALS.md collapsed to summary entries (ID/status/title/Scope/detail pointer): 104.6KB -> 23KB so a full read stays cheap; Scope lines kept verbatim so path-grep goal discovery still works - canonicality split: index canonical for ID/status/title/Scope, detail file canonical for Goal:/Acceptance:; all 61 detail-file headers reconciled from the index (fixes stale copies, e.g. G-036 detail acceptance predated the achieved rework), bodies preserved untouched - detail files created for the three index-only goals G-017, G-034, G-054; every goal now has one - 10 achieved goals (G-007 G-015 G-036 G-037 G-040 G-046 G-049 G-054 G-058 G-059) archived: summary records appended to GOALS-archive.md, detail files moved to goals/archive/; archive-on-flip replaces the ~30-achieved-entries trigger - GOALS.md preamble/rules reworked: read workflow (read index in full, then detail files of scope-intersecting goals before editing), contract spans both tiers with proposal-first unchanged, next-free-ID counts the archive, achieved flip judged against the detail-file Acceptance and includes archiving - progress convention codified from G-001 increment-1 practice: index entries carry status only, never progress; incremental progress lives in the detail file's ## Progress section (landed/remaining); achieved flip requires the remaining-work list resolved - a partial increment never flips a goal - goals/AGENTS.md rewritten for the split (required 4-field header, one detail file per goal, orphan rules covering archive/); root AGENTS.md Child DOX Index + Repo-wide Notes updated; GOALS-archive.md preamble updated - stale detail-file paths updated to goals/archive/ in src/lib/app-punkscript/punkscript.tcl (comment), runtimebash_wsl.test, wslprobe.tcl and the G-042 detail file; propagated copies (root lib/, src/vfs/_vfscommon.vfs, src/_build) left to refresh via normal build steps - no project version bump: governance docs and source comments only, no user-visible shell behaviour Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
3 weeks ago |
|
|
64fa9a63a7 |
add goal G-028: name the process locking a file on build deploy failures
Motivated by a make.tcl project deploy failure ("could not delete target
binary") where the locker turned out to be 7-Zip inspecting the exe -
identifying it took several dead ends because Windows has no cheap
file-to-process reverse lookup (name matching and Process.Modules scans
both miss plain file handles; openfiles needs a pre-enabled global flag;
handle.exe is external and elevation-bound).
G-028: a punkboot::utils helper returns the locking processes via the
Windows Restart Manager API (the installers-grade answer to "who is
blocking this file"), with twapi or cffi required lazily at call time -
punkboot::utils stays pure Tcl per the bootsupport no-compiled-extensions
contract, and unavailability degrades to the existing message. make.tcl
kit deploy failures append the locker report when determinable. Recurring
customer: G-023 versioned/dev binaries rewritten every build.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
3 weeks ago |