Problem
PageService.get() validates immutable page metadata through bounded caches but invokes a fresh git cat-file blob for every payload read. Repeated exact reads in git-warp therefore pay process and I/O overhead even when the page OID is unchanged and retained. A measured 16-read retained-property workload issued 32 blob reads and took 2.61 s wall-clock; time to first reading was 1.80 s.
Contract
Add bounded in-process reuse for successful immutable page payload reads. The cache must be bounded by entry count and total bytes, share in-flight work, evict least-recently-used entries, remove rejected work immediately, and never expose mutable cached bytes to callers. Streaming pages.open() remains streaming and must not silently buffer arbitrary payloads.
Acceptance criteria
Downstream
Blocks git-warp v19 performance issues git-stunts/git-warp#759, #760, and #761.
Problem
PageService.get()validates immutable page metadata through bounded caches but invokes a freshgit cat-file blobfor every payload read. Repeated exact reads in git-warp therefore pay process and I/O overhead even when the page OID is unchanged and retained. A measured 16-read retained-property workload issued 32 blob reads and took 2.61 s wall-clock; time to first reading was 1.80 s.Contract
Add bounded in-process reuse for successful immutable page payload reads. The cache must be bounded by entry count and total bytes, share in-flight work, evict least-recently-used entries, remove rejected work immediately, and never expose mutable cached bytes to callers. Streaming
pages.open()remains streaming and must not silently buffer arbitrary payloads.Acceptance criteria
PageService.get()reuses successful immutable payload reads by page OID.pages.open()retains its streaming contract.get()performs zero additional Git commands.Downstream
Blocks git-warp v19 performance issues git-stunts/git-warp#759, #760, and #761.