jab commit: must resolve & SHOW the target commit in every slot form (hash in ?/#, branch), at parity with C be commit:
The JS commit: view (be/) resolves the target commit for almost no slot shape: a hash in the PATH is silently ignored (shows cur tip), a hash in ? throws RESOLVE at the seed, a full hash in # throws COMMITNONE. So jab commit:<target> diverges from C be commit:<target>. Goal: jab commit:<target> SHOWS the requested commit (headers + body, byte-parity with C) for every form C accepts — bare (cur), ?<branch>, a hash in ? or #, short hashlet AND full 40-hex. Found via the COMMITNONE investigation 2026-06-26. Sibling of COMMIT-003 (render) and JS-082 (in-view full-sha). Method: Issues.
Behavior table today (cur tip 4e07ab84…; native be commit: resolves ALL of these):
jab commit:<sha> (PATH) → silently IGNORES the sha, prints the cur tip — even
commit:0000…0000 prints cur tip. The path slot is never read.
jab commit:?<40hex> → RESOLVE: core/resolve.js::classifyArg (~:111) ignores
the commit: scheme and misroutes ?<sha> as a branch ref-write (_resolveHex) BEFORE the view runs — the view never fires (Defect A, uncovered).
jab commit:#<40hex> → COMMITNONE: store.js:303 resolveHexAny regex
^[0-9a-f]{1,39}$ rejects any 40-char sha (Defect B = JS-082, open).
?<short>/#<short>) render but can still show the cur tip, not the
requested commit; ?<branch> parity is unverified. C be commit: resolves all.
jab commit:<target> resolves the requested commit and SHOWS it (the `commit
<sha40> metadata + body), byte-parity with C be commit:<target>, for: bare (cur tip), ?<branch>, hash in ? (?<sha> / ?#<sha>), hash in # (#<sha>`) — BOTH short hashlet and full 40-hex.
falls back to the cur tip.
jab commit:X must match be commit:Xbyte-for-byte (modulo the one documented HUNK trailing-blank delta from COMMIT-003).
binding is JS-092 — keep those separate.
- SEED (Defect A) — core/resolve.js::classifyArg (~:97-130): for a read-only view/projector scheme (commit:/size:/type:/blob:/sha1:…) do NOT consume ?<ref>/?<sha>/?#<sha> as a ref-write; carry the whole token through as a path so the view re-parses its own ?/# slots (the pattern seed already uses for get, ~:165-167). - PATH slot — views/commit/commit.js must READ the sha from the path slot, not fall through to the cur tip. - IN-VIEW full-40-hex (Defect B) — lands via JS-082 (store.js:303 + commit.js:101-106, the isFullSha short-circuit). A must land WITH B, since fixing A alone then exposes B for the ?<40hex> form.
?<branch> / ?<sha> / ?#<sha>
/ #<sha>, each short AND full-40-hex) diffing jab commit: vs be commit:. RED pre-fix at ?<40hex> (COMMITNONE), GREEN after. test/commit/resolve/run.sh.
?/# ride through as a
path; core/resolve.js isReparseView + the get-style passthrough (~:37,180).
commit.js resolveSlot path branch
(~:150) + parsed.path (~:250); commit:0000… now FAILs, never shows the tip.
commit.jsresolveHashlet isFullSha short-circuit (~:101); store.js regex left untouched.
be can'tcommit the detached be/ sub).
b9315c6d ("COMMIT-003,004,005", be/; re-landed with COMMIT-005 as
planned). Fixes: core/resolve.js (Defect A SEED passthrough), views/commit/commit.js (path-slot read + JS-082 commit: full-sha short-circuit). store.js untouched.
commit.js:131/:179/:417; test commit/resolve present (since de-nativified under TEST-003/COMMIT-007); be/ wt clean.
be/test/commit/resolve/run.sh (be-js-commit-resolve): all 7 formsGREEN modulo the +1 trailing-separator (COMMIT-003); negatives FAIL clean. Full be/ suite 60/60. COMMIT-003's render fix preserved (be-js-commit-render green). JS-082 co-landed (commit: part only; size/type/blob/sha1 stay open there).