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 or query 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/resolveRootTree paths 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-liners are 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).