CTX: verb args, context MANDATORY, . = here, no silent fallbackRULING (gritzko, chat 2026-07-19): the arg-into-context bug was fixed twice (BE-053, BRO-038DONT→BE-053) and returned (WORK-013) — the part gets REWORKED, not patched. Every O token is three-part CTX: verb args with the context slot ALWAYS present: . = empty ("here", leaves the pager context), /… = absolute (REPLACES the context), anything else = relative (COMBINES with the context). Args pass to the verb VERBATIM. parseOspell becomes one strict regex; a non-matching token is NOT an O spell — loud error, never "context-less spell".
//; every other token silently degrades to {context:"", spell:token} — so mis-baked mints keep working wrong, and the pager scavenges context from ARGS instead (_fillAuth graft pager.js:740, _ctxFrom(arg) reduction :744 — the audited leak list, 2026-07-19 bro-derivation inspection)._actSpell/_runSpell ctxOverride → driveSpell, loop context-first RAW args) STAND and are reused.done KEY, views/why/why.js:154 hand-baked #rgb commit ?hashlet); "//" is used as an empty-context alias (work.js:444/446); pager persists the NEXT context off the ARG, not the O context (pager.js:720 vs :744).view.call stores context and spell separately already.CTX: verb args, CTX mandatory — .: todo BE-021, ///jab/dog/abc/: status, dog/abc: status. parseOspell = one regex ^(\S+): (.*)$ (context = the space-free token before the FIRST : ; contexts are URIs/paths, never contain spaces, so : inside args stays safe). Trailing / shed off the context as today.. for empty); every O producer routes through mintOspell — the todo.js:260 and why.js:154 bypasses are converted (the #rgb tint becomes its own leading marker, not welded into the spell text)../empty → current; leading / → replace; else → join — used BOTH for the drive context and the recorded next this.ctx; the _fillAuth graft and _ctxFrom(arg) reduction leave the O path; args are display-verbatim, never context donors.: spells (_applySpell/_driveApply) and slot-edits keep today's behavior; only the O token path reworks.^(\S+): (.*)$; a
non-match returns NULL (no silent {context:"",spell} degrade).
Trailing dir / shed via ([^/])\/+$ so /// (main tree) is
KEPT intact (coordinator: WORK-013 ///: status must not
collapse to ""). mintOspell ALWAYS emits the slot; ""/"//" → .._combine(current,ctx) — ./empty keep, a
leading / (//WT,///,///sub) REPLACES verbatim (resolve
machinery owns URI→tree), else COMBINES (joinPath as a dir).
Used for BOTH the drive context AND the recorded this.ctx in
the O paths; _fillAuth/_ctxFrom(arg) stay ONLY on the U path.clickTargetAt returns {text,tag};
the O path strict-parses, the U/F/line path follows verbatim
(U behavior untouched, per constraint). _uriAt string contract
preserved (why/blame, commit/*, rowclick, sub/advput all read it).[put]/[del], why.js commit O) now mint via
mintOspell, and a parse-NULL token is rejected loudly in mouse
(not an action link: <token>, pager.js:1264, plain words).
Authorized pin re-pins: test/why/blame, test/sub/advput,
test/status/buttons (assertbuttons + click_refresh),
test/why/range, plus 4 new loud-reject seam checks in bro/ospell.., //WT////////sub, dog/abc), /// kept, old slotless
token REJECTED (null pinned), quoted : safe; RED shown: old
parse collapsed ///→"" and degraded slotless silently.;
convert todo.js:260 (done KEY→mintOspell); ""/"//" alias route
through mint. DEFERRED: why.js:154 — see Blockers_combine drives AND persists; fillAuth/ctxFrom leave
the O path; slotless-O reject softened to "here" (see decision).: commit ?hashlet with the #rgb tint as its own
leading marker; why/blame + why/range re-pinned, both green.jab diff <big-file> in this wt dies hunk.render: out full —
sibling of DIFF-010 (weave.fold grow-on-full landed,
hunk.render's out buffer still fixed); proposed as its own ticket,
small diffs render fine, ctest diff suites green.[get]/[diff] labels
(WORK-004/010 replaced them with [±]/[-N]), so its frames
never paint. Green needs a getctx.py label update — outside the
authorised edit set. The get→row-wt threading it targets DOES
work now (proved headless in test/bro/ospell).BRO-039: strict 3-part O wire form CTX: verb., /// kept),
views/bro/pager.js (clickTargetAt tag, combine, O-path in
runSpell/actSpell, tag-aware mouse), views/todo/todo.js:260
(mint the done O). Tests: test/bro/ospell NEW (codec + real
_feed click seam, 55 checks), test/work/view + test/todo/view +
test/done/buttons re-pinned to .-ctx. jab put staged all 8.///: status /
///vend/ext/: status in its OWN wt via mintOspell; my mint emits
that exact form and my parse+combine keep /// intact and persist
it — clean weave, both mint via the shared codec.-LE big: 307 tests, 306 pass, sole
red work/getctx (baseline, //WORK-010 owns the cure); orchestrator
re-ran the 9 target suites independently — 10/10 pass.