Tree:
bda1e1873c
master
v0.1a
${ noResults }
972 Commits (bda1e1873ca1cba1d94fb25e3a33d42c5e678523)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
a8f402e274 |
thin-layout sync catch-up: G-139-era make.tcl copies + samplesuite1 retirement
make.tcl modules regeneration of punkcheck-managed outputs: the layout
src/make.tcl sync copies (basic, project-0.1, modpod payload) pick up
the G-139-era libfetch/vfslibs help + workflow text, and the modpod
layout payload mirror-prunes the samplesuite1 sketch retired in
|
1 week ago |
|
|
a71d7bd377 |
buildsuite artifact identity fields default from punkproject.toml (punkshell 0.37.0)
G-117/G-123 lineage: project, project_url and packager in emitted punkbin-artifact.toml records (runtime family + library tier, both suites) now default from the enclosing project's punkproject.toml [project] table via a bounded walk-up from the build root (common.punkprojectField) - a copied suite reads its own project's manifest. Chains: project: -Dproject > manifest name > "punkshell" (was hardcoded); project_url: -Dprojecturl > manifest url > "unrecorded"; packager: -Dpackager > PUNKBIN_PACKAGER > manifest packager > git identity > fossil user default (new fossil-only fallback) > "unrecorded". Verified end-to-end: suite_tcl90 kit-family + library emissions and the suite_tcl86 library emission carry the manifest values, -D overrides win, family_check green. Root punkproject.toml gains an active url; dev project.new's seeded manifest now carries commented url/packager placeholders documenting the consumption site (punk::mix::commandset::project 0.4.1). Assisted-by: harness=opencode; primary-model=huggingface/moonshotai/Kimi-K3; api-location=unknown |
1 week ago |
|
|
670ab78dd8 |
G-123 increment 5: consent surface + e2e demonstration + acceptance walk (punkshell 0.36.0)
fetch now surfaces the artifact's build-origin class in its report
("provenance: class=<c>" after sidecar retrieval, table-aware read,
both payloads, re-wrapped, pinned in runtimecmd_provenance.test) -
the acceptance's consent-surface clause.
END-TO-END DEMONSTRATION (live, fully reverted): fixture punkbin
served via httpfixture with a suffixless testplat-x86_64 runtime; the
committed bin/punk-runtime.cmd fetched fakert-suite-r1 (-platform +
-trust-server; sha1 ok, sidecar + provenance line) and 'use -platform'
materialized the working copy; a temporary mapvfs entry wired it to a
bakelist row: runtime file bin/runtime/testplat-x86_64/fakert-suite
(present), target=testplat-x86_64 - with the .exe-named negative half
(runtime=missing) captured first. Config reverted, tier removed, tree
verified clean. Live canonical evidence also captured: unattended
fetch of tclsh9.0.5-punk-r2.exe from the real origin ran gate-free
(published r2 hash matched).
Full battery: provenance 5/5, freshness + checkfile 12/12,
runtimebash_wsl PASS, dtplite 8/8 (after its separate 0.35.1
pre-existing-fallout fix), roundtrip byte-identical under the punk
baseline runner. Acceptance walk recorded item-by-item in the goal
Progress - every item evidence-satisfied; user-gated follow-throughs
(punkbin push + classification review; index Scope ps1-path
correction) recorded as outside acceptance.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
1 week ago |
|
|
e26489fd57 |
dtplite fallback: deployed lib_tcl9 tree replaces the retired vendored tcllib (punkshell 0.35.1)
G-139's vendored-tree removal (
|
1 week ago |
|
|
643ac3aa37 |
G-123 increment 4: provenance/gate characterization + bare-name sidecar fetch (punkshell 0.35.0)
Payload fix, both payloads (found designing the coverage): fetch only retrieved beside-toml sidecars for -r<N> family names, so a fetched bare-named third-party artifact arrived WITHOUT the retroactive record its class display depends on. fetch now tries the sidecar for ANY name; absence stays tolerated (no-basis degradation unchanged). bin/punk-runtime.cmd re-wrapped. NEW binscripts suite runtimecmd_provenance.test (5 tests, both payload routes, httpfixture non-native tier testplat-x86_64: suite-built -r1 family artifact + bare third-party artifact with a retroactive-style schema-v2 sidecar + a record-less artifact): server-trust gate refusal from the non-canonical origin (canonical url + -trust-server named, no artifact lands), -trust-server flag fetch including sidecar retrieval, PUNKBIN_TRUST_SERVER=1 unattended form, class= tags in list -remote + plain list (third-party tagged, suite-built quiet, record-less untagged), and info schema-v2 fields + provenance_class row with the flat 'class = runtime' ordering-caveat pin and record-row parity between payloads. All green: new suite 5/5; pinned checkfile + freshness 12/12; roundtrip byte-identical under the tclsh9.0.5-punk baseline runner. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
bc22def1dc |
G-123 increment 3: punk-runtime server-trust consent gate (punkshell 0.34.0)
fetch - the executable-retrieving act - now gates at entry when the origin is non-canonical (PUNKBIN_URL override): the explicit -trust-server flag or PUNKBIN_TRUST_SERVER=1 env (unattended form) is the acknowledgement, one vocabulary with make.tcl libfetch's gate (G-139). The canonical punkbin origin gates nothing (G-058's unattended tclsfe constraint fetch is unchanged); metadata-only actions (list -remote, platforms -remote) never gate; never an interactive prompt. Refusal wording mirrors libfetch's. ps1: -trust-server is pre-scanned before parameter binding (hyphenated dynamic-parameter names are fragile under the PS 5.1 binder the windows wrap routes through). Trap recorded in the goal Progress: a ps1 comment line must never BEGIN with the word 'requires' - PowerShell parses '#requires ...' as the #Requires statement and fails the whole file (found by the powershell.exe 5.1 smoke). runtimecmd_freshness.test: env seam gains PUNKBIN_TRUST_SERVER=1 + the matching teardown unset (the fixture is a non-canonical origin, so its fetch-driving tests need the unattended acknowledgement) - flagged as a test-contract edit in the goal Progress; every existing assertion unchanged and passing. Gate refusal characterization lands with the increment-4 fixture coverage. Payload growth pushed template label :exit_multishell onto a 512-byte cmd label-scan boundary - checkfile caught it as designed; fixed via a +16-byte spacer line (the documented knob). bin/punk-runtime.cmd re-wrapped. Verification: gate smokes in both payloads (refusal + both acknowledgement forms; ps1 under powershell.exe 5.1); checkfile 0 ERROR; pinned tests all PASS (checkfile + freshness 12/12, roundtrip byte-identical under the tclsh9.0.5-punk baseline runner). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
2af2364947 |
G-123 increment 2: punk-runtime provenance display + bash info -platform fix (punkshell 0.33.0)
Both payloads gain a TABLE-AWARE [provenance] class reader
(provenance_class() awk helper / Get-PunkRuntimeProvenanceClass) - the
flat first-wins field scans deliberately keep reporting [artifact] class
per the documented schema-v2 ordering caveat. Display: compact
class=third-party|local tag in the plain-list metadata summary and in
list -remote's sparse identity column (suite-built stays quiet; LOCAL
record basis only - a listing does no per-row remote fetches, toml-less
and remote-only rows keep degrading as no-basis rows); info gains the
v2 fields builder/source_url/upstream_ref/retrieved in the flat table
plus a derived provenance_class row, disagreement-checked; help texts
updated to the v1/v2 wording.
bash defect fixed: 'info -platform <p>' was advertised in both help
texts but silently ignored - 'info' was missing from the option-scan
action list (punk-runtime.bash case arm). The per-name report now
honours the tier argument like the ps1 payload (proven by the
tier-named not-found path).
bin/punk-runtime.cmd re-wrapped via the documented multishell
invocation under punk905. Verification: bash -n clean; staged v2
third-party fixture smoke shows parity output in both payloads
('[tcl=9.9.9 class=third-party]' + provenance_class row);
runtimecmd_checkfile PASS (no 512B label crossing after payload
growth); runtimecmd_freshness PASS (13 fixture tests, both routes);
runtimecmd_roundtrip PASS byte-identical under the tclsh9.0.5-punk
baseline runner (plain native tclsh lacks struct::stack for tomlish -
runner-choice trap noted in the goal Progress).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
1 week ago |
|
|
f37d971403 |
G-123 increment 1: runtime artifact records to schema v2 (provenance class)
family_artifacts.tcl and the build905.zig embedded-record literal move schema 1 -> 2, adding [provenance] class = "suite-built" with the lib-tier ordering-caveat comment (G-138 lineage - [artifact] class stays the first 'class =' line; whole-text single-key scanners see that one). The embedded-vs-sidecar consistency gate expects v2, and family_check.tcl asserts embed_schema 2 plus the literal 'class = "suite-built"' line (its flat scanner would see [artifact] class first, per the caveat). Verified: zig ast-check clean, both tools parse; functional family-build proof is the next step - published v1 records stay valid pre-v2 records, v2 appears from the next family revision. Companion punkbin commit 1f10390 (local, unpushed): 12 retroactive schema-v2 sidecars covering every pre-family runtime artifact across the five tiers, evidence-based classes (binary markers, punkbin git history, live kit probes), additive-only (artifact bytes + sha1 rows unchanged), AGENTS.md runtime-v2 section + README refresh. Goal Progress records the baseline survey findings (tier argument already present on fetch/list/use; bash 'info -platform' defect; no client-side server-trust gate; ps1 Scope path correction pending user approval). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
4f753264b2 |
punk-runtime: strip CR before sha1sums lookups in the bash payload (punkshell 0.32.3)
fetch and list's local-file comparison anchored runtime names at end-of-line without stripping CR first, so a CRLF-published server sha1sums.txt aborted fetch with "Unable to locate hash" on strict grep platforms (GNU and BSD grep; cygwin grep tolerates CRLF, and the ps1 payload is immune via Get-Content line splitting). Both lookups now share the tr -d '\r' form list -remote already used. bin/punk-runtime.cmd regenerated via the scriptwrap machinery; the re-wrap invocation in src/scriptapps/AGENTS.md is corrected to the working -force 1 -askme 0 form found during regeneration. Assisted-by: harness=opencode; primary-model=huggingface/moonshotai/Kimi-K3; api-location=unknown |
1 week ago |
|
|
7fc15cd5ad |
G-140 achieved: linux lib-tier emission - cross-built tcllibc for punk9linux (punkshell 0.32.2)
suite_tcl90: critcl_zig.config gains the linux-x86_64-zig cross target (zig cc -target x86_64-linux-gnu.2.17 - the dynamic-glibc floor decision, recorded in the goal file and fed to G-105). build905.zig gains the tcllibc-linux step (critcl driver on the windows suite shell, stubs linkage, no linux host; uuid.tcl excluded matching upstream's own native-linux package shape) gated by the new tools/elf_gate.tcl (G-133-equivalent ELF64/LSB/ET_DYN/x86_64 structural check - the load-smoke stand-in for cross lanes). library-artifacts emits lib/linux-x86_64/tcllibc-tcl9-r<N>.zip in the same run: target = linux-x86_64, build_host_platform = win32-x86_64, full provenance set, deliberately no [tests] section. build_id seeds now include the tier path so same-named artifacts in different target tiers get distinct identity digests (both suites' tool copies kept byte-identical). Step lists (build905.zig -Dsteps default, suite.tcl) and README document the lane and invocation. Consumption: libpackages.toml declares tcllibc-tcl9-linux (target linux-x86_64); vendorlib_vfs.toml install.tcllibc_tcl9_linux switches punk9linux.vfs/lib_tcl9 - replace retires the hand-dropped tcllibc, supersedes removes the stray tcllibc2.0 - so the last provenance-less accelerator hand-drops in any kit payload are gone. punkshell902 baked (G-133 payload arch scan: 6/6 match target linux-x86_64) and WSL-verified: materialized-tier accel smoke plus baked-kit smokes (default paths + a pinned variant proving the kit's own lib_tcl9 artifact tree loads with the accelerator engaged). Finding recorded: the tclkit-902 runtime bundles its own lib/tcllibc2.0 which wins default precedence - the origin of the retired stray folder name. Determinism: back-to-back re-emission byte-identical for all three artifacts; the zig Run session-env cache finding extended (FOSSIL_HOME and invocation mode churn the key; the linux ELF .so observed bit-stable across critcl re-runs, unlike the windows PE). Goal flipped achieved with evidence in the detail file; G-105 notes carry the libc decision as prior art. Docs: buildsuites AGENTS.md child index, ARCHITECTURE.md buildsuites paragraph, CHANGELOG + punkproject 0.32.2. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
d50115517f |
libfetch characterization test + isolation seams (punkshell 0.32.1)
make.tcl libfetch gains env-only isolation seams - PUNK_LIBFETCH_CONFIG (alternate declarations file) and PUNK_LIBFETCH_PACKAGES (alternate tier root), the PUNK_RUNTIME_PLATFORM idiom - so fixture/mirror runs never read the real declarations or write the real bin/packages tier. Neither seam bypasses the -trust-server consent gate. New shell/testsuites/punkexe/maketcllibfetch.test (piped maketcl* harness + testsupport/httpfixture.tcl + a file:// mirror; the canonical origin is never contacted) pins the G-139 behaviours that previously had only manual session evidence: the server-trust gate refusing non-canonical origins with exit 3 before any network access or tier write, -serverurl-over-PUNKBIN_URL precedence, consented fetch/verify/materialize (sha1sums + zip + sidecar + installed-shape tree with embedded record), idempotent re-run vs -force, declared-revision-change re-materialization keyed to the tree record (with the sidecar-not-listed note lane), sha1-MISMATCH rejection without residue, missing-from-server-sha1sums failure, and the no-config no-op. 8/8 pass in both runner modes (singleproc + -jobs); full punkexe subtree green (93 runnable, 0 failed); the real bin/packages tier verified untouched. Also refreshes the stale src/runtime/libpackages.toml header (r1 IS published as of 2026-07-30; the G-139 reference now points at the archive) and documents the seams there and in the libfetch help text. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
47cfa58520 |
G-139 achieved 2026-07-30: flip + archive record + reference sweep (0.32.0)
Acceptance met in full (walk in the detail file's Progress): libfetch with sha1 verification + beside-toml metadata + server-trust consent proven LIVE against the canonical origin post-publication; PACKAGES_tcl<N> libs-step materialization with punkcheck provenance; vendorlib_vfs.toml declarations (source_root=packages + replace) with supersedes removing tcllib1.21 incl. nested tcllibc 0.4 + md5c from the 8.6-family kits; punk86 kit-hosted runtests vs the same-day baseline IDENTICAL (zero differences to disposition); vendored trees removed in their own commit after the proven bake ( |
1 week ago |
|
|
70d1838cc4 |
G-139 retirement: vendored tcllib trees removed (artifact path proven)
src/vendorlib_tcl8/win32-x86_64/tcllib1.21 (2023 hand-drop: tcllib 1.21 + nested tcllibc 0.4 + md5c, critcl 3.2 era) and src/vendorlib_tcl9/win32-x86_64/tcllib2.0 (2024 hand-drop: a different trunk snapshot also labelled 2.0, nested tcllibc + md5c, critcl 3.3.1) are retired from the tracked tree - the first major G-004 payoff. Their only machine-readable provenance was critcl's teapot.txt; their replacements are the published punkbin lib-tier artifacts (r1, suite-built with full checkout/toolchain provenance) consumed via make.tcl libfetch + the PACKAGES_tcl<N> phase + the vfslibs packages-root declarations. Sequencing per the acceptance: removal lands AFTER the artifact-path bake reproduced working kits (punk86 + punk905 baked, deployed, provenance verified in-kit) and the punk86 kit-hosted runtests validation came back identical to the same-day baseline. This commit is removal-only so the fallback is a revert. Other vendored packages under src/vendorlib_tcl8|9 (Img, itcl, sqlite, tdbc, twapi, tcludp, ...) are unaffected. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
58e5320bdc |
G-139 kit switchover: artifact-fed tcllib/tcllibc in 13 kit vfs trees, validated
vfslibs processed all declared trees (45 installs): every win32 tcl9 tree's tcllib2.0 clean-slate replaced by the artifact copy (nested md5c/tcllibc strays gone), sibling tcllibc-tcl9 installed, stray tcllibc2.0 names superseded; tcl8 kits upgraded - tcllib1.21 (with nested tcllibc 0.4 + md5c) superseded out, tcllib2.0-tcl8 + tcllibc-tcl8 in; punk86bawt's bare tcllibc refreshed; punk9linux keeps its linux-built accelerator siblings (win32 artifacts deliberately not declared there). Every installed tree carries its embedded punkbin-artifact.toml record into the kit payloads. Selective bake punk86 + punk905 (punk91/punksys/punk9_beta are live user shells - trees switched, bakes at next natural rebake): both deployed; punk905 arch scan OK (tcllibc exempt under its platform subdir); punk86's only warning is the recorded pre-existing zint i386 defect. Kit provenance verified both container types: punkzip central-directory read (punk905 zip kit) and in-vfs record probe (punk86 metakit kit) - records name their source artifacts + build_ids. VALIDATION (acceptance): kit-hosted runtests bracket isolating exactly the kit payload switchover - baseline (pre-switchover punk86) 1125/1099/18/8 in 5 files (exec.test, ns/nslist, ns/nsprimitives, zip/zipaccel, stdin/runstdin; 1960s); post-switchover IDENTICAL totals, files, and per-test outcome extraction (1119 lines, empty diff). Differences to disposition: none - the 8 failures pre-exist on the old payload. punkcheck-managed vfs tree changes batched per the src/AGENTS.md carve-out. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
fc2376ca5d |
G-139: derived-project story recorded; layout samplesuite1 sketch retired
The decision (per the acceptance, recorded in the goal detail): derived projects obtain library binaries via the SAME fetch entrypoint by default - generated projects receive make.tcl (libfetch + the PACKAGES phase) through the established layout-sync/G-027 channels and declare their artifacts in their own src/runtime/libpackages.toml; the copy-and-tweak in-project suite build per G-104's self-description contract remains the documented alternative (a tcllib/tcllibc-only suite needs no Tcl source tree - critcl bundles its headers). The pre-G-096 samplesuite1 sketch in the project-0.1 layout (download_and_build.config, mingw64/gcc-era, self-described as SKETCH ONLY) is removed and replaced by src/buildsuites/README.md in the layout, documenting both routes for generated projects - the disposition the goal Approach named. Goal Progress also records the r1 publication (punkbin ee571ed, pushed) and the live canonical-origin libfetch verification. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
e7e2ec81f4 |
G-139 phase 2 increment 1: PACKAGES_tcl<N> deployment + vfslibs packages-root declarations (0.31.1)
make.tcl libs/packages/bakehouse gain the PACKAGES_tcl<N> phase: materialized punkbin lib-tier packages under bin/packages/<target>/tcl<N>/ deploy into lib_tcl<N>/allplatforms + lib_tcl<N>/<this platform> with punkcheck provenance, mirroring the VENDORLIB_tcl<N> shape (embedded punkbin-artifact.toml records ride into the deployed trees; absent tier = silent per-item no-op with a libfetch pointer). vfslibs declaration schema extended (vendorlib_vfs.toml header documents both): source_root = "packages" resolves an entry's source against the bin/packages tier (missing source errors name 'make.tcl libfetch'); replace = true clean-slates a SAME-NAMED existing target folder before install (supersedes deliberately cannot name the folder being installed - needed because the pre-G-139 tcl9 hand-drops nested md5c + tcllibc INSIDE tcllib2.0). Declarations added for the switchover set (per-kit, never blanket - the trees that carried hand-drops at 2026-07-30): 8 win32 tcl9 kit vfs trees get tcllib2.0-tcl9 + tcllibc-tcl9 (supersedes the stray-named tcllibc2.0); punk9linux (linux target) gets only platform-neutral tcllib2.0 (its linux-built tcllibc siblings stay - a linux lib-tier emission is future work); punk86/punk8win/punk8_statictwapi upgrade tcllib1.21 (+nested tcllibc 0.4 + md5c, removed with it via supersedes) to tcllib2.0-tcl8 + tcllibc-tcl8; punk86bawt refreshes its bare tcllibc only. Verified: make.tcl libs deployed the tier into lib_tcl8|9 (allplatforms + win32-x86_64) with embedded records present; vendored mirrors coexist in the deployed trees until the sequenced retirement. Thin-layout make.tcl sync copies updated by the run (punkcheck-managed outputs, batched per the carve-out). Project 0.31.1 + CHANGELOG. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
11200dbf8a |
G-139 phase 1: make.tcl libfetch + bin/packages input tier (project 0.31.0)
New 'make.tcl libfetch' subcommand (argdoc'd; workflow text + plain help updated): fetches the punkbin LIB-TIER artifacts declared in the new src/runtime/libpackages.toml ([artifact.<name>] name/target; the four G-138 r1 artifacts, both generations) from <origin>/lib/<target>/ into the untracked bin/packages/<target>/ input tier - zip + .toml sidecar, each sha1-verified against the server's per-target sha1sums.txt (local tier copy kept, the punk-runtime store idiom) - then materializes each verified zip via punk::zip::unzip (crc-verified, mtimes restored, accelerator-eligible) into bin/packages/<target>/tcl<N>/<pkgfolder>/ (generation subdirs: both generations install identically-named folders). Idempotent: present artifacts re-verify and skip; a materialized tree is current while its embedded record names the declared artifact (the G-138 self-description payoff); -force overrides. Consent keyed to server trust (the G-123 posture): the canonical punkbin origin (punk-runtime raw-base convention) gates nothing; any other origin (-serverurl or env PUNKBIN_URL) refuses before network access without the explicit -trust-server flag - never an interactive prompt. file:// origins served natively (mirrors/fixtures); http(s) transport: Tcl http (+tls) when loadable, else curl, else PowerShell. The dispatch block sits before the build-command whitelist gate per the standalone-command pattern and exits itself. Emission-side amendment (both suites' library_artifacts.tcl): sidecar tomls now ride the per-tier staging sha1sums.txt, matching the punkbin repo's build_sha1sums.tcl coverage so staging-derived mirrors serve verifiable sidecars. Verified against a file:// mirror assembled from both suites' staging: trust-gate refusal, consented fetch of all 4 artifacts (sha1-verified), materialization of all 4 trees, fully idempotent re-run, and a package-load proof from the tier (md5 2.0.9 + tcllibc accel=1 under the plain family kit, ifneeded paths in bin/packages). bin/packages is already ignored in both VCS via the /bin/* rules. Docs: bin/AGENTS.md tier section, src/runtime/AGENTS.md libpackages.toml bullet. Project version 0.31.0 + CHANGELOG (new make.tcl subcommand = product surface). Remaining G-139 work recorded in the goal's Progress section. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
3870e475cf |
G-138 achieved 2026-07-30: flip + archive record + reference sweep
Acceptance met in full (walk recorded in the detail file's Progress): emission step landed in BOTH suites and demonstrated end-to-end - exceeding the demonstrate-90/record-86-follow-through minimum - with byte-identical re-emission verified, provenance-complete schema-v2 class=library records, sidecars + per-tier sha1sums in the same step, publication left a deliberate user step, punkbin layout docs recording the tier (punkbin repo commit c38686a), and md5c dispositioned (dropped; tcllib's md5 prefers tcllibc, which bundles the accelerator). Index entry -> GOALS-archive.md record (file's established arrow-format convention retained). Reference sweep: G-139 Context/Alternatives/Related updated with achieved markers + archive path, and G-138's actionable outcomes pushed to their consumers - G-139 (settled naming, md5c drop, staging locations of the emitted r1 artifacts), G-123 (schema v2 landed first for the library class - runtime-side v2 rides the lineage), G-004 (lib tier = the route for library binaries out of the tracked tree), G-066/G-067 (zip tier recorded as the interim carrier for the .tm long game). goals_xref report shows no unlinked pairs bridged only by G-138. ARCHITECTURE.md buildsuites paragraph gains the lib-tier sentence (architecture_lint clean); src/buildsuites/AGENTS.md child index updated (also corrects the stale 'G-100 active' to achieved 2026-07-26). Detail-file move to goals/archive/ follows in the adjacent pure-rename commit per the Doc Restructures rule. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
f9c5d4ac60 |
G-138 increment 1: library-artifacts emission step, both suites, e2e verified
New tools/library_artifacts.tcl (suite_tcl90 + identical suite_tcl86 copy): emits the punkbin LIB tier from verified suite builds - installed-shape package folders as immutable <folder>-<tcl8|tcl9>-r<N>.zip artifacts (lib/allplatforms for pure-tcl tcllib, lib/<target> for the tcllibc critcl accelerators) with an embedded schema-v2 class=library punkbin-artifact.toml at the package root (embed-then-hash: sha1/size/built stay sidecar-only), toml sidecars and per-tier punkbin-format sha1sums.txt. Provenance: [provenance] class=suite-built (the G-123 schema-v2 lineage), tcllib/critcl checkout uuids, critcl version from the package's own teapot.txt, driving_tcl_patchlevel, toolchain/optimize. Determinism: punkzip assembly (sorted members) over a staging copy with file/dir mtimes synced from the install tree, the embedded record's mtime pinned to the package's pkgIndex.tcl - re-emission over an unchanged install verified BYTE-IDENTICAL in both suites. The dlls inside are not bit-reproducible across zig rebuilds, so -Dlibrev bumps only on deliberate publish (default 1 - nothing published yet). Wiring: 'library-artifacts' zig step in build905.zig (runs under the plain family kit - proof-doubling per kit-family-artifacts) and build86.zig (runs under the installed static shell; brings the G-117 identity options to that recipe), in the default step lists (suite.tcl + bootstrap steps parity). punkzip staged as an upstream git source like critcl (sources.config record + lazy build.zig.zon pin, commit 0882f0373e = v2.3.1, generation-neutral) and compiled host-native by the recipes (ReleaseSafe - real deflate work). Verified 2026-07-30: suite_tcl90 emitted tcllib2.0-tcl9-r1.zip (871 members) + tcllibc-tcl9-r1.zip; suite_tcl86 emitted the -tcl8- pair (different bytes, same shape - the generation tag is identity, not decoration). Materialized load tests: packages extracted from the zips resolve and load under the plain family kit (tcl9) and the static 8.6 shell, critcl accelerator engaged from the extracted tcllibc, sources proven via package ifneeded paths (the 8.6 first run tripped the recorded tm-path shadowing trap - hermetic re-run clean). md5c dispositioned: NOT published - md5x.tcl prefers tcllibc, which bundles the md5 accelerator. Evidence and decisions in the goal detail Progress section; suite READMEs document the step; punkbin layout-docs update is the remaining acceptance item. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
bc126d1e88 |
TEMP_REFERENCE/metakit renamed to metakit_jnorthrup: update references
The metakit checkout was renamed when the metakit_pooryorick variant arrived beside it. Update the six reference sites (G-101 scope+detail, G-096 archive note, suite_tcl90 README/build905.zig/suite.tcl vqtcl-removal comments) to the new folder name. No functional change - comments and goal text only. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
393ce90fc7 |
Tcl exit/finalization constraint recorded: ARCHITECTURE.md shutdown section, basis-qualified src/AGENTS.md exit-path guidance, scope index
Assisted-by: harness=opencode; primary-model=openrouter/moonshotai/kimi-k3; api-location=openrouter.ai |
1 week ago |
|
|
4aae330b31 |
G-134 achieved: flip, archive record - archive-relative output is a checked contract; punkshell 0.30.7
Implemented and achieved same day. punkboot::utils 0.6.0 gains kit_offsetstyle_report (argdoc'd thin classifier over punk::zip::archive_info), synced via modules + bootsupport (one stale dead-pid .punkcheck.lock removed per the recorded recovery) and promoted into _vfscommon. make.tcl: guarded getter, post-assembly probe beside the smoke-require block (recapped BUILD-WARNING only on a FILE-relative attached payload; plain/none/unreadable silent; NOTE on stale bootsupport), and the 'check' row (ACTIVE (advisory) + contract lines). Characterization: offsetstyle.test 7/7 (mkzip -runtime/-offsettype hermetic fixtures for plain/archive/file, none on text + metakit-magic binary, unreadable detail, src/_build baseline sweep - no kit image probes file); maketcl_check_offsetstyle_pin added (payload-check suite 4/4). Full utils suite 69/69, punkexe suite 81/0, live punkluck86 bake silent as the acceptance's baseline clause requires. Docs: src/AGENTS.md pin bullet with does/does-not-guarantee, bin/AGENTS.md deployed-kit section, ARCHITECTURE.md check-family bullet (architecture_lint clean). Reference sweep: no live-tier references beyond the index entry; goals_xref shows no pairs bridged solely by G-134. Archive move follows as a pure-rename commit. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
7425ab3c8e |
G-128 achieved: flip, archive record, reference sweep - punkbin route verified LIVE
Post-push verification against the live server: punkres-x86_64-windows-0.3.1.exe fetched from gitea punkbin, sha1 matches the published sha1sums row and the staged value (166cd176...), fetched binary runs. Every acceptance clause is satisfied (full evidence in the detail file's flip entry: post-hoc stamping with tool-self read-back + twapi cross-check, boots, convergence, both section shapes, file-relative refusal/consented preserve crc-verified, zip64/multi-disk refusal, WSL non-windows e2e with host recorded, seam selection + parity + zig-optional degradation, distribution both ways now LIVE, RT_VERSION-ready tree handling, licensing/provenance). Flip mechanics: detail Status achieved 2026-07-29 with evidence appended; index entry moved to GOALS-archive.md (record format incl. that file's arrow convention); reference sweep - G-127 cross-host mention, G-134 Related line and G-101's container-review rider gain achieved/archive markers, PROVENANCE.md's explicit detail path repointed to the archive. goals_xref: no live pairs were bridged solely by G-128. Archive MOVE of the detail file follows as a separate pure-rename commit (Doc Restructures move/edit separation). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
1f8af99805 |
G-128: punkbin publication route settled, staged and documented; punkshell 0.30.6
Distribution convention (recorded in src/tools/punkres/PROVENANCE.md): the tool publishes to the punkbin tools tier as win32-x86_64/tools/punkres-x86_64-windows-<ver>.exe (arch-os-version beside the zig archives; immutable), integrity via that tier's sha1sums.txt. 0.3.1 STAGED as punkbin commit 1b471fc (sha1 166cd176..., built by the tool step from vendored 0.3.1/f0af880, all other sha1sums SAME) - push is maintainer-gated per punkbin AGENTS.md, and agents never push. Route documented in bin/AGENTS.md; the seam's skip notice names both remedies (build from vendored source, or fetch the prebuilt artifact). Demonstrated in the program-files checkout: artifact placed as bin/punkres.exe reports 0.3.1 and make.tcl tool list reads it CURRENT against the vendored tree. Reproducibility note recorded: zig builds differ across invocations in the PE-header timestamp region - the published sha1 pins THE artifact. Goal Progress: increment 1f; the only remaining acceptance item is the maintainer push making the fetch URL live - achieved flip flagged for confirmation at that point. punkres.test 8/8 re-verified. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
c0263ff934 |
punk-getzig: spaced-path + Windows PowerShell 5 fixes (launcher and payload); punkshell 0.30.5
User-reported: './punk-getzig.cmd' from a spaced checkout failed with 'C:\repo\jn\program: The term ... is not recognized' while punk-runtime worked. Root cause: punk-getzig_wrap.toml still used the pwsh '-c' command-string launcher, which tokenizes a spaced script path - punk-runtime received the 'cmd.exe /c powershell ... -File' fix during G-119 (its wrap toml carries the comment) and punk-getzig never did. Adopting the same launcher surfaced three latent payload issues, all fixed in src/scriptapps/bin/punk-getzig.ps1: - Resolve-Path -RelativeBasePath is pwsh 7.4+ - replaced with the Push-Location + -Relative spelling (PS5-compatible) - Invoke-WebRequest without -UseBasicParsing NullReferences on PS5 (IE parsing engine); all three call sites fixed, with progress suppressed around the large distribution download (PS5 -OutFile slowdown) - Invoke-Expression "$zigexe version" splits spaced paths under ANY powershell (latent even on pwsh) - both sites now use the call operator Payload growth pushed :exit_multishell across a 512-byte boundary; the punk-runtime-style '(512B spacer)' comment added to punk-getzig.bash and the polyglot regenerated (checkfile ERROR-free). Verified in the 'C:/repo/jn/program files/punkshell' checkout: full fetch (community-mirror latency ordering, local punkbin mirror, minisign verify, extract, ZIG VERSION: 0.16.0) and the already-installed branch; main-repo argless run clean. Sources and regenerated bin/punk-getzig.cmd committed together per the wrap workflow (no roundtrip pin exists for punk-getzig - candidate noted in the completion report). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
0bee025ec4 |
G-128: re-vendor punkres 0.3.1 (platform-aware usage pin - linux CLI suite green)
Upstream f0af880 (f97eda2 + version-pin fixup): the first native linux test run (WSL Ubuntu 24.04, zig 0.16.0, route-b of the e2e) surfaced the usage pin's hardcoded punkres.exe argv0; the pin now splices EXENAME comptime and the suite is green on BOTH platforms (windows 33/33 verified here from the vendored tree; linux run recorded in the goal detail). bin/punkres.exe rebuilt via the tool step (0.3.1). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
0e0a64eb23 |
punk-runtime fetch: materialization hint when the working name is absent; punkshell 0.30.4
Closes the observed UX gap (G-128 detail, program-files checkout findings): fetch reports an active runtime, but bakes reference the suffixless WORKING name that only 'use' materializes - so a first fetch left bakelist reading runtime=missing with nothing pointing at the next step. Both payloads (ps1 + bash, parity wording) now print note: bakes and projects reference <working> - materialize it with: punk-runtime use <artifact> after fetching an -r<N> artifact whose working name is absent, and stay silent once it exists (the downloads-never-bind rule is unchanged - fetch still materializes nothing). Sources edited under src/scriptapps/bin and bin/punk-runtime.cmd regenerated via scriptwrap multishell (-force 1; checkfile ERROR-free, 4 normal possibly-bogus warnings) - committed together per the wrap workflow; runtimecmd_roundtrip byte-identity passes. New pin runtimecmd_fetch_materialize_hint in runtimecmd_freshness.test (11/11, ~+5s: hint present on both payloads via the fixture server, absent after use via the cmd route). Live-verified against the real punkbin server from the spaced test checkout: hint fires on the no-download path too, silent with the working copy present. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
f2530d53c3 |
G-128: spaced-path characterization test; goal records for the program-files checkout findings
punkres.test gains punkres_spaced_paths (8/8, ~3s file total): the store
fixture copied into a directory AND filename carrying spaces, stamped with
the consent flag and read back byte-identical - characterizing the Tcl-list
exec quoting the seam relies on (kit_icon_embed_punkres builds its command
with list/lappend and evaluates it via catch of a pure list: word-per-element,
no {*} needed, no re-substitution).
Goal detail records the live evidence from the user's test checkout at
'C:/repo/jn/program files/punkshell': bake punk9_beta there embedded via
punkres with every path spaced (kit wears PUNKSHELL, boots, bakelist
deployed=current), punk-runtime.cmd fetch/use polyglot fine under spaces,
tool build via PUNK_ZIG override; plus the runtime-store finding - fetch
downloads only the -rN artifact, materialization of the mapvfs-named working
copy needs 'use <full-artifact-name>' (suffixless use selects existing
runtimes only), bakelist reads runtime=missing until then - with candidate
UX improvements flagged for the user.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
1 week ago |
|
|
c6d50b3b2a |
G-128: fleet renamed to PUNKSHELL via punkres; punkres 0.3.0 -drop-opaque-overlay for mingw stub symbol tables; punkshell 0.30.3
Forced fleet rebake (user-directed): all ten win32 kits now carry the embedded PUNKSHELL group icon via punkres, verified per kit (punkres list, sidecar icon_group=PUNKSHELL + embedding=punkres, extract-ico byte-identical spot check) and booting (incl. metakit punksys 8.6.13 / punk86 8.6.17 and punk902z 9.0.2). punkmagic excluded (runtime absent - keeps its old icon and _build cache); punkshell902 linux = not applicable. The first fleet pass surfaced a real shape: mingw-built runtimes (tclsh902z, tclkit-win64-dyn family) keep COFF symbol/debug tables AFTER their sections, the extraction head carries them, and punkres correctly refused those stubs as data-classified overlay. Measured against twapi-era artifacts: Windows' EndUpdateResource has always silently STRIPPED exactly those bytes at stub-stamp time (leaving PointerToSymbolTable dangling) and the kits work - so punkres 0.3.0 (upstream dca8634, re-vendored, 33/33) encodes the distinction: -drop-opaque-overlay DISCARDS expendable trailing data and zeroes the orphaned symbol-table header fields, vs -allow-opaque-overlay which RELOCATES a real self-locating payload; conflicting flags rejected; drop is inert on zip overlays. The seam's punkres arm passes -drop (twapi-arm-equivalent stub hygiene; bin/AGENTS.md documents it). Recovery note: a 10-minute foreground timeout killed the first 3-kit rerun during deploy - stale src/_build/.punkcheck.lock removed after a dead-pid check per the recorded procedure; the completion bake deployed the already-wrapped kits. Full punkexe suite 83 tests 0 failed; goals_lint + architecture_lint clean. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
bd65183061 |
G-128: seam names the kit group icon PUNKSHELL (icon-derived, both arms); punkshell 0.30.2
RT_GROUP_ICON name policy (user decision 2026-07-29): kit_icon_process derives icon_group from the icon FILE's uppercased rootname (RC convention) - punkshell.ico -> PUNKSHELL for the default icon and per-kit overrides alike - and passes it to whichever mechanism embeds. punkres arm uses set-icon -group (punkres 0.2.0); kit_icon_embed_twapi gains the matching optional group_override (name only - language adoption unchanged) so the arms stay in parity. Replaces the retained stub-lineage names (punk91 "SFE", suite kits "TCLSH"); already-deployed kits keep theirs until their next natural rebuild (the policy is not in the punkcheck source set). Sidecar gains icon_group (recorded whenever the icon file exists); bin/AGENTS.md format doc + ARCHITECTURE.md updated, architecture_lint clean. Live-verified on punkluck86 rebakes: punkres arm and twapi arm (TCLLIBPATH route) both emit RT_GROUP_ICON "PUNKSHELL" lang 1033, extracted icons byte-identical between arms; sidecar icon_group=PUNKSHELL; final deployed state punkres-stamped and booting. Full punkexe suite 83 tests 0 failed. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
07a0bd4318 |
G-128: re-vendor punkres 0.2.0 (set-icon -group); metakit clause satisfied-for-now; corrected twapi-availability finding
punkres 0.2.0 @ upstream c0eb919: set-icon -group <id|name> overrides the adopted RT_GROUP_ICON name (stored as given, case-insensitive lookups; lang + codepage adoption unchanged; re-stamps without the flag adopt the renamed group - convergent). Vendored tree tests 32/32; bin/punkres.exe rebuilt via the tool step; punkexe punkres.test 7/7 unchanged. Seam group-name DEFAULT deliberately not changed - proposal (icon-filename-derived name, twapi arm gaining the same override for parity) outstanding with the user. Goal records: metakit 'kit'-shape acceptance clause recorded satisfied-for-now (user decision) with a rider in G-101's Notes asking its container decision to include a post-hoc stamping-support review; BSD-2-Clause confirmed. The 2026-07-29 environment finding is CORRECTED: the twapi arm's availability is launch-cwd sensitivity (make.tcl adds src/vendorlib_tcl9/<host> to library paths only when startdir tail is 'src'), not a missing root vendorlib tier as commit 5e9f1c75's message stated - root vendorlib_tcl9/ never exists. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
4c8d0e68ec |
src/AGENTS.md: tools index entry names punkres (G-128 tool now vendored)
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
5e9f1c75fc |
G-128: seam selects punkres when built; characterization tests; punkshell 0.30.1
src/make.tcl kit icon seam (G-057): mechanism selection is now punkres-first - kiticon::punkres_available (memoized; binary presence at bin/punkres(.exe) is the selection signal) + kit_icon_embed_punkres (exec wrapper; punkres verifies its own output). twapi arm unchanged as fallback; when NEITHER serves the skip notice combines both reasons and names the 'make.tcl tool build punkres' remedy. Sidecar embedding value gains 'punkres' (bin/AGENTS.md format doc, ARCHITECTURE.md kit-icon bullet updated; architecture_lint clean). Live-bake fallback matrix on punkluck86 (win32-ix86 = PE32 arm live): punkres present -> embedded via punkres, kit boots + smoke OK; punkres absent + twapi loadable -> via twapi; both absent -> unavailable with combined notice, embedding none (exact pre-G-128 degradation). Live parity: both arms' baked kits listing-identical (codepage host-ACP noise finding recorded in the goal detail) with byte-identical extracted icons. New src/tests/shell/testsuites/punkexe/punkres.test (7/7 under the tclsh9.0.5-punk runner; self-gates on bin/punkres + store fixture): overlay- unsafe refusal exit 3 with untouched input, consented file-relative shift with convention preserved, payload intact via punk::zip members + crc-verified extraction, icon replaced (extract-ico == punkshell.ico), idempotent re-stamp byte-identical, make.tcl tool info punkres provenance records. Full punkexe suite 83 tests 0 failed (no collateral). Goal detail: Notes findings (codepage noise, root-vendorlib twapi fragility, nested tclsfe payload, metakit move-safety -> G-101 pointer updated) + Progress increment 1 with the two remaining acceptance items (non-windows-host e2e, punkbin publication route) and one acceptance-wording flag for the user (metakit 'kit' shape vs 'zip overlay' clause). punkshell 0.30.1 + CHANGELOG. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
19d1b8b30a |
G-128: vendor punkres v0.1.0 into src/tools/punkres
Upstream commit 09d5ec5514bb0dbd31a38ee772e50b8d981f0219 (clean at copy time) from the sibling checkout c:/repo/jn/zig/punkres (gitea remote recorded in PROVENANCE.md). Vendored: build.zig, build.zig.zon, LICENSE (BSD-2-Clause, first-party), README.md, src/ - all test fixtures synthesized in memory, no binaries. PROVENANCE.md records origin, vendored state, re-vendor procedure and G-063-style licence records; src/tools/AGENTS.md indexes the tree and extends the per-tree verification note (punkres 31/31 as vendored). Verified from the vendored location with the pinned bin/tools/zig-x86_64-windows-0.16.0 toolchain: zig build test 14/14 steps, 31/31 tests. make.tcl tool step discovers punkres with ZERO make.tcl edits (G-126 convention-based discovery): test gate passed, ReleaseSafe build installed bin/punkres.exe (1073152 bytes). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
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 weeks ago |
|
|
5a8a62547b |
G-057: kit icon step - resource sidecar every target, twapi PE embedding
Every kit a bake builds now gets a <kitname>.resources.toml sidecar (build folder + deployed beside bin/<kit>) recording the build-time icon choice: schema-1 flat TOML in the G-135 tolerant family - kit, target, kit_type, icon_origin default|override, icon_source (repo-relative), icon_hash, provenance source+hash lifted from the icon's assetorigin sidecar (the chain reaches the SVG master), embedding, embedding_status embedded|not-applicable|unavailable|failed, embedding_reason. Byte-stable (no timestamps, write-only-if-changed); named "resources" so the parked RT_VERSION follow-on extends the same file. Format doc: bin/AGENTS.md. win32-target kits get the icon embedded as RT_ICON/RT_GROUP_ICON via the twapi resource-update APIs - the tcl-sfe sfe-0.2.tm mechanism (Ashok P. Nadkarni) generalized: enumerate all existing icon/group entries via extract_resources, delete ALL, write ids 1..N plus one group under the first pre-existing group's name+lang (fallback 1/1033) in a single update transaction - idempotent by construction. Ordering is stub-first: a PER-KIT copy of the extraction phase's payload-free raw runtime prefix is stamped BEFORE payload attach, so the resource rewrite can never corrupt an overlay; all three assemblers (zipfs mkimg, zipcat/concat, sdx wrap) consume the stamped copy; runtime store originals untouched. ::punkboot::kit_icon_process is the single internal entry point with mechanism selection inside (a G-128 portable stamper becomes a substitution). Skip taxonomy: non-PE target / runtimeless .kit = NOT APPLICABLE; cookfs, missing icon, missing raw prefix, cross-host (non-windows process family), twapi-unloadable = UNAVAILABLE with distinct named reasons; embed errors = recapped BUILD-WARNING + status failed. Sidecar written in every case. Default icon joins the kit's punkcheck source set (icon changes rebuild kits); sha256 self-contained (bootsupport has sha1/md5 only), memoized per run. Verified (evidence in the goal detail file Progress): full bake embeds all 10 buildable win32 kits (zip x64+ix86, sdx metakit trio) with resource inspection byte-matching the source ico (punk91, punk86, punk91ix86 inspected; group name SFE preserved); scratch-copy boots for zip, metakit and a stamped concat image (androwish exe-path mount); override round-trip via punk9wintk903.vfs (solid ico embedded + recorded, then reverted); linux cross-target punkshell902 sidecar with not-applicable; mingw tclsh86 bake takes the concat path with the distinct twapi-unloadable notice; vendored twapi 5.0b1 arm proven under tclsh9.0.5-punk; double-restamp converges. punk9_beta embedded+built but deploy still blocked by the known bin file lock (stamped product waits in src/_build). make.tcl workflow text gains the icon step + sidecar output; punkshell 0.29.0 -> 0.30.0 (minor: kits now wear the punkshell icon; new shipped sidecar) with CHANGELOG entry. G-057 detail file: ordering + override + sidecar + seam decisions recorded with tcl-sfe attribution; cross-host known-shortcoming + G-128 remedy recorded per acceptance. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
af6aebda16 |
_vfscommon.vfs punkshell.ico sidecar: kit-shipping call made
User-approved resolution of the open call recorded at G-135 achievement: src/vfs/_vfscommon.vfs/punkshell.ico gains its assetorigin sidecar (schema 1, hash equals source_hash - byte-identical derived copy of src/assets/logo/punk-mark.ico, source recorded ../../-relative). The sidecar is root-level user-curated payload beside the icon itself (vfscommonupdate regenerates the modules/lib subtrees, not these), and ships inside every kit that merges the common payload from that kit's next bake; inside a kit the recorded source is absent, so a checker truthfully reports source-absent there while still hash-confirming the icon bytes - in this tree it verifies (assetorigin_check: 9 records, 9 verified). The per-kit mkzipfix.vfs / punk8_statictwapi.vfs copies stay unrecorded (no decision requested; unrecorded is silent and supported). src/assets/logo/AGENTS.md ownership bullet and the G-057 handoff note updated to record the made call. No bake run - deployed kits pick the sidecar up when next baked. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
633b55faa0 |
G-135 achieved: flip, archive record, reference sweep
Acceptance verified in full (evidence in the detail file's new Progress section): format documented with schema key in src/assets/logo/AGENTS.md; tolerant reader; six-state checker proven on constructed fixtures under tclsh 8.6.11, Tcl 9.0.3 and the punk91 kit runtime; generator with no Windows-only component regenerating all four .icos plus the web rasters byte-identically before make-ico.ps1 was removed; sidecars exist and verify for every generated artifact under the four asset directories (live tree: 8 records, 8 verified). Index entry moves to GOALS-archive.md; the detail file move to goals/archive/ follows as its own pure-rename commit (root AGENTS.md "Doc Restructures": moves separate from edits). Reference sweep: G-057 and G-136 Related lines gain achieved/archive markers plus pointers to the concrete deliverables they consume (G-057: record format, checker, the verified src/runtime/punkshell.ico derived-copy sidecar, and the still-open kit-shipping user call; G-136: the committed project-default icon.ico + sidecar pair its injection copies verbatim). src/assets/logo/AGENTS.md G-135 mentions gain archive paths. Notes record the implementation-time resolutions: self-contained flat-toml subset reader + embedded sha256 (no tomlish, no tcllib); src/runtime/punkshell.ico sidecar written (passive file, nothing ships); _vfscommon.vfs / mkzipfix.vfs / punk8_statictwapi.vfs copies stay unrecorded pending the user call on shipping sidecars inside kits. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
f529f44ea7 |
G-135: platform-neutral icon generator + per-asset assetorigin sidecars
make-ico.tcl (any tclsh 8.6+, rsvg-convert on PATH) replaces make-ico.ps1 in place: pure-Tcl PNG decode (core zlib inflate + row unfilter) and DIB/ICONDIR assembly take over from System.Drawing, with an embedded sha256 (NIST-vector validated, cross-checked against Get-FileHash). Byte-identity proven before the ps1 removal: 'all -check' regenerates all seven recorded artifacts (punk-mark.ico, punk-mark-solid.ico, project-default/icon.ico on the DIB+PNG256 profile; favicon.ico all-PNG; apple-touch/192/512 rasters) byte-identical to the committed files under both mingw tclsh 8.6.11 and native Tcl 9.0.3. Every artifact now carries its <name>.assetorigin.toml sidecar (schema 1: artifact sha256, source + source hash, role, generator + invocation options), (re)written by every generator subcommand so regeneration cannot leave a stale record. The 'all' manifest embeds the invocation profiles; 'all -check' is the no-write drift probe (exit 1 on any difference). src/runtime/punkshell.ico gains a derived-copy sidecar (hash equals source_hash, source ../assets/logo/punk-mark.ico); the three vfs copies stay unrecorded pending the user call on shipping sidecars inside baked kits. src/assets/logo/AGENTS.md: assetorigin schema 1 format documentation (canonical), Tcl-generator work guidance, drift-probe verification line. favicon source recorded as web/icon.svg (renders byte-identical to punk-mark.svg at 16/32/48; the same-directory primary web icon chosen). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
14fc37daba |
vfscommonupdate: promote pending module bumps into _vfscommon.vfs (punkexe 0.1.1 packagemode doc reaches kits)
Promotion gate run from a clean tree (both VCS committed at punkshell 0.29.0). Five stamped-version promotions from the deployed modules tree: punk::args::moduledoc::punkexe 0.1.0 -> 0.1.1 (the G-033 packagemode leader with the proj: contract - kits baked from here on carry the live launch documentation), plus four bumps pending from earlier change-sets: argparsingtest 1.2.0 -> 1.3.0, oolib 0.1.3 -> 0.1.4, punk::zip 0.2.0 -> 0.3.0 (punkzip extraction accelerator), punkcheck 0.6.0 -> 0.6.1 (installtrack self-heal). The templates-0.2.0.tm modpod refreshed by the same replace (zip .tm, rides binary-glob; existing artifact updated, no new binaries). Kits pick these up at their next 'make.tcl bake'. Claude-Session: https://claude.ai/code/session_0156PuejSCGjgeGb7jiABrDU Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
768dab399f |
G-033: proj: package-mode scope prefix - visitor binary resolves dev/src against the cwd's project
punk_main.tcl: an optional proj: prefix on the package-mode string
(e.g 'proj:internal-src') rebinds the dev/src path blocks to the punk
project containing the current directory instead of the executable's
own project. Root discovery is ::punkboot::proj_root_find, a lean
boot mirror of punk::repo::find_project/is_project_root in Tcl
builtins only (git/fossil control markers via 'file exists', unwise-
path exclusion, ./src plus src/modules|src/vfs|src/scriptapps|
punkproject.toml candidate check; .git accepted as file OR dir for
worktree checkouts - recorded divergence). The proc stays defined
post-boot like the G-129 mount procs. The prefix sits outside the
ordered dash-list, whose block order remains the same-version
tie-break dial; an invalid mode remainder is not consumed (whole arg
falls through as subcommand/script as today); bare 'proj:' reads as
internal and warns. Discovery outcome is always reported on stderr
(detected root + effective precedence - never a silent rebind), a
failed walk-up warns and leaves dev/src unbound (no exe-relative
fallback rebind), and proj: without a dev/src block warns it has no
effect. Under proj:, dev resolves <root>/modules{,_tclN} and
<root>/lib{,_tclN} only; src feeds the discovered root into the
existing src-mode machinery unchanged (tm paths, auto_path, package
prefer latest, inline #modpod scanner). Exe-relative src/dev launches
are untouched.
punk::args::moduledoc::punkexe 0.1.1: the packagemode help text
drafted in the goal file is now live as the packagemode leader of
(script)::punkexe (@leaders max 2), with proj: wording in the @cmd
overview; rendering/parse wiring remains G-032.
Verified on a rebaked punk91 kit, standalone copy outside any source
tree: proj:internal-src from tomlish (fossil root, builds no
executable) loads tomlish 999999.0a1.0 from its src/modules with
kit-first ties; proj:src flips the ordering; from punkshell the
visited-root modpod scan registers 6 modpods; no-project and
no-root-using-block warnings fire and proceed; bin/punk91 src
unchanged.
Docs: bin/AGENTS.md launch-package-modes proj: contract,
src/vfs/AGENTS.md punk_main contract line, ARCHITECTURE.md entry
point. punkshell 0.29.0 (minor - new launch invocation) + CHANGELOG.
Claude-Session: https://claude.ai/code/session_0156PuejSCGjgeGb7jiABrDU
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
2 weeks ago |
|
|
faa459f572 |
punkzip PROVENANCE.md: relative sibling-checkout convention replaces the dev-machine absolute path
The Origin section now names the upstream by its remote and expects the working checkout at ../zig/punkzip relative to the punkshell repo root, stated as a layout convention with its fallback spelled out (clone the remote there; the pinned Vendored state commit identifies the exact upstream state in any clone). The re-vendor procedure now runs entirely from the punkshell repo root (git -C ../zig/punkzip checks, relative cp sources), making it copy-pasteable on any machine reproducing the sibling layout and independent of the punkshell checkout's own directory name (survives the G-022 rename). PROVENANCE.md was the only operational document carrying the machine-local path - the c:/repo/jn absolute references in goals, archives and CHANGELOG are historical narrative and stay as-is. G-135 names this file's prose as the src/tools vendored-tree convention, so the relative form is set while there is one instance to copy. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
2c1dec100e |
CRLF hygiene ahead of the fossil catch-up: glob the vendored sdx patches, LF two strays
The catch-up checkin aborted on CRLF in files outside crlf-glob. Five real offenders, in two classes needing opposite treatment: - src/buildsuites/suite_tcl86/patches/* (three files) is vendored sdx source by Matt Newman and Jean-Claude Wippler plus the patch derived from it. Upstream CRLF, and the patch must stay byte-exact to apply. Added to crlf-glob, which is what .fossil-settings/AGENTS.md prescribes for a payload tree that trips the prompt - explicitly in preference to reaching for --no-warnings. - src/modules/oolib-buildversion.txt and src/buildsuites/suite_tcl86/src/main.zig are authored punkshell files (4 lines each, fully CRLF) that the root AGENTS.md LF preference governs. Converted rather than globbed; globbing src/modules would suppress the warning across authored territory. punkzip's hamlet.txt was a false positive in the first scan - already covered by the crlf-glob entry for its fixtures directory, where it is deliberately CRLF byte-exact test data. Converted in git first so the fossil checkin records identical content; a content fix applied only fossil-side would desynchronise the two mirrors in the middle of a catch-up. Note oolib-buildversion.txt is build-generated, so a future regeneration may reintroduce CRLF there. Claude-Session: https://claude.ai/code/session_01YNjnq6oDzecknLg7AuWZgU Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com |
2 weeks ago |
|
|
03306be068 |
argparsingtest 1.3.0: opt, cmdline and tepam are optional, not module-level requires
The module hard-required opt, cmdline and tepam at load time, so on a punkshell build
without tcllib 'package require argparsingtest' died outright with "can't find package
opt". A harness whose whole job is comparing parser libraries is useless precisely on the
runtime you wanted to measure, and the module already had the right pattern for this:
argp, parse_args and argparse degrade to a not_loaded row rather than taking the module
down with them. The three tcllib parsers were the odd ones out. Reproduced before the
change with punk module paths only and an emptied auto_path, which is where tcllib's
pkgIndex-based packages come from.
Every parser this module compares is now optional. Their roster entries become
{optional opt}, {optional cmdline} and {optional tepam}, so discover_parsers reports
not_loaded when the package is absent and nothing in the harness calls them. punk::args
and Tcl 8.6- remain hard requires - the harness itself is built on those.
The guard differs by package because the dependency does:
cmdline is only ever called INSIDE proc bodies, so the catch-guarded require at the top
is the whole story - the wrapper procs stay defined and are simply never invoked.
opt and tepam are used at DEFINITION time: tcl::OptProc and tepam::procedure are the
commands that create the wrapper procs. Their seven definition sites (four opt, across
opts/tkstyle/tclstyle/sandwich; three tepam) are each additionally guarded, so with the
package absent the proc does not exist at all.
Those sites test 'package present' rather than wrapping the definition in a bare catch.
Both tolerate absence, but a presence test still lets a genuine error in a spec raise
loudly on a runtime that does have the package, where a catch would swallow it. The
pre-existing argp registration site keeps its original catch idiom - working code, not
part of this change.
Pinned by module_loads_without_optional_parser_packages: a child interp with an emptied
auto_path that asserts the module loads, that each absent package's parser reports
not_loaded, and that the opt and tepam wrapper procs genuinely do not exist. Where a
runtime supplies one of the three as a .tm on a module path the test degrades to
asserting the module still loads, which is the main claim anyway.
Tests that name parsers explicitly (first_call_library_backed, first_call_positional_styles,
sandwich_strictness) now filter through a loaded_parsers helper, and the tclstyle
cmdline_typed status assertion derives its expectation from package presence: those
parsers can now legitimately be missing.
Verification: 26/26 pass under the 32-bit luck-test2 runtime with no skips, 24 pass +
2 skip under native Tcl 9.0.3. With opt and tepam hidden, the built 1.3.0 module loads,
reports both as not_loaded, and compare lists them in its "not loaded:" footer instead of
the whole module failing to load.
Claude-Session: https://claude.ai/code/session_01Q82VuBXzgeKsAwMYHrbpP1
Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com
|
2 weeks ago |
|
|
7280739204 |
Project icon: punk1.ico -> punkshell.ico, artwork from the src/assets/logo master
The four build-consumed copies are renamed and their artwork replaced with
src/assets/logo/punk-mark.ico (all four byte-identical to the master):
src/runtime/punk1.ico -> src/runtime/punkshell.ico
src/vfs/_vfscommon.vfs/punk1.ico -> .../punkshell.ico
src/vfs/mkzipfix.vfs/punk1.ico -> .../punkshell.ico
src/vfs/punk8_statictwapi.vfs/punk1.ico -> .../punkshell.ico
Recorded as delete+add rather than renames: the content is entirely different,
so git's similarity detection finds no link and --follow will not trace through.
The pre-2026-07 artwork keeps its own lineage under src/assets/logo/legacy/,
now the only place the punk1 name survives.
No code referenced the old name - every mention was documentation or goal prose,
checked before renaming.
G-057's contract lines are updated for the new path (Scope in both tiers, plus
Goal and Acceptance): pure path substitution, no semantics changed. Its Context
gains a dated note recording the rename and artwork swap, and its _vfscommon.vfs
override-detection wrinkle now names punkshell.ico. goals_lint clean.
Adds src/assets/logo/project-default/, a frozen monochrome placeholder - a blank
screen wearing the crest - held as the single copy for seeding generated
projects. Unbranded so it reads "replace me" rather than as a product identity.
Bezel and crest are ONE union path (drawn as two shapes the bezel's top edge
cuts a visible line across the mohawk) and the screen is filled rather than
outlined (a solid mass survives 16px where nested thin strokes merge). It shares
only the crest with punk-mark.svg and must not be re-derived from it: tracking
the real mark would churn every generated project on every logo tweak.
Also corrects a defect introduced in
|
2 weeks ago |
|
|
91fa500e24 |
Project logo: two-colour bracket mark, master + web set (src/assets/logo)
Replaces the busy pixel-art punk1 artwork - unreadable below ~32px - with a flat two-colour mark: a mohawked terminal plate enclosing Tcl's [ ] command substitution, Emerald #0FA36B on ink #03120C. Drawn on a 64x64 grid to hold at 16px and verified by rendering at true pixel size on both light and dark plates, rather than judging it large and hoping. src/assets/logo/ is the icon MASTER, distinct from the build-consumed copies at src/runtime/punk1.ico and src/vfs/_vfscommon.vfs/punk1.ico. Those are deliberately untouched and remain a user-directed swap. punk-mark.svg/.ico outline plate (primary) alternative/punk-mark-solid.* solid plate web/ favicon set legacy/ retired punk1 artwork, moved from repo root make-ico.ps1 keeps the .ico reproducible: rsvg-convert for true-alpha rasterizing (never browser screenshots - they bake in a background and lose the alpha the icon depends on), then a hand-assembled ICONDIR. PE icons carry 16/24/32/48/64/128 as uncompressed BGRA DIBs plus a PNG-compressed 256, keeping that entry ~5KB instead of ~265KB - each entry becomes a separate RT_ICON in every embedding kit. Regeneration is deterministic, byte-identical across runs. The web set inverts those tradeoffs. favicon.ico is 16/32/48 all-PNG (2.5KB, fetched on every cold page load) and is web-only: all-PNG is precisely what GDI+ and tklib's ico package cannot read. web/icon.svg carries a prefers-color-scheme block serving the outline plate to light tab bars and the solid plate to dark - something an .ico structurally cannot do - verified by rendering under forced dark. The apple-touch and PWA rasters are deliberately opaque, since iOS ignores transparency and composites against black. Two decoder limits are recorded in the new AGENTS.md as properties of the readers, not defects in the files: legacy GDI+ silently returns the 128px frame when asked for 256 (WIC, which Explorer and the taskbar use, reads all seven), and tklib's ico package parses DIB entries only. Root and src AGENTS.md gain Child DOX Index entries. Both converted to LF per the root line-ending policy, which explicitly declines diff-minimisation as a reason to preserve CRLF. No punkproject.toml bump: these assets are a non-shipped surface until a build consumer is repointed. Fossil still tracks the three legacy files at their old root paths and needs the rename at the next catch-up checkin. Claude-Session: https://claude.ai/code/session_01YNjnq6oDzecknLg7AuWZgU Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com |
2 weeks ago |
|
|
53c1b30745 |
make.tcl-generated outputs: bootsupport punk::zip 0.3.0 promotion
Bootsupport promotion of the G-126 accelerator module (superseded 0.2.0 pruned by the punkcheck-managed step). make.tcl's zipfs-less bake extraction path now carries the accelerator-capable punk::zip. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
df6642e189 |
punk::zip 0.3.0: punkzip extraction accelerator + parity suite (G-126); 0.28.4
The final G-126 acceptance clauses:
- punk::zip::accelerator (auto|none|<path>): auto probes
env(PUNKZIP_EXE) then a punkzip beside [info nameofexecutable];
resolution cached until reconfigured
- unzip hands whole-archive member WRITING to the accelerator only when
the call is one it serves identically (globs {*}, no excludes,
default -overwrite/-mtime/-verify, ascii member names) and re-stamps
mtimes with punk::zip's local-time convention afterwards, so the two
engines produce identical trees; preflight refusals, member selection
and the returned names always come from punk::zip's own reader (the
G-124 floor, unchanged); accelerator failure falls back to pure Tcl
silently; last_unzip_engine/last_accelerator_note expose the per-call
decision
- parity suite zipaccel.test (9 tests): identical names, bytes and
mtimes through both engines over the G-124 shapes and whole-kit
extraction of the file-relative tclsh90b4_piperepl.exe (841 members);
listings engine-independent; punkzip porcelain agrees with punk::zip
member dicts on every shared field (mtime excluded by design - UTC vs
local convention); pure path proven when the binary is absent;
selective calls proven to run pure. Implicit directories (kits store
no dir entries) are excluded from mtime comparison - neither engine
stamps them
- recorded benchmark (in the goal detail): accelerator fixed cost
~9-13ms, crossover ~15-20 members, material (>= x1.7) from ~50;
x2.3-2.6 at kit scale under a native tclsh and x3.8-4.9 kit-hosted
(punk91.exe 21.9s -> 5.7s) - the bake-from-kit case the goal
motivated
- full runtests at recorded baseline under tclsh9.0.5-punk: 1186/1211,
1 failed = the pre-existing exec-14.3 baseline
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
2 weeks ago |
|
|
25b3dcc667 |
make.tcl-generated outputs: layout sync copies of the tool subcommand
Thin-layout sync (part of the bootsupport run): the project-layout
make.tcl copies (vendor/punk/basic, vendor/punk/project-0.1, and the
punk::mix::templates modpod source tree) pick up the G-126 'tool'
subcommand from
|
2 weeks ago |
|
|
91d3594570 |
punkcheck 0.6.1: installtrack self-heals damaged persisted event history
Field failure (2026-07-27, second dev machine): 'make.tcl bake
punk9_beta' died in the vfslibs phase with
eventcollection ... key '$eventid' already exists in collection
because that machine's src/vfs/.punkcheck predates punkcheck 0.3.2.
The 0.3.2 note fixed the WRITER (a braced template wrote the literal
strings '$eventid' etc into event headers) but files written before it
keep the damage, and the modern installtrack constructor - which
reloads persisted events into a collection keyed by -id - collided on
the duplicate literals and aborted the whole bake.
- punkcheck 0.6.1: the constructor reload now self-heals instead of
aborting: an EVENT record with a missing or duplicate -id is
reconstructed under a synthesized unique id ('damaged-id-...') with
a stderr warning naming the file and the offending id. Synthesized
ids match no INSTALL record's -eventid reference, so healed events
age out through normal -keep_events pruning. Reload also tolerates
missing -source/-targets keys.
- oolib 0.1.4: the collection duplicate-key error no longer misnames
the object as 'col_processors' (stray copy-paste in the generic
class).
- regression test installtrack_damaged_event_history_selfheal seeds a
real two-event file, rewrites both -id values to the braced literal
{$eventid} (as the damaged files carry it - the record loader
evaluates records, so only a braced literal survives as the string),
and asserts the reload succeeds with both events kept under distinct
keys (one healed). Suite: 30/30.
- before/after proof against the released artifacts: punkcheck 0.6.0
(exact-pinned) reproduces the field abort on the crafted file;
0.6.1 heals it. Bootsupport promoted to punkcheck-0.6.1 + oolib-0.1.4
(superseded copies pruned), so make.tcl bakes get the fix.
Remedy already applied on the affected machine (file deletion); with
this fix, remaining old .punkcheck files anywhere self-heal with a
warning instead of failing builds.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
2 weeks ago |