The github remote shape git@github.com:gritzko/jab.git (git's scp form) is NOT a URI — the native URI class refuses it (uri.parse: malformed, verified on jab), and per URI-013 the URI class is the ONLY parser/composer, so no code may hand-lex it. Yet it is the wild's dominant remote spelling: this journal's own .gitmodules carries git@github.com:gritzko/beagle-ext.git. Every be/ remote intake lexes via new URI() (wire.classify wire.js:33, get parseRemote get.js:69, head.js:68), so a scp remote throws or degrades to prose. Fix: a fromGit(s) heuristic in shared/uri.js — DETECT the git scp grammar (colon before any slash, user@ head, no scheme) with plain index checks on the non-URI string, then COMPOSE strictly via URI.make("ssh", "//user@host", "/path") and relex-guard the result; non-matches and make-rejects fall through verbatim. Applied at remote intake only, never inside the total uri.parse arg classifier (prose like me@10:30 must stay prose). Scope: be/ JS (beagle-ext); the C WIRECLI.c wcli_spawn shares the gap — own linked ticket. Method Issues.
jab post git@github.com:gritzko/beagle-ext.git → POSTNONE: no changes since base while the github repo is EMPTY — parseSlots (post.js:118) got the scp arg back as a STRING from the total classifier, treated it as free-form MESSAGE text, saw no Host slot, attempted a local commit and never touched the wire.new URI("git@github.com:gritzko/jab.git") throws uri.parse: malformed (jab probe, 2026-07-07); ssh://git@github.com/gritzko/jab.git lexes to user=git host=github.com path=/gritzko/jab.git.[user@]host:path is recognized by a : before the first /; it rides ssh with path $HOME-relative — matching wire.js:73's existing leading-/ strip for ssh spawns.new URI() the raw remote: shared/wire.js:33 classify (ALL wire traffic: get/head fetch, post/put push, http detect), verbs/get/get.js:69 parseRemote (also records rem.raw into the wtlog anchor), verbs/head/head.js:68..gitmodules scp urls (shared/gitmodules.js → submount.js) flow into get/classify, so intake-side rewrite covers submodules with no gitmodules.js change.URI.make composes but does NOT validate (URI.make("ssh","//git@git hub","/x") emits junk) — the heuristic must relex its output via new URI() and fall back to the original string if that throws.be get git@github.com:gritzko/jab.git routes as ssh://git@github.com/gritzko/jab.git → spawn ssh git@github.com git-upload-pack 'gritzko/jab.git' (byte-identical to git's scp handling).jab post git@github.com:gritzko/beagle-ext.git classifies as a Host-slot PUSH (post.js parseSlots), never as message prose; put wire forms likewise; the stored remote (get's wtlog anchor) records the recomposed ssh:// URI, never the raw scp string.git@host:o/r.git?br#sha — the tail after the git-colon relexes as a RELATIVE URI (path+query+fragment via the URI class), so ?br/#sha land in their slots.be:/store, keeper:local, host:port, //host, prose messages with @+: never rewrite.URI.make + relex guard. No regex, no string-concat URIs.test/uri.js (registered be-js-unit-uri in test/CMakeLists.txt foreach) — hermetic, classify is pure, no network. No other tests edited.shared/uri.js (the JAB-005 module) as exported fromGit; call sites are the three intake lexes only.@ in the head (and no whitespace): bare host:path is ambiguous with scheme:path (be:/store, DIS-058) — github/gitlab scp remotes always carry user@; whitespace anywhere = prose, never a remote.new URI(tail) — path/query/fragment), compose URI.make("ssh", "//"+head, "/"+path, query, frag), relex-guard the result; any lex/make refusal falls back to the original string.uri.parse) — never inside the total uri.parse itself: it serves prose args (messages) too.$SRC_ROOT/URI-015 — moot: gritzko ordered the work IN journal/be (clone crashed on the be self-gitlink, GET-036/037).test/uri.js (registered be-js-unit-uri): scp→ssh:// + tail ?br/#sha, verbatim guards (ssh/be/keeper/https///host/path/port/prose), classify ssh spawn; ran RED first.shared/uri.js fromGit(s) + intake calls: wire.js classify, get.js parseRemote, head.js headOne, post.js parseSlots + isSlotArg (message path), put.js putRun argv map; 8/8 unit + be-js suite green (be-js-bro-view golden drift pre-existing, unrelated).keeper/WIRECLI.c wcli_spawn — no scp handling there as of 2026-07-07), link both ways.082b172c "GitHub scp-style URI handling (URI-015)" (with 50e90012 GitHub-remote fixes alongside).082b172c "GitHub scp-style URI handling (URI-015)": shared/uri.js fromGit + intake calls (wire.js:35, get.js:72, head.js:69, post.js:118/:201, put.js:617), unit test/uri.js registered in test/CMakeLists.txt:89; verified in-tree 2026-07-07 (audit). Sibling commit 50e90012 "a multitude of fixes for GitHub remotes".jab post from the wt root pushed to the (previously empty) github remote.keeper/WIRECLI.c wcli_spawn (still no scp detection there) and link both ways.