views/log/log.js::resolveHashlet re-impls store.resolveHexAny via test-only k._packs()
be log:#<hashlet> resolves a short hex to a full COMMIT sha. The log view's resolveHashlet (log.js:104) bypasses the public reader API: it reaches into the test-only k._packs(), re-mmaps every pack (already cached by the store), and re-runs a full O(all-objects) decompress-and- prefix-match scan that near-verbatim duplicates store.resolveHexAny + indexPackByWalk. commit.js already does the same job in ~6 lines. Method: Issues.
packs = k._packs() — _packs is store.js:551 marked "expose for tests / verification", NOT a reader verb.git.pack.mmap), walks every offset, inflates each object (pk.resolve), reframes the sha, prefix-matches, and re-detects ambiguity.k.resolveHexAny then keep type==="commit"||"tag"; ~6 lines, no pack re-mmap.k.resolveHexAny(hexish) then k.getObject(sha).type filter.be log:#<commit-hashlet> for a mid-history (non-tip) commit still resolves; an ambiguous prefix still resolves to NOTHING._packs from the production reader surface (or fence it test-only) so views cannot re-enter the pack walk.test/js/log/*) must stay green — same resolved sha, same ambiguity → empty behaviour as KEEPResolveHex.git.pack in log.js.resolve.resolveHex(k,hexish) first only if it changes no bytes; else fold into resolveHexAny.test/js/log case log:#<mid-history-hashlet> + an ambiguous-prefix case asserting empty, against current bytes._packs from reader (store.js:555) or fence test-only.views/log/log.js:121 resolveHashlet still calls k._packs() (:126); shared/store.js:557 still exports _packs; the commit.js canonical form (k.resolveHexAny+getObject) is not adopted in log.js.