Live (gritzko, 2026-07-20, main tree): after a few clicks in ONE pager session, spells that worked start erring, and the error KIND changes as you keep clicking — no hunks, NAVNONE: no worktree, err: loop: the verb 'commit' has no plain-args handler. "The actual path does not seem to matter. Just click around." Cold headless dispatch is fine (jab commit '?hl' from journal root reaches the verb — COMMITNONE from inside, NOT a dispatch miss), so the disease is accumulated SESSION STATE, not module conversion or cwd (the live pager never chdirs — grep io.chdir = 0; JS-119 premise holds).
be work → enter a wt → click a file (CMakeLists.txt) → back → click the file again → :why → click any shaded token → err: loop: the verb 'commit' has no plain-args handler.be status → click a file → :why → back → :why → click → errors; kinds vary (no hunks, no worktree); "starts happening after some clicks".jab why CMakeLists.txt → click chunk 1 (commit view loads, OK) → back → click chunk 2 → err: NAVNONE: no worktree //BRO-040 //BRO-040/CMakeLists.txt/: why CMakeLists.txt. The address bar IS the evidence: context //BRO-040/CMakeLists.txt/ — the FILE joined as a DIR (BRO-018 shape, NOT cured on this path, contra the first investigation) — and the spell still why CMakeLists.txt, so the replay re-joins under the junk.//BRO-040 reports "no worktree" though work/BRO-040 EXISTS — either //NAME self-reference fails when the session launched INSIDE that wt, or the junk context path breaks the anchor; the investigation must name which.R re-drive the tracked spell with rest args STRIPPED (_driveApply records only verb+arg0) — a replayed :why … loses its subject.//WT/dir/file/sib → "no hunks") — each cat/why hop can compound the junk path._ctxFrom(arg) pager.js:744) — arg fragments (?hashlet) can leak into the persisted context; the strict-O cure is STAGED in //BRO-039 (NOT landed), and covers the O leg only — the U-follow reduction stays per its pending ruling.:why → back → :why → click, then keep clicking) and assert the session stays healthy — same view bytes and NO error after N repetitions; today's frames show the degradation.//WT/rel/dir/ mutated ONLY by navigation (BRO-024); pager arg-blind, args never context donors; resolution via core/resolve_hash.js only; errors in plain words.why <file> drive consumes abc.mmap("ULOG", <wt>/.be, "r") throws No file descriptors available and the pager's file→dir oracle goes BLIND: _ctxFrom (pager.js:822) only reduces a file when _ctxKind→reg, which runs discover.wtdir → treeAt → climb → anchors() (resolve_hash.js:61) → ulog.each. So the FILE survives as a dir segment (//BRO-040/CMakeLists.txt/) and every later resolve fails. The carrier is the BE-048 launch context, which for jab why <file> is deliberately the FILE — harmless while the oracle works, junk the moment it blinds.ulog.each (shared/ulog.js:42-48) swallows a failed mmap with catch (e) { return; } → ZERO rows, no error; anchors reads that as !!row0 false → "no worktree". A resource failure is indistinguishable from an absent/empty log — the JS-074 disease in a second place. Orchestrator verified the swallow in the main tree and reproduced the fd-hunger differentially: under ulimit -n 64, jab status completes, jab why CMakeLists.txt dies Error: No file descriptors available.TREENONE is this exhaustion seen at tree.js:130 instead of at anchors. Explains every symptom: accumulates with clicks, path-independent, error-kind roulette (no hunks / no worktree / TREENONE / the JS-074 plain-args phantom, all reproduced from one exhausted process), and "cold headless is fine".this.ctx, view.uri, view.call{verb,spell,context}, be.prev_uri across N iterations — no pager coordinate rots. BRO-015 (replay strips rest) and BRO-018 (file-as-dir) are already CURED by landed BRO-024; _ctxFrom strips ?query, so no ?hashlet leaks into the context. Suspects 1-3 all cleared.err: TREENONE — views/tree/tree.js:130 (resolve_hash(ctx,bare) throw) / :144 (pin absent from the sub store) as the commit view resolves its tree object — and the persisted pager context was CORRECT (//) at that exact step.jab commit ?hashlet is OK, standalone interactive jab commit ?hashlet renders, and the same driveSpell returns 214 hunks in every headless config; it fails ONLY as a click-driven reentrant drive inside a long-lived interactive process AND only on the complex main-tree store (an authority-bearing fixture hive clicks the same why→commit path clean). Store/resolve_hash/tree-object resident state — kin of the fd/mmap hazards (ABC-014, keeper) — NOT the pager.err: TREENONE on the why-token click, then the cascade (no hunks: why, (no URI here))ulog.each never closes its map even on success._runSpell/_ctxFrom/ _fillAuth (pager.js:740/744/827) inherit authority from cur / scavenged prev for a rooted-but-authority-less target (probe: follow /x at //WT-1 → //WT-1/x); real navLink never mints that shape — a BRO-024-law violation, no reprojab diff empty) and the main tree is unmutated (///be#43a754a0, 20 base / 1 wt, session-start state).jsrc symlink in its /tmp scratch pointing at its OWN clean clone and ran jab from there, and it drove an interactive pager against the MAIN TREE (status rows carry mutating [put]/[del]) — both outside the iron rule; no damage found, tips verified unchanged.mainrepro.py (real-UI RED, main tree); fixture drivers reproA/reprob click clean.