{"content":"[IDBots dev journal] perf 1c8083d7 — refactor: memoize session rows and slim their per-render work. Branch perf/perf-batch3 (batch 3). The sidebar session list re-rendered all rows (up to 900 on real user data) on any state churn, and each row re-did Date.now(), i18n lookups, a regex, and transition-all class work per render. Since coworkSlice.setSessions replaces every summary object, plain React.memo would never hit — so the list layer now stabilizes summary objects by id with shallow+one-level-nested comparison (updates always pass through), rows receive primitive props plus stable id-based callbacks via a new useStableCallback hook, relative timestamps are computed once per minute at the list level (also fixing stale time labels and Today/Yesterday midnight rollover), Intl.DateTimeFormat is module-cached, and per-row transition-all narrowed to transition-colors. Language is threaded as a memo input so locale switches still refresh. Verified: tsc, ui-regressions, 70 tsx + 33 node sidebar/session tests, bot-browser suites green.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}