Browse Source
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.commaster
5 changed files with 76 additions and 26 deletions
@ -1,5 +1,6 @@
|
||||
0.2.4 |
||||
0.2.5 |
||||
#First line must be a semantic version number |
||||
#all other lines are ignored. |
||||
#0.2.5 - tee_to_pipe: no longer declares transchan 'clear' (core delivers clear before EVERY write when declared - G-145 defect class; its o_encbuf discard cascaded into contiguous multi-KB loss of multibyte-dense output, the unix repl result-echo corruption in 'i <cmd>' tables); clear method kept as state-preserving no-op; flush repaired (referenced undeclared o_buffered -> threw on every call; now holds undecodable o_encbuf for next write, emits decodable remainder to both pipe and downstream as bytes). Same undeclared-o_buffered flush throw repaired in tee_to_log and logonly (o_encbuf-only, per-class semantics preserved; neither declares clear) |
||||
#0.2.4 - shellfilter::run honors its -syslog option (default empty -> the shellfilter-run log worker is a noop, no thread created) instead of the hardcoded 127.0.0.1:514 debug leftover; syslog remains supported when explicitly configured. Part of the piped-stdin exit/quit hang fix - the always-on syslog worker exposed the G-036 Tcl 9 console+udp worker wedge on the exit teardown path (see shellthread 1.6.3) |
||||
#0.2.3 - shellfilter::run: try/finally guarantees tee-stack removal (stdout/stderr restoration) even when the body errors; decorative stack-status table rendering in log::critical blocks is catch-guarded so a rendering failure (e.g mismatched module snapshots - stale textblock vs new punk::ansi sgr_merge_singles options) degrades to a log note instead of aborting the run and leaving the process's stdout/stderr diverted (silent-output-loss failure mode found via tomlish runtests 2026-07-06) |
||||
|
||||
Loading…
Reference in new issue