G-071 flipped proposed -> active (user direction 2026-07-12).
New allocation.test (7 tests) with reduced fixtures isolating the failing
shape from the tclcore moduledoc: the lseq-range shape (start ?sep? end
?by-step clause?) reproduces the moduledoc failures exactly. Current
mis-allocation pinned as GAP tests ("1 2 3" -> invalid blaming sep,
"1 2 by 3" -> incomplete blaming end, "1 2 3 4" correctly invalid but
misblaming sep), noise-word variants and the if-shape noise-word clauses
pinned as regression guards, parse_status -form absence pinned as GAP.
Also silenced four more unconditional debug puts on get_dict allocation
retreat paths ((111)/(222)/(333)/(444)) - these printed to stderr during
NORMAL successful parses at every optional-skip retreat, polluting
interactive help/parse output for noise-word-modelled commands. Behaviour
unchanged; the retreat logic they marked is exactly this goal fix target.
Full punk::args suite 193 pass / 1 pre-existing skip / 0 fail (tclsh
9.0.3).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
Both user-approved drafts from the G-041 prework probe findings:
- G-071: value-allocation correctness for optional standalone values +
trailing optional-member clauses (the lseq "0 10 2" in-form failure),
error-blame quality, and parse_status -form support. A G-041
prerequisite: no lseq form accepts those arglists under the current
allocator, so form auto-selection alone cannot fix them.
- G-072: named compound clause types with per-alternate element typing
and arity for heterogeneous repeating clauses (try on/trap handlers),
building on the design sketches embedded in the ::try moduledoc notes.
Includes a recorded examination of Elixir gradual set-theoretic types
(user direction): punk::args -type | and literal() are already a
fragment of the set algebra; negation would subsume reserved-word
deny-lists; per-alternate arity falls out of union-of-shapes.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com