Tree:
2a7fbafa77
master
v0.1a
${ noResults }
261 Commits (2a7fbafa776da5317e68bfddd460fb1b117f7d14)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
b10505f623 |
Goals: draft G-149/G-150/G-151 (user-approved proposals)
G-149 punk::args configurable multi-form synopsis hint labels (the
hard-coded ' i -form N ...' column, repl-centric and unreachable for
(script) ids - identified during G-143).
G-150 punk::ns cmdhelp form narrowing + selection-sound auto_exec::hash
declaration (-regexprefail {^-} on the plain name value - the verified
fix for the latent 'Ambiguous arguments' on bare parse-withid; brings
the make.tcl help dry-run contract to 'i').
G-151 punk::args annotated success render (received-args landing
report - the punk::args-level supersession of make.tcl's interim
'dry-run: line accepted' line).
All proposed status; overlap surveys recorded per goal (punkargs family
via goals_xref; G-044/G-050/G-056 named as related, G-149<->G-151
cross-linked). goals_lint clean.
Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com
|
1 week ago |
|
|
6711302b5c |
G-143 achieved: make.tcl multi-form tool/buildsuite definitions + per-action help depth
tool/buildsuite/help are multi-form punk::args definitions (one @form per action, literal single-choice action leaders + choicelabels): 'help tool' / 'help buildsuite' render one synopsis line per action; 'make.tcl help <subcommand> <action>' - equivalently '<subcommand> <action> -help', or a 0-based form index ('help tool 2') - renders that action's single-form usage; unknown actions and out-of-range indexes are pointed punk::args errors (exit 1). tool dispatch parses through the definition (unknown actions/flags: exit-1 usage errors). User-approved deviation: the declared positional model puts options before tool names ('tool build -test 0 <name> ...'); docs/agent guidance updated to match and a flag-shaped tool name earns a stderr hint; the PUNKBOOT_PLAIN degraded scan keeps the historic flag-anywhere parse. buildsuite driver-arg passthrough unchanged. G-144 consumer follow-through: all 17 per-subcommand @form -synopsis overrides retired (automatic @cmd -name bracket-notation synopses; top-level make.tcl override kept deliberately). Pinned by new punkexe/maketclhelp.test (12 tests); full punkexe subtree green (114 tests, 0 fail). Goal flipped to achieved and archived; punkshell 0.40.0. Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com |
1 week ago |
|
|
543dd1df40 |
G-144 achieved: punk::args auto-synopsis @cmd -name fallback for (script) ids
Auto-generated synopses for (script)-prefixed constructed definition ids now lead with the declared @cmd -name (the invocation name - e.g 'make.tcl modules' for (script)::punkboot::modules) instead of the raw id, across punk::args::synopsis full/summary renders and the usage/arg_error synopsis sections that funnel through them (punk::args 0.12.7 -> 0.13.0). The fallback is gated on the (script) prefix only (user-confirmed narrowing): (autodef) ids are excluded - their id-minus-tag IS the invocation (arg_error's existing tag strip surfaces it) while their @cmd -name is a display label ('destroy', 'Object: ::x'); (shared)/(package)/(default)/(widgetcommand) doc ids declare no invocation-style -name today and render the id as before. Real command ids render byte-identical (full args testsuite passes with no pin updates). Six new synopsis.test pins: (script) full/summary/multiform/ surfaces, no-name constructed id, autodef unchanged, real-id byte-identical. Goal tiers: index entry archived to GOALS-archive.md, detail file moved to goals/archive/ (G-143's pending-tense Related line rewritten to reflect achievement + follow-through pointer: make.tcl's @form -synopsis overrides are now optional, retirement under G-143 or a follow-on edit). Docs: @form -synopsis directive known-case text, synopsis -help, src/modules/AGENTS.md ergonomics bullet. Project 0.39.5 -> 0.39.6 (patch: latent capability, no shipped definition renders differently today). Bootsupport refresh (make.tcl modules + bootsupport): snapshot gains args-0.13.0.tm and picks up two lagging source syncs - mix/commandset::layout 0.2.0 -> 0.3.0, mix/commandset::project 0.4.0 -> 0.4.1, and the shellfilter 0.2.4 G-145 comment; superseded copies pruned. Assisted-by: harness=opencode; primary-model=openrouter/moonshotai/kimi-k3; api-location=openrouter.ai |
1 week ago |
|
|
28e86027d4 |
Goals: draft G-147/G-148 (user-approved proposals)
G-147 libfetch revision check: read-only report of newer server revisions for declared artifacts (Tin check/upgrade translated to punkbin's deliberate-adopt discipline). G-148 vendor upstream discovery: read-only ref/tag listing + pin-drift report for G-065 declared packages (Tin autoadd translated to hand-authored-declaration discovery). Cross-linked as siblings; back-pointers added to G-141/G-142/G-065. Assisted-by: harness=opencode; primary-model=huggingface/moonshotai/Kimi-K3; api-location=unknown |
1 week ago |
|
|
6f1d020690 |
Goals: draft G-146 (user-approved proposal)
G-146 [proposed] Fossil binary-glob seeding for generated projects: the trailing fossil initial commit of a generated project aborts on binary payload (layout bin/sdx.kit, injected zip-based .tm modules, incoming G-136 .ico) because thin layouts ship no binary-glob setting. Deferred twice already (G-087 -> G-012 territory); scoped as its own goal with the glob-value and seeding-path decisions recorded as open options and relationships to G-136/G-086/G-027/G-114/G-047 surveyed. Assisted-by: harness=opencode; primary-model=opencode/kimi-k3; api-location=unknown |
1 week ago |
|
|
24bc272c93 |
G-012 achieved: inert VCS-config template payloads + layout gitignore refresh
Layout .gitignore payloads are now stored inert as gitignore.in and
materialized to .gitignore at project generation, ending the
self-censoring-template hazard (live nested .gitignore files silently
untracked template content in git while fossil managed it fine):
- punk::mix::commandset::layout 0.3.0: layout_materialize_renames map;
layout_stage_chain renames inert payloads after composing all overlay
layers (.anti markers keep targeting store names); layout_materialize
withholds the in-place fast path from inert-payload folders so the
store is never renamed; inert+live name conflict errors loudly
- make.tcl thin-layout sync refreshes every vendor/punk layout's
gitignore.in from the canonical repo-root .gitignore (punkcheck-tracked
sync_layouts events); workflow text updated
- the four vintage payload variants eliminated as drift: all payloads
now byte-identical mirrors of root; modpod copy carried and its stale
.gitignore pruned
- materialize.test +5 G-012 characterization tests (25/25; mix subtree
71 pass / 1 known skip)
Verified end-to-end: generation from each affected layout yields a
byte-identical .gitignore (othersample .anti case yields none); root
edits propagate to payloads via make.tcl libs in both directions; the
|
1 week ago |
|
|
15a7e27acb |
G-145 achieved: ansistrip transform drops 'clear' op - remnant-free piped help
The Tcl core delivers 'clear' to a transform stack before EVERY write op
(output-buffer flush-down; tclIORTrans.c ReflectOutput, gated on METH_CLEAR -
intentional and test-pinned, but under-documented: doc/transchan.n and TIP 230
scope clear to seek/read-side buffers). ::punkboot::ansistrip::transchan's
clear handler ran 'dict unset carry $chanid', discarding a split sequence's
held ESC tail at every write-chunk boundary: the next chunk's ESC-less
remainder ('0;1m', '1m') passed through unstripped as orphan fragment text in
piped usage tables, while the dropped ESC bytes kept the G-113 zero-ESC pin
green. The transform is write-only with no read-side state, so its
contract-conformant clear is a no-op - it no longer declares the op, the
per-write calls never fire, and the split-sequence carry survives every chunk
boundary. finalize still drops an end-of-stream partial sequence. No change in
textblock/punk::ansi (pre-transform stream verified well-formed during
diagnosis; exonerated).
Pin: maketclcolour.test gains maketcl_colour_help_tables_zero_remnants -
piped 'tclsh src/make.tcl help' for all 20 declared SUMMARIES subjects plus
bare 'help'/'-help', asserting exit 0, zero ESC bytes, zero orphan fragments
(two-step detector: strip complete sequences, then scan for [0-9;]+m not
preceded by ESC or an open bracket - a raw scan false-positives on ';1m' inside complete
multi-parameter SGR). Failing-first evidence: pre-fix the pin names exactly
the 5 fragmenting invocations (help, -help, help libs, help info, help
bootsupport); the 22-invocation NO_COLOR+PUNK_FORCE_COLOR pre-transform
corpus carries no legit text matching the detector.
Verified (tclsh 8.7a6, win32-x86_64): all 22 invocations byte-level clean;
PUNK_FORCE_COLOR=1 output intact (1177 complete sequences, 0 orphans); the 3
G-113 colour-policy pins pass unchanged; shell/testsuites/punkexe family (15
files, 102 tests) and shell/*** (127 tests) green, warnings pre-existing only;
'make.tcl packages' verified, layout + modpod make.tcl copies synced by the
build (punkcheck-managed outputs batched here per the carve-out).
Bookkeeping: goal flipped active -> achieved 2026-08-01, detail file archived
(goals/archive/G-145-piped-usage-ansi-remnants.md), G-056 Notes gains the
exoneration pointer; src/AGENTS.md colour bullet + src/tests/shell/AGENTS.md
suite description updated; project version 0.39.4 (patch) with CHANGELOG
entry.
Assisted-by: harness=opencode; primary-model=opencode/kimi-k3; api-location=unknown
|
1 week ago |
|
|
ba2f77ed8a |
Goals: draft G-143/G-144/G-145 (user-approved proposals)
G-143 make.tcl help depth: multi-form tool/buildsuite definitions and per-action usage - @form sections with literal action leaders so help shows which actions take <toolname>/-test, 'help <sub> <action>' renders the single form, tool dispatch becomes fully declared, buildsuite keeps its passthrough driver-args contract. G-144 punk::args auto-synopsis @cmd -name fallback for non-command ids - unblocks dropping make.tcl's hand-written ?...? @form -synopsis lines in favour of the automatic bracket notation (retires the G-030 workaround for (script):: ids). G-145 remnant-free piped usage tables - root-cause and eliminate the orphan CSI fragments ([0;1m / [0m / lone m) observed beside table borders in piped help output; extends the G-113 zero-ESC guarantee to zero sequence-fragment text. All three born from the 2026-08-01 argdoc restyle evaluation (mechanisms verified live on bootsupport punk::args 0.12.7). Overlap surveys recorded in each detail file; goals_lint clean (83 active-index goals); xref score reviewed per goal - the top term-scored unlinked pairs for G-143 (G-085, G-021) checked and judged lexical-only, no relation recorded. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
711f5a1ade |
G-141 Scope rewording (user-approved): stale "format coordinated with G-127" clause updated to the achieved surface
Index + detail-file mirror in step: the src/vfs/*.vfs.toml entry now reads
"the achieved G-115 surface carrying the achieved G-127 platform axis" -
same treatment the clause received when G-115 flipped (
|
1 week ago |
|
|
2c4e8ed2fd |
G-127 achieved 2026-07-31: cross-target bake of a custom .vfs - per-target payload + per-target output location
- Acceptance verified clause-by-clause (detail file Progress increments 1-5): one-run two-target same-vfs real bake to distinct artifacts (flat native + bin/kits/<platform>/), cross-run no-overwrite by construction + live two-run same-name check, two-non-native namesake coexistence, per-target payload selection via %platform% on vendorlib + packages roots, byte-comparability by the recorded prefix+content method (punk86 identical; punkdeclare 2805 members identical), mismatch reporting live + G-133 regression pin, bakelist locations, punk9linux migrated-plus-hand-curated record, punkshell902 + verify-ix86 relocations executed and recorded, G-023 reconciliation stated, native outputs unchanged with punkexe suites 101/0-fail, kit-loop TODO retired - punkdeclare.vfs.toml: both payload entries now %platform% (vendor tree + packages tier), flat folder payload removed - whole payload stages per target - index entry -> GOALS-archive.md record; reference sweep: achieved markers + actionable pointers in G-141 (derivation input live), G-137 (seam already per-kit), G-131, G-114, G-105, G-023, G-101, G-116, G-060 - relocation orphans removed (flat punkshell902 + punkluck86 copies) - detail-file move to goals/archive/ follows as a pure rename Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
dca5ea6f40 |
G-127 activated (user-approved): status flip both tiers + freshness Related: lines; G-060 VMM survey notes
- GOALS.md index + detail mirror: G-127 proposed -> active - G-127 Notes: G-060 runnability-split note (acceptance host-verifiable end to end; on-target execution of cross-target kits = G-060 territory), plus G-141 and G-137 back-pointers from the goals_xref score freshness survey - G-060 Alternatives considered: crosvm rejected (no FreeBSD guests), Firecracker VMM review candidate (FreeBSD guests, Apache-2.0; GPL undesirable but not a showstopper), QEMU strong lean re-affirmed (widest guest + dev-host support) Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
852d684ae6 |
G-101/G-127/G-131/G-141 Scope rewording (user-approved): stale mapvfs.config / vendorlib_vfs.toml references updated to the achieved G-024/G-115 surfaces
Scope lines are the index's discovery mechanism (path-grep + goals_xref path overlap): after the G-024/G-115 migration the old filenames matched nothing on disk, so agents editing src/runtime/mapvfs.toml or src/vfs/*.vfs.toml would silently miss these goals. Minimal swaps, index + detail-file mirrors in step: - G-101/G-131: mapvfs.config -> mapvfs.toml (annotations unchanged) - G-127: vendorlib_vfs.toml -> src/vfs/*.vfs.toml (the achieved G-115 surface this goal adds the platform axis to); mapvfs.config -> mapvfs.toml - G-141: vendorlib_vfs.toml -> src/vfs/*.vfs.toml (the achieved G-115 successor surface; format coordinated with G-127) Archived G-024/G-115 records deliberately untouched (accurate history). goals_lint clean; xref path discovery verified resolving to the reworded goals. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
0d80cf6771 |
G-024 + G-115 achieved: mapvfs.toml kit mapping + declarative per-.vfs payloads (punkshell 0.38.0)
G-024 - kit mapping converted to toml (tomlish-parsed), same-day activation->achieved: - src/runtime/mapvfs.toml: [kit.<name>] / [group.<name>] / [scheme.<name>] tables (header comment = user-facing spec). All 12 active line-format mappings migrated (order preserved - identical bakelist rows vs the legacy parse); historical comments carried over; mapvfs.config deleted here AND in the project-0.1 layout (converted to mapvfs.toml there). - make.tcl reader family under the unchanged G-121 model surface: mapvfs_locate (toml > legacy; PUNK_MAPVFS_CONFIG env override = characterization seam), mapvfs_parse dispatching on extension, strict mapvfs_parse_toml, deprecated mapvfs_parse_config fallback (un-migrated generated projects keep baking, with a NOTE; toml wins when both files exist). Shared toml helpers hoisted to punkboot::lib (inline toml_untag copies removed). - Strict entry-named validation: unknown keys/types/schemes, conflicting targets, duplicate outputs, parse failures fatal (exit 3 pre-build). Full-bake unresolvables split by nature: missing vfs folder (repo content) fatal per entry; missing runtime file (environment - part-populated stores are legitimate) entry-named recapped BUILD-WARNING + skip. - Groups: @<group> selection in bake/bakelist, group/default/scheme notes columns + detail lines, groups listed in errors and argdoc choices. verify-ix86 wraps the G-129 kits; bake_default=false excludes entries from full bakes. - G-023 versioned scheme declared live ([scheme.punk8]/[scheme.punk9], group versioned, bake_default=false pending G-023 activation): parse-time expansion from punkproject.toml to punk<gen>-<version> / punk<gen>-dev / release-gated punk<gen>; kit loop creates the plain name when absent and never overwrites it on a normal bake. punk9-dev baked end-to-end; punk9 gate skip demonstrated. - Consumer dedupe fix: several entries may share one runtime on one vfs - kit-output enumeration and the kit-loop runtimes list process each distinct runtime once (latent multiplication in the legacy format, unreachable there). G-115 - declarative .vfs composition with drop-in preservation, same-day activation->achieved: - Sibling declarations src/vfs/<name>.vfs.toml ([payload.<name>]: source, source_root src|packages, target, supersedes, replace) materialized by the new VFSPAYLOAD phase (bakehouse/bake/vfslibs; selective bakes narrow; strict entry-named errors). Drop-in-wins precedence via punkcheck -overwrite synced-targets: undeclared or modified-since-install files preserved and reported (changed-but-preserved NOTE = files_skipped minus sources_unchanged); supersedes/replace are the explicit exceptions; an undeclared .vfs is untouched. - vendorlib_vfs.toml relationship settled: folded/superseded - all six install entries migrated into per-.vfs files for the 13 participating folders (first materialization run reproduced every payload with zero tracked-content change); file deleted; a leftover copy warns and is ignored. - Demonstration kit punkdeclare (group declare-demo, bake_default=false, smokerequire udp+tcllibc): VCS carries only the boot fauxlink; the whole lib_tcl9 payload (tcludp vendor tree + tcllibc consent-gated packages tier) rematerializes from the declaration - clean-tree rebuild smokes pass in-kit, and drop-in survival was proven live (a foreign pkgIndex.tcl and an undeclared note both survived; the foreign file genuinely won until removed, caught by the G-133 smoke probe as designed). Payload ignored in both VCS (.gitignore + derived ignore-glob; ignore-sync verification clean). - Docs: src/vfs/README.md (format + precedence spec), src/vfs + src/runtime + src + bin AGENTS.md, ARCHITECTURE.md (+lint clean), workflow text and summaries/helptexts/argdoc; layout store seeds the convention (vfs README + mapvfs.toml; machinery travels via the established make.tcl sync). Verification: legacy-vs-toml identical kit rows; punkluck86 force-rebuilt under both formats content-identical (identical 1.73MB runtime+stamp prefix, identical 2993-member payloads; whole-artifact byte identity is not a pipeline property - consecutive same-config rebuilds differ in zip timestamp metadata, pre-existing); punkexe suite 98 tests 0 failures incl. 5 new G-024 characterizations (maketclbakelist.test: @group filter + PUNK_MAPVFS_CONFIG fixture tests) and updated pins (payloadcheck declared list + punkdeclare; platform detail wording). Goals: both flipped achieved 2026-07-31 with evidence in the detail files; GOALS.md entries moved to GOALS-archive.md; live-tier reference sweep applied (G-004/G-019/G-023/G-025/G-026/G-035/G-065/G-127/G-131/G-137/G-141) including the G-127 mapvfs-seam retirement note (PUNK_MAPVFS_CONFIG) and a direct G-137<->G-127 bridge replacing the archived G-024 one. Detail files move to goals/archive/ in the follow-up pure-rename commit. Also included as found: the developer's concurrent G-142 goal addition (GOALS.md entry + goals/G-142-punkbin-listing-manifests.md), committed unmodified for git/fossil coherence - not agent-authored. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
e53087c6d0 |
G-142 drafted (user-approved): punkbin curated listing manifests - index entry, detail file, G-141 back-pointer
Per-tier listing manifests with named groups (current/lts/vulnerable/archive) separating the listing surface from the sha1sums integrity ledger; activation assessed as immediately possible (no goal dependencies; G-141 libfetch surface coordination only). Assisted-by: harness=opencode; primary-model=huggingface/moonshotai/Kimi-K3; api-location=unknown |
1 week ago |
|
|
64bbc9fb3d |
G-024 + G-115 activated (user-directed): status flips + activation-freshness overlap notes
Both goals flip proposed->active at user direction. Activation-freshness overlap surveys (goals_xref score) recorded as Related: notes: G-024 gains G-127/G-131/G-137 pointers, G-115 gains G-127/G-141 pointers (goals drafted since the 2026-07-24 overlap reviews). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
9b587aed59 |
G-123 achieved: third-party runtime tiers - flip, archive record, reference sweep
Status active -> achieved 2026-07-31 (acceptance walk in the detail file); index entry moved to GOALS-archive.md; live-tier sweep: achieved markers on the G-127/G-130/G-131/G-141 Related lines and the G-006 absorption note (interim trust flags libfetch + punk-runtime named); actionable-note pushes to G-105 (server surfaces ready for cross-target artifacts), G-101 (8.6 tier riding the mechanism; tclkit86bi sidecars), G-067 (provenance/consent patterns to inherit), G-127 (the no-alternate-mapvfs-seam finding from the e2e demonstration). xref report: no unlinked pair had G-123 as its only bridge. Detail-file rename to goals/archive/ follows as its own pure-rename commit. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
6017acac6c |
G-123 activated: third-party runtime tiers (user-directed flip)
proposed -> active in both tiers. Activation-freshness survey re-run (goals_xref score G-123) per the maintenance rules: strongest pairs G-127 and interval-drafted G-141; back-pointer Related lines recorded in the detail file for G-141 (lib-tier selectivity sibling sharing the server-trust consent surface), G-127 (cross-target kit bakes consume served tiers), G-130 (32-bit runtimes publish through the per-target layout) and G-131 (win32-ix86 zipfs specimens are third-party tclkits the provenance backfill covers). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
a65893dc6f |
G-141 drafted: libfetch consumption-derived target selection (proposed)
Index entry + detail file. 'make.tcl libfetch' (G-139) fetches every declared libpackages.toml artifact regardless of what the host or bake consumes - already pinching on WSL (win32-x86_64 zips downloaded for a linux-only bake; G-140 worked around it via the PUNK_LIBFETCH_CONFIG test seam) and set to grow as G-004 migrates more vendored trees to the punkbin lib tier. The goal derives the default fetch set from the consumption declarations already in the tree (PACKAGES host needs + the kit set's packages-sourced vfslibs targets) with narrow/widen overrides, derivation reporting, and a VFSLIBS missing-source hint naming the fetch the failing bake needs. Overlap survey recorded (strongest live intersections G-127/G-115; relations G-006/G-065/G-004/G-123/G-027). Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
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 |
|
|
8e6bd3e8a0 |
G-140 drafted (user-approved): linux lib-tier emission - cross-built tcllibc
New proposed goal, flagged at the G-139 achieved flip: punk9linux.vfs's linux-built tcllibc + stray tcllibc2.0 are the last provenance-less accelerator hand-drops in any kit payload. G-140 commits a narrow zig -target lane on the existing windows suite: critcl driving zig cc with an explicit linux target section (stubs linkage - no cross-built runtime, no linux build host), emitted as lib/linux-x86_64/tcllibc-tcl9-r<N>.zip through the established G-138 machinery (record target=linux-x86_64, build_host_platform=actual host), verified by a host-side ELF check + byte-identical re-emission + a WSL accel smoke under an existing punkbin linux Tcl 9 runtime, consumed via the G-139 declaration idiom (libpackages.toml + vendorlib_vfs.toml supersedes/replace + a punkshell902 cross-target bake with in-kit record + WSL kit smoke). The libc/triple decision (dynamic glibc floor direction) is recorded as direct input to G-105's dynamic-libc and mapping items - back-pointer added to G-105 Notes (non-contract). tcl8 generation dispositioned out of the committed set (no linux tcl8 kit). Overlap survey run (goals_xref paths across the scope): G-105 the strongest live intersection (carried as Related with the lands-first framing); G-116/G-130/G-060/G-123/G-004/G-065 carried; G-108/G-110/G-131 co-location only. goals_lint clean. 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 |
|
|
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 |
2 weeks ago |
|
|
50269d6ad9 |
G-138 + G-139 activated (user-directed)
Index tags and detail-file Status mirrors flipped proposed -> active. Activation-freshness overlap surveys re-run (goals_xref score, both goals): no overlaps beyond the drafting-day survey - drafted and activated same day, no goals drafted in the interval; survey notes recorded in both detail files. goals_lint clean. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
9065232e82 |
G-138 + G-139 drafted (user-approved): punkbin library artifact tier and its consumption
Motivated by the 2026-07-30 provenance investigation: the vendored tcllib trees are hand-dropped 2023/2024 local builds whose only machine-readable provenance is critcl's teapot.txt, while both buildsuites already build tcllib 2.0 + tcllibc (zig cc) in their default step lists with full provenance available at build time. G-138: publish suite-built tcllib/tcllibc as immutable -r<N> <package>.zip artifacts in a new punkbin lib/ tier - lib/allplatforms for platform-neutral (user decision 2026-07-30), lib/<target> for binary packages - deterministic punkzip assembly, embedded class=library artifact record (G-123 schema-v2 lineage), sidecars + sha1sums, deliberate-publish revision discipline (zig non-reproducibility), md5c disposition required. G-139: consume the tier - consent-gated make.tcl fetch into an untracked bin/packages/<target> input tier mirroring bin/runtime/<tier> (user decision 2026-07-30), punkcheck-installed lib_tcl<N> materialization, tcllib/tcllibc brought under vendorlib_vfs.toml declarations with supersedes removing tcllib1.21/tcllibc0.4 from 8.6-family kits (kit-hosted runtests validation), vendored-tree retirement sequenced after a proven artifact-path bake (G-004 payoff), derived-project story: fetch default / in-project suite build alternative. Interim-carrier framing recorded: the zip tier does not supersede the G-066/G-067 .tm direction. Overlap surveys run (goals_xref); strongest live relation G-123 (runtime-tier sibling) carried in both. Also recorded in G-139 Context: lib_tcl8|9/test_old orphans moved to TEMP_REFERENCE/retired_lib_tcl_test_old 2026-07-30 (were untracked). goals_lint clean. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks 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 |
2 weeks ago |
|
|
0f2f95cc7e |
G-137 drafted (user-approved): kit version resources - RT_VERSION stamping from punkproject.toml via punkres
Index entry + detail file written per the draft presented and approved 2026-07-29/30. Status proposed. Carries the 2026-07-10 requirements sketch from the G-057 archive (copyright carry-over default, ProductName naming the core Tcl version, toml config direction), the punkres-only-arm decision with the twapi/sfe BuildVersionResource alternative recorded under Alternatives, the three-surfaces reconciliation obligation with G-025/G-117, and Related lines for G-023/G-024/G-025/G-028/G-006/G-004 plus the archived G-057/G-117/G-128/G-134 anchors. Overlap survey recorded (no live goals intersect src/tools/punkres or src/make.tcl; bin/ surfaced G-004 + G-023). Two in-parens punctuation adjustments vs the presented draft (inner '; ' became ' - ') so the Scope line parses as single elements under goals_lint's '; ' element grammar. goals_lint clean; no dangling references. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks 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 |
2 weeks ago |
|
|
9f4c44454e |
G-134 activated (user-directed): status flip + activation-freshness overlap survey
goals_xref score re-run at activation: no relationships beyond those already recorded (G-028's overlap is lexical - the probe reads assembled build images, not deployed exes, so no locked-exe interplay; G-131/G-127 already carry Related coverage). goals_lint clean. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks 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 |
2 weeks ago |
|
|
6558a32e7e |
G-128 activated (user-directed): status flip + activation-freshness overlap survey
goals_xref score G-128 re-run at activation; two relationships recorded as Notes: G-105 (host-native punkres build for the e2e non-windows clause; cross-target builds + naming live there) and G-101 (the 'kit' shape is the sdx/metakit container - post-hoc stamping of it rides the opaque-overlay taxonomy, move-safety to be measured). goals_lint clean. 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 |
|
|
b757d183e8 |
G-057 activated: kit icon sidecar + PE resource embedding
User-directed proposed->active flip. Activation freshness survey (goals_xref score G-057) found no relationships beyond those already recorded in the detail file (G-128 and G-127 linked bidirectionally; G-123 referenced with the optional back-pointer absent; higher-scoring unlinked pairs are lexical coincidence). goals_lint clean. 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 |
|
|
bcf6625d7b |
G-135 activated: asset provenance records
User-directed proposed->active flip. Activation freshness survey (goals_xref score G-135) found no relationships beyond those already recorded in the detail file (G-136, G-057, G-128, G-133 all referenced; higher-scoring unlinked pairs are lexical coincidence). goals_lint clean. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks 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
|
2 weeks ago |
|
|
b692979c6a |
G-135 + G-136: per-asset assetorigin sidecars replace the directory record
Pre-activation review outcome (user-approved wording): G-135's record shape pivots from one assetorigin.toml per directory to a per-asset sidecar, <asset-filename>.assetorigin.toml beside the asset it describes. G-135 contract: Scope (both tiers, mirror-identical) names per-asset *.assetorigin.toml sidecars. Acceptance rebuilt - records are bound by the sidecar's own filename (suffix stripped, same directory; files ending in the suffix are records, never assets; reader tolerance kept); the checker's state model is repaired to six states evaluated in table order with first match winning (artifact-absent added for records whose paired asset is gone; verified now requires every hash the sidecar records to match, so a hash-only sidecar verifies on the artifact hash alone; fixtures must distinguish stale / replaced / artifact-absent); the generator clause requires byte-identity per the invocation profile that produced each .ico and that the generator (re)writes each produced artifact's sidecar, so regeneration cannot leave a stale record; the final clause requires sidecars to exist and verify for every generated artifact under the four asset directories. G-135 body: Approach carries the pairing rationale (no path key, file- pair lifecycle, survives wholesale and single-asset copies, composes under merge_over same-path replacement) and the hash-required minimum; the six-row state table gains the evaluation-order and unhashed-claims notes. Alternatives inverted: the per-directory [[asset]] record is now the rejected shape (shared-state writers - the punkcheck G-094/G-095 lesson; file-level clobber at a .vfs root under overlay merges; invisible dangling entries; single-asset copies lose their record), and a fauxlink-carried record is recorded as considered-and-rejected (the filename would encode a mutable fact; overlay pairing would need a nominal-keyed composition invariant in every composer), preserving the nominal-keyed idea as fauxlink hardening independent of this goal (71 fauxlinks in tree, zero same-directory nominal collisions, surveyed 2026-07-28). Notes add the override-without-sidecar kit behaviour (travelled common sidecar truthfully reads replaced), the eased checker parsing posture, and the open pre-activation items (which of the four build-consumed punkshell.ico copies get sidecars; whether a _vfscommon.vfs sidecar shipping inside every baked kit is the intent). G-136: acceptance names icon.ico.assetorigin.toml and the per-asset dependency; Approach/Notes reworded to match. G-057: one Notes sentence disambiguates its per-kit icon sidecar from G-135's record sidecars. goals_lint clean (index/detail mirrors exact, archived-goal references markered); goals_xref score G-135 re-run - G-136 and G-057 linked. G-135 stays proposed; activation is the user's flip. Claude-Session: https://claude.ai/code/session_014wNGMsdNFFrU1duADeirgm Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
164687d260 |
G-135 + G-136: asset provenance records and generated-project icon seeding
Two proposed goals from the src/assets/logo work, split rather than combined: "the master-to-derived chain is verifiable anywhere" and "generated projects arrive with an icon" are separate outcomes with separate acceptance, and the second merely consumes the first. G-135 - asset provenance records. Nothing currently states that src/runtime/punkshell.ico came from punk-mark.svg, so one failure is undetectable: edit the SVG, forget to regenerate, and the committed .ico silently stops depicting the master. An optional directory-scoped assetorigin.toml records the derivation; a plain-Tcl checker classifies each asset as unrecorded / verified / source-absent / replaced / stale, advisory only. Absence of a record is the DEFAULT and stays silent - a record is an opt-in claim, and every field but path is optional, so "I know this file, I don't know where it came from" is expressible. The same goal retires the Windows tie in make-ico.ps1. The dependency is one line - System.Drawing, decoding PNG to raw BGRA - since pwsh and rsvg-convert are both cross-platform and Tcl core ships zlib. G-136 - generated projects seeded from src/assets/logo/project-default/ at generation time, as a sibling to bootsupport_inject with punkcheck install records, rather than storing artwork in layout trees. Layout storage would mean three copies with no master (project-0.1, basic, and the punkcheck-managed modpod-templates copy), reversing G-087's thin-layout achievement. Because G-135's record is directory-scoped with relative paths it copies verbatim and reads `verified` at the destination. Scope for G-135 separates the two tools rather than bundling them: the generator is replaced in place under src/assets/logo/ (it operates on the files beside it and is already documented there), while the checker is a lint in the shape of goals_lint and architecture_lint and belongs in scriptlib/developer/ - with the home explicitly revisited if it becomes a bake step, since scriptlib/ is user-only and make.tcl must not depend on it. That deferral follows G-057's existing "helper proc location decided in the work" pattern. Both goals record the workflow questions deliberately kept OUT of their acceptance: when the checker runs (bake step vs subcommand), and which layouts declare an icon slot. G-057 gains a Related pointer to G-135 per the dependency-direction convention - its per-kit sidecar is specified to carry "source .ico identity and provenance", which these records are the natural source for. goals_lint clean (86 active-index goals, 50 archived); the G-133 reference carries its archive marker in Notes per the Archive rules. 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 |
|
|
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 |
|
|
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 weeks ago |
|
|
0ad8544ee0 |
G-126 activated (user-directed): punkzip accelerator work begins
Status proposed -> active in the index with the detail-file mirror updated. Pre-activation baseline is recorded in the detail file Notes; first work item is the zig 0.16 port of the upstream checkout. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
9b0fe35aa0 |
G-134 drafted + G-128 amended (user-approved): archive-relative bake pin, consented file-relative stamping
Two halves of one file-relative policy decision. G-134 (new, proposed): advisory post-assembly punk::zip::archive_info probe at the G-133 seam pins make.tcl's own kit outputs archive-relative - by-construction property becomes a checked contract; mkzip -offsettype file and modpod stay available for deliberate manual creation. G-128: the straight file-relative refusal becomes default-refuse with a consent-flag preserve (central-directory offset fix-up by the shift delta, zip64/multi-disk still refused), plus Notes recording the rationale, the Authenticode sign-after-stamping rule, and the convention-conversion parking. goals_lint clean (85 active, 49 archived). Assisted-by: harness=opencode; primary-model=openrouter/moonshotai/kimi-k3; api-location=openrouter.ai |
2 weeks 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 weeks ago |
|
|
7a37e36362 |
G-133 drafted (user-approved): bake payload/target consistency checks
Candidate goal from the G-129 aftermath (user-observed 32-bit kit breakage): an advisory binary-architecture scan over the merged tree at the G-125 gate seam (platform-subdir aware, covers cross-target kits) plus a per-kit post-bake smoke-require probe through the artifact's own tclsh subcommand (plain package require - the only observer of version-preference shadowing). Overlap survey named G-024/G-131/G-127/G-028/G-130/G-123, non-overlap G-115, precedent G-125/G-129. Advisory-vs-gate for smoke failures recorded as the open decision at activation. Claude-Session: https://claude.ai/code/session_01UEgomWq6kA6c4A8GswqqGW Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks 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 |
2 weeks ago |
|
|
59f14d8e46 |
G-129 activated (user-directed): kit-boot mount-point derivation begins
Index entry + detail mirror flipped proposed->active. Activation-freshness overlap survey (goals_xref score G-129) found one relationship drafted since the goal was written: G-130 points here with no back-pointer - recorded as a Related: note in the detail file. Claude-Session: https://claude.ai/code/session_01UEgomWq6kA6c4A8GswqqGW Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 weeks ago |
|
|
df83b21a24 |
bootsupport: replace mounted modpods by delete-then-place, and explain the windows catch-all (punkshell 0.27.4)
'make.tcl bootsupport' failed three times this session replacing the zip-based
punk::mix::templates modpod, always with:
error copying "<src>" to "<dst>": invalid argument
Root cause, demonstrated rather than inferred. A zipfs mount MEMORY-MAPS its archive
(tclZipfs.c CreateFileMappingW + MapViewOfFile), and windows refuses to overwrite a file
with a user-mapped section open - ERROR_USER_MAPPED_FILE (1224). Any holder blocks it: a
running punk shell that loaded the modpod, a src-mode session, or the build itself.
Reproduced directly: the same file copies fine unmounted, fails while zipfs-mounted, and
copies fine again once unmounted.
The message is a dead end BY CONSTRUCTION, which is why two earlier attempts at
characterising this (in commit messages and in the archived G-124 detail file - first "a
modpod make.tcl has itself mounted", then "a transient lock") were both wrong in different
ways. Tcl_WinConvertError maps only Win32 codes 0..267 and sends everything above them to
errorTable[1], which is EINVAL - so EVERY high-numbered windows error surfaces as "invalid
argument", naming neither cause nor remedy. Byte-identical code in 8.6 and 9.1b1.
FIX. ::punkboot::replace_possibly_mapped_file tries the ordinary copy and, on failure,
falls back to DELETE-THEN-PLACE, which windows does permit: unlinking a mapped file leaves
the holder reading its own mapping while new content lands at the name (measured: delete
succeeds while mounted, the mount keeps serving its old content afterwards). Replacement
content is staged to a sibling <target>.punkboot-new first, so a mid-sequence failure can
never leave the target missing; a 'broken' return - unlinked and unrestorable - is reported
as a build failure naming the file to restore by hand. This replaces a narrower prior
workaround that only recognised the already-identical case and otherwise recorded FAILED.
DIAGNOSIS. ::punkboot::mapped_file_hint fires when a genuine failure carries the catch-all
message and explains what it actually means and which process class to look for, instead of
leaving "invalid argument" bare. It stays silent for unrelated errors.
Verified on the real failure: the bootsupport run that has failed all session now reports
"(in-place overwrite refused - replaced by delete-then-place; target was memory-mapped, e.g
a mounted modpod)" and completes, with no hand-copy and no rerun. Helper-level checks cover
the unmapped path (plain copy, unchanged), the mapped path (recovers, content correct,
holder's mapping intact, no temp left behind) and both hint branches. Full suite 1167 tests,
1146 passed, 1 failure - core/tcl exec-14.3, the documented baseline.
Documented in src/bootsupport/AGENTS.md, including the general warning that 'invalid
argument' from ANY windows file operation in Tcl means "some windows error above 267" and
must never be read at face value.
Also drafts G-132 (user-approved): the errno catch-all is upstream's defect, not ours, and
deserves reporting. The goal is deliberately shaped so an AGENT DRAFTS AND THE DEVELOPER
SUBMITS - no account use, no web form, no API - following the G-039 precedent, with the
submission-ready text staged in TEMP_REFERENCE and the finding, reproducer, eventual ticket
URL and disposition kept in the tracked detail file, because TEMP_REFERENCE is one
'git clean -xdf' from gone. The report's claim is deliberately narrow: the errno conversion
is plainly wrong, while the related fact that 'file copy -force' over a mapped file succeeds
on unix and fails on windows rides along as context rather than as a second demand.
punkshell's workaround is explicitly not removed if upstream fixes it - an upstream fix
dates it rather than deletes it.
Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com
|
2 weeks ago |
|
|
226b691471 |
G-130 + G-131 drafted (user-approved); G-129 records why it stands alone
Two goals from the third-party 32-bit kit investigation, plus the finding that kept G-129 independent. G-129 Notes: the developer asked whether G-129 is needed to support baking with third-party kits. It is - it is the LAST blocker. The chain is: read the runtime's attached payload (G-124, achieved), do not let the boot-precondition gate falsely refuse it (G-125, achieved, plus the punkboot::utils 0.4.0 third-convention fix), then have the baked kit FIND that payload at boot (G-129). Measured by running punk_main.tcl's detection logic verbatim under bin/runtime/win32-ix86/tclsh8.6.10-luck-zip.exe: has_zipfs is 0, the //zipfs:/app branch is never computed, the kitpath branch is skipped, and NO internal module or lib paths are added - while tcl::zipfs::mount really does report the archive mounted at the exe path. So the failure is not "mounted somewhere unexpected and mis-resolved", it is "concluded there is no zipfs at all". This corrects an earlier recommendation to fold G-129 into G-131: folding would have parked third-party kit baking behind a much larger goal that needs a runtime carrying two container capabilities, which in turn needs G-101's port work. G-130 - 32-bit windows runtimes from the buildsuites, both Tcl generations. The motivation is supply, not architectural completeness: old, firewalled or sandboxed systems (industrial ones especially) are where 32-bit persists, they cannot fetch what they need, and a machine carrying binary Tcl modules built for only one major forces the runtime to match the modules. No single supplier keeps current 32-bit windows Tcl available for both majors. Acceptance keeps the binary-extension gate the developer asked for - each runtime must LOAD a real 32-bit extension, not merely start - because accepting drop-in modules is the whole point; twapi 4.7.2 inside the LUCK runtime is a 32-bit dll already in the tree for the 8.6 side. Both generations are required before the goal is met, since the motivating case is precisely that the machine's modules dictate the generation. KIT/CONTAINER TYPE IS DELIBERATELY OUT OF SCOPE - this goal produces runtimes, not kits; that question is G-101's. Sequencing per the developer: before or around the FreeBSD work, because a bitness change is likelier to surface recipe assumptions than another OS at the same bitness. Recorded as verified: punk::platform::local already reports win32-ix86 from a 32-bit interpreter and make.tcl derives the matching host/target/store, so no platform-canon work is needed. G-131 - one runtime, either payload: boot-time container autodetection (metakit or zipfs). Today a runtime's container is fixed when the runtime is ACQUIRED, so deliverables multiply by container: per platform, per generation, per container. If the boot detected what is attached, the container would become a bake-time choice and the count would collapse to platform x generation. Drafted to EXTEND G-129 rather than supersede it, and to depend on G-101 for the metakit arm to exist at all on a suite-built runtime. Its zipfs obligation is only that G-129's derivation still holds when reached through container detection. Carries two constraints found during the survey: the design must be preinit-shaped from the start, because G-101's Tcl 9 survey found the proc tclInit override the tclkit lineage relies on is dead in 9.1 and tcl_libPath is gone; and it explicitly rejects KitCreator's compile-time KIT_STORAGE_MK4/_ZIP/_CVFS switch - the closest prior art - because a compile-time answer still produces one binary per container. Scope names src/make.tcl's kit_type_mismatch check, whose premise (a runtime implies one container) this goal makes false. cookfs and other exotics are out of scope by the developer's decision. Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com |
2 weeks ago |
|
|
8cbdf86fff |
G-129 drafted (user-approved): kit boot finds its payload wherever the archive mounted
Arising from the third-party 32-bit kit investigation. src/vfs/_config/punk_main.tcl decides whether the running kit has an attached zipfs image with two assumptions that held for every runtime punkshell had until now: it probes with 'info commands tcl::zipfs::root' and then looks for the mount at a compiled-in //zipfs:/app. Christian Werner's androwish / undroidwish backport gives Tcl 8.6 a working zipfs but no 'root', and mounts the executable's attached archive at the EXECUTABLE'S OWN PATH, so [info library] reads <exe>/tcl8.6. Against such a runtime punkshell concludes "no zipfs", neither the zipfs nor the kitpath branch runs, and the kit silently gets no internal module or lib paths at all - the failure surfaces later as packages that cannot be found. project_main.tcl carries the identical code, so the same defect ships into every generated project; both files are in Scope. Two third-party 32-bit runtimes now in the win32-ix86 tier bracket the problem and are named as the verification pair: tclsh8.6.10-luck-zip.exe (Lean Undroidwish Construction Kit - no 'root', no ::zipfs ensemble, mounts at the exe path, library at tcl8.6/, and no zipfs at all in child or thread interps) and tclsh9.1b0-tclsfe.exe (apnadkarni/tcl-sfe - the modern //zipfs:/app convention on the same architecture). The Acceptance requires both: the tclsfe kit proves the 32-bit target itself needs nothing special and that the derivation did not regress the ordinary case, the LUCK kit is the actual work. Both are untracked per G-004, so tests naming them self-gate on presence as the G-124 piperepl pin does; the LUCK build is reproducible from its .cfg build request. Approach settled in the draft: derive the mount point from tcl::zipfs::mount itself, whose entries pair mountpoint with mounted file - the entry naming this executable is this kit's archive wherever it landed. Detect zipfs by a command the backport also provides rather than by 'root'. Leave the kitpath and cookfs branches alone. Report on stderr when an archive is attached but no mount entry matches this executable, because silence is today's failure shape and is what made this expensive to diagnose. Overlap survey named G-031 (restructures this same file into a thin main plus shared boot core - whichever lands second adopts the other's shape, and the derivation belongs in the core), G-101 (its candidate container list already includes zipvfs-over-tclvfs boot, and the LUCK runtime is a ready-made specimen carrying zipfs, vfs 1.4.2 and starkit together), G-123 (these are punkbin candidates; kit-wrappability decides whether a runtime publishes as a usable tier), G-125 (achieved - its gate learned the tcl<M>.<m>/ library convention so such a kit can now be BUILT; making it BOOT is this goal), plus G-114 and G-127 as deliberate non-overlaps - same file, different axes. Also records in G-024 a design direction from the developer (non-contract Notes): the toml move is where NAMED GROUPINGS of mapvfs entries should be considered, prompted by wanting verification kits active but obviously not shipped products. Grouping would also give bake and bakelist a name to select on beyond per-kit names, and the commented-out historical entries somewhere honest to live. Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com |
2 weeks ago |
|
|
ec781d7019 |
punk::libunknown 0.2.3: pkgIndex.tcl scripts run in the global namespace again (punkshell 0.27.1)
A third-party 8.6 kit under evaluation (Lean Undroidwish Construction Kit, 32-bit windows)
could not load its own bundled twapi 4.7.2 inside punkshell:
P% package require twapi
invalid command name "twapi::set_scriptdir"
("package ifneeded twapi 4.7.2" script)
twapi's pkgIndex.tcl defines 'namespace eval twapi { proc set_scriptdir ... }' when the
INDEX is sourced, and its ifneeded script calls that command at require time. The command
existed - as ::punk::libunknown::twapi::set_scriptdir. punk::libunknown 0.2.0 moved index
sourcing out of 'namespace eval ::' into source_pkgindex, a proc of the punk::libunknown
namespace, to stop each index's helper variables leaking into the global namespace and to
stop a user global named 'dir' being clobbered. That fixed the frame, but a proc body
executes in ITS OWN namespace, so an index's RELATIVE 'namespace eval foo' started
creating ::punk::libunknown::foo instead of ::foo. Stock tclPkgUnknown is a proc in ::,
so indexes have always had global resolution; the ifneeded script, evaluated later at
global scope, then looked for a command that was never there.
The body now runs via apply with :: as its namespace argument, which gives both
properties at once: a local frame (index helper variables still discarded, user 'dir'
still safe) and the global resolution context indexes are written against.
Not twapi-specific: any index that defines commands or namespaces at source time for its
own ifneeded scripts to use hits this, and the pattern is common in third-party indexes.
punkshell's own vendored twapi 5.0b1 happens to avoid it (self-contained 'apply' ifneeded
scripts), which is why the tree never surfaced it.
Verified on the LUCK 8.6.10 runtime end-to-end - 'package require twapi' at the punkshell
prompt now returns 4.7.2 with ::twapi::scriptdir correctly set - and pinned generically by
pkgindex_relative_namespace_is_global in the discovery suite, whose new fixture copies
twapi's pattern so no third-party kit is needed. The pin was proven to bite: driven
against the pre-fix body the same fixture fails with 'invalid command name' and leaves
::punk::libunknown::pklu_nsindex behind; against 0.2.3 it resolves and leaves nothing.
Full suite 1165 tests, 1144 passed, 1 failure - core/tcl exec-14.3, the documented
baseline.
Manual-version bump per src/modules/AGENTS.md: file renamed, Meta line, manpage_begin and
provide-block updated, version-history line appended. The rename sweep converted the two
goal Scope references (G-035, G-109) from the exact filename to the glob form
src/modules/punk/libunknown-*.tm that GOALS.md's own Scope-authoring guidance recommends,
so the reference stops drifting at every bump.
Also records in G-035 the mechanism behind its "avoid mixing .tm and pkgIndex.tcl
provision" folklore, which this investigation identified (non-contract Notes). Stock
::tcl:™️:UnknownHandler returns early when $satisfied is set and therefore never falls
through to ::tclPkgUnknown, so a require satisfied from a .tm suppresses the whole library
scan. Measured with a synthetic fixture on both 8.6.10 and 9.0.3: with mixpkg 1.0 as a .tm
and mixpkg 2.0 in an auto_path library under 'package prefer latest', stock returns 1.0
and reports only 1.0 from 'package versions', runs no index side effect and registers no
sibling package; the libunknown chain returns 2.0 and does all three. libunknown already
neutralises it - its handler still computes $satisfied but the early return is commented
out - and that unconditional fallthrough is exactly what the epoch cache pays for. The
folklore is therefore substantiated for stock Tcl with a named failure mode (silent
older-version selection) and neutralised under the punkshell chain, with stock behaviour
still reachable in any interp that has not run punk::libunknown::init.
Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com
|
2 weeks 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
|
2 weeks ago |