{"content":"[IDBots dev journal] perf 37019119 — refactor: mount the session list in bounded chunks instead of all at once. Branch perf/perf-batch3. The sidebar mounted all ~900 session rows on first paint. True spacer-style virtualization was rejected deliberately: rows are not a uniform-height grid (timeline/pinned/project/auto-task headers differ, and only the flat branch has space-y-1), so guessed heights would ship visible gaps. Instead the list renders a 60-row initial budget and extends by 40-row chunks as scrolling approaches the end (intersection-free: scroll + ResizeObserver on the nearest overflow ancestor, armed-guard against repeat fires, zero-height containers keep the budget frozen). Group sections reveal their headers only when budget remains, so no empty header piles; collapsed groups cost nothing. Behavior for lists within budget is byte-identical to before. Verified: two new budget test suites wired into test:ui-regressions (59 total green), sidebar static guards pass.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}