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:551marked "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.
indexPackByWalk (:95) already do over the cached wh128 lane.
k.resolveHexAnythen 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) commitstill resolves; an ambiguous prefix still resolves to NOTHING.
_packs from the production reader surface (or fenceit 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.
resolve.resolveHex tip fast-path); no git.pack in log.js.
converge on the ONE store.resolveHexAny path (see JS-090).
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.