User-directed removal of the two pipeline-based development iterations flagged
as candidates in the 0.7.0 hygiene pass. Both were undocumented, unexported
global aliases superseded by the plain proc nscommands (which adds
weird-namespace handling); no callers existed in the repo and nscommands1 was
broken - it referenced nonexistent commands (nsthis2, inspect at global
scope) and errored on first use. Recoverable via git history.
ns/nav/repl suites 111/111 green. buildversion 0.7.1 -> 0.8.0 (command
removal); project 0.12.36 + CHANGELOG (patch - the aliases were never part of
the documented shell contract).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
@ -5,6 +5,10 @@ The latest `## [X.Y.Z]` header must match the `version` field in `punkproject.to
Entries are newest-first; one bullet per notable change. See the root `AGENTS.md`
"Project Versioning" section for the bump policy.
## [0.12.36] - 2026-07-14
- punk::ns 0.8.0: removed the leftover global command aliases `nscommands1` and `nscommands2` (user direction; flagged as removal candidates in the 0.7.0 hygiene pass). Both were undocumented pipeline-based development iterations superseded by the `nscommands` proc; `nscommands1` was broken (referenced nonexistent commands) and errored on first use. Patch-level project bump despite command removal: neither was part of the documented user-facing shell contract.
## [0.12.35] - 2026-07-14
- punk::ansi 0.1.3 (documentation-only): grepstr's -return summarydict help corrected - the summary dict's linemap key is always present (the old text claimed it appeared only with -n; the always-present behaviour is pinned in ansi/grepstr.test). This was the doc/behaviour reconciliation deferred from the grepstr characterization wave to the punk::ns hygiene pass.
#review - ansi codes will be very confusing in some scenarios!
#2026-07-14 Agent-Updated: removed the superseded pipeline-based command aliases nscommands1 and
#nscommands2 (user direction 2026-07-14; flagged as removal candidates in the 0.7.0 hygiene pass).
#The plain proc nscommands below is the live implementation (adds weird-namespace handling);
#nscommands1 was broken - it referenced nonexistent commands (nsthis2, inspect at global scope).
#Recoverable via git history.
#todo - only output color when requested (how?) or via repltelemetry ?
#2026-07-14 Agent-Generated: nscommands2 and nscommands1 below are earlier pipeline-based iterations
#superseded by the plain proc nscommands (which adds weird-namespace handling). No callers exist in
#the repo; nscommands1 additionally references nonexistent commands (nsthis2, inspect at global scope)
#and errors on first use. Removal candidates - retained pending user decision since they register
#global command aliases and serve as pipeline-syntax examples.
interp alias {} nscommands2 {} .= ,'ok'@0.= {
#Note: namespace argument to apply doesn't accept namespace segments with leading colon - so pipelines won't work fully in dodgily-named namespaces such as :::x
#unless we always return trailing \n - it's impossible to represent a list containing only the empty string using \n (cannot disambiguate between empty list and/or list of 2 empty strings)
#we use the convention that a result of just \n represents a list of just the empty string - as we don't require duplicates anyway - so it shouldn't mean two empty strings.
#0.8.0 - removed the global command aliases nscommands1 and nscommands2 (user direction 2026-07-14, flagged as removal candidates in the 0.7.0 hygiene pass): earlier pipeline-based iterations superseded by the plain proc nscommands (which adds weird-namespace handling). Neither was documented/exported and no callers existed; nscommands1 was broken - it referenced nonexistent commands (nsthis2, inspect at global scope) and errored on first use. Recoverable via git history.
#0.7.1 - hygiene-pass backlog fixes (both pinned before the fix, pins flipped with it): (a) get_nslist's -types default was the literal string $known_types (braced-literal defaults bug) so any call without -types - notably bare user-level 'nslist' - errored with a malformed 'Unrecognised namespace member type: $known_types'; an unsupplied -types now defaults to all known member types (nslist.test nslist_types_default; nslist's own PUNKARGS -types gained help text and deliberately no -default so the passthrough stays absent when unsupplied). (b) nsjoinall's non-empty-prefix-vs-absolute-path error message carried a copy-paste 'nsjoin:' prefix - now 'nsjoinall:' (nsprimitives.test nsjoinall_edges). Also commented out a development trace puts ('>>> base: ...') that polluted nscommands stdout on the weird-namespace path (same treatment as the 0.1.1 trace-puts cleanup).
#0.7.0 - comment/doc hygiene pass (no change to shipped behaviour; minor bump for removed unused procs). Dead code removed (recoverable via git history): the fully commented-out predecessor help command 'arginfo' (~930 lines, replaced by cmdhelp), the superseded/deprecated name-primitive twins nsparts1/nsprefix1/nsprefix_orig/nstail1/nstail_orig (never exported, no callers; NOT drop-in equivalents - they collapse colon runs of 5+ differently, divergence pinned in tests ns/nsprimitives.test git history), obsolete nsglob_as_re1, empty stubs ns_relative_to_location/ns_absolute_to_location, obsolete internal::_pkguse_vars, an 'if 0' block in nstree_list, unused interp_aliases assignment in get_ns_dicts, and assorted commented-out code remnants. Stale docs corrected: nsprefix comment (:::a prefix is :: not ::a), nsglob_as_re 'should be fixed' note (fix has long been in place - * matches an inner single colon), cmdhelp typos, corp -syntax truncated help sentence, nstree_list empty PUNKARGS help fields filled. Flagged (comment only): get_nslist red-strike/masked alias display branches appear unreachable (see nslist.test fixture findings), nscommands1/nscommands2 pipeline aliases are superseded removal candidates (nscommands1 errors on use - references nonexistent nsthis2), cmdtrace stdout/stderr noise deferred to proposed G-085, test_switch* marked as live cmdtrace test fixtures. All inserted/updated comments carry 2026-07-14 Agent marks.
#0.6.0 - cmdtrace gains -pause <bool> (default 1 - existing interactive behaviour unchanged): -pause 0 bypasses the 'paused - hit enter key to continue' askuser in _cmdtrace_leave so cmdtrace can run non-interactively/scripted and the returned marked-up body report captured (gate: namespace variable _cmdtrace_pause). cmdtrace argdoc: the nested-switch traced-linenumber caveat now cites the upstream Tcl ticket (core.tcl-lang.org tktview 5d5b1052280c976ea3d4, reported by the developer) and records the characterized pattern (2026-07-14, punk-free minimal repro identical on 8.6.17/8.7a6/9.0.3): a nested single-block switch arm body reports lines shifted by (switch command's line within its containing script - 1) exactly when the arm's index into the split pattern/body list lands on a literal word of the switch command (options/--/block); dynamic-word or out-of-range indices report correctly arm-relative - so which arms mismark varies with the option words used, matching the ticket's observation. New testsuite ns/cmdtrace.test (pause flag, flat-switch and 2-word-nested correct-mark guards, upstream mismark GAP pins gated on have_tclcoredocs since cmdtrace's arm-offset correction needs the ::switch argdoc).