lite-render-perf
The recurring render-performance failure in this app is accidental over-re-rendering: one interaction re-renders every row instead of the few affected ones. Repositories can have hundreds of branch rows, so this turns single-digit-millisecond interactions into triple-digit ones. The compiler makes it easy to cause by accident because it silently stops memoizing exactly where you assume it won't.
The three mechanisms behind past regressions
1. Whether the compiler memoizes a derivation is not predictable from the source
The compiler only caches what it can prove safe to cache, and it declines
more often than you would guess. Two derivations in this app are both
module-level functions that call imported helpers, and they compile
differently: buildOutlineNavigationIndex in WorkspacePage.tsx gets a
memo block keyed on its inputs, while getDiffView in Details.tsx got
none and re-ran on every render of a component that re-renders whenever the
file selection changes.