Tree:
47c9f99eff
master
v0.1a
${ noResults }
6 Commits (47c9f99eff4d64b20c2b0e7a297547f6477c789d)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
47c9f99eff |
G-057 achieved: flip, archive record, reference sweep, owning-doc pointers
Acceptance verified in full on 2026-07-29 (evidence in the detail file's Progress section): windows-host bakes embed the default punkshell.ico into all 10 buildable win32 kits across zip (x64 + ix86), sdx-metakit and stamped-concat assembly, verified by twapi resource inspection byte-matching the source ico; override round-trip proven and reverted; boots for zip, metakit and concat images from scratch copies; linux cross-target kit gets its sidecar with NOT APPLICABLE; the two incapable-host conditions produce their distinct notices in REAL bakes (mingw tclsh86: twapi not loadable; WSL linux cross-bake: cross-host with the G-128 remedy named - and the cross-baked kit boots on windows, the recorded known shortcoming live); idempotence converges; runtime store originals untouched; vendored-twapi no-toolchain arm proven under tclsh9.0.5-punk. Index entry moves to GOALS-archive.md (ID position); the detail-file move to goals/archive/ follows as its own pure-rename commit. Reference sweep: G-023, G-028, G-127 and G-128 notes gain achieved/archive markers plus what each consumes from the delivered mechanism (G-128: the seam now exists - kit_icon_process entry point, sidecar record, cross-host notice naming it as remedy; G-028: the stub-first ordering concentrates the locked-target exposure at deploy, punk9_beta observed). AGENTS.md owning-doc pointers land alongside: src/vfs (override convention), src/runtime (default-icon role + derivation sidecar), src/assets/logo (propagation honesty: G-057 consumes the src/runtime copy - syncing the four build-consumed copies after artwork changes stays deliberate, with assetorigin stale-detection as the drift signal), and an ARCHITECTURE.md build-section bullet (architecture_lint clean). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 days ago |
|
|
e3d4338963 |
G-127 notes: record that its payload/target mismatch clause is already delivered by G-133
Non-contract Notes addition (user-directed). G-133 (achieved 2026-07-27) landed the structural arch scan this goal's Acceptance still asks for: a recapped BUILD-WARNING naming file, found architecture and kit target; no warning for multi-arch platform-subdir packages or recognised vendor spellings; and the scan running for cross-target kits. That covers the clause in full. The clause is deliberately left in place rather than trimmed - trimming an Acceptance is a contract edit - so the note says how to read it: a regression pin on behaviour that already exists, not work to do. It also states the goal's genuine remainder so whoever activates it is not misled about the size: the bin/kits/<platform>/ output split, the per-target payload declaration, and keeping G-133's smoke probe pointed at wherever the relocated artifact lands. Goal, Acceptance and Scope are unchanged. Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com |
3 days ago |
|
|
5a51cd87c4 |
G-133 sweep completion: direct Related pointers for pairs de-bridged by the archive
goals_xref report showed G-127<->G-131 (sole bridge G-133) and G-123<->G-127 (both bridges now archive-tier) as unlinked pairs with real overlap - recorded directly in G-127's Notes per the flip's shared-archived-refs rule. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
4 days ago |
|
|
f5a559038e |
G-133 achieved 2026-07-27: activation + flip + archive record + reference sweep
Activation (user-directed this session) through achieved flip in one lifecycle change-set: index entry moved to GOALS-archive.md (Scope relocated verbatim; title preserved with the [achieved] status transform; Detail: line becomes the archive detail pointer - the standard flip transformations), detail file gains the activation survey Related: notes (G-114 prevention-side sibling, G-128 sibling PE surface), the advisory-as-drafted open-decision resolution, and the full Progress/verification records (live bake evidence on punkluck86/punk91ix86/punk86/punkshell902, the zint real finding, 92.6ms avg scan cost, suite results). Reference sweep pushes the archived file's actionable notes to G-024 (toml schema home), G-131 (one-vocabulary + runtime_caps), G-127 (target-addressing adoption), G-130 (subdir exemption for 32-bit growth), G-123 (publication citation), G-114 (detection-side sibling). Detail file moves to goals/archive/ in the following pure-rename commit. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
4 days ago |
|
|
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 |
|
|
78b6f47805 |
G-127/G-128 drafted + G-057 amended (user-approved): cross-target vfs bake, portable PE stamping, icon sidecar and mechanism seam
Follow-on goals from the G-122 host/target split, each drafted with its overlap survey
and approved before writing. The G-057 contract edit (title, Scope, Goal, Acceptance) was
shown clause-by-clause and approved per the proposal-first rule.
G-057 amended - the goal was drafted before G-122 separated host from target, so its skip
condition read as one host-shaped test ("non-Windows platform skips") while its Notes used
target language. Split in two: a target with no PE resources is NOT APPLICABLE, a windows
target on a host that cannot run twapi is a distinct shortcoming. Both still emit a text
sidecar, now produced for every kit on every target and defined so the parked RT_VERSION
follow-on extends the same file rather than adding a second. Embedding sits behind a
single mechanism seam, and the twapi arm is explicitly PERMANENT - the seam selects
between mechanisms, it does not replace one: twapi is vendored and git-tracked
(src/vendorlib_tcl8|9/win32-x86_64/twapi-5.0b1) and reachable from make.tcl's auto_path,
so a fresh windows checkout that fetches a runtime and bakes gets icons with no build
toolchain (probed under a stock tclsh 9.0.3 and a fetched plain family runtime). The
per-vfs override is settled as shared across a kit definition's targets with no target
dimension.
G-127 - cross-target bake of a custom .vfs. G-122 made the build READ the right runtime
for a target; this makes it WRITE the right kit for one. Three measured gaps: output is
flat, so two POSIX targets of one kit collide (within a run the duplicate guard renames by
RUNTIME not platform; across selective runs exe_names_seen resets and the second
overwrites the first); the payload model is one hand-curated folder per target
(punk9linux.vfs, not a vfslibs participant, with vendorlib_vfs.toml hardcoding the
platform into its source path - a shape inherited from G-037 when there was one target);
and nothing verifies payload against target. Non-native kits go to bin/kits/<platform>/
with native staying at bin/<name>; /bin/* already ignores it so no dual-track ignore work.
Records that G-114 and G-115 overlap yet never reference each other - the platform axis
and the payload axis have never been connected.
G-128 - portable PE resource stamping via a vendored zig tool, plugging into G-057's seam
without retiring its twapi arm. Feasibility measured: zig rc (resinator, bundled in the
0.16 toolchain) is a resource COMPILER supplying the RT_GROUP_ICON/RT_ICON structure
reference, not a patcher - we never link these runtimes, so patching an existing PE is the
work. In our runtimes .rsrc is not the last section (.reloc follows), so the
implementation appends a section and repoints the resource data directory, which shifts
the overlay: safe for an archive-relative zip, not for a file-relative one, so the unsafe
case is refused rather than corrupted. The payoff beyond portability is post-hoc stamping
of a finished kit, which removes G-057's icon-before-append ordering constraint. Its
distribution is settled as buildable from vendored source AND publishable as a punkbin
artifact, so the no-toolchain route need not depend on the committed twapi (the G-004
tension).
Also adds non-contract Related back-pointers in G-057 to G-122/G-127/G-128.
Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com
|
4 days ago |