Branch:
master
master
v0.1a
${ noResults }
46 Commits (master)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
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 |
5 hours 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 |
6 hours 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 |
22 hours 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 |
23 hours ago |
|
|
59bdb1ec49 |
G-033 achieved: flip, archive, reference sweep (proj: visitor mode live)
Activation and achievement same day at user direction ('activate and
start on it'). Activation freshness survey (goals_xref score G-033)
recorded in the detail file: G-043's one-directional reference is the
only unlinked real relationship; G-123/G-127/G-131 overlap by
punk_main.tcl/bin co-location only.
Detail file gains the Progress record (option (a) inline-walk
decision, verification evidence on the rebaked punk91 kit, the
moduledoc-0.1.1 live-help note and the pending vfscommonupdate
promotion) and moves content-identical to goals/archive/; index entry
moves GOALS.md -> GOALS-archive.md.
Reference sweep: G-016/G-047 relationship notes point at the archive
and the ::punkboot::proj_root_find delivery; G-032's Approach now
says the packagemode leader text is LIVE and its remaining lane is
rendering/parse wiring; G-089's Related note records that the visitor
root walk it rides is live, remains defined post-boot, and that the
boot-interface packagemode hint it needs is still absent; G-031 gains
the fork-drift datapoint (proj: landed in punk_main.tcl only,
project_main.tcl still lacks src mode and proj:); G-018/G-035/G-043
mentions gain achieved/archive markers.
goals_lint clean (85 active, 51 archived), architecture_lint clean.
Claude-Session: https://claude.ai/code/session_0156PuejSCGjgeGb7jiABrDU
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
1 day ago |
|
|
5c25d15cc7 |
G-126 achieved 2026-07-27: flip + archive record + reference sweep
Every acceptance clause is met: vendored source green under the pinned zig 0.16 toolchain via the make.tcl tool step (zig optional), upstream extract-to-directory + pinned porcelain listing, punk::zip accelerator with the parity suite (identical names/bytes/mtimes both engines over the G-124 shapes and the file-relative piperepl kit; pure path proven when absent), recorded benchmark (crossover ~15-20 members, material from ~50, x2.3-2.6 native / x3.8-4.9 kit-hosted), and PROVENANCE.md origin/re-vendor/licence records. Index entry moved to GOALS-archive.md; detail Status flipped (the file moves to goals/archive/ in the adjacent pure-rename commit). Reference sweep: G-101's pending-tense accelerator mention rewritten as achieved with the archive path; G-128's Depends-on gains the archive pointer plus the now-existing pattern surface and the zig-0.16 traps its port should read first. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 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 |
2 days ago |
|
|
1fd8af5465 |
G-129 achieved 2026-07-27: flip + archive record + reference sweep
Detail file: Status flipped, Context table corrected (the LUCK backport HAS a ::zipfs ensemble - just no root subcommand), Progress + verification records added (both 32-bit kits boot and resolve from their mounts, four 64-bit kits byte-identical before/after, unattributable-mount stderr report demonstrated, both zip offset conventions verified on the backport, kitmountpoint.test 4/4, full suite at the exec-14.3-only baseline). Index entry moved to GOALS-archive. Reference sweep: achieved/archive markers added at the G-129 mentions in G-101, G-024, G-130 and G-131 (pending-tense Approach line rewritten); forward-pointing notes pushed to their targets - G-131 gets the factored-derivation shape, measured mount tables, app/main.tcl hook and the LUCK both-capability probe row; G-123 gets the bin/AGENTS.md kit-wrappable requirements as its publication criterion pointer. Claude-Session: https://claude.ai/code/session_01UEgomWq6kA6c4A8GswqqGW Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
3 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
|
3 days ago |
|
|
78d9bf238a |
G-124 achieved: dependency-free zip reading in punk::zip (punkshell 0.26.0)
punk::zip could write a zip and split an executable-prefixed one, but nothing in the tree
could READ a zip without zipfs, vfs::zip or tcllib's zipfile::decode - a system package
punkshell does not vendor, with exactly one consumer: make.tcl's zipfs-less kit
extraction. Measured at drafting: msys2's /usr/bin/tclsh8.6 has no tcllib, so a bake
driven from that host could not lift the runtime's own zip (its tcl_library) into the kit
and the artifact did not boot.
punk::zip 0.1.1 -> 0.2.0 adds three commands, stock Tcl only. archive_info reports where
the archive begins inside its host file and which offset convention it uses; members
walks the central directory and returns one dict per entry without decompressing
anything; unzip extracts all or part of it with every member's crc32 verified,
directories materialized, and the writer's 2MB whole-member-vs-streaming threshold
mirrored. All three accept a plain .zip or a zip attached to an executable or script
prefix, so "what is inside this kit / runtime / modpod" is now answerable on a runtime
without zipfs.
The offset derivation is stated once and shared: offsetbase = cdiroffset - diroffset.
Positive means an external preamble with archive-relative offsets, zero means the offsets
are file-relative (or there is no preamble); dataoffset is the split point either way.
Because every surface reads the ORIGINAL file at that base, the file-relative shape stops
being a special case - the broken split-off intermediate is never produced.
tclsh90b4_piperepl.exe is the store's one file-relative artifact: the old
split-then-tcllib path still fails on it with exactly "Bad zip file. Bad closure.", and
it now extracts all 841 members crc-verified in 735ms.
extract_preamble consumes that machinery instead of carrying its own scan, and two
defects went with the refactor: it read 28 bytes of a 30-byte local file header, and it
derived the file-relative base from the FIRST central directory record only (its own
'#todo! loop through all cdr file headers'). The shared walk takes the minimum over ALL
records and then validates that a PK\3\4 really sits there. Its five puts stdout debug
lines are gone.
Refusals are decided for every selected member before any file is opened, so an
unsupported archive cannot leave a half-populated directory: encrypted entries, zip64
size/offset fields, unknown compression methods, crc mismatch (partial file removed) and
member paths that would escape the target are each named. Store and deflate only,
mirroring the writer's own primitives.
make.tcl's zipfs-less extraction now calls punk::zip::unzip on the original runtime and no
longer creates the extracted_<runtime>.zip intermediate. No punkshell code requires
zipfile::decode any more. Two categories of hit remain and are deliberate: tcllib's own
zip/decode.tcl shipped as a LIBRARY inside some .vfs payloads, and one guarded optional
probe inside the vendored third-party ooxml1.10/ooxml.tcl.
First tests punk::zip has ever had (src/tests/modules/punk/zip/), covering the three
archive shapes from one source tree, the introspection output, the named refusals, and
the mkzip -> read round trip - the first coverage that what punkshell WRITES is readable.
Verification, all 2026-07-26. Reference host for the dependency-free claim: msys2
tclsh8.6 8.6.12, probed as zipfs / vfs::zip / zipfile::decode all ABSENT - suite driven
there harness-free, 28 passed, 2 skipped (the zipfs-gated cross-checks only), 0 failed.
30/30 under Tcl 9.0.3, 28 + 2 skipped under native 8.6. Full source-tree suite after the
change: 1142 tests, 1 failure - core/tcl exec-14.3, the documented baseline. Independent
cross-check: 868 members of tclsh905.exe extracted byte-identical against the same
archive mounted with tcl zipfs. Bake demonstration: 'bake -confirm 0 punk905' driven by
the msys2 tclsh8.6 (host=msys-x86_64, target=win32-x86_64) produced
extracted_tclsh905.exe/{tcl_library,lib} with no intermediate .zip, and the deployed kit
boots with tcl_library at //zipfs:/app/tcl_library, 95 encodings, msgcat 1.7.1, http
2.10.2 - and reads itself with the new reader.
Trap worth keeping: zlib stream inflate's 'get' returns only what the stream has already
produced, so one get per put silently truncates a large member to the first few chunks
(measured 327680 of 5048890 bytes on both 8.6.12 and 9.0.3). The inner drain loop is
load-bearing, and the >2MB streaming test exists to catch its removal.
Standing question answered and pinned: zipfs does NOT misidentify punk::zip::mkzip
directories. It keys on the trailing slash (which punk::zip::walk always emits), not the
stored permission bits, exactly as the current cli-999999.0a1.0.tm wording says - the
older, less precise wording survives only in frozen module snapshots under
src/vfs/mkzipfix.vfs and src/vfs/project.vfs. The real difference from zipfs mkzip is
that zipfs writes no directory entries at all.
The achieved flip archives the entry and the detail file, and sweeps the live tier: G-034
(the reader is its extract-rather-than-mount alternative, plus the measured finding that
make.tcl on 8.6 cannot mount its own templates modpod), G-101 (the read half of a
zipfs-less 8.6 container is solved), G-125 (the gate now has a named failure reason to
report), G-126 (the member-dict keys and fixture set its parity suite must reproduce, and
a back-pointer to G-128 whose only recorded bridge was this goal), G-128 (archive_info
answers "is this artifact safe to move the overlay of?" in one call).
One acceptance clause is reported for review rather than claimed silently: "NO
zipfile::decode requirement remains anywhere in the shipped tree" is satisfied for
punkshell's own code, with the vendored-third-party residue named above.
The archived detail file's diff is a rename plus the flip's evidence write-up.
Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com
|
3 days ago |
|
|
04d2a51b67 |
G-122 achieved: make.tcl bakes by target platform, not host personality (punkshell 0.25.0)
Everything a bake EMITS is now keyed by the artifact's TARGET platform rather than the driving tclsh's personality: the bin/runtime/<tier> store a runtime is read from, .exe suffixing of runtime files and kit outputs, presence checks, and whether the pre-deploy process sweep uses tasklist/taskkill or ps/kill. Host semantics - copy commands, path handling, filesystem case rules, prompts - stay keyed to the host. The default target is the host's platform canon EXCEPT for a cygwin-family host (an msys2/cygwin-runtime tclsh, which reports tcl_platform(platform) unix on windows), which targets win32-x86_64. Such a host now drives the identical kit set, names and store addressing as a native tclsh; before, it reported every kit runtime=missing against a nonexistent mingw64-x86_64 store. mapvfs.config entries take an optional 4th element naming the kit's target platform, so a runtime kept in another platform's tier is a first-class mapping entry. The linux tclkit entry now declares linux-x86_64 and bakes to a suffixless bin/punkshell902. Zip-type kits assemble without zipfs in the driving tcl: when tcl::zipfs::mkimg is absent (any 8.6) the image is built by raw-runtime split + punk::zip::mkzip + concatenation - the same helper the zipcat type uses. Both mount identically (archive-start-relative offsets). Fixes exposed by the above: the runtime capability probe looked for a suffixless filename and so reported find-fail for every runtime on windows; with real capabilities arriving, the extraction try-list was found to test capability presence rather than value, which would send a plain zipfs runtime down the kit path where a failed sdx mksplit replaces raw_runtime with the un-split original; BUILDCOPY names now follow the runtime's own filename; runtime map keys strip only .exe (file rootname would eat the last dotted segment of tclsh9.0.5); and native windows command lines run through a guard suppressing msys2's posix-path argument rewriting - without it taskkill /PID <n> reached taskkill as taskkill C:/<msysroot>/PID <n>, so the sweep could find a running kit but never replace it. punk::platform folds the msys2 family (mingw64/mingw32/ucrt64/clang*) onto one stable 'msys' tag and CYGWIN_NT onto 'cygwin' - msys2's uname renders that token from MSYSTEM, so one binary otherwise canonizes differently per launching shell. New normalize_os; cygwin-x86_64 added to the platform table; 'help platforms' documents the fold. make.tcl check reports the derivation on one line; bakelist rows carry target=<platform> for non-default targets and the detail block names the tier; workflow text gains key note [K9]. New characterization suite maketclplatform.test (5 tests, two self-gating on discovering and probing a real msys/cygwin tclsh). Full suite 1112 tests: 1093 passed, 18 skipped, 1 failed = the documented exec-14.3 baseline. Verified: msys2 tclsh8.6 bakelist output identical to native Tcl 9; a changed punk91 baked and deployed from that host with the sweep killing a running instance msys ps cannot see; a real cross-target linux kit baked from windows to a 24MB ELF; a zipfs-less 8.6 bake producing a bootable zip kit. Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com |
3 days ago |
|
|
f89bd58c31 |
G-100 achieved: suite_tcl86 dependency set (Tk 8.6, tklib, tcllib + tcllibc) and an 8.6 runtests census
Extends the 8.6 buildsuite with the remaining pieces punkshell's Tcl 8 testing
depends on, all built from source with the pinned zig 0.16.0 toolchain only.
Tk 8.6.17 (build_tk86/build_tk86.zig) is a RE-DERIVATION from the staged 8.6
win/makefile.vc + rules.vc, not a port of suite_tcl90's build_tk.zig:
- no generic/tkPkgConfig.c in 8.6 -> no CFG_* defines at all
- rules.vc TCL_MAJOR_VERSION==8 arm -> tk86t.dll + lib/tk8.6 (vs tcl9tk90.dll)
- @TK_WIN_VERSION@ substitutes $(DOTVERSION).0.0, not the tcl-style
<dotversion>.<releaselevel>.<patchlevel> formula
- 8.6 TKOBJS carries no tkIcu/tkImgListFormat/tkImgSVGnano/tkWinGDI/tkWinIco/
tkWinSysTray; XLIBOBJS is a first-class makefile macro here (the 9.0
derivation had to recover those files by hand)
USE_TCL_STUBS + USE_TCLOO_STUBS against libtclstub86.a is the stock rules.vc
arrangement and keeps the dll loadable by both suite shells. tkMain.c is
compiled twice per makefile.vc, the ansi copy forced with -UUNICODE/-U_UNICODE
(verified the pinned zig cc defines neither for x86_64-windows-gnu, so the 8.6
core's ANSI/TCHAR arrangement is matched exactly).
tklib 0.9 and tcllib 2.0 install via their own installer.tcl (batch, packages
only, explicit -pkg-path so the installer's tcl_pkgPath-derived default can
never write off-tree); tcllibc is built by critcl 3.3.1 driving zig cc (tracked
critcl_zig.config, target pinned win32-x86_64-zig - critcl otherwise probes PATH
and falls back to its builtin msvc target). critcl compiles against its own
bundled headers chosen by the driving shell's version, which is why one config
serves both generations.
New evidence tools, run on every build:
tools/tk_smoke.tcl maps a real toplevel with classic + themed widgets,
updates, then destroys it - a load-only check passes
even with no usable display
tools/accel_bench.tcl same payload through sha1's critcl and pure-Tcl
implementations with the digests compared:
4MB -> critcl 5.7ms vs pure-tcl 2736ms = 477x
Test tiers (G-107 policy pattern): test-tcllib/test-tklib on the record tier
inside test-libraries, plus an opt-in test-tk (winDialog/winMsgbox excluded by
default - their message-injection automation blocks on a human under a batch
shell). First censuses on tclsh86ts.exe 8.6.18:
thread 142 run / 0 failed GATE PASS
tklib 796 run / 0 failed record
tcllib 64259 run / 41 failed record (names in the summary artifact)
tclvfs 51 run / 4 failed GATE PASS after baseline extension
The tclvfs baseline grew vfsFtp-1.1..1.3: they sit behind an 'ftp' constraint
needing tcllib's ftp package - absent at the G-099 capture, satisfied now that
the suite installs tcllib - so they run and reach the retired ftp.tcl.tk, the
same external-service class already baselined for vfsUrl-1.2/2.1.
punkshell runtests census (both runs 2026-07-26, identical flags, default
single-process sequential - 8.6 has no tcl::process so -jobs re-convoys):
native Tcl 8.6.17 1003 total / 986 passed / 10 skipped / 7 failed
suite tclsh86ts 1003 total / 987 passed / 10 skipped / 6 failed
runtests_parity.tcl finds exactly ONE difference: punkcheck
concurrency_two_writers_no_corruption failed in the BASELINE run and passed on
the suite runtime - a full-suite-load flake (6/6 twice in isolation on both
runtimes). Zero suite-runtime-only failures. Tk-dependent suites ran unskipped
(repl consolebackends 3/3, including the tkconsole backend on the suite Tk).
Two defects fixed in passing:
- scrubTclEnv never cleared TCL<major>_<minor>_TM_PATH, so suite shells
silently preferred machine/repo tm modules over what the suite had just
installed (a repo-built sha1-2.0.4.tm shadowed tcllib's 2.0.5, md5 2.0.8
shadowed 2.0.9) - any census through such a shell measures the machine. The
scrub list now covers TCL8_0..8_7 + TCL9_0/9_1 in all three sites (per-step,
suite.tcl process-level, bootstrap nested build). suite_tcl90 has the same
exposure via TCL9_0_TM_PATH and is deliberately untouched here (out of this
goal's scope) - pointers recorded in G-108 and G-116.
- build.zig.zon's .fingerprint was hand-authored, so 'zig build' from the
tracked suite dir died with 'invalid fingerprint' - the no-tclsh bootstrap
flow could never have run. Corrected to zig's computed value (its low half
is a checksum of the package name); 'zig build stage' now verified.
Goal flipped to achieved 2026-07-26 and archived; reference sweep updated G-005,
G-101, G-105 and ARCHITECTURE.md, and the archive-time xref pair G-101 <-> G-116
(whose only bridges were the archived G-100/G-103) gained a direct Related
pointer. No project-version bump - arm's-length build tooling, not shipped shell
behaviour.
Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com
|
3 days ago |
|
|
a20a64a2a1 |
G-099 achieved: suite_tcl86 zig buildsuite for Tcl 8.6 (runtime, thread 2.8, tclvfs, core-test gate)
Builds a Tcl 8.6.18 windows runtime from core-8-6-branch sources with the
pinned zig 0.16.0 toolchain only (no MS toolchain), forked from suite_tcl90
(duplication-with-a-note posture). Products (stock threaded-release naming -
rules.vc keeps the 't' SUFX on 8.6):
bin/tcl86t.dll + tcl86t.lib shared core (static zlib compiled in; no zlib1.dll)
bin/tclsh86ts.exe static shell (kit-class; dde/registry static)
bin/tclsh86t.exe dynamic shell against the dll
lib/libtclstub86.a stub lib for extensions
lib/tcl8.6/... script library tree (dde/reg dlls inside)
lib/tcl8/{8.5,8.6}/... tm modules; lib/thread2.8.13, lib/vfs1.4.2
Companions: thread 2.8.13 (thread2813t.dll, TEA installed shape from the
checkout's own pkgIndex.tcl.in) and tclvfs 1.4.2 (vfs142t.dll) build and load;
registry 1.3.5 / dde 1.4.6. No zipfs in 8.6 - exe+dll+on-disk lib tree only,
resolved hermetically (exe/dll-relative, TCLLIBPATH/TCL_LIBRARY unset in all
child runs).
Recipe: build86.zig + build_common.zig + build_zlib86/build_tclthread86/
build_tclvfs86 helpers; tools/ and src/main.zig copied verbatim (suite-agnostic).
Two load-bearing 8.6 findings recorded in the README DERIVATION and recipe
comments: MP_FIXED_CUTOFFS (the in-core libtommath ships no bn_cutoffs.c) and
TCL_BROKEN_MAINARGS + console subsystem for the gcc-class main() entry.
Test gates (suite.tcl test -> zig build test-gate/test-libraries) parse all.tcl
totals (exit codes untrusted) and gate against tracked dispositioned baselines.
First census + two-consecutive-run deterministic PASS (machine SuperBee):
core 46525 run / 2 failed (filename-16.12/16.13 admin-share self-globbing)
thread 142 run / 0 failed (empty baseline)
tclvfs 51 run / 2 failed (vfsUrl-1.2/2.1 external ftp.tcl.tk dependency)
Goal flipped to achieved 2026-07-26 and archived; reference sweep updated G-005,
G-100 (now unblocked), G-101 and ARCHITECTURE.md. No project-version bump
(arm's-length build tooling, not shipped shell behaviour).
Assisted-by: harness=claude; primary-model=claude-fable-5; 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 |
4 days ago |
|
|
b3a86ec766 |
make.tcl window achieved: G-113 + G-112 + G-104 flips, archives, reference sweep
Acceptance evidence recorded in each detail file before the content-identical archive moves: - G-112: fresh-rebuild bake products BYTE-IDENTICAL to pre-rename vfs products (punk91 zip-wrap + punk86 kit-wrap; vacuous punkcheck-skip pass caught and redone), vfslibs phase runs inside bake, aliases + bakehouse dirty-refusal verified live, docs/layout copies swept, punkexe suites 54/0 green. - G-113: zero-ESC piped on tclsh90 + punk kit + 8.6, force overrides, real Windows-console and WSL-pty mode=tty evidence, maketclcolour.test green; manual-visual note recorded. - G-104: list/info/build + self-description contract verified incl. a copied tree; punk-kit hosting; docs in place. Sweep: G-005/G-018/G-035/G-047/G-099 pending-tense references rewritten with archive pointers; forward-notes pushed to G-108/G-061/G-105; G-099<->G-108 re-bridged with a direct Related line (their bridges were all archived). Also: tclsh9.0.5-punk working runtime re-materialized to r2 (stale local materialization exposed by the window's bake - G-118 piperepl pins green again). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
4 days ago |
|
|
e1c2c952e4 |
G-120 achieved: flip, archive, reference sweep (std-slot recycling restored)
Acceptance verified on the rebuilt punk91 kit (plain script mode): recipe 'chan close stderr; open NUL w' yields a channel auto-named stderr with working puts stderr; console+repl+libunknown suites 105/105. Detail file archived content-identically with evidence recorded; GOALS-archive record appended; sweep: G-101 launch-ladder item (2) rewritten to reflect achievement (in-place stdio repair now available on the 9.1 kit), G-011 gains a recycled-stderr consumer pointer. goals_xref report shows no orphaned shared-archived-ref bridges for G-120; goals_lint clean. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
4 days ago |
|
|
d96da53646 |
G-119 achieved: flip, archive, reference sweep (freshness verdict complete)
Acceptance verified in full against the fixture punkbin server (PUNKBIN_URL override): ahead/behind verdicts naming both revisions (behind with fetch+use guidance), current annotation preserved, pre-family no-basis note + sha1 hash-identity, no-name-fetch one-line divergence note; ps1/bash verdict-line parity asserted per scenario; runtimecmd roundtrip pin green; bin/AGENTS.md runtime-manager contract records the surface. Suite evidence in the detail file's flip record. Activation and flip both 2026-07-25 (user-directed activation; overlap survey re-run at activation - only G-033 related, already recorded; no new Related lines). Detail file: status achieved + activation/flip evidence records (the goals/ -> goals/archive/ move itself rode the previous commit as a pure 100% rename; this commit carries the flip's content edits). Index entry moved to GOALS-archive.md. Reference sweep: G-033's G-119 note updated to landed-state wording with the archive path (its package-mode docs must not contradict the shipped freshness contract on naming); goals_lint clean (83 active / 37 archived); goals_xref report carries no G-119-bridged unlinked pairs. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
5 days ago |
|
|
46af2a74c0 |
G-118 achieved: flip, archive, reference sweep (tclsh subcommand review complete)
Acceptance verified in full: all 11 issue-list items dispositioned (2026-07-24) with decided fixes landed (items 3/4/5/9 in 0.20.0, items 1/7 via the G-117-cycle patch rev, item 10 docs in 0.20.1, item 11 console test) and items 2/6/8 documented-as-intended in the item-10 definitions; durable doc home = punk::args::moduledoc::punkexe; tclshcmd.test 19 piped tests green vs punk902z + punk9_beta; dorepl console-reopen path console-driven (punkconsole gate, 21/21 with PUNK_TEST_CONSOLE=1). Flip: detail file status achieved 2026-07-25 + flip evidence record; entry moved to GOALS-archive.md; detail file to goals/archive/. Reference sweep: ARCHITECTURE.md tclsh bullet marked achieved + G-118 removed from the in-flux launch-surface list; G-031/G-032/G-077/G-120 notes updated with archive markers and landed-state wording (G-032 now points at the shipped punkexe moduledoc ids as its source material; G-077 notes the boundary text to update when -e lands). goals_lint clean, architecture_lint clean, goals_xref report carries no G-118-bridged unlinked pairs. 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 |
5 days ago |
|
|
a015ada542 |
G-117 achieved: flip, archive, reference sweep; reopened pin; G-118 items 1+7 verified
Acceptance evidence in the archived detail file: embed verified in all three family members (family_check), sidecar derived from embed with identical build_id, 'info' identifies sidecar-paired/renamed-stray/pre-v1 files without execution and flags doctored-sidecar disagreements, punkbin AGENTS.md schema docs, roundtrip pin green, record survives make.tcl kit wrapping (punk9_beta reads its runtime's r2 record in-kit), r2 re-emitted with full v1 records. Sweep: achieved markers in G-025/G-057/G-108/G-116/G-118/G-119 (G-025's survival expectation updated to confirmed). tclshcmd.test pins ::tclsh(reopened) publication on the rebuilt patched kits (G-118 items 1+7 landed+verified; Progress updated). build905.zig: packager git-identity leg judges success by output not out_code (resolved 'unrecorded' on this host - effective at next emission). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
6 days ago |
|
|
49f14060e1 |
G-103 achieved: runtime kit family - flip, archive, reference sweep (wrap trial PASS)
Final acceptance item closed by the punk9_beta/punk9bi_beta kit-wrap trial (user go-ahead; quiet tree): make.tcl project wrapped both kits over the family runtimes (the user's own earlier same-day build agreed - punkcheck no-change), and probes UNDER each kit verified 9.0.5, //zipfs:/app/tcl_library, PIPEREPL MACHINERY PRESENT, Thread 3.0.7 winning over the vfs payload's legacy thread3.0.1, vfs/tcllib/tcllibc engaged, punk::args from the vfs side, and Tk create/destroy in both - punk9bi_beta's Tk necessarily from the runtime's attached image (punk9win_for_tkruntime.vfs carries none). Every acceptance clause is now met; evidence recorded in the detail file. Flip mechanics: Status achieved 2026-07-22; detail file to goals/archive/ (content-identical move after edits); index entry to GOALS-archive.md; reference sweep across 13 live goal files (archive markers per the G-058 precedent - non-contract text only, Scope lines untouched; pending-tense updates in G-099 arc-unblocked, G-108 family production landed, G-018/G-023 naming-authority pointers). Forward pointers pushed to live goals: G-101 (8.6-family deferral target), G-067 (family -rN artifacts exist; publication user-gated with the defaults.txt flip process). Flagged (completion report): tcltls bi-battery line loses its goal home with this archive - candidate goal on request; punk9wintk905.vfs legacy thread3.0.1 payload cleanup can ride a future payload refresh; beta promotion is the user's interactive trial per the *_beta convention. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
9deea90782 |
G-106 achieved flip: archive move (index entry -> GOALS-archive, detail file -> goals/archive)
Content-identical detail-file move; the flip's content edits (Status, evidence, recipe) landed in the previous commit per the doc-restructure move/edit separation rule. Index entry relocated with Scope verbatim and the detail file's Acceptance per the archive record format. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
d090f1da7c |
G-107 achieved: buildsuite library test runs (record/gate external testsuites)
All six acceptance clauses satisfied (suite tclsh90s.exe 9.0.5, zig 0.16.0, machine superbee): thread 143/0 + tclvfs 51/7 GATED with tracked dispositioned baselines, deterministic across consecutive full runs; tcllib 62328/54 WITH tcllibc accelerators engaged + tklib 796/18 RECORDED with artifact paths in the detail file; tk opt-in step with a recorded first census (9865/27, native- dialog files excluded by default); per-library policy/testargs/notfiles overridable at invocation; no-totals fails the step in gate AND record mode (verified); evidence-summary shape documented for the G-103 metadata consumer. Flips G-107 active -> achieved and archives it (index entry to GOALS-archive.md, detail file to goals/archive/). Reference sweep: G-103 Notes gain the thread- payload-refresh forward-pointer (the suite now derives thread naming from the checkout; the punk905 kit payload still carries the old 3.0.1 copy) and the evidence-summary-shape pointer; G-108 Notes record that its constrained-test runs reuse G-107's test_gate generalization + -notfiles knob. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
663f1cba91 |
G-097 achieved: layout channel folded in (user-approved); flip + archive
Layout fold ("fold stale layout fixes into this"): both layout stores
(src/project_layouts/vendor/punk/project-0.1/bin and the modpod-templates
equivalent) had shipped a stale 2025-era runtime.cmd and a pre-G-096
getzig.cmd - the getzig rename had missed this channel entirely, so
generated projects still received old-named, stale utilities. Both renamed
via git mv AND refreshed to byte-copies of the current bin/punk-runtime.cmd
+ bin/punk-getzig.cmd; the layout src/runtime/Readme.md references updated
in both stores (the layout bin/runtime/ data-dir READMEs are gitignored -
updated on disk only, like the root bin/runtime/README.md); residual
old-name scan of the layout trees clean. The built modpod zips (root
modules/ + bootsupport templates-0.2.0.tm) carry old names until their
normal re-vendor cycles. Layout paths join the goal Scope per the approved
fold.
Flip mechanics: detail file to goals/archive with Status achieved
2026-07-21 (verification in its Progress section: full rename sweep, pins
retargeted and passing 26/25/1/0, drift findings recorded), GOALS.md entry
removed, GOALS-archive record appended (amended Scope + Acceptance
verbatim), reference sweep: G-103 scope parenthetical (both tiers) +
Relationships and the G-099/G-103 sequencing notes annotated with the
achievement; G-096's archive gains a note recording the layout-channel gap
and its closure. goals_lint clean (75 active-index goals, 31 archived).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
1 week 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 |
|
|
8f331c72d5 |
G-102 achieved: no-tclsh buildsuite bootstrap - flip, archive, reference sweep
Acceptance evidence recorded in the archived detail file: PATH-scrubbed clean-clone demonstration (c:/T/g102, env probed tclsh/fossil/git-free) ran 'zig build bootstrap' end-to-end - zon-pinned sources materialized, runtime + piperepl variants built, smokes green (static/zip shells, Tk tooltip, tcllib, tcllibc accelerators via critcl+zig cc), demo shell's tcl::build-info identical to the fossil-flow build; scrubbed test gate 69552/56075/13468/9 with 8 baselined + fCmd-30.3 proven a SystemDrive scrub artifact (single-file rerun with the var: GATE PASS), matching the same-day fossil-flow delegated gate (69552/56040/13503/9 GATE PASS). Environment findings (critcl target probing, windows Run-step stdio, testsuite base-env needs, firewall consent on first socket listen) recorded in the detail file for future suite work. Flip mechanics: detail file to goals/archive with Status achieved 2026-07-21, GOALS.md entry removed, GOALS-archive record appended (Scope+Acceptance verbatim), pending-tense G-102 references in G-099/G-103/G-104/G-105 annotated with the achievement and the settled driver shape. goals_lint clean (77 active-index goals, 29 archived). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
e33dfe7ba5 |
G-094 achieved: punkcheck single record lifecycle (verification recorded); project 0.17.2
Acceptance verified in full (evidence in the detail file's Progress section): characterization suites pass with one recorded pin flip, lifecycle.test pins batch/OO field equivalence (-targets_cksums incl) and o_record_list coherence across sequential events, the retired-trio grep is clean, and a full make.tcl build completes with skip/copy decisions unchanged against pre-refactor .punkcheck state. Index entry moved to GOALS-archive.md; reference sweep: G-095 notes gain the chokepoint-achieved pointer, the transient concurrent-save evidence observed during verification, and the inherited MAX_PATH rider pointer (G-087/G-094, unaddressed); G-027's punkcheck note updated to achieved tense. Detail file moves to goals/archive/ in the adjacent commit (pure rename per the doc-restructure rules). punkproject.toml 0.17.2 + CHANGELOG entry (punkcheck ships in kits; the in-shell punkcheck API surface changed with the retirement). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
1f55a25a65 |
G-096 achieved: tracked zig buildsuite (suite_tcl90) with TCLSH_PIPEREPL capability
All acceptance items met and recorded in the goal file: clean-checkout + punk-getzig-pinned-zig build PASS (shallow-path/longpaths MAX_PATH caveat recorded; c:/T available as a shallow test base per user), recovered + rebased piperepl patch set with the G-103 opt-out gate policy and full behaviour matrix (automated rows + user interactive verification), tclsh90spr/tclsh90sprzip products, per-version punk-getzig into versioned dirs (all four paths verified), both-VCS tracking + samplesuite1/ vendorbuild reconciliation, bin/AGENTS.md naming policy + punk-getzig rename. Flipped to achieved 2026-07-20 and archived; GOALS/GOALS-archive updated; achieved markers added to the six referencing goals flagged by the lint reference sweep (G-097, G-100, G-102, G-103, G-104, G-106). goals_lint clean (79 active, 27 archived). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
67c3cf6ad4 |
G-098 achieved; propose 8.6 arc: G-099 suite_tcl86 buildsuite, G-100 Tk/tcllib set, G-101 kit container strategy
G-098 (suite_tcl90 Tk+tklib, tcllib/tcllibc via critcl, test gating) flipped to achieved 2026-07-20 and archived - all acceptance items recorded in the goal file across increments 1-7 (Tk 9.0.2 + tklib, tcllib+tcllibc ~248x hashing speedup, parsed-totals test gate with dispositioned baseline, full punkshell runtests parity with the Tcl903 baseline including Tk suites unskipped, kit-hosted runs fixed). New proposed goals mirror the arc for fossil core-8-6-branch (8.6 stays punkshell's real Tcl 8 target; current punk86-class kits ride prebuilt third-party tclkits - a provenance gap): - G-099: suite_tcl86 core - zig-only 8.6 runtime + thread 2.8-branch + tclvfs + parsed-totals core-test gate with its own dispositioned baseline. Records expected differences (no zipfs, entry-point/bundled lib divergences, no tcl::process). - G-100: Tk 8.6 + tklib + tcllib/tcllibc via critcl on the 8.6 runtime + punkshell runtests census against a native 8.6 kit baseline. - G-101: kit container strategy without zipfs (metakit/tclkit lineage vs cookfs vs zipvfs boot; TEMP_REFERENCE/metakit + KitCreator guidance) - separated so the well-understood ports stay incrementally landable. Sequencing recorded in each goal: recommendation is to close G-096's remainder and run the punk905_beta trial to promotion before activating the 8.6 arc, so shared suite scaffolding settles before it is forked. goals_lint clean. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
a16502506c |
G-076 archive flip: detail file to goals/archive, index record to GOALS-archive; reference sweep
Sweep: G-096 detail and the punk::lib gate comment now point at the archived path with achieved phrasing. goals_lint clean (72 active, 25 archived). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
ab83c9fa15 |
G-093 archive flip: move detail file to goals/archive, index record to GOALS-archive
Content-identical rename (flip edits landed in the previous commit); GOALS.md entry removed and the summary record (amended *** acceptance) appended to GOALS-archive.md per the achieved flip workflow. Rides along: CHANGELOG.md gains the required [0.17.1] entry matching the punkproject.toml bump from the previous commit (punk::path 0.4.0 *** pathglob + separable lattice; runtests targeting rework). Claude-Session: https://claude.ai/code/session_01BNUVVkYq9vHa6G3S9a3XTZ Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
972e14db47 |
G-087 archive flip: move detail file to goals/archive, index record to GOALS-archive
Content-identical rename (edits landed in the previous commit); GOALS.md entry removed and the summary record appended to GOALS-archive.md per the achieved flip workflow. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
5002371864 |
Split long-running test files to lower the -jobs parallel floor (G-092 achieved)
multishell.test (10 tests, ~105s solo child - the -jobs floor) split five ways along shared-fixture boundaries, every test moved verbatim with its provenance lines: multishell.test keeps wrap + structure/LF-only + exec smoke (incl WSL); multishell_wrapverify.test (fresh-wrap checkfile) and multishell_wrapdeterminism.test (byte-identical re-wrap) each re-pay the wrap fixture; runtimecmd_checkfile.test and runtimecmd_roundtrip.test guard the committed bin/runtime.cmd and its source round-trip with no wrap fixture at all. argparsingtest.test (17 tests, ~32s) split into timeit/discover/contract/first_call (11) + argparsingtest_compare.test (compare_*, 6). Assessed and left unsplit: dtplite.test (24.6s solo), scriptexec.test (12s); exec.test excluded as imported core material. File headers point at the src/tests/modules/AGENTS.md punk/mix bullet for the sibling map; the runtests longest-first weight table carries measured post-split weights. runtests_parity.tcl gains a -names mode: multiset comparison of '- testname:' lines from '-report markdown -show-passes 1' captures, file attribution ignored - verbatim moves compare identical, lost/ duplicated/renamed tests are reported. Verified (native tclsh 9.0.3): repeated -jobs 8 full-suite runs 1m26.3s / 1m26.8s (was 2m16s at G-091, ~5m40s sequential - 4.07x vs the pre-parallel baseline, 36.6% vs the G-091 reference); slowest child 30.7s / 31.3s (bound 45s); NAMES identical (989 occurrences) vs the pre-split sequential capture; tallies identical in every run (989/973/ 15/1, exec-14.3 sole failure, files 87 -> 92); PARITY ok -jobs 8 vs -jobs 1 and between repeats; repo clean after runs. Notable finding recorded in the goal file: child-wall contention inflation (~45% with 50s+ dominant children present) collapsed to ~15% once the work distribution was flattened - splitting reduced both the critical path and the contention itself. G-092 flipped to achieved 2026-07-19 and archived (GOALS-archive.md record, detail file with full verification evidence to goals/archive/). goals_lint clean. Also noted in the goal file, out of scope: runtests -include-paths multi-pattern/repeated-flag matching misbehaved during measurement (single value with four deep patterns matched one; repeated flags matched zero) - contradicts documented semantics, needs its own investigation. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
1a1847c2e7 |
runtests -jobs N parallel test execution (G-091 achieved)
-jobs N (implies -singleproc 0; explicit -singleproc 1 conflicts) runs test files through a tpool of N concurrent child processes with per-child capture files and tcltest -tmpdir subdirs, longest-first static-weight submission, and a -serial-paths serial tail (default: the console-state suites modules/punk/console/** + modules/opunk/console/**; piped-child-driven suites proved parallel-safe and each serial file costs its full child boot strictly after the parallel phase). Cached results feed the unchanged processing loop in discovery order, so reports are identical in shape and order to sequential runs. Watch mode emits file-collected events (completion order, output relayed there); file-end (tallies) stays discovery-order. The runner now reports jobs phase times and the ten slowest child WALL times (child wall includes boot + file-level fixture cost that per-test usec misses). Two Tcl-core-level behaviours found and worked around in the child spawn (see the verification record in the archived goal file): - concurrent BLOCKING execs from worker threads convoy on Windows (all return at the longest concurrent child's exit; plain sleepers 2-12s from 8 workers all walled at 12.0s) -> spawn via 'exec ... &' and poll per-pid tcl::process status; blocking fallback retained for runtimes without tcl::process (tcl 8.6). - Tcl_ReapDetachedProcs runs on every exec and purges finished background children process-wide, racing the poll (nondeterministic 'key <pid> not known in dictionary') -> tcl::process autopurge false + explicit per-pid purge after the status read. Verified on native tclsh 9.0.3: repeated -jobs 8 full-suite runs 2m16.2s / 2m15.6s with PARITY ok vs -jobs 1, between repeats, and vs the pre-parallel baseline (987-test identity, exec-14.3 sole expected failure); 2.58x vs the ~350s sequential baseline (2.41x vs one cooler-machine 5m28.8s sequential run - recorded in the goal file); repo clean after every run. G-091 flipped to achieved 2026-07-19 and archived (entry to GOALS-archive.md, detail file to goals/archive/ with the verification record; reference sweep updated runtests.tcl comments and the src/tests/AGENTS.md marker). goals_lint clean. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
d2e96dbe30 |
G-082 achieved: punk::args 0.12.1 single-form error selection - specific rejection preferred over generic overflow
A word rejected by an OPTIONAL argument's allocation screen (G-071 restricted-choice screen, or the basic int/double/bool/number/dict type screen) that subsequently overflows the argument list now reports the specific rejection instead of "Received more values than can be assigned": - choiceviolation naming the word and allowed choices, with -badarg/-badval and the final-validation message template (Leading/Trailing argument attribution), for choice-screen rejections - typemismatch naming the declared (normalized) type, with -badarg/-badval, for basic-type screen rejections Mechanism: private::get_dict_can_assign_value returns a 'rejection' record (single-member clauses only; literal-category mismatches deliberately not recorded); get_dict_form collects first-rejection-per-word from the three allocation call sites (leader/value split trial, leaders loop, values loop) into a per-form store; the two toomanyarguments raise sites prefer a recorded rejection for the unassignable word. Genuinely-surplus words still report toomanyarguments; words consumed by later slots parse unchanged; multiform selection (rank_form_failures) untouched. errorselection.test _GAP pins flipped to the pointed expectations (pre-fix behaviour pinned in the previous commit). punk::args buildversion 0.12.0 -> 0.12.1. Closeout: G-082 flipped achieved + archived (index -> GOALS-archive.md, detail -> goals/archive/ with mechanism/verification/residue recorded); G-073 note updated to point at the new rejection-record seam; src/modules/AGENTS.md authoring-ergonomics bullet re-documented (-optional 0 workaround no longer needed on >= 0.12.1; make.tcl keeps it - it runs against the bootsupport 0.12.0 snapshot). Project version 0.12.28 + CHANGELOG. Verified: full punk/args suite 228/224/0-failed (4 intended skips) and punk/ns 57/57 under Tcl 9.0.3; errorselection.test 7/7 under Tcl 8.7; make.tcl frobnicate still pointed; goals_lint clean. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
7ea1deaae5 |
G-030 achieved: make.tcl dogfoods punk::args - tabled usage, declared subcommands, -confirm prompt policy
All 15 make.tcl subcommands are punk::args-declared ((script)::punkboot + (script)::punkboot::<sub>, built from single-source summary/help/opt dicts with shared option fragments and explicit @form -synopsis). Bare make.tcl / -help, 'help ?subcommand?' and '<subcommand> -help' render tabled usage; invalid flags/subcommands raise punk::args usage errors (exit 1) with unambiguous prefix resolution; 'shell' is a declared passthrough. Prompt policy: new -confirm 0|1 (default 1) on every confirmation point (bootsupport minor-staleness gate, vfscommonupdate REPLACE, kit-type mismatch). Default prompts only on an interactive terminal and aborts fast with guidance on non-interactive stdin (::punkboot::lib::stdin_is_interactive; Tcl 8.6 lacks the -inputmode probe and is assumed interactive). -confirm 0 proceeds (staleness, REPLACE) or skips the mismatched kit. The piped-y agent workflow is retired; the old vfscommonupdate decline half-abort (printed done, exit 0) now exits 1. Degrade rule: punk::args/punk::ansi/textblock boot requires guarded; definition load caught with fallback to a self-contained scan (-k/-dirty-abort/-confirm supported) + plain punkboot_gethelp (availability NOTE factored into punkboot_availability_note, shared by both paths); rendering degrades independently of parsing (errorstyle minimal / plain help when the ANSI stack is unhealthy); PUNKBOOT_PLAIN=1 forces degraded mode. punk::args joins the bootstrap-tracked _runtime_deps staleness set (parsing contract only - the rendering stack degrades instead; contract docs updated in src/bootsupport/AGENTS.md + src/modules/AGENTS.md, workflow docs in src/AGENTS.md + src/tests/shell/AGENTS.md). Verified: usage/help/error paths, vfscommonupdate fail-fast and -confirm 0 runs with closed stdin, staleness flag route live (args 0.5.0->0.12.0 tripped the gate), degraded-mode help/check/info, full 'project -k -confirm 0' kit build. Dogfooding finding recorded in the goal file: punk::args 0.12.0 reports generic overflow where 0.5.0 reported choiceviolation for optional-choice mismatches (worked around with required leaders; candidate error-selection improvement). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
6af0fd541e |
punk::args 0.12.0: formcheck on-demand multiform ambiguity analysis + @form -overlapallowed sanction (G-074 achieved)
New punk::args::formcheck <id> ?-return dict|summary?: reports the form pairs of a multiform definition that some argument list could cleanly match simultaneously (the multipleformmatches inputs). Static pairwise pass over the resolved FORMS enumerates each form's positional word-slot chains (leaders then values; -optional and ?-wrapped clause-member branching; -multiple capped; options excluded - order-free), screens aligned equal-length chains per position (discriminator words via choiceword_match, type witnesses from a small table), and CONFIRMS every candidate witness arglist with a real single-form parse against both forms (parse_status - no raise, no user-supplied words, no define/resolve cost). Findings are therefore witnessed - discriminated form pairs cannot false-alarm; misses (exotic types, option-requiring forms, enumeration caps) are the documented conservative direction. Classes: type_weakness (discriminator aligned with a permissive non-validating type - any/none/string/ansistring/globstring/expr/script) vs structural (forms genuinely share an argument shape). New @form key -overlapallowed <formname-list> sanctions a KNOWN overlap on either pair member: the finding reports with sanctioned 1 and leaves the result's unsanctioned list (the actionable/gate subset). Parse behaviour is never affected; unknown form names are rejected at definition resolve (end-of-forms cycle). @form directive doc updated. tclcore moduledoc 0.3.4: the documented after cancelid/cancelscript overlap (runtime-liveness ambiguity, 0.3.0 record) sanctioned on the cancelid form - ::after now reports zero unsanctioned findings while 'after cancel <id-shaped>' still raises multipleformmatches. ::lseq deliberately unsanctioned: formcheck reports range/start_count (witness {1 count 1}) AND range/count (witness {1 by 1}) - both real, both rooted in the expr-typed end slot, kept visible pending an expr syntax-validating type (G-069/G-070). Tests: new args/formcheck.test (7) - no-finding cases (parse withid/withdef pair, afterish/sharedform fixtures), class+sanction fixture, unknown-form rejection, -return summary, ::lseq/::after pins with witnesses re-verified, sanction parse-neutrality. punk::args suite 210/210, punk::ns 57/57. G-074 achieved and archived (acceptance review in the detail file); G-055 verification gate gains the formcheck step (unsanctioned must be empty for regenerated multiform commands). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
7e7d515cd0 |
G-041 achieved: multi-form matching - automated form selection for parsing and documentation
Acceptance reviewed clause-by-clause in the detail file: auto-selection
on a unique clean match (forms.test GAPs flipped), candidate-naming
noformmatch/multipleformmatches errors, -form list restriction across
get_dict/parse/parse_status/arg_error, doc surface presenting the
best-matching form(s) ('i after cancel <id>' presents the cancel form;
's after cancel someid' underlines the matching synopsis lines),
explicit single -form unchanged, full punk::args/punk::ns suites pass
(full tree 822/836 with only the exec-14.3 baseline failure).
Flip edits: index entry to GOALS-archive.md (achieved 2026-07-13),
detail Status flipped with acceptance review and live-verification
record, reference sweep updates G-044 (candidacy API now available -
parse_status formstatus), G-055 backlink, G-072 backlink. Detail-file
move to goals/archive/ follows as a pure rename; goals_lint transiently
unclean between the two commits.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
2 weeks ago |
|
|
deb8f17d72 |
G-051 achieved: doc-walk choice-prefix parity + truthful doconly cmdtype (punk::ns 0.4.0, punk::lib 0.4.1, project 0.12.13)
Space-form docid prefix parity: cmd_traverse's space-delimited child
docid jump, on an exact-word miss, now resolves the word against the
current level's choices-bearing first leader via
punk::args::choiceword_match (the shared G-040 resolver - -choiceprefix,
-nocase, -choicealiases, denylist, reservelist honoured) and retries
with the canonical word. 'i string is tr' resolves to the
"::tcl::string::is true" documentation exactly when 'string is tr 1'
executes; 'string is bool' -> boolean; ambiguous ('d'), unknown ('zz')
and denied words stay at the parent exactly when parse rejects them.
resolvedargs records the canonical, mirroring parse normalization. No
second matching rule exists.
Truthful cmdtype: cmdinfo classifies cmdwhich-notfound + non-empty docid
as 'doconly' (was 'notfound') - documentation-only levels below real
commands (per-class ids like "::tcl::string::is true", documented TclOO
method docids; the method case adopts doconly per the recorded design
decision, refinable by G-052). Consumers audited: cmdhelp/synopsis/eg
are docid-driven, cmdtrace tests only for 'proc', punk::help topic
fallback uses cmdwhich; punk::lib script analysis updated in step
(doconly accepted alongside notfound, bucketing unchanged).
Tests: the four G-051 GAP pins flipped and renamed
(cmdhelp_pseudo_command_cmdtype_doconly,
cmdhelp_spaceform_docid_prefix_honoured + ambiguous/unknown guard,
cmdhelp_string_is_true_pseudo_doconly,
cmdhelp_string_is_prefix_honoured). punk::ns 53/53 (cmdflow + non-GAP
cmdhelp unchanged), punk::args 193 pass / 1 pre-existing skip,
punk::lib 35/35; full source-tree suite result in the detail file.
Live verification (punk902z src): 'i string is tr' renders
byte-identical to 'i string is true' except the failure banner echoing
the typed words.
Flip edits: G-051 index entry to GOALS-archive.md (achieved 2026-07-13),
detail Status flipped with acceptance review and verification record,
reference sweep updates G-052 Notes. Detail-file move to goals/archive/
follows as a pure rename; goals_lint transiently unclean between the two
commits.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
2 weeks ago |
|
|
d4519f41d3 |
G-071 achieved: punk::args 0.9.0 allocation choice screen - lseq-class optional-element arglists parse in-form (project 0.12.11)
Root cause: get_dict_can_assign_value blanket-satisfied the member check
for any argument carrying choices, so an optional restricted-choice value
(the lseq '..'/'to' noise word) consumed any word whenever arity
permitted, starving later elements/clauses and failing validation with a
confusing trailing-choices error ('lseq 0 10 2' shape).
Fix: an allocation choice screen using choiceword_match (the shared G-040
implementation - exact/alias/prefix/nocase semantics; -choicemultiple
words screened per list member within min/max), applied only where
allocation has an alternative: -optional arguments and further
occurrences of -multiple arguments. Required arguments are deliberately
not screened - the word must fill them and validation's choiceviolation
reporting stays informative (the existing parsestatus/cmdhelp/choices
pins forced and now document both refinements). -choicerestricted 0
behaviour unchanged.
Results: the allocation.test GAPs flipped ('1 2 3' and '1 2 by 3' parse
with correct clause shapes {{} 3}/{by 3}; '1 2 3 4' gets the plain
excess-values rejection instead of blaming the unrelated optional);
prefix normalization survives the screen; all noise-word variants and
if-shape guards unchanged. lseq moduledoc matrix parses per lseq.n under
-form range, and 'i lseq 0 10 2' works end-to-end. Remaining lseq
divergences trace to G-041 form selection or the -type expr laxity
recorded in G-055 - not allocation.
Also corrected an increment-1 mis-premise: parse_status ALREADY accepts
-form before the withid/withdef tail per its documented synopsis - the
probe had passed it trailing. GAP replaced by
parsestatus_form_option_order (correct-order acceptance incl. the form
key, trailing rejection). No code change was needed for that acceptance
clause.
Verification: punk::args suite 193 pass / 1 pre-existing skip / 0 fail;
punk::ns 53/53; full source-tree suite 813 pass / 13 skip / 1 fail =
exec-14.3 only (known baseline) - zero regressions (tclsh 9.0.3; lseq
verification in punk902z src, Tcl 9.0.2).
Flip edits: G-071 index entry moved to GOALS-archive.md (achieved
2026-07-12), detail Status flipped with the acceptance review and
before/after record; reference sweep updates G-041 (prerequisite fixed,
parse_status correction) and G-072 Notes. The detail-file move to
goals/archive/ follows as a pure rename; goals_lint transiently unclean
between the two commits.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
2 weeks ago |
|
|
66df76c82e |
G-045 achieved: punk::args 0.8.1 define quoting documentation; flip + archival edits (project 0.12.8)
Increment 5 (final): the container quoting rules pinned by defquoting.test now appear in the punk::args::define -help documentation - braced values fully literal (backslash sequences survive as typed); double-quoted values get Tcl backslash semantics at record parse while $ and [] stay literal with no substitution outside tstr placeholders; the backslash-escaped placeholder idiom renders a literal placeholder. Rendered section verified in punk902z src (meta-escapes display correctly). punk::args suite 186 pass / 1 pre-existing skip / 0 fail. Acceptance review recorded in the detail file: all criteria satisfied across increments 1-5 (@cmd -unindentedfields 0.6.1, i help alignment punk 0.2.4, -& record continuation 0.7.0, @normalize + define_docs consumer proof 0.8.0/punk 0.2.5, quoting documentation 0.8.1; suite grown 128 -> 187 tests, GAPs flipped, none weakened, full source-tree suite zero regressions). Flip edits: G-045 index entry moved to GOALS-archive.md (achieved 2026-07-12), detail file Status flipped with evidence in Progress, reference sweep updates G-053 notes. The detail file move to goals/archive/ follows in the next commit as a pure rename (per the goals/AGENTS.md archive rules) - goals_lint is transiently unclean between the two. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
bac122da9f |
G-039 achieved: punk::repl 0.5.0 dead-console watchdog stops orphaned-shell CPU spin (project 0.12.2)
An interactive shell orphaned by its hosting console dying (killed conhost/terminal) previously spun ~2 cores forever: the Tcl 9 windows console driver never delivers the dead-console state to the script as a fileevent (tclWinConsole.c ConsoleEventProc only notifies on buffered data) while its reader thread busy-loops on the persistent channel error, so the script level is completely blind and nothing ever closes the channel. Fix: repl::console_watchdog - a self-rescheduling liveness poll (default 5s, repl::console_watchdog_ms; read-only GetConsoleMode probe via chan configure -inputmode) armed by repl::start only for a tcl9 console input channel serving the process-default console on windows. On probe failure it closes the input channel (stopping the driver's reader thread) and finishes the repl via the normal eof done-path; app-punkshell then finds no console reopenable and exits cleanly. Piped, foreign-console and tcl 8.6 inputs never arm it. repl::start's post-vwait reader deregistration now tolerates a watchdog-closed channel. Verification (2026-07-12): kill procedure post-fix exits the orphan in 1.5-2.0s with no traceback (src mode and rebuilt kits punkbi/punk91/ punk902z); 25s live-console soak shows no spurious trigger, CPU delta 0; piped stdin unaffected; repl consolebackends 3/3 and punk::console suites 88 pass / 1 skip; root cause verified against plain tclsh 9.0.3. Upstream ticket filed: https://core.tcl-lang.org/tcl/tktview/f10d91c2d3 Included: - goals: G-039 flipped achieved 2026-07-12 and archived (index entry to GOALS-archive.md, detail file to goals/archive/ with full root-cause, repro and verification record); reference sweep adds the eof done-value producer note to G-038 - src/modules/punk/AGENTS.md: watchdog contract documented - project version 0.12.1 -> 0.12.2 + CHANGELOG entry - vfs payload sync: _vfscommon.vfs punk/repl 0.4.0 -> 0.5.0 Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
99af43c8be |
goals: G-062 achieved archival + archive-loss prevention (sweep rules, backlink markers, goals_lint)
Finalises the G-062 achieved flip staged by the prior session (punkshell 0.12.1): LICENSE.txt (BSD-2-Clause, Julian Marcel Noble 2023-2026) at the repo root, README/punkproject.toml/AGENTS.md license declarations, index record to GOALS-archive.md and detail file to goals/archive/. Archive-loss prevention, from the G-015 incident (its achieved-status verification parenthetical was silently dropped by the 2026-07-11 two-tier restructure's Status-line normalisation; the text is restored to the G-015 archive file's Notes with provenance): - root AGENTS.md 'Doc Restructures': deleted-line conservation check before committing bulk doc migrations, structured-field-normalisation hazard (relocate prose to body sections first), moves separated from edits - goals/AGENTS.md: lintable header field grammar (one line per field, bare Status values), flip-time verification evidence recorded in the body, the archive move content-identical, and a new archive-time reference sweep: pending-tense mentions of the archived goal updated in the live tier, and actionable archived notes pointed to from the affected live goal's Notes - GOALS.md maintenance rules: achieved-flip clause extended to require the evidence write-up and the reference sweep Retroactive reference sweep over all 12 archived goals (25 live detail files): pending-tense fixes (G-002 G-008 G-013 G-016 G-017 G-021 G-022 G-031 G-042 G-044 G-050 - G-017's Goal/Acceptance annotated as gate-satisfied, contract meaning unchanged), forward pointers pushed from archived notes (G-062 license-seeding follow-on -> G-012/G-027, G-037 vendorlib/vfs drift semantics -> G-024, G-058 static-baseline mechanism -> G-005), and one 'Archived-goal references' Notes bullet per remaining referencing file so every live mention of an archived goal is resolvable without consulting the archive index. scriptlib/developer/goals_lint.tcl (new, plain tclsh): validates detail-file header grammar, strict status values in both tiers, orphan rules in both directions, Status/Scope mirror consistency, plus an informational (never fatal) warning for live files referencing an archived goal with no achieved/archive marker - baseline now zero warnings. Root AGENTS.md scriptlib/developer ownership note widened to cover developer utilities. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
3 weeks ago |
|
|
3d14721d42 |
goals: G-001 achieved 2026-07-11 - archive entry + detail; project 0.11.0
Acceptance verified (consolebackends.test child-process drivers): repls run interactively through ssh-socket and tk-widget ::opunk::Console subclasses with size/at_eof/can_respond answered by the overrides, base class and punk::console unchanged. Detail file records increment 2 and the non-gating residue (per-run output batching, punk/0-only junction wiring, raw-mode untested on foreign consoles, process-global console state -> G-008). Project version 0.10.3 -> 0.11.0 with changelog entry (new user-visible shell capability: repl::init -console). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
3 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 |
|
|
f5cd86ebf1 |
add goals infrastructure: index format, archive stub, goals/ DOX doc
Harness-agnostic technical project goal system. GOALS.md holds the canonical one-line index with format spec, status taxonomy, maintenance rules, and an agent-authoring workflow so agents asked to 'help me write a goal for X' ask the right questions. GOALS-archive.md is the achieved-goals archive stub. goals/AGENTS.md is the DOX child doc covering naming (G-<id>-<slug>.md), when a detail file is warranted, and the no-orphans/archive rule. goals/archive/.gitkeep tracks the archive dir. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Assisted-by: harness=opencode; primary-model=unknown; api-location=unknown |
4 weeks ago |