Tree:
2dbf635b99
master
v0.1a
${ noResults }
483 Commits (2dbf635b99a23f8fb151e06bdb68a471a1f781e6)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
5e956f7419 |
G-169/G-170 follow-on landed: coherent-set promotion + bake - launcher help depth reaches the kits (punkshell 0.56.0)
Both goals' open coherent-set promotion follow-ons name the SAME
vfscommonupdate/bake event; this change-set is that event, so both flip to
landed 2026-08-06 in the same work unit (the sanctioned archived-file edit).
Promotion (canonical release-sequence steps 5-8, native tclsh90 driver):
- mint: 'make.tcl packages -confirm 0'.
- promote: 'make.tcl bootsupport -confirm 0' - punk::args 0.17.0 -> 0.18.0 and
punk::ansi 0.1.3 -> 0.2.0. The second pass copied zero modules (the gate's
own contract) and 'make.tcl check' no longer reports stale bootsupport.
- promote: 'make.tcl vfscommonupdate -confirm 0' - the same two modules plus
punkboot core 0.7.0 (byte-identical to src/vfs/_config/punkboot_core.tcl),
punkexe moduledoc 0.6.1 -> 0.9.0, punkboot moduledoc 0.3.0 -> 0.3.1, and
app-punkscript/app-punkscript-docs 1.1 -> 1.3 (pkgIndex + punkscript.tcl;
vfscommon never carried the intermediate 1.2). Every promoted copy verified
byte-identical to its mint output.
- bake: 'make.tcl bake -confirm 0' - INSTALLED KITS (11), no FAILED KITS. The
templates modpod payload (both bootsupport and vfscommon copies) regenerated
from the G-170 layout core edits.
What a deployed kit now does that it could not before, probed directly against
bin/punk902z.exe (no src package mode, no fake-main harness):
- 'help script oneliner' narrows to the oneliner form's argument table - the
'-e' row, which is absent from form 0's default table - exit 0.
- the multi-form synopsis lines carry the un-suppressed formhint labels
(' <punkexe> help script file' / ' <punkexe> help script oneliner'), G-170's
resolution of the 0.6.1 circularity objection, rendered from the app-owned
definition G-169 moved beside the code that implements it.
- 'help script somefile.tcl' dry-runs: the matched form plus the
punk::args::parse_report landing report (Argument|Source|Value carrying
'scriptfile received somefile.tcl') - G-151's render consumed by the core.
- 'help buildinfo bogus' rejects with exit 1, byte-empty stdout and the parse
diagnosis on stderr; 'help shell somearg' keeps the passthrough
accepted-and-ignored render at exit 0.
- 'help tclsh somefile somearg' now DRY-RUNS (accepted, exit 0) where the baked
0.6.1 moduledoc had kept the historic ignored-tail render: the G-170 fence
witness requires a -regexprefail row in the definition actually served, and
the promoted 0.9.0 moduledoc supplies it. That was the recorded
mixed-vintage state, now resolved in the deployed kits.
Verification:
- launcherhelp.test 38/38 against the freshly baked kits. The two direct-kit
trailing-word pins that G-170 re-described as VINTAGE-PROOF hold under the
depth core exactly as designed.
- Full source-tree suite (-jobs 16): 1560 passed / 20 skipped / 1 failed. The
single failure is core/tcl/testsuites/tests/exec.test exec-14.3, a vendored
Tcl core test asserting stock's 'exec -gorp' error text without -encoding -
a Tcl 9.0.3 core-vintage mismatch, unrelated to this change-set.
- punkexe subtree 162 passed / 4 skipped / 0 failed. The 10 failures recorded
as pre-existing through the G-168/G-169/G-170 sessions (maketclbakelist 2 +
maketcllibfetch 8) now ALL PASS - they were stale build-state artifacts, and
this mint/promote/bake refresh is precisely what they were waiting for. Worth
weighing against the G-139 libfetch-test reading still pending a user call.
- punk/args subtree 337 passed / 3 skipped / 0 failed, its recorded baseline.
- Bake warnings are the known set only: punkmagic skipped (runtime
tclsh90magic.exe absent from the store) and the zint.dll i386-in-x64 arch
mismatch in the tcl8 kits punkbi/punksys/punk86, the recorded pre-existing
payload defect. No configured kit exe was locked (the running punk901t.exe
instances are not a configured bake target).
Project version 0.55.1 -> 0.56.0 with a CHANGELOG entry: the G-151/G-168/G-169/
G-170 launcher-family behaviour becomes user-visible in a deployed kit for the
first time with this bake, and none of those source commits bumped the project
version - the source change alone shipped nothing to a user.
ARCHITECTURE.md's launch-surface paragraph still described trailing help words
as merely 'accepted', which is pre-G-170 semantics, so that clause now states
the narrowing / dry-run / passthrough split; architecture_lint clean (66 path
refs, 62 goal refs). goals_lint clean (80 active / 90 archived).
Deliberately untouched and still open: G-151's make.tcl interim-report
retirement (its bootsupport gate is satisfied by this promotion, but the
make.tcl edit is separate work), G-169's app-ownership extension to
shell/punk/shellspy, and G-170's punkboot moduledoc authoring-hint note.
Claude-Session: https://claude.ai/code/session_01Y1diJnhjUxKgEG6EwYAzxj
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
4 days ago |
|
|
c1c27ea37c |
G-170 achieved: launcher help depth - form narrowing, parse-true dry-run, actionable form hints (core 0.7.0, punkexe moduledoc 0.9.0, app-punkscript 1.3)
User-directed activation and implementation in one arc ("Activate G-170 and
continue"; proposed -> active at the user's word with the activation-freshness
survey recorded - new Related lines both directions for G-167 and G-044 -
-> achieved + archived on acceptance). Completes the launcher family:
G-151 parse_report + G-168 selection-sound definitions + G-169 app-owned
docs + this goal's consumption of all three.
punkboot core 0.7.0 (both layout copies synced byte-identical: project-0.1 +
modpod-template): launcher_show_help gains a tailwords parameter and returns
the suggested exit code (0 for every render, 1 only for a rejected dry-run);
the dispatch help arm passes the words after the subject and exits with the
return. Three tail behaviours by subject:
- Narrowing (any multi-form definition, display-only, any vintage): a SINGLE
word exactly matching a form name, or a decimal ordinal below the form
count, renders 'punk::args::usage -form <sel> <id>' - the G-150 shape
(all-form synopsis retained, the selected form's argument table only).
Collision rule decided and documented: in this position the form word WINS
over argument interpretation (exact names + decimal ordinals only, no
prefix resolution - the tighter rule minimises the shadow over the
subject's own first-argument space); a file literally named like a form
stays dry-runnable via a path spelling (./oneliner - the same reachability
dodge G-168 recorded for a file named '-e').
- Dry-run (parse-true subjects): any other tail parses through the subject's
definition exactly as make.tcl help does (G-143 shape). Accepted lines
render the matched form's usage plus the punk::args::parse_report landing
report (G-151 consumed directly; guarded - an older punk::args without
parse_report renders the usage alone). Rejected lines emit the parse
diagnosis on stderr, exit 1. The complete '-encoding <name> <scriptfile>'
tclsh line raises the sanctioned two-form multipleformmatches diagnosis
(the recorded G-168 LIMIT - the honest answer for that line). Parse-true =
buildinfo + project parse=1 registrations (parity with dispatch BY
CONSTRUCTION - dispatch parses the same id, any vintage) plus script/tclsh
(declared passthrough surfaces whose G-168 definitions MODEL dispatch/app
reality - their dry-run additionally requires the fence witness: at least
one -regexprefail row in the definition actually served, so a pre-G-168
unfenced moduledoc snapshot - the real mixed promotion state - keeps the
historic ignored-tail render instead of misdiagnosing lines whose forms
double-match; probed live against the baked 0.6.1 stack). 'help' itself is
deliberately NOT parse-true (its tail handling IS this dispatch).
- Passthrough (shell/punk/shellspy, registrations without parse=1) and all
degraded contexts (PUNKBOOT_PLAIN, missing stack, render failure): the
historic accepted-and-ignored render, exit 0.
Formhint un-suppression at BOTH homes (the G-169-decided split): the interim
'@cmd -formhint ""' flips to the actionable template
' <punkexe> help <sub> %formname%' in the app-owned script definition
(src/lib/app-punkscript/punkscript.tcl, app-punkscript/app-punkscript-docs
1.3) and the moduledoc tclsh definition (punkexe moduledoc 0.9.0) - the
labels render beside each form's synopsis line and name real navigation,
resolving the 0.6.1 circularity objection. Deliberately NO trailing ellipsis,
diverging from make.tcl's hint shape: the display-hint honesty rule marks
accepted continuations of the SAME operation, and appending words to the
launcher's form word flips into the dry-run interpretation (a different
operation) - the exact hinted line is the complete narrowing command.
(script)::punkexe::help's @cmd/arg text documents the depth semantics (the
'accepted and ignored (reserved)' arg row cashed in as designed).
Engine fact recorded: punk::args::usage takes its options BEFORE the
positional id ('usage -form X $id'; the reversed order raises a values-count
error) - caught by probe; layout copies synced before the fix were re-synced
and cmp-verified after the last core edit.
Tests: launcherhelp.test 38/38 on BOTH tclsh90 and tclsh87 - 25 existing
pins unchanged (the two direct-kit trailing-word pins re-described as
VINTAGE-PROOF: their assertions hold under both the historic ignored-tail
core and the depth core, whatever the kit's bake vintage) + 13 new G-170
pins: narrowing by form name and ordinal, formhint labels, dry-run accept
(matched form + Argument|Source|Value report), reject, the -encoding LIMIT,
the ./oneliner collision dodge, passthrough ignored, buildinfo reject,
project parse=1 accept/reject parity (same words as the dispatch-half pins
launcherhelp_registration_parse_pass/_reject), the mixed-vintage fence
witness, and the PUNKBOOT_PLAIN degraded twin. args subtree 337 passed /
3 pre-existing skips / 0 failed on both runtimes; punkexe subtree at the
recorded baseline on both (152/4/10 - the 10 failures are the pre-existing
maketclbakelist(2)/maketcllibfetch(8) set, G-139 pending user decision;
maketclhelp 12/12 and scriptexec 27/27 green). A 12-probe live matrix
(args level via bin/punk91 src + fake-main harness via bin/punk902z tclsh,
src and no-src modes) recorded in the goal file. Minted punkexe-0.9.0.tm
via make.tcl modules (mint tree, not committed by design). Kits/bootsupport/
vfscommon remain stale until the user-owned promotion + bake.
Goals: G-170 entry moved to GOALS-archive.md, detail file to goals/archive/
with mechanism, decisions and verification evidence; two open Follow-ons
(the coherent-set promotion - the same vfscommonupdate/bake event as
G-169's line, now also carrying core 0.7.0 + punkexe 0.9.0 + app 1.3; a
punkboot-moduledoc authoring hint that project definitions may carry their
own formhint templates). Reference sweep: G-044 and G-167 back-pointers
updated to achieved; G-044 gains the xref-flagged G-167 mirror line.
src/vfs AGENTS.md launcher-help bullet and src/lib AGENTS.md app-punkscript
bullet extended. goals_lint clean (80 active / 90 archived);
goals_followons 74 structured lines, both new G-170 lines registered.
Claude-Session: https://claude.ai/code/session_0156PuejSCGjgeGb7jiABrDU
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
4 days ago |
|
|
97e4aacd4f |
G-169 achieved: app-owned launch-subcommand documentation consumed by the launcher (app-punkscript 1.2, core 0.6.0, punkexe moduledoc 0.8.0)
User-directed activation and implementation in one arc (proposed -> active at the user's word with the activation-freshness survey recorded, -> achieved + archived on acceptance). Co-location kills the doc-drift class: the actual '-e' parsing and its punk::args documentation now live in the same file. app-punkscript 1.2 + new package app-punkscript-docs 1.2 (same file): src/lib/app-punkscript/punkscript.tcl carries the (script)::punkexe::script definition (the G-168 selection-sound shape moved VERBATIM - value strings byte-identical, renders match the pre-handover moduledoc) in ::app::punkscript::argdoc with an idempotent docs section - a plain namespace-variable set plus a membership-guarded lappend to ::punk::args::register::NAMESPACES; no package requires, no punk::args dependency, no definition evaluation (lazy on the first query naming the id - the docpackages mechanism pinned ahead in docpackages.test). pkgIndex.tcl provides app-punkscript-docs from the SAME file via an execution gate (::app::punkscript::docs_only set around the source; the file returns after the docs section when the gate is up, and 'package provide app-punkscript' sits below the gate) - requiring the docs NEVER runs a script, and a later app require re-sources with the gate down so the app runs normally (probed: docs-then-app in one process, file/'-e' one-liner/'-e'-alone usage error all behave identically through the new file). punkboot core 0.6.0: new launcher_builtin_docpackages map (script -> app-punkscript-docs); launcher_show_help's built-in arm does a guarded lazy 'package require' of the mapped docs package before the usage query - help-path only, never on boot/dispatch (ready-probe and dispatch untouched). The G-031 registration-model header comment now names the durable doc id and records the app-owned 'package'-key option. Copies synced byte-identical: project-0.1 layout + modpod-template layout. punkexe moduledoc 0.8.0 (single-definer handover): (script)::punkexe::script is no longer defined here - a pointer comment stands in its place and the Overview records the ownership rule (docs live with the owning code: app-owned for app-handled subcommands, this moduledoc for core-owned surfaces like tclsh/buildinfo/help and the top-level dispatch). Single definer verified: loading both sources raises no duplicate-definition (undefine) notices - the handover withdraws the moduledoc entry in the same change-set per the docpackages last-loaded-wins pre-test pin. Durable-doc decision (the acceptance's 'location decided in the work'): the registration definition id (script)::punkboot::registration IS the durable doc for the *_main.tcl declaration keys (summary/argsid/package/parse incl the parse=1 gate, all already documented there); punkboot moduledoc 0.3.1 extends its 'package' key text with the app-owned docs-package pattern (gate shape pointed at src/lib/app-punkscript/pkgIndex.tcl). Kit authors reach it from the core header contract, the punkexe moduledoc Overview and the project_main.tcl worked examples. Help-path load cost measured and recorded (goal file): the app-ownership marginal cost is the guarded docs require - 3.5 ms (inert). The ~396 ms first-render total is the one-time punk::ansi/textblock render-stack load + definition evaluation, incurred identically wherever the definition lives; boot/dispatch cost is zero. Tests: launcherhelp.test 25/25 - 24 existing pins unchanged plus new launcherhelp_appowned_script_docs: the fake-main harness (G-031 shape, no bake) run through the baked kit's tclsh subcommand in SRC package mode, where the source tree serves the nested boot with version precedence - the src moduledoc defines no script id, so the successful tabular render carrying the G-168-era scriptfile help text (line-break-safe markers; the oneliner form's rows are not in the default form-0 table) proves the app-owned lazy resolution; stderr asserted free of 'clearing existing data' notices. Harness lesson recorded: manual tm/auto_path prepends in a fake main are WIPED by the nested boot's path configuration - the src package mode is the correct lever. Full modules/punk/args subtree 337 passed / 3 pre-existing skips / 0 failed on BOTH tclsh90 and tclsh87 - the G-168 punkexemodel.test/formcheck.test pins now load the script id via app-punkscript-docs (src/lib derived from the test file location) and guard the handover shape at its new home. The 10 failures in maketclbakelist.test / maketcllibfetch.test are PRE-EXISTING (reproduced identically at HEAD with this change-set stashed; the G-139 libfetch-test reading is a recorded pending user decision). Degraded/plain path intact (PUNKBOOT_PLAIN pin unchanged; mixed promotion states degrade gracefully by construction). Minted punkexe-0.8.0.tm + punkboot-0.3.1.tm via make.tcl modules. Goals: G-169 entry moved to GOALS-archive.md, detail file to goals/archive/ with mechanism, decisions, measured costs and verification evidence; two open Follow-ons (the coherent-set vfscommonupdate/bake promotion carrying lib/app-punkscript 1.2 + core 0.6.0 + punkexe 0.8.0 together; extending app ownership to shell/punk/shellspy). Reference sweep: G-170's Related line updated (the defs' home now decided - its formhint un-suppression edits both homes). src/lib AGENTS.md app-punkscript bullet + src/tests/modules AGENTS.md punk/args bullet extended. goals_lint clean (81 active / 89 archived). Claude-Session: https://claude.ai/code/session_0156PuejSCGjgeGb7jiABrDU Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
4 days ago |
|
|
2339e4065e |
G-168 achieved: selection-sound launch definitions - script/tclsh forms match dispatch reality (punkexe moduledoc 0.7.0)
User-directed activation and implementation in one arc (proposed -> active at
the user's word with the activation-freshness survey recorded, -> achieved +
archived on acceptance). The declarations follow the 2026-08-05 pre-test
findings exactly - no engine change was needed.
(script)::punkexe::script: the file form fences scriptfile with
-regexprefail {^-e$} and a -regexprefailmsg naming the ./-e reachability
(word-1 '-e' is the ONLY fenced word - every other dash-led word remains a
file path, matching app-punkscript's word-1 test); the oneliner form declares
the '-e' word as a real element - a required -type none flag (the
auto_exec::hash -r/-d shape) ahead of the existing required script value, so
a bare {-e} reports noformmatch with the oneliner form verdicting
viable-incomplete via the G-164 re-probe (the app's "-e requires a script
argument" reality) and the file form invalid.
(script)::punkexe::tclsh: scriptfile gains -regexprefail {^-} (stock
tclMain.c: a dash-led word in script-file position means NO script) and the
stdin form's first word is a declared fenced element 'firstarg'
(-regexprefail {^[^-]} - a non-dash first word IS a script file; not an
option, stays in ::argv). Selection now matches stock classification on
every line except the recorded LIMIT: the complete
'-encoding <name> <scriptfile>' shape word-shape-matches both forms (a
dash-led encoding NAME included - the engine consumes dash-led option
values, matching stock's unconstrained argv[2]) and stock's arity-priority
rule is not expressible per-word - the pair is declared
@form -overlapallowed {scriptfile} on the stdin form (formcheck sanction)
while parse raises multipleformmatches naming both forms per the G-041
no-silent-preference contract. Dispatch never parses these ids, so the
ambiguity surfaces only in declaration-driven consumers (help dry-runs,
completion), where the two-form diagnosis is the honest answer.
Decisions recorded in the archived detail file: dispatch parse-gating NOT
adopted (punkboot_core.tcl untouched; script/tclsh stay declared passthrough
surfaces - boot-path parse cost, stock-parity conflict with the LIMIT, app
error surfaces already honest and pinned, and the declaration-driven
consumers get parse-trueness without gating; no latency delta applicable);
the <punkexe> @form -synopsis overrides KEPT (neither the raw (script) id
nor @cmd -name is an invocable name; the stdin override keeps the
user-facing '?arg ...?' line over the model's firstarg/arg split) - the
G-144 archived follow-on flipped to declined accordingly (make.tcl's own
override retirement had already landed in the 0.41.0 arc). A real-vs-model
probe matrix (G-055 method; bin/punk91 dispatch + app-punkscript real side)
is recorded in the detail file - model matches real classification on every
line except the two complete-'-encoding' rows (the sanctioned LIMIT).
Tests: new args/punkexemodel.test (6 - script/tclsh selection matrices
against the real ids with the real-side oracle referenced, the bare-'-e'
viable-incomplete verdict, the ./-e fence message, -encoding fall-through
statuses (scriptfile invalid vs incomplete, stdin selected), the LIMIT pins
naming {scriptfile stdin} for both complete shapes); formcheck.test punkexe
GAPs flipped deliberately per the acceptance:
formcheck_punkexe_script_forms_discriminated (zero findings),
formcheck_punkexe_tclsh_forms_sanctioned (unsanctioned empty + the stdin
form's -overlapallowed pinned via get_spec; the positional-chain witness
derivation misses option-dependent overlaps - formcheck's documented miss
direction - so the sanction also future-proofs improved derivation),
formcheck_punkexe_primary_inputs_selection_sound (dispatch-true forms for
every primary line; empty input still selects file/stdin uniquely). Full
modules/punk/args subtree 337 passed / 3 pre-existing skips / 0 failed on
BOTH native tclsh90 (9.0.3) and tclsh87;
src/tests/shell/testsuites/punkexe/launcherhelp.test 24/24 unchanged per
acceptance (its 'help script'/'help tclsh' pins glob only @cmd -name
strings - row additions verified safe post-bake as well). Minted
modules/punk/args/moduledoc/punkexe-0.7.0.tm via make.tcl modules;
kits/bootsupport carry 0.6.1 until the next promotion/bake cycle.
Goals: G-168 entry moved to GOALS-archive.md, detail file to goals/archive/
with the probe matrix, both decisions and verification evidence; one open
Follow-on (arity-priority expressibility would flip the LIMIT pins; the
broader selection-soundness sweep stays recorded in G-150's archive).
Activation survey Related: line added (G-169 back-pointer). Reference sweep:
G-169 coordination note updated (G-168 landed first - the re-homed
definitions carry this fencing shape), G-170 dependency marked satisfied
(its dry-run arm inherits the recorded LIMIT). src/tests/modules AGENTS.md
punk/args bullet extended. goals_lint clean (82 active / 88 archived).
Claude-Session: https://claude.ai/code/session_0156PuejSCGjgeGb7jiABrDU
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
4 days ago |
|
|
b0c92567a3 |
G-151 achieved: punk::args::parse_report landing report + ansistring TRUNCATE (args 0.18.0, ansi 0.2.0)
User-directed activation and implementation in one arc (proposed -> active at
the user's word with the activation-freshness overlap survey recorded, ->
achieved + archived on acceptance).
punk::args 0.18.0 - new parse_report: the annotated SUCCESS render (the
arg_error usage table's success-side sibling). One row per value-holding
argument (received, or -default in effect) in declaration-section order
(leaders, opts, values), columns Argument | Source | Value; Source carries
received / received xN / default (the plain-mode twin of the colour marking:
CLR(check)/CLR(parsekey_hint)); absent optionals get no row. Entry forms per
acceptance: a punk::args::parse result dict, or '<arglist> withid <id>' (the
parse is performed first - a rejected line raises the same validation error
parse would; errorcode parity pinned). Returns: table (bordered textblock
block, default), tableobject, string (plain lines; also the degraded
no-textblock path), dict (machine form - never elided). The canonical
demonstration pinned: {build punk95 -confirm 0} lands
'args (received x2) = -confirm 0' - a flag-like word consumed as a VALUE
visibly attributed to its consuming argument (the make.tcl dry-run
'kitname = punk91 -confirm 0' class from the G-143 sessions).
Display elision is type-aware, deterministic, always marked: strings
single-line-ized (ansistring VIEW -lf 1 -vt 1 -sp 0 - controls and embedded
ANSI render visibly so a value cannot disturb the table, real spaces stay
real) then grapheme-capped with '...' + ' (len N)'; -multiple/-type list
values element-capped '(+N more)'; -type dict values pair-capped
'(+N pairs)'. Width cascade per the G-149 plumbing precedent: caller
-valuewidth > new @cmd directive key -reportvaluewidth (documented in
define -help) > built-in 48; 0 = no cap; never console-derived (the G-007
emit-then-query lesson). Row data rides the G-049
private::parse_status_build structure - no second status assembler;
display-level bridging recovers the value-in-effect across the parse
result's storage-key folds (-parsekey renames, aliased optionsets'
last-|-member finalopts fold) so received aliased args keep their row -
engine-level rationalization recorded as a G-084 follow-on disposition.
The registered two-form definition (parsed/withid) follows parse_status's
structure - per-form @leaders first, then the shared @opts via a re-widened
@form selection (the resolver rejects leaders declared after a form's
options).
punk::ansi 0.2.0 - new ansistring TRUNCATE ?-ellipsis marker? string
maxgraphemes (design lean 4: the ANSI/grapheme-safe truncate primitive
homes in ansistring beside RANGE/VIEW): fits => byte-identical passthrough
(trailing and non-SGR codes included); truncation => RANGE-extracted prefix
(merged SGR re-application per the contract documented at 0.1.4) + marker
totalling exactly maxgraphemes, with an SGR reset appended before the
marker when the prefix carries codes; the marker is charged against the
budget and itself truncated when it alone meets/exceeds it; maxgraphemes 0
=> empty string. Grapheme-count based (column-aware variant a recorded
follow-on). Strict option handling (deliberately unlike VIEW's pinned
silent tolerance). Ensemble export + PUNKARGS argdoc + doctools comment.
Tests: new args/parsereport.test (13 - canonical attribution, entry
parity, dict shape/row order/row policy, solo+multi xN multiplicity,
per-type elision markers, dict-never-elided, width cascade,
single-line-ization, alias bridging, bordered/tableobject renders, failure
parity, bad calls, own-definition render); ansi/ansistring.test +2
TRUNCATE pins (budget/passthrough/errors; ANSI-reset + CJK +
combining-cluster safety). Full punk/args subtree 331 passed / 3
pre-existing skips / 0 failed and punk/ansi subtree 73/73 - each on native
tclsh90 (9.0.3) AND tclsh87; failure-side rendering unchanged per
acceptance. Minted modules/punk/args-0.18.0.tm + ansi-0.2.0.tm via
make.tcl modules; bootsupport/vfscommon promotion left to the next cycle -
make.tcl keeps its interim one-line report (and its 4-copy 'no annotated
success render yet' comment) until the promotion-gated follow-on lands.
Goals: G-151 entry moved to GOALS-archive.md, detail file to goals/archive/
with verification evidence and 5 Follow-on lines (make.tcl interim-report
retirement open; arg_error value-truncation via the same helpers open;
storage-key rationalization => goal G-084; column-aware TRUNCATE open;
word-oriented inverse view open). Activation-survey Related: lines recorded
(G-166, G-084, G-167 back-pointer); reference sweep updated G-170
(sequencing lean honoured - its dry-run arm consumes this render), G-167
archive marker, G-084 back-pointer note. src/tests/modules AGENTS.md
punk/args + punk/ansi bullets extended. goals_lint clean (83 active / 87
archived).
Claude-Session: https://claude.ai/code/session_0156PuejSCGjgeGb7jiABrDU
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
4 days ago |
|
|
45d8de1f45 |
G-151 design leans recorded + ansistring pre-modification coverage survey
G-151 (annotated success render) Notes gain the six user-agreed design leans from the 2026-08-05 shape discussion: 1. compact landing table (Argument | Source | Value) - a separate small arg_error-styled bordered block stacked under the usage render, not annotation of the usage table; existing -parsedargs/goodchoice marking stays; no per-value subtables (the report itself is the bordered block; G-088 footer docking possible later); arg-oriented rows in declaration-section order. 2. deterministic width caps (value column ~48, total ~80), never console-queried; configurable via the G-149 caller-option/@cmd-key plumbing; machine returns untruncated. 3. type-aware always-marked elision: strings single-line-ized then char-capped with '...' + '(len N)'; lists/multis element-capped with '(+N more)'; dicts pair-capped; pre-elided at data-prep, not via table column -maxwidth. 4. the ANSI/grapheme-safe truncate primitive homes in punk::ansi::ansistring; punk::args layers element/pair-count elision on top. 5. serving arg_error's value-truncation todo with the same helper is a follow-on, not acceptance. 6. rows only for value-holding arguments (received or default-in-effect). Lean 4's precondition (user direction): survey ansistring test coverage against codebase usage before any modification. DONE - usage-weighted survey (VIEW ~250 sites incl 124 '-lf 1'; VIEWSTYLE/VIEWCODES/NEW ~40 interactive sites; RANGE 8) produced 8 new characterization pins in ansistring.test, green 71/71 on native tclsh90 (9.0.3) and tcl87: - VIEW -lf 0/1/2 single-line-ization modes, tab/cr defaults, no-arg empty return; always-on NUL substitution + silent unknown-option tolerance (load-bearing for overtype's '-nul 1' CRM sites) + unpaired-option error; 8-bit C1 CSI bracketed representation and ZWSP visible-tag visuals. - RANGE prefix/end-relative/clamping semantics, plus the truncate-relevant facts: merged code-stack re-emission (full-range extraction is ansistrip-identical but not byte-identical) and codes trailing the last grapheme DROPPED (matches the source TODO) - fetch trailing state via INDEXCODE end+1 when it matters. - COUNT (graphemes, combining accents cluster) vs length (stripped characters) divergence pinned on a decomposed-accent fixture. - KNOWN-DEFICIENCY pin: VIEWCODES/VIEWSTYLE raise invalid-command in a plain punk::ansi interp (class methods call the bare 'a+'/'a' interactive aliases) - pinned in a fresh child interp so the verdict is independent of runner mode; flip deliberately when the class renders alias-free. - NEW object basics: class identity, count/length/stripped/view parity with the ensemble surface, destroy. Survey outcome + implementation cautions recorded under lean 4 in the G-151 Notes; src/tests/modules AGENTS.md punk/ansi bullet extended. goals_lint clean (84 active, 86 archived). Environment note: agent-harness shells set NO_COLOR=1, which blanks the live highlight SGRs grepstr.test pins expect (the recorded tcl90-baseline grepstr(2)) - unset it for colour-dependent suite runs; the new pins are colour-state independent per suite convention. Claude-Session: https://claude.ai/code/session_0156PuejSCGjgeGb7jiABrDU Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
5 days ago |
|
|
127ad36877 |
punk::args pre-tests for the G-168/G-169/G-170 family + G-170<->G-151 cross-links
Engine-primitive pins landed green ahead of activating the launcher definition/documentation/help-depth goals (args subtree 321 tests: 318 pass, 3 known-bug skips, 0 fail on native tclsh90 9.0.3 and tcl87): - forms.test: candidacy fencing/fall-through group (G-168 pre-work) - regexprefail-fenced autoselection fixture pin (args-tier twin of the G-150 cmdhelp.test pins), a -regexprefail rejection on an OPTIONAL value slot is form-fatal with NO re-landing on later permissive slots (contrast optional-choice rejection), unknown-option / dangling-option / option-satisfied-but-values-unmet failures fall through to sibling forms as successful parses, option-VALUE fences participate in candidacy, and the documented per-word limit: a complete '-encoding <name> <file>' line double-matches a fenced scriptfile form vs a dash-tolerant stdin form (stock's scriptfile-wins-when-complete priority is not expressible per-word - multipleformmatches per the G-041 contract). - formviability.test: dangling-OPTIONAL-option verdict conservatism - the G-164 re-probe re-seats only words naming missing REQUIRED options, so the tclsh '-encoding' dangling class stays invalid although completable. - errorselection.test: a dangling optional value-taking option word seats as a trailing value and overflows a zero-value window as plain toomanyarguments (no -badarg attribution). - formcheck.test: GAP before-state pins of the punkexe launch definitions - unsanctioned structural overlaps for script file/oneliner and tclsh scriptfile/stdin, and every primary launch line double-matching; flipped deliberately when G-168 lands per its Acceptance. - docpackages.test (new): registered-namespace lazy definition loading characterization (G-169 pre-work) - inert registration with scan-vs-load split, id_exists never triggers loading, real_id/usage lazily resolve tag-prefixed script-level id families, duplicate definers resolve last-loaded-wins with only a stderr undefine notice (the engine's recorded detect-duplicates todo), degraded paths clean. Goal notes (non-contract): pre-test findings recorded in G-168 (including the '-e'-must-be-a-required-flag declaration constraint and the residual-overlap design limit) and G-169 (handover must withdraw the moduledoc entry in the same change-set - no duplicate warning surface exists); G-170<->G-151 Related: cross-links added both ways - the dry-run arm renders G-151's punk::args-level landing report, a link the path-based overlap surveys could not surface. src/tests/modules AGENTS.md punk/args bullet extended for the new coverage. goals_lint clean (84 active, 86 archived). Claude-Session: https://claude.ai/code/session_0156PuejSCGjgeGb7jiABrDU Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
5 days ago |
|
|
b0f206f53b |
G-168/G-169/G-170 drafted: launcher definition/documentation/help-depth family (user-approved)
Three [proposed] goals from the 2026-08-05 formhint-arc discussion of
why launcher help stops at the subject word:
G-168 selection-sound launch definitions - script/tclsh forms made
parse-discriminable with EXISTING vocabulary (file form -regexprefail
{^-e$} + oneliner '-e' element; tclsh scriptfile-vs-stdin via
candidacy fall-through matching stock semantics). Corrects the
discussion's earlier assumption that G-072 negation was required:
-regexprefail participates in form matching (G-143-arc verified; the
G-150 hash declaration is the dash-led precedent). Includes the
dispatch parse-gating decision (tabled vs app-plain errors, latency
measured if adopted).
G-169 app-owned launch-subcommand documentation - app-punkscript owns
(script)::punkexe::script via inert registration, launcher resolves
lazily (the existing argsid/package/docpackages machinery), single
definer per id, ownership rule recorded (app-owned for app-handled,
moduledoc for core-owned like tclsh), and the *_main.tcl declaration
surface (summary/package/argsid/parse) documented as the official
authoring mechanism.
G-170 launcher help depth - 'help <sub> <formname|index>' narrowing
(G-150 usage -form precedent), make.tcl-style dry-run gated on
parse-trueness (G-168 built-ins, project parse=1) with the
prepend-help idiom preserved for passthrough subcommands, and the
punkexe 0.6.1 interim -formhint suppression flipped to real
' <punkexe> help <sub> %formname%' templates.
Follow-on handling (user-approved leans): G-144's override-set
follow-on flipped => goal G-168 (the make.tcl half landed in the
G-143 arc; the punkexe-moduledoc half is now G-168's recorded
decision); G-150's selection-soundness sweep follow-on stays open
(broader than these two definitions - G-168's Notes record the
partial enactment). Overlap survey per the authoring workflow:
G-089/G-055/G-072/G-075/G-042/G-043/G-044 relationships recorded in
the detail files; app-punkscript intersects no live goals.
goals_lint clean (84 active, 86 archived).
Claude-Session: https://claude.ai/code/session_01QgaxV27VZkmEec7oNbEVFc
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
5 days ago |
|
|
57d3dec3b2 |
G-149 follow-on landed: make.tcl adopts @cmd -formhint - actionable per-action help hints with honest continuation ellipsis (punkshell 0.55.1)
The multi-form definitions (tool, buildsuite) each declare
'@cmd -formhint " make.tcl help <sub> %formname% …"', so
'make.tcl help tool' / 'help buildsuite' - and every dispatch usage
error for those subcommands - label each form's synopsis line with the
concrete dry-run-help invocation (' make.tcl help tool build ...'
rendered with U+2026) instead of the repl-oriented ' i -form N ...'
default, which is unreachable for (script) ids. Renders via the
promoted bootsupport punk::args 0.17.0; under older snapshots (e.g
generated projects) the key is ignored and the default labels render.
Design decisions (user direction 2026-08-05, recorded in the follow-on
disposition): the trailing ellipsis is required for honesty - help
DRY-RUNS the form's own command line after the action (G-143), so a
hint without it misrepresents the invocation as complete. The template
was kept over empty-string suppression because the labels also render
on dispatch usage errors ('make.tcl tool frobnicate'), where the user
never typed help and the hint is the discovery route to per-action
help; suppression would lose that teaching path.
maketclhelp.test: tool formhints pin flipped to the new labels with an
olddefaulthint-absent guard; buildsuite multiform test gains the same
pair; header + provenance comments updated. The ellipsis is matched as
its utf-8 byte triple (format %c%c%c 0xe2 0x80 0xa6) because
maketcl_run reads the child pipe -translation binary, so multibyte
chars arrive byte-wise - a real U+2026 char in the pattern can never
match (first-cut pin failed green-render for exactly this). 12/12
green on tclsh90; maketcltool.test 4/4.
Sync outputs batched per policy (make.tcl modules + bootsupport): the
basic + project-0.1 layout make.tcl copies, the modpod source-tree
copy, and the bootsupport templates-0.2.0.tm repack all carry the
identical +2-line change. The archived G-149 follow-on disposition
flipped => landed 2026-08-05 (the sanctioned same-work-unit edit);
goals_lint clean. punkshell 0.55.1 + CHANGELOG (make.tcl help output
is product surface - patch). Kits pick this up at the next
vfscommonupdate + bake.
Claude-Session: https://claude.ai/code/session_01QgaxV27VZkmEec7oNbEVFc
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
5 days ago |
|
|
7cdf5b2323 |
G-149 achieved: punk::args configurable multi-form synopsis hint labels (punk::args 0.17.0)
The per-form hint labels rendered beside a multi-form definition's synopsis lines in the usage/arg_error table (hard-coded ' i -form N ...' previously) are now a template substituted per form: %formindex% is replaced with the form's 0-based ordinal, %formname% with its name, and an empty template suppresses the labels entirely (the cell keeps just the Synopsis: label, as single-form renders always have). Both acceptance arms landed. Definition side: new '@cmd -formhint <template>' key - rides the existing arbitrary-key cmd_info merge (no resolver change), round-trips through resolved_def, not display -deferred; documented in the define -help directive-options. Caller side: new -formhint option on arg_error (manual parser + PUNKARGS block) pulled into usage via its existing resolved_def opts pull; supplied-empty (suppress) is distinct from not-supplied (the option declares no -default, so an unsupplied usage call passes nothing through). Precedence: caller > definition > built-in default, whose template substitutes to the exact prior bytes. Motivation (G-143 origin): script-level (script) ids - make.tcl's - are unreachable from any repl, so the repl-oriented 'i' hint was not actionable there. Scope decisions pinned: single-form renders never carry hint labels; the -return string renderer has no hint column and is unchanged. Byte-identity for unconfigured definitions proven by pre/post capture diff of 'punk::args::usage ::punk::args::parse' (identical bytes, through the usage pass-through path). Tests: new formhint.test (9 tests - default labels, directive/caller/suppression matrix, parse -error path, single-form + string-renderer scope); full punk/args subtree 302/0-fail on BOTH tclsh90 9.0.3 and the punk86 kit (8.6); punk/ns subtree 115/115 (cmdhelp consumer). make.tcl help untouched until promotion (maketclhelp.test still pins the bootsupport hint). Goals: G-149 activated at user direction then flipped achieved 2026-08-05 + archived (index record newest-first, detail file to goals/archive with Progress evidence and 1 follow-on: make.tcl adoption after a bootsupport promotion => open). Activation-freshness survey recorded the G-167 relationship (same renderer surface - composition note both sides); reference sweep updated G-151/G-167 mentions; goals_lint clean, no orphaned xref pairs. punkshell 0.55.0 + CHANGELOG. Bootsupport/vfscommon snapshots unchanged until promotion + bake. Claude-Session: https://claude.ai/code/session_01QgaxV27VZkmEec7oNbEVFc Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
5 days ago |
|
|
ac8e26ab20 |
G-167 drafted: punk::args version-delta availability - unavailable @forms for shape deltas, unavailable option names for flag deltas
New proposed goal (user-approved wording, from the post-G-073 design discussion 2026-08-05): version/context deltas of a command's interface become declarable and honestly surfaced without delta computation, layered by delta kind. An @form may be declared unavailable - participating in candidacy/diagnosis, displayed annotated, tailored formunavailable rejection when only unavailable forms match, silent resolution to the available form when both match (the first sanctioned exception to G-041's no-silent-preference rule: documentation never competes with reality), -form selection displays but refuses parse. Option NAMES may be declared unavailable (the G-073 mirror at the option-name level) with pointed tailored rejection. The default render stays on available forms plus an AUTOMATED note enumerating unavailable shapes (name + authored note + navigation hint - no computed delta; user display decision relaxing the strict G-073 display-among-peers principle for shape deltas only, since named things keep per-name display via the option/choice layers). formstatus gains an additive 'available' field (G-152 contract) as the machine surface, and authoring guidance prescribes -choiceunavailable for subcommand-shaped deltas so the same concept never surfaces through two inconsistent paths. Detail file records the layered-model rationale, the silent-preference exception scope, the two-paths trap prescription, era authoring via shared -form tags (one form per version era - linear), engine seams, and the relations/overlap survey (G-073 foundation, G-166 sibling surface, G-152/G-041/G-074/G-150/G-149/G-044/G-055). Acceptance and the lsearch -stride adoption candidate are agent-derived for user review; status proposed. goals_lint clean (82 active / 85 archived). Claude-Session: https://claude.ai/code/session_01QgaxV27VZkmEec7oNbEVFc Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
5 days ago |
|
|
69927531a4 |
G-073 achieved: punk::args unavailable choices (-choiceunavailable) + G-166 drafted (punk::args 0.16.0, tclcore moduledoc 0.4.0, punk::ns 0.9.3)
New per-argument key -choiceunavailable <list>: names recognised but not
available in the current runtime/context. Entries display among the
choices under a dedicated "Unavailable (recognised, not selectable
here)" group (one rendering-side injection - both renderers,
choicelabels notes, choiceinfo markers, trie prefix marking and
value-in-effect exclusion all inherited) and join the prefix pools;
synopsis literals and goodchoice marking never include them. Resolve
-time validation: no collision with choices/alias names/reservelist,
-default may not be unavailable, requires -choices/-choicegroups.
choiceword_match gains an optional 8th argument and an 'unavailable'
result key (matched stays 0 - matched-only consumers unaffected):
exact, nocase and unique-prefix landings carry the name as canonical; a
prefix shared with an available choice stays plain-ambiguous.
Validation rejects a landing with the tailored PUNKARGS VALIDATION
{choiceunavailable <name> choices <list>} error (-badarg/-badval;
private::unavailable_choice_msg names the supplied word, the resolved
entry, its choicelabel note and the available values; shared by final
validation and both G-082 overflow raise sites via rejection kind
'unavailable' from the allocation screen). Ambiguity messages annotate
unavailable longer matches '(recognised but unavailable)';
-choicerestricted 0 keeps full passthrough.
tclcore 'string is' adoption: curated forward list {dict} ('unicode'
deliberately excluded) diffed against the define-time harvest; labels
and per-class virtual ids extend to unavailable classes. On Tcl 8.6:
dict displays with its "(class not present in Tcl 8.6)" note,
'string is dict' rejects informatively, 'string is di' is ambiguous
(deliberately stricter than real 8.6 - recorded as a user-sanctioned
parity exemption; full words parity-true), and 'i string is dict'
documents via the virtual id. punk::ns cmd_traverse passes the key at
both resolver sites (doc-walk parity; the choice-traverse comment now
documents the choice-resolution vs doc-addressing axes split). tclcore
moduledoc requires punk::args 0.16.0-.
Tests: new choiceunavailable.test (10 tests); usagemarking.test gains
the goodchoice-exclusion pin; tclcoreparity.test gains forward-class
adoption invariants and the sanctioned 'di' strictness exemption, with
the version_notes pin deliberately flipped (dict's label now renders on
every runtime). Green: the three suites 37/37 on native Tcl 8.6.10
(luck runtime), 8.7a6 and 9.0.3; punk/args subtree 293/290/3 skips/0
fail on 9.0.3 AND 8.7; modules/punk sweep green except the three
documented pre-existing box-baseline failures (grepstr x2, nslist x1);
ns cmdhelp/corp 58/58 after the comment clarification.
Goals: G-073 flipped achieved 2026-08-05 + archived (index record
moved, detail file to goals/archive with Progress/verification and 3
follow-ons). G-166 drafted [proposed] at user direction (approved
wording): cmdinfo availability key + cmdhelp marking + tclcore leading
note + prefix-landing decision; the enacted G-073 follow-on flipped
=> goal G-166, the G-055 pattern follow-on => goal G-055 with a Notes
pointer added there. goals_lint clean. punkshell 0.54.0 + CHANGELOG.
Bootsupport/vfscommon snapshots unchanged until promotion + bake.
Claude-Session: https://claude.ai/code/session_01QgaxV27VZkmEec7oNbEVFc
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
|
5 days ago |
|
|
d2094364a3 |
G-082 follow-on landed: required typed value/leader misreport -> pointed typemismatch (punk::args 0.15.2)
A REQUIRED typed value or leader whose present word fails the basic-type allocation screen (int/double/bool/number/dict) now reports the pointed typemismatch naming the word and argument (-badarg/-badval, same shape as the G-082 overflow-site selection) instead of the generic missingrequiredvalue/missingrequiredleader shortfall. The in-loop required-arg raise sites consult the rejection record returned by get_dict_can_assign_value; the leaders-loop edit mirrors the values loop per the MAINTENANCE contract. Unchanged by design: end-of-input shortages (valuemissing/count classes), literal-typed members, multi-member clause partials (no rejection record - conservatism preserved), and required-arg choice words (never screened - G-071 asymmetry, choiceviolation already pointed). parse_status: the shape now classifies invalid/typemismatch (the formstatus viability verdict was already invalid; one probe re-parse saved); argdoc status-key note updated. Pins deliberately flipped: parsestatus.test (renamed parsestatus_typed_value_screen_typemismatch), formviability.test (single-form top-status/formstatus split demo re-anchored on a required-option shape), punk/ns cmdhelp.test message match. New errorselection.test coverage: required value + leader typemismatch pins plus unchanged-shape guards. Verified tcl 9.0.3: punk/args subtree 280 total / 277 passed / 3 intended skips / 0 failed; punk/ns only the pre-existing nslist(1) box-baseline failure (stash-verified unrelated). tcl 8.7: touched args suites 38/38, cmdhelp 45/45. Follow-on disposition flipped => landed in goals/archive/G-082-punkargs-error-selection.md (goals_lint clean; ledger 23 open / 20 goal / 15 landed / 2 declined). punkshell 0.53.1 + CHANGELOG entry. Bootsupport/vfscommon args copies stay 0.15.1 until the next promotion + bake. Claude-Session: https://claude.ai/code/session_01QgaxV27VZkmEec7oNbEVFc Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
5 days ago |
|
|
621e57fd15 |
G-106 follow-on landed: raw-mode typing feel user-confirmed on the suite runtime
The one manual residue on G-106 - interactive typing-experience confirmation of raw mode where the pwsh consolemode fallback does the mode flipping - is confirmed by the user on tclsh9.0.5-punk.exe (the store-active twapi-less suite 9.0.5 runtime). Disposition flipped open -> landed 2026-08-05. Disposition-only edit per the goals/AGENTS.md Follow-ons contract. goals_lint clean; goals_followons now 24 open / 20 goal / 14 landed / 2 declined. Claude-Session: https://claude.ai/code/session_01Y1diJnhjUxKgEG6EwYAzxj Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
5 days ago |
|
|
99402a1e4d |
G-087 + G-139 follow-on dispositions: link_as landed in-goal, linux lib-tier became G-140
Evidence-checked continuation of the archive follow-on sweep: - G-087 fauxlink link_as encoder => landed 2026-07-17: implemented in fauxlink 0.2.0 (link_as + punk::args doc, upstream checkin 1e6b4ee8) within the goal's own stage 2; the '=> open' marker derived from Notes prose written earlier that same day, before stage 2 landed. - G-139 linux-x86_64 lib-tier emission for punk9linux's tcllibc siblings => goal G-140: G-140's delivered scope covers the item exactly (tcllibc-tcl9-r1 emission, sibling replacement/supersede, punkbin publication f94ffd2) and its record cites the G-139 flip note as its origin. Disposition-only edits per the goals/AGENTS.md Follow-ons contract. goals_lint clean; goals_followons now 25 open / 20 goal / 13 landed / 2 declined (count also reflects c7470dac's G-165 mkimg-retirement landing, committed independently of this pair). Claude-Session: https://claude.ai/code/session_01Y1diJnhjUxKgEG6EwYAzxj Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
5 days ago |
|
|
c7470dac53 |
G-165 runtime-side follow-on landed: retire mkimg from the buildsuite wrap lane
zipfs_wrap.tcl (renamed from zipfs_mkimg.tcl, same CLI contract): payload zip written by the driving shell's builtin tcl::zipfs::mkzip - convention-stable across mkimg vintages (probed 8.7a6 vs 9.0.3: identical member tables/CRCs) - with the prefix executable concatenated OUTSIDE the writer, plus an EOCD archive-relative self-check per wrap (exit 9 on file-relative output). build905.zig wrap lane updated (3 call sites, identifiers zipwrap_*); suite README states the wrap contract; G-165 follow-on disposition => landed. Verified: standalone wraps under both vintages mount/boot identically (840 members, base=prefix); suite make-zipfs/smoke/kit-family green - all 5 products probe archive-relative and boot (family_check plain/punk/punk-bi, tclsh90szip smoke, tclsh90sprzip manual boot). Assisted-by: harness=opencode; primary-model=openrouter/moonshotai/kimi-k3; api-location=openrouter.ai |
5 days ago |
|
|
64a8916d36 |
G-122 follow-on dispositions: both open items were enacted by goals (G-124, G-125)
The G-159 retrofit recorded both of G-122's deferred items as '=> open', but each had already been enacted by a drafted goal that cites G-122 as its motivation: - pure-Tcl zip decoder for the zipfs-less bake path => goal G-124 (punk::zip::unzip/members/archive_info, achieved 2026-07-26; make.tcl extraction still consumes it and no zipfile::decode requirement remains in the tree) - refuse-to-deploy on missing tcl_library => goal G-125 (boot-precondition gate punkboot::utils::vfs_boot_library_report, achieved 2026-07-27) Disposition-only edit per the goals/AGENTS.md Follow-ons contract. goals_lint clean; goals_followons report now 28 open / 19 goal / 11 landed / 2 declined. Claude-Session: https://claude.ai/code/session_01Y1diJnhjUxKgEG6EwYAzxj Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
5 days ago |
|
|
caf7572c30 |
G-165 achieved 2026-08-04: driver-invariant kit assembly (single zip writer path, punkzip acceleration, file-relative opt-in) (punkshell 0.52.0)
- make.tcl: tcl::zipfs::mkimg retired from zip-kit assembly - every bake assembles via assemble_zipcat_image (punk::zip::mkzip + runtime prefix concatenated outside the writer), so kits are ARCHIVE-relative on every driving tcl (legacy file-relative mkimg in 8.7/9.0.0, fixed in 9.0.1+, or none). bake/bakehouse -force added (bypass the no-change skip). punkkit-stamp.toml written with pinned LF translation (was driver-dependent crlf/lf). G-134 pin warns only on UNDECLARED file-relative output and exempts kits declaring offsetstyle = "file". - punk::zip 0.4.0: write-path acceleration seam in mkzip (mirrors the G-126 read-path pattern) - punkzip build -b/-x when bin/punkzip resolves, pure-Tcl floor unchanged, produced archive verified against the walk result with silent fallback; -offsettype file and -runtime/-zipkit prefixes always floor. - punkzip 2.4.0 re-vendored (upstream 2599127): build -b root-strip and repeatable -x exclusion (mkzip semantics; zig build test green). - mapvfs.toml: offsetstyle key (zip-type kits, "file" only) documented and validated; [kit.punkfiledemo] declared opt-in specimen. - Tests: zipwriteaccel.test (accelerated-vs-floor parity incl. the _vfscommon.vfs payload); offsetstyle.test baseline exempts declared kits; maketclhelp bakehouse synopsis pin updated for -force. - Docs: src/AGENTS.md, bin/AGENTS.md, src/runtime/AGENTS.md single-writer contract; make.tcl workflow text. - Acceptance (reference machine): four driver classes (8.7a6, 9.0.3, native 8.6, msys2 8.6) all probe archive with identical member sets and CRCs; no-punkzip bake equivalent; opt-in kit probes file; suites green both runner modes. punkzip 2.4.0 published to the punkbin tools tier (punkbin a22e16b). punkproject 0.52.0. Assisted-by: harness=opencode; primary-model=openrouter/moonshotai/kimi-k3; api-location=openrouter.ai |
5 days ago |
|
|
45fd5e7c87 |
G-165 proposed: driver-invariant kit assembly (single zip writer path, punkzip acceleration, file-relative opt-in)
Every make.tcl zip-kit bake is to emit an ARCHIVE-relative kit regardless of the driving interpreter's zipfs vintage (legacy file-relative mkimg in 8.7/9.0.0, fixed mkimg in 9.0.1+, or no mkimg at all): zip-kit assembly moves to a single writer layer - punkzip (zig) when its binary is present, punk::zip::mkzip (pure Tcl) as the always-available floor - with tcl::zipfs::mkimg retired from the pipeline, and file-relative output only via an explicit per-kit mapvfs.toml opt-in. Workstream order (user decision): upstream punkzip root-strip/exclude enabling changes first, then the punkshell seam. The detail file carries the driver-vintage probe evidence (8.7a6=file, 9.0.3=archive), the upstream fix provenance (ticket aaa84fbbc5, core 3d62ee540d 2024-12-05), the write-path benchmark (mkimg 11.4/35.9s vs mkzip 8.1/24.8s vs punkzip 6.7/20.0s at 132MB/396MB), the drafting-time overlap survey and Related lines. Assisted-by: harness=opencode; primary-model=openrouter/moonshotai/kimi-k3; api-location=openrouter.ai |
6 days ago |
|
|
5ac0d4c0f0 |
punk::tcltestrun 0.4.2: closing-banner prefix match exact compare (G-161 follow-on landed) (0.51.2)
The closing-banner prefix check 'string match "$line_inner*"' treated the raw test name as a glob pattern, so a test NAME containing glob metacharacters (* ? [ ] backslash) never matched its own opening text: the closing banner failed to close the failure section and every later event including the summary line was swallowed (the G-161 wedge class; latent, unexercised in the corpus). The check is now an exact byte prefix compare (string equal -length) - identical semantics for ordinary names, and an empty line_inner keeps the historic match-everything behaviour. New parsetestrun-globname-7.0/7.1 pins: 8/8 green tclsh90 single+multi-process and tclsh86, parser dir 10/10. Landed directly at user direction from the archived G-161 Follow-ons - disposition flipped to landed in the same change-set (the sanctioned archived-file edit). runner/AGENTS.md parser coverage bullet updated. CHANGELOG + punkproject 0.51.2. Assisted-by: harness=opencode; primary-model=openrouter/moonshotai/kimi-k3; api-location=openrouter.ai |
6 days ago |
|
|
1605b97b37 |
G-164 achieved 2026-08-04: punk::args 0.15.1 viability probe alternative-allocation re-probe (punkshell 0.51.1)
Assisted-by: harness=opencode; primary-model=openrouter/moonshotai/kimi-k3; api-location=openrouter.ai |
6 days ago |
|
|
71b388e30a |
G-164 proposed: viability probe alternative-allocation re-probe (reservation-stolen flag words) + G-044 note
- new goal (user-drafted 2026-08-04): when the valmin reservation seats a word that literally names a declared required option into a required value slot and the resulting optionmissing stands in the G-152 viability probe, re-parse with the stolen word(s) consumed as the option they name; pure end-of-input exhaustion after that re-seating grants viable-incomplete. Runtime seating unchanged (the trailing-flag-as-value rule is load-bearing, pinned by flagvalues_plain_then_dash) - surfaced by the G-150 batch + independent second-session review: 'i hash -t' classes the test form '(not viable)' although 'hash -t foo' is valid - a false negative, GAP-pinned in cmdhelp.test (owned by this goal; the pin flips at achievement) - overlap survey in the detail file (G-044 consumer; G-152/G-150 archived relations; args/ns family anchors dismissed as unrelated mechanisms) - G-044 Notes: records G-164 as the probe-layer answer to G-152's "completion consumer lookahead" note for the valmin-reservation class - goals_lint clean (82 active, 82 archived) Assisted-by: harness=opencode; primary-model=openrouter/moonshotai/kimi-k3; api-location=openrouter.ai |
6 days ago |
|
|
2cc0568dc7 |
G-150 achieved 2026-08-04: flip + archive (punk::ns cmdhelp form narrowing + selection-sound auto_exec::hash declaration)
Acceptance met in full (evidence in the archived detail file's Progress): 'i ::punk::auto_exec::hash -r' renders only the rehash form's usage and '-d <name>' only the delete form, driven by the declaration (bare punk::args::parse withid selects flag-led forms uniquely via the show_or_set name's -regexprefail {^-}; no hash-handler involvement); runtime behaviour otherwise unchanged (dash-led name needs an explicit flag form - accepted cost); ensembles/single-form/no-word invocations render as today. The goal reduced to its declaration half - cmdhelp's G-041 advisory-parse candidacy already narrowed on a unique selection.
- index entry -> GOALS-archive.md; detail file -> goals/archive/ with Progress evidence and Follow-ons (handler multi-name -t missing-name defect => landed 2026-08-04 by user fix; selection-soundness sweep of other definitions => open)
- activation-freshness xref re-run at activation recorded; reference sweep at archive: no live-tier mentions, no xref bridges lost; goals_lint clean
- code/tests landed in the preceding commits (auto_exec 0.1.1, ns 0.9.2, cmdhelp.test 45/45); punkshell 0.51.0
Assisted-by: harness=opencode; primary-model=openrouter/moonshotai/kimi-k3; api-location=openrouter.ai
|
6 days ago |
|
|
8ed9cc33fe |
commandstack 0.7.1: reload contract state guards (G-160 follow-on landed) (0.50.1)
- known_renamers and debug are now info-exists guarded like the rest of the module state (all_stacks, renamer_command_tokens, token_implementations) - a module re-source refreshes proc definitions only, no longer resetting them while stacks/tokens survive - previously the reset stranded live stacks: the removal forms gate on known_renamers membership, so surviving records' renamers became unknown and removal errored - contract documented in commandstack::help; pinned by commandstack_reload_preserves_state - suite 41/41 on tclsh90 (9.0.3) + punk86 (8.6); packagepreference consumer suites 6/6 on both; minted modules/commandstack-0.7.1.tm (bootsupport/vfscommon promotion left to the next cycle, as with 0.6.0/0.7.0) Assisted-by: harness=opencode; primary-model=openrouter/moonshotai/kimi-k3; api-location=openrouter.ai |
6 days ago |
|
|
5cc488d132 |
G-077 achieved 2026-08-04: flip + archive (punkexe -e one-liner support)
Acceptance met in full (evidence in the archived detail file's Progress): the named invocations punksys -e {puts hi} / punk902z script -e {puts hi} and the full matrix (piped and unpiped stdin, no-arg usage error on both surfaces, errorInfo + exit 1, argv0/argv, result echo, tclsh -e stock-parity boundary) verified by hand on the baked kits; scriptexec.test + launcherhelp.test 49/49 green. Index entry -> GOALS-archive.md, detail file -> goals/archive/ with Progress evidence and a (none) Follow-ons section; G-141/G-158 reference-sweep achieved markers; no xref bridges lost. goals_lint clean.
Assisted-by: harness=opencode; primary-model=openrouter/moonshotai/kimi-k3; api-location=openrouter.ai
|
6 days ago |
|
|
31c0cd0477 |
commandstack 0.7.0: remove_rename convenience forms (G-160 follow-on landed) (0.49.8)
- pop_rename renamer ?command? - pop the renamer's topmost stack entry and return the removed record (searched across live stacks when no command given; entries on multiple commands are an ambiguity error) - remove_renamer renamer - remove ALL of a renamer's entries across every live stack (the unload-my-package form); returns removed records keyed by command - restore_original command - unwind the whole stack to the original implementation regardless of renamer; registers stack-evidenced renamers into known_renamers so it is not gated by state loss (module re-source) - all three route through remove_rename's re-linking/token-map machinery; Rename_stack-parked stacks are invisible to the renamer-wide forms - suite 40/40 on tclsh90 (9.0.3) + punk86 (8.6); packagepreference consumer suites 6/6 on both; minted modules/commandstack-0.7.0.tm (bootsupport/vfscommon promotion left to the next cycle, as with 0.6.0) Assisted-by: harness=opencode; primary-model=opencode/kimi-k3; api-location=unknown |
6 days ago |
|
|
977eade569 |
punk::tcltestrun 0.4.1: normalize errorInfo/errorCode capture (G-161 follow-on landed) (0.49.7)
The '---- errorInfo: ' / '---- errorCode: ' prefixes are 16 characters; parse_testrun captured from index 15, so every captured value led with the prefix's trailing space. Capture now starts at index 16 - report-shape normalization only (continuation errorInfo lines were always raw and are unchanged). parsetestrun-multiline-error-3.0 pins the normalized shape (errorcode exact, errorinfo anchored) instead of trimming/tolerating; 6/6 green tclsh90 + native tclsh 8.6. Landed directly at user direction from the archived G-161 Follow-ons - disposition flipped to landed in the same change-set (the sanctioned archived-file edit). CHANGELOG + punkproject 0.49.7. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
6 days ago |
|
|
d9398dc250 |
G-161 achieved 2026-08-04: flip + archive (tcltestrun multi-line banner parsing)
Acceptance met in full (evidence in the archived detail file's Progress): synthetic + e2e parser suites committed and green both runner modes and both Tcl generations; full-suite parity PARITY ok in both modes; src/tests/AGENTS.md relaxed to style guidance. Index entry -> GOALS-archive.md, detail file -> goals/archive/ with Progress evidence and three structured open Follow-ons (single-line banner anchoring, glob-metachar closing-banner match, errorInfo/errorCode leading space). Reference sweep: no pending-tense live-tier references existed; goals_lint clean (83 active / 80 archived); goals_followons registers the three open items; goals_xref reports no lost bridges. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
6 days ago |
|
|
5bf057a3d8 |
G-161 activation: multi-line banner parsing goal goes active
User-directed activation (proposed -> active, index + detail mirror). Activation-freshness survey (goals_xref score G-161) recorded in the detail file Notes: no related live goals - every overlap pair is unlinked with zero path intersection (lexical noise only; interval-drafted G-163 unrelated). goals_lint clean. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
6 days ago |
|
|
a9c5c9228e |
G-163 proposed: unix tty exit-path output drain (shared-description O_NONBLOCK tail loss)
New goal (user-approved wording): punkshell exit paths on unix ttys restore blocking on the shared tty file description and drain pending stdout/stderr (bounded best-effort) before teardown - closing the tclIO behaviour where stdin's non-blocking read windows make stdout non-blocking underneath, 'flush' silently no-ops once a background flush is scheduled, and TclInExit discards EAGAIN'd buffers (measured 2026-08-03: 161/5000 lines survive exit on a throttled WSL pty; ~498KB pending after a 'successful' flush). Guard homes in punk::console, invoked after the G-038 eof-restart decision point; acceptance includes complete delivery under a slow reader, bounded exit under a dead reader, unchanged windows/piped behaviour, ARCHITECTURE.md exit-section documentation, and a unix-pty-gated pin. Related: G-038, G-013, G-011, G-090 (+ archived G-036 lineage). goals_lint clean; overlap survey recorded in Notes. Claude-Session: https://claude.ai/code/session_01QgaxV27VZkmEec7oNbEVFc Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
6 days ago |
|
|
a7f090b550 |
G-162 proposed: bakelist input-freshness via content-digest kit stamps
New goal (user-approved wording): 'make.tcl bakelist' gains per-kit payload/ runtime freshness verdicts answering "would a rebake change this kit?" without baking - punkkit-stamp.toml schema 2 records content digests of each kit's assembly inputs (payload vfs manifests via the assembler's existing per-entry CRCs, runtime artifact digest, resolved mapvfs declaration, bake schema) and bakelist compares them against the current tree. Verdicts degrade per kit to 'n/a (<reason>)' (pre-digest stamp, unreadable container, mk4 driver unavailable) without aborting the listing; zip kits read pure-Tcl via punk::zip, mk4 kits only where a metakit driver loads. Context records the existing deployed column's real (narrower) role: deploy-hop integrity for the locked-exe trap. Related: G-131, G-158, G-023, G-147, G-137. goals_lint clean; overlap survey (goals_xref paths + score) recorded in Notes. Claude-Session: https://claude.ai/code/session_01QgaxV27VZkmEec7oNbEVFc Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
6 days ago |
|
|
3cd6808c73 |
shellfilter 0.2.5: fix transchan clear/flush defects corrupting unix repl output
tee_to_pipe declared the transchan 'clear' op; the Tcl core delivers 'clear' before every write when declared (the G-145 defect class - see goals/archive/G-145-piped-usage-ansi-remnants.md) and the handler discarded o_encbuf, the held partial multi-byte character. The following chunk then began with orphan continuation bytes and could never decode (the tail-backoff only trims the end), so whole chunks accumulated in o_encbuf and successive clears discarded them - eating contiguous multi-KB ranges of multibyte-dense output on the unix repl console stack: 'i <cmd>' help tables displayed with missing paragraphs, fused mid-word seam lines, or truncated bottom rows (WSL and native linux ttys; windows unaffected). Isolation repro: 393/600 lines lost with clear-per-write vs 0/600 without. - tee_to_pipe: 'clear' no longer declared in initialize, so the core never delivers it (same shape as the G-145 fix in ::punkboot::ansistrip); the method is kept as a state-preserving no-op with a warning comment. - flush repaired in tee_to_pipe, tee_to_log and logonly: all three referenced an undeclared o_buffered variable (copy-paste from the o_buffered-bearing ansiwrap/ansistrip classes) and threw on every invocation. Each now holds an undecodable partial char in o_encbuf for the next write and emits any decodable remainder per its class semantics. - Verified: transform isolation harnesses clean at all chunk sizes with clear-per-write; WSL end-to-end (linux kit visitor mode on a script(1) pty) shows all previously-missing define/list table content present; 'make.tcl modules' mint OK. - shellfilter-buildversion 0.2.4 -> 0.2.5; punkproject 0.49.3 -> 0.49.4 with CHANGELOG entry; G-090 Context records the finding as audit evidence (no characterization tests exist yet for these transforms - G-090 scope). Claude-Session: https://claude.ai/code/session_01QgaxV27VZkmEec7oNbEVFc Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
6 days ago |
|
|
439626a6d2 |
G-160 ACHIEVED 2026-08-03: commandstack hygiene pass - flip + archive
Acceptance met in full (evidence in the detail file Progress section,
landed
|
7 days ago |
|
|
40283ca082 |
G-160: closeout evidence + DOX + punkshell 0.49.3
Detail-file Progress section records the settled decisions (tokenid mechanism + seeding removal, token-map O(1) dispatch with source-level verification note and parked-dispatch side effect, Delete_stack error semantics, Rename_stack 1/0 returns, channel-discipline scope incl the gated remove_rename anomaly warning, known_renamers reconciliation rationale, did_rename shape, commandstack::next design, the pins-updated-minimally interpretation) and the verification evidence (33/33 + 6/6 on tclsh90/punk86, live punk91 src smoke, mint). src/tests/modules/AGENTS.md: commandstack entry rewritten for the 0.6.0 fixed-behaviour contract (GAP language retired); packagepreference entry gains installguard.test. punkshell 0.49.3 + CHANGELOG (commandstack 0.6.0, packagepreference 0.2.1). Claude-Session: https://claude.ai/code/session_01TNn3C58Cpekt3CsZNLCqvR Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
7 days ago |
|
|
bac3802cfc |
G-160: activate (status proposed -> active)
Activation survey re-run per the freshness rule: no goals drafted since G-160's drafting commit; top overlap remains G-035 (already Related:). G-108/G-090 next scores are lexical-only (debug/stack vocabulary), no new Related: lines. Survey note recorded in the detail file. Claude-Session: https://claude.ai/code/session_01TNn3C58Cpekt3CsZNLCqvR Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
7 days ago |
|
|
d9b8b1cba0 |
G-159 ACHIEVED 2026-08-03: Follow-on disposition tracking - flip + archive
Acceptance verified whole (evidence in the detail file Progress section): grammar + sanctioned disposition edits + sweep step (c) live in goals/AGENTS.md; goals_lint findings fixture-proven; goals_followons advisory report live; 30-file retrofit at zero unstructured flags (50 follow-ons: 25 open / 17 goal / 6 landed / 2 declined); goals-system v4. Flip mechanics: index entry -> GOALS-archive.md record (newest-at-top per today practice), detail file -> goals/archive/ (pure rename, content edits made in place first), own ## Follow-ons section (none-note), reference sweep: GOALS.md v4 line gains the achieved/archive marker, G-156 Notes gains the v4-drift/census pointer; goals_xref report shows no G-159 shared-archived-ref bridges needing repair. Claude-Session: https://claude.ai/code/session_01QgaxV27VZkmEec7oNbEVFc Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
7 days ago |
|
|
4ec0a1109f |
G-159: archive retrofit - 30 files gain ## Follow-ons disposition sections
All vocabulary-flagged archived detail files structured under the v4 grammar: 24 files with real items, 6 with (none - incidental vocabulary) notes. Census at acceptance: 50 structured follow-ons - 25 open, 17 became goals (incl. G-101''s seven-item block onto G-158/G-130/G-131, G-057+G-128 RT_VERSION onto G-137, G-155 keep-list onto G-156), 6 landed (evidence-backed: G-036 udp swap DONE record, G-046 same-day fix, G-031 tomlish-found core arms), 2 declined (G-036 immunity question academic, G-096 0.15.2 migration superseded by 0.16.0 adoption). Zero unstructured-vocabulary files remain; goals_lint clean (grammar + goal refs validated). goals_followons.tcl: lsort -dictionary for zero-padded ids. Evidence + open-items census recorded in the G-159 detail file. Claude-Session: https://claude.ai/code/session_01QgaxV27VZkmEec7oNbEVFc Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
7 days ago |
|
|
fb84c83ac3 |
G-159: goals-system v4 - Follow-on disposition contract + tooling
goals/AGENTS.md: Follow-ons contract - ## Follow-ons section as the last section of archived detail files, line grammar with closed disposition vocabulary (open | goal G-<id> | landed YYYY-MM-DD (<where>) | declined YYYY-MM-DD (<why>)), disposition-only updates sanctioned as the one edit to archived files (same work unit that acts on the item), archive-flip reference sweep gains step (c) emitting the section. GOALS.md: v4 front matter + version entry, achieved-flip and acting-on-a-follow-on maintenance rules, authoring-workflow disposition-flip duty. GOALS-archive.md: frozen-file carve-out wording. goals_lint.tcl: grammar findings (malformed column-0 Follow-on line, disposition naming a goal in neither index) - fixture-verified both fire. New goals_followons.tcl: advisory disposition report grouping open items first + vocabulary- without-section flags; real-archive baseline 30 flagged files (retrofit is the next change-set). Claude-Session: https://claude.ai/code/session_01QgaxV27VZkmEec7oNbEVFc Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
7 days ago |
|
|
67bebfe0a7 |
G-159: activate (status proposed -> active)
Activation survey re-run per the freshness rule: G-160/G-161 (drafted in the interval) show no scope overlap; standing relationships unchanged (Related: G-156). Survey note recorded in the detail file. Claude-Session: https://claude.ai/code/session_01QgaxV27VZkmEec7oNbEVFc Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
7 days ago |
|
|
ea5971a1fa |
goals: draft G-160 commandstack hygiene pass + G-161 tcltestrun multiline-banner parsing
Two user-approved proposed goals from the 2026-08-03 commandstack
characterisation arc (git
|
7 days ago |
|
|
82d02967cf |
goals: G-028/G-105 notes - pre-G-155 src/_build refs updated to src/_bake (+ nobuild -> nobake)
Non-contract Notes references in two live detail files still used the pre-G-155 kit-assembly workdir name: G-028's G-057/G-121 relationship notes (icon-step stamped-copy location; bakelist deployed-state column, whose token is likewise nobake since G-155) and G-105's G-127 note (cross-target output tiering). Terminology-only; Goal/Acceptance contract lines untouched. goals_lint clean. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
7 days ago |
|
|
10274fb668 |
Goals: draft G-159 trackable follow-on dispositions (user-approved)
Index entry + goals/G-159-followon-disposition-tracking.md. Proposed goal closing the follow-on tracking gap: archived-goal follow-ons become structured disposition lines (open/goal/landed/declined vocabulary), disposition updates sanctioned as non-contract edits to archived detail files, goals_followons.tcl advisory report + goals_lint grammar validation, one-time archive retrofit, goals-system v4 bump. Overlap survey: Related G-156; G-069 deliberate non-overlap. goals_lint clean (83 live / 76 archived). Claude-Session: https://claude.ai/code/session_01QgaxV27VZkmEec7oNbEVFc Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
7 days ago |
|
|
3ee4f165b7 |
G-032 archive move: goals/G-032-launcher-punkargs.md -> goals/archive/ (pure rename)
Claude-Session: https://claude.ai/code/session_01Y1diJnhjUxKgEG6EwYAzxj Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
a5f60ce4b1 |
G-032 ACHIEVED 2026-08-03: launcher help + parsed subcommands (core 0.3.0, 0.48.0)
The kit launch surface dogfoods punk::args. Boot core 0.2.1 -> 0.3.0: new built-in 'help' subcommand + '-help' / '<subcommand> -help' render tabled usage from the moduledoc::punkexe ids plus live registrations (per-kit resolved_def clones (script)::punkexe.launcher/.launcherhelp); unknown first arg naming no existing file (and no lib:* reference) is refused with usage (stderr exit 1) instead of a silent script attempt; buildinfo enforces its no-arguments contract through punk::args (pinned one-liner + tabled usage, exit 2 unchanged). Registration extension ::punkboot::project_subcommand_info (summary/argsid/package/parse - documented by moduledoc::punkboot 0.2.0): project subcommands appear in help by registration alone and may opt arguments into declared parsing. Carve-outs: tool-style kits keep help flags routed to their processor (tomlish parity); tclsh intercepts a help flag only as sole argument (stock dash parity); argsid-less registrations keep -help passthrough. G-030 degradation doctrine: lazy guarded requires (normal boots never load punk::args), PUNKBOOT_PLAIN=1 hook, plain-list fallback, rendering degrades independently of parsing. 8.6 trap fixed en route: punk::args choices-grid render needs punk::lib's lpop shim - guarded require added (verified tabled help on metakit punk86). moduledoc::punkexe 0.4.0: (script)::punkexe::help definition; top-level refusal rule + help discovery; per-subcommand -help notes; buildinfo rejection shape; passthrough-vs-parsed decision recorded. Verified on zipfs (punk902z, punk91) and metakit (punk86) kits; launcherhelp.test 22/22 (incl fake-thin-main registration harness + metakit leg); punkexe subtree 140/136/4skip/0fail; full suite failures (4) are pre-existing in untouched subsystems. Goal flipped achieved + archive record + live-tier sweep (G-038 rewrite, pointers to G-077 and G-089); detail-file move to goals/archive follows as a pure rename. Layout _config trio + _vfscommon core seed hand-swept (byte-identical to masters). GOALS.md staged as the G-032-removal hunk only - the uncommitted G-159 draft entry is left to its author. Claude-Session: https://claude.ai/code/session_01Y1diJnhjUxKgEG6EwYAzxj Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
772e64b165 |
G-111 archive move: goals/G-111-modpod-tidy-tests.md -> goals/archive/ (pure rename)
Claude-Session: https://claude.ai/code/session_0156PuejSCGjgeGb7jiABrDU Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
2fc292f428 |
G-111 ACHIEVED 2026-08-03: flip + archive record + live-tier reference sweep
Acceptance fully met: per-defect dispositions recorded, module tarjar-free, suite green (punk91 7/7, tclsh90 7/7, punk86 6/7 with the 8.6 zipfs limitation recorded per G-034), 0.1.6 re-vendored with suite passing, tarjar-artifact dispositions user-confirmed (all five keeps, none deleted). Index entry moved to GOALS-archive.md; sweep updates pending-tense mentions in G-029/G-109/G-157 and pushes actionable findings to G-034 (redirect = zero-dep load path; 8.6 vfs::zip dll-load measured) and G-110 (8.6 copy-to-temp datapoint). Detail-file rename to goals/archive/ follows as a pure-move commit. Claude-Session: https://claude.ai/code/session_0156PuejSCGjgeGb7jiABrDU Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
05a0bf4b87 |
G-111 assessment addendum: vendored tarjar-2.4.3.tm is vendorupdate-managed from c:/repo/jn/tarjar (include_modules.config line) - removal decisions cover that config line too
Claude-Session: https://claude.ai/code/session_0156PuejSCGjgeGb7jiABrDU Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
bba10012a0 |
G-111: modpod 0.1.6 tidy + first test baseline (0.47.2)
Tar-era connection API removed from modpod (connect/disconnect/get, system::connect_if_not/myname/myfullname - broken since the tarjar era, no callers anywhere); is_valid_tm_version fixed (versionparts substitution error); make_mountable_zip debug output removed (the undeclared ansistring dependency made -offsettype file error under the module's declared deps; stray ::last_header global gone); struct::set dependency dropped; module greps tarjar-free. The load stub gains the unwrapped #modpod-<pkg>-<ver> redirect: an extracted folder beside the .tm is sourced directly - loads with neither zipfs nor vfs::zip available. Re-vendored 0.1.6 through the established channels (modpod checkout mint -> vendormodules -> bootsupport -> modules staging -> vfscommon). First modpod testsuite at src/tests/modules/modpod/testsuites/modpod/roundtrip.test: wrap/load round-trips - real-disk + zipfs module paths, both -offsettype forms, unwrapped redirect, probe-discovered binary payload (no committed binaries). Green: punk91 tcl9.1 kit 7/7, native tclsh90 7/7, punk86 8.6.17 6/7 (zipfs-container test skips on 8.6 - recorded per G-034). G-111 activated at user request (activation overlap survey recorded); per-defect dispositions, run evidence and tarjar-artifact assessment proposals in goals/G-111-modpod-tidy-tests.md - artifact dispositions await user confirmation. GOALS.md G-111 Scope version reference repaired to glob form per goals-system v3 drift rule. Claude-Session: https://claude.ai/code/session_0156PuejSCGjgeGb7jiABrDU Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
a028b1c178 |
Goals: draft G-158 punk86-kit parity (user-approved this session)
New proposed goal consuming G-101 follow-on items 1-3: punkshell 8.6 kits bake on the suite-built mk4 head via make.tcl (sdx ladder suite-shell rung as a shared seam with G-157 step 4, bi-class head variant, parity bakes for kit.punk86/kit.punkbi passing existing gates, clean-path boot comparison vs tclkit-baked siblings, no new committed binary, third-party-tclkit disposition record). Detail file carries the 2026-08-03 overlap survey (strongest: G-157; G-131/G-130/G-110/G-116/ G-137 related; libfetch/bin siblings judged not related) and the drafting decisions approved at review. GOALS.md staged hunk-scoped: the concurrent uncommitted G-111 activation + modpod re-vendor working state is left untouched for its own commit. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |
|
|
f7b72017c1 |
G-157: new goal (proposed) - exe-less kits (starkits etc.) materialized, never committed
Follow-on to G-004, extending the commit ban from executables to opaque-container VFS artifacts (metakit/cookfs and similar non-zip containers), executable-headed or not. Index entry + detail file with overlap survey; tracked instances inventoried (bin/sdx.kit, src/bin/sdx.kit, layout-shipped project-0.1 copy); goals_lint clean. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
1 week ago |