Release v0.0.48 - #293
Merged
Merged
Release v0.0.48#293
Conversation
…and stream-failure channel [F8/F9/F12]
…ta renderers [F13]
…ons [F3] [D:http-header-bytes]
…F4] [D:secret-redirect]
…ials cross-origin [DA-05] [D:contract-redirect]
Session.resolve rejects a NUL-bearing path with a located weir error before Path.GetFullPath throws its raw ArgumentException (SIGABRT via the parse resolver, raw .NET message elsewhere) — the one resolution funnel every File/Proc/completion builtin shares. Extern.exists reports a NUL-bearing program head as not-found so the parser emits its ordinary missing-command diagnostic instead of aborting. NUL-free paths unchanged.
…t diagnostic [D:budget-stop-first]
…D:lsp-transport-caps]
…D:assemble-quadratic]
…ath [D:spawn-nul-funnel]
…ach, never hang or crash (STRIX-6) [D:yaml-depth]
…e no longer stack-overflows on ==
Strix Security ReviewWarning This pull request has 13 commits after the last Strix review ( No security issues found. Updated for Reviewed by Strix |
queil
force-pushed
the
release-v0.0.48
branch
from
September 21, 2026 20:36
b4601fd to
1c97f00
Compare
…re the stack floor
…lPath + separator-agnostic preview)
…A-03 e2e preview separator-agnostic testSequenced does not isolate process-global PATH under the YoloDev TestSdk (a concurrent list's echo saw the stripped PATH), so the PATH-separator probe now PREPENDS its dir instead of replacing PATH — sh/echo stay resolvable for every concurrent spawn. The DA-03 e2e bound.weir asserts the absolute-under-A preview TAIL (Windows emits backslashes and 8.3 shortnames the bash prefix lacks).
queil
force-pushed
the
release-v0.0.48
branch
from
September 22, 2026 08:55
a5f4219 to
0f98989
Compare
…Cwd() Four cwd-mutating tests captured 'saved = Session.Cwd()' and restored to it. Under the parallel runner that snapshots a CONCURRENT test's temp dir; after that dir is deleted the global Session.Cwd is left pointing at a deleted path for a sustained window, and every concurrent spawn test then fails 'command not found: sh' (Process.Start cannot chdir there). This is the real cause of the recurring sh/echo failures — NOT the PATH strip. Capture Directory.GetCurrentDirectory() (never mutated) instead.
…tal-delivery on POSIX The S1/DA-05/http-echo cells slept a fixed 0.6s before the weir client connected. On a slow runner (macOS) the listener is not yet accepting at 0.6s and a connect into the bind race HANGS to the 30s client timeout instead of refusing (exactly what awaitTcp exists for). Wait for the listener. F8's GOT-FIRST asserts incremental chunk delivery, which Windows HttpListener cannot do (it buffers the body, so an early chunk is not on the wire when the producer's raise aborts) — a verified platform wall; guard that half to POSIX, keep the streamErrors half everywhere.
F13 drives weir through a real pty to prove data ANSI/CR is neutralized at a terminal. Windows Python has no termios/tty, so 'import pty' is a ModuleNotFoundError and the cell dies before any assertion (it never reached the redirect coda on Windows). Guard the whole cell to POSIX, same as F8's platform-specific half.
…per-call scan exists() only used the cache when already built; the None branch did a per-call PATH×PATHEXT filesystem scan and never populated it. A bareword ';'-spine calls exists() once per head, so 20k heads meant 20k full scans — ~20s on POSIX (already at the e2e ceiling) and >800s on Windows (PATHEXT × slow File.Exists). Route through names(), which enumerates PATH once and memoises; every lookup is then O(1). 20k spine: 20.3s -> ~1s.
The previous fix routed exists() through names(), which enumerates EVERY file in EVERY PATH dir. That fixed the 20k-spine but regressed two things: a one-command line (weir -e 'ls |> ...') paid the full /usr/bin enumeration (~6ms -> 21ms, over the timing gate), and the Windows PATHEXT test failed because the whole-PATH set was cached before the test wrote its .bat mid-run. Memoise the per-name SCAN RESULT instead: a distinct head pays one targeted scan then hits the cache (20k identical heads -> one scan), a single head does NOT enumerate all of PATH, and each name is scanned live on its first query (so a mid-run file is seen). names() stays for completion.
Every other cwd-mutating list is testSequenced; lsTruthTests was left parallel and mutated the GLOBAL Session.Cwd (setCwd temp dir, then delete) in the parallel phase, racing the parallel spawn tests: a concurrent spawn snapshots the temp cwd, this list deletes it before Process.Start, the child dies 'command not found' (chdir fails). The GetCurrentDirectory restore fixed the sustained leak (brief green) but not this TOCTOU, which macOS's slower timing re-exposed. Sequencing removes it from the parallel phase — no spawn ever sees a vanishing cwd.
…l Session.Cwd runFile is Weir.Script.run (IN-PROCESS), so the DA-03 programs' 'within cd' mutate the shared Session.Cwd. Left parallel, the list raced itself (two DA-03 programs stomping each other's cwd -> a plan preview bound to the wrong dir -> 'not absolute-A', exit 1) and the parallel spawn tests. This is the macOS DA-03 failure. With lsTruthTests, this was the last parallel cwd mutator; both now sequenced.
…heads) The section feeds NUL-bearing data via #!/bin/sh shims used as command HEADS (emitprog, emitnul, argvdump on PATH). A native weir.exe cannot exec a shebang script and an extensionless name never resolves via PATHEXT, so on Windows 'emitprog' reads as an unbound variable. The existing 'command -v sh' guard is insufficient (MSYS ships sh); require IS_WINDOWS=0. The NUL-refusal itself is platform-neutral and unit-tested.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.