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.