size:/type:/blob:/commit:
Each of size:/type:/blob:/commit: accepts a FULL 40-char sha through its hex gate (isHexish/isHexPrefix), then hands it to store.resolveHexAny — which is bounded to ^[0-9a-f]{1,39}$ and returns undefined for a 40-char string. So size:#<40hex> (etc.) reports SIZENONE/TYPENONE/BLOBNONE/no-commit even though every view's header promises full-sha support. sha1.js and log.js avoid this with an isFullSha fast-path that returns the sha verbatim (after a getObject presence check) BEFORE the prefix resolver. Method: Issues.
shared/store.js:303 resolveHexAny: `if (!/^0-9a-f{1,39}$/.test(prefix))return undefined;` — a full 40-hex sha fails the regex outright.
views/size/size.js:54-61 gates hex then `const full = k.resolveHexAny(
hex); if (!full) return null; — a 40-hex frag/query` → null → SIZENONE.
views/type/type.js:54-57 if (hex) return k.resolveHexAny(hex) || null;— same, full sha → null → TYPENONE.
views/blob/blob.js:60-64 and :119-123 sha = k.resolveHexAny(hex) —
full sha → !sha → BLOBNONE (both the root-tree and bare-object paths).
views/commit/commit.js:101-103 resolveHashlet: `const sha =k.resolveHexAny(hexish); if (!sha) return undefined;` — full commit sha lost.
views/sha1/sha1.js:81 `if (frag.length >= 40) return isFullSha(frag) ?
frag : undefined; and views/log/log.js:88 if (isFullSha(frag)) return k.getObject(frag)?frag:undefined;` — the fast-path the four views lack.
size:/type:/blob:/commit: resolve a full 40-hex object id (frag orquery slot) to the object iff it exists — matching the header promise.
isFullSha (shared/util/sha.js) + k.getObject; do
NOT widen resolveHexAny's {1,39} regex (it is the prefix scanner).
descendFrom/resolveRootTreepaths that feed off the same gate.
if (isFullSha(hex)) return k.getObject(hex) ? hex : null; (or the
view's NONE/undefined) BEFORE the resolveHexAny(hex) call in each view, mirroring sha1.js/log.js. Keeps the prefix path untouched.
resolveHexOrFull helper is optional; four 1-linersare the minimal, file-disjoint fix.
commit.js
resolveHashlet isFullSha(hex) ? hex : resolveHexAny(hex) short-circuit (~:101); store.js {1,39} prefix regex left UNTOUCHED per the constraint. Repro be/test/commit/resolve/run.sh (the ?<40hex>/?#<40hex>/#<40hex> rows) — RED pre-fix (COMMITNONE), GREEN after; full be/ suite 60/60.
isFullSha(hex)?present:hex short-
circuit before resolveHexAny in each view — size.js:49/70, type.js:60, blob.js:49/71/131 (bare-object + resolveRootTree descend paths). store.js {1,39} regex UNTOUCHED. Repro tests test/{size,type,blob}/fullsha/run.sh: RED pre-fix (SIZE/TYPE/BLOBNONE on #<40hex>/?#<40hex>/?<40hex>), GREEN after; full be/ suite 64/64 (bro-universal is a pre-existing unrelated xfail).
isFullSha fast-path (sha1.js:81/95) — no change.d80b0a33 (per-view isFullSha short-circuit +repro tests test/{size,type,blob}/fullsha, full suite green).
aef4caef).sha1: needed no change (already had the fast-path).