.//../) must resolve against the wt root via cwd
A URI with a RELATIVE path — path-rooted (no scheme/authority: .?, dir/file?) or opening .//../ — MUST resolve its path against the current cwd, then re-express it relative to the WORKTREE ROOT. Example: from the be/test submodule dir, jab post .? resolves . → be/test, so the effective URI is be/test? and the be/test submodule posts onto its trunk. Today be/ does the opposite: the ./-strip pattern (verbs/put/put.js:46, verbs/delete/delete.js:55, and DIS-054's new makeNarrow verbs/post/fold-decide.js:90) drops the ./ and matches wt-ROOT-relative leaves with NO cwd rebasing — cwd is read only by core/discover.js:find() to locate the .be anchor — so .?/./foo from a subdir silently hit the wrong path. First consumer: be/ post/put/delete narrowing (DIS-054); the pure URI parser stays cwd-agnostic. Method Issues.
jab post .? in be/test MUST mean "post the be/test submodule onto its trunk" — resolved URI be/test?; the ? is the bare-trunk (present-empty) query, the . is the cwd path. Not "post . at the wt root".io.cwd() in the post→narrow flow; makeNarrow (fold-decide.js:90) n.slice(2) then underNarrow matches root-relative leaves; cwd serves only core/discover.js:find() (walk UP to the .be shard anchor).verbs/put/put.js:46, verbs/delete/delete.js:55, views/log/log.js all ./-strip without rebasing on cwd.git commit -- ./foo is cwd-relative; Beagle's be post ./foo is silently wt-root-relative. POST.mkd's Path slot ("narrow to that path/submodule") never pins cwd semantics — this ticket pins it.cd <wt>/blog && jab put escher.mkd → be put: no eligible paths + PUTNONE (the bare arg matched wt-root-relative escher.mkd, absent); cd <wt> && jab put blog/escher.mkd staged fine.//journal/be status view, put shared/wire.js composes to //journal/shared/wire.js — spell.js mergeUri (URI-011b) rebases a BARE path to the WT ROOT, dropping the view-context /be; only ./-led joins the context. Composer probe confirms; the view-context resolution must follow this ticket's cwd rule.SRC_ROOT=/home/gritzko/src, NOT $HOME — URI-011's "(=$HOME)" is stale. The valid context for ~/src/journal/be is //journal/be (SRC_ROOT-relative tree name + path), not //be (wt basename); a //be-assumed context mis-diagnosed the pager PUTNONE as a GIT-014 wire-form misroute until gritzko corrected the root. Resolver work here must pin names against SRC_ROOT..→cwd, ./foo→cwd/foo, ../x→parent/x.jab post .? from be/test → be/test? (submodule onto trunk); jab post ./foo? from be/test → be/test/foo?./abs) and scheme/authority URIs (ssh://…, be://…, file:/…) are NOT cwd-rebased — left as-is.../ that climbs ABOVE the wt root is an error, not a silent clamp.core/discover.js:find()); the pure parser (abc/URI.h) stays cwd-agnostic — context can't live in the grammar (CLAUDE).shared/util/path.js/PATH helpers (CLAUDE no manual parsing).be CLI should honor the same rule — cross-check, split a beagle/ ticket if it diverges.resolveWtPath(uriPath, cwdRelRoot) in shared/util/path.js, applied once per command before verbs read u.path; verbs stop ./-stripping ad hoc..//../. Absolute /… and scheme/authority URIs bypass.. path from an absent one, this ticket then anchors it to cwd.test/put/subdir-cwd (golden authored PRE-fix, ran RED: "no eligible paths"+PUTNONE) — cd blog && jab put escher.mkd stages blog/escher.mkd.test/post/subdir-narrow — cd sub && jab post . '#msg' narrows to sub (pre-fix . was swallowed as a message word, BOTH files committed). NOTE: uses post . '#msg', not .? — Path-slot + bare-? trunk needs URI-009 presence detection in isBareTrunkQuery (left as-is).resolveWtPath + cwdRel in shared/util/path.js (join cwd, normalize dots, re-anchor, URICLIMB on climb-above; absolute/"" bypass, dir-form / kept)../..; resolve before decide), log (parseArg strip dropped); fold-decide.js ./-strip retired. spell.js/pager untouched (out of scope).//URI-010 (only the pre-existing be-js-bro-view listing-order golden drift); probes: put ../../x → URICLIMB, put ./e.mkd → blog/e.mkd.be CLI; split a beagle/ ticket if it diverges.//URI-010 (pending human gate).makeNarrow must adopt this resolver before it is sound.082b172c touching the SAME files (put.js putRun argv map, post.js parseSlots, get/head/wire) — the wt diff must rebase over the fromGit intake calls before merge.//URI-010 (2026-07-07, worker agent; orchestrator re-ran the suite + inspected the diff) — UNCOMMITTED, pending review/merge. Native be CLI cross-check still open.resolveWtPath present in /home/gritzko/src/URI-010/be/shared/util/path.js (+put/delete/post/log call sites) but ABSENT from ~/src/journal/be; no URI-010 commit in the be log. Still open.mkdir .be; jab put f; jab post 'm' → JS exception Not a directory in writePack→book→_mmap — ticket-worthy 3-command repro; (2) after a narrowed post, an out-of-scope STAGED file reads back mod (its put row seems consumed) — intended fold semantics or a bug, needs a ruling.jab post .? (be/test submodule onto trunk) rule. Pins POST.mkd's underspecified Path-slot cwd semantics to git-like cwd resolution, re-anchored at the wt root.