be post ignores the Path/Query/Host URI slots — silently local-commits instead of narrow/retarget/push, diverging from POST.mkd
The be/ JS post handler (verbs/post/post.js) implements only ONE of POST.mkd's URI shapes: a local fast-forward commit onto cur's wtlog-tracked branch (plus submodule recursion). It never reads the command URI's Path, Query, or Host — decide() takes no path/query/host, post.js touches cur.query only for the detached-sha check, and there is no push/wire routing in main.js/loop.js. So three POST.mkd slots are silently dropped: *Host* (push) runs a local commit instead of pushing; *Query* (?branch/?other#msg) is ignored, so a retarget lands on cur not the named branch; *Path* (./path) does not narrow, the whole change-set commits. The PATCH-message shapes (#,#!,#msg!) are the one DECLARED gap (POSTSCOPE/POSTNOMSG), not a silent one. Scope is be/ only (not beagle/). See POST, POST-024, DIS-009; method Issues.
verbs/post/post.js against POST (the 5-slot scheme + CLI cases) found the JS path is a strict subset of the spec; surfaced from the POST-023 push session (jab post ssh://localhost/src/dogs?/main → POSTDET, never pushed — same session as POST-024).//host, //host#msg, //host?branch, ssh://…?branch, be://…?branch (POST CLI) all run postOne → a LOCAL commit onto cur (or POSTNONE/POSTDET), never a wire push. The detached wt in that session made it POSTDET; a clean attached wt would POSTNONE; a dirty one would commit locally — all wrong, all silent.branchKey = cur.branch from the wtlog (post.js:184); the command URI's ?ref is never read as a target. be post ?other#msg (POST CLI) lands the commit on cur, NOT ?other (no untie); bare ?branch/?../? (POST CLI: "advance X to the wt hash") advance no label at all.decideM.decide(info, wtl, reader) (fold-decide.js:79) takes no path and classifies the whole worktree; be post ./path / ./path#msg (POST CLI: "narrow commit to path/submodule") commit everything, no narrowing.patch row throws POSTSCOPE ("use native be post", post.js:190) and an empty message throws POSTNOMSG (post.js:234), so #/#!/#msg! reuse-absorbed-msg + foster/forget provenance (POST point 2) are simply not done here.ok64 codes — e.g. "POSTDET: refusing on detached wt — re-attach (be get ?<branch>)". That is friendlier to the user than native's terse ok64 and should be preserved (and ideally adopted native-side).be/ post either IMPLEMENTS or LOUDLY REFUSES every POST.mkd slot it parses — no slot is silently dropped into a local commit. A push URI must not local-commit; a ?ref retarget must not land on cur; a ./path must not commit the whole tree.POSTPUSH/POSTQRY/POSTPATH "not yet in JS post — use native be post"), mirroring the existing POSTSCOPE punt, so behaviour is safe and honest before full parity.?ref target-branch advance + untie (Query), path-narrowed commit (Path) — each its own sub-task / ticket once the refuse-loud guard lands.ok64.be/ (the JS ext / JABC) ONLY — do not touch beagle/ native. Pure JS over libabc+libdog per the be/ rules. (The js/uri.cpp binding this leans on is URI-009, a separate beagle/ ticket.).//../ or path-rooted) against cwd then re-anchor to the wt root per URI-010 — jab post .? in be/test means be/test?; the current makeNarrow (fold-decide.js:90) ./-strip is wt-root-relative and ignores cwd.be/test/ cases asserting a push/?other/./path be post does NOT silently local-commit (refuse or correct), before the fix.#msg/-m, bare-words, submodule post-order recursion, POSTNOFF/POSTNONE/POSTCFLCT/POSTDET guards.CODE: human message — hint, matching POSTDET/POSTSCOPE; do not introduce bare ok64 throws.isBareTrunkQuery(arg,u)/isSlotArg(a) key on === "?" (post.js:140,178) only because the binding flattened bare ?; with URI-009 (absent→undefined, present-empty→"") they collapse to u.query !== undefined / === "" — drop the raw-arg re-parse.shared/wire.js/shared/pkt.js, or stay punted to native keeper post? Decide when the push sub-task is scoped.be/test/post/slots asserts a populated Host slot never silently local-commits (real wire push to a local ssh bare; clean network-fail on a bogus host, never a local commit).?other#msg commits onto ?other + unties the wt (cur untouched), bare ?branch FF-advances/creates, ./path narrows — all asserted in test/post/slots.81f2ef25+ebc44c8b "DIS-054: POST catching up with the spec" (be, 28Jun).4370d67e client + cb3881f8 git-protocol push + GIT-013 pushRemote (post.js:298) — DIS-056 moot.new URI(arg) splits the 5 slots (URI-013 c43324f4 URI-class sweep); the raw-arg ? hacks are gone.d80bdb5c TEST-003 "js tests pass").pure_push misroute) and unimplemented JS-side — fix independently, cross-link.makeNarrow matches wt-root-relative and ignores cwd, so a ./path from a subdir targets the wrong tree.be/ post audit (three silent slot-drops + the PATCH-msg declared gap).?branch FF-advance/create, and Path narrowing in 81f2ef25+ebc44c8b (be, 28Jun); Host slot is a real wire push via GIT-012/013 (4370d67e, cb3881f8, post.js:298 pushRemote) — subsumes the DIS-056 split. Locked by be/test/post/slots; string throws preserved.0a8c42f3 removed the POST-005 POSTSCOPE patch-row throw (pat/mrg/cnf files commit their merged bytes).