Move version-comparison and interdiff derived data off the store. After this phase, SHA-setter methods only mutate SHAs; derived data recomputes automatically via Phase 0 hooks.
Fields removed from store
versionDiffCounts
versionRebaseInfo
commitVersionHistory
commitsByVersion
parentCommitMessages
commitChangeIds
interdiffLoadedDiffs
versionCompareNoChangeFiles
Methods reduced or removed
setSelectedHeadSha — reduced to a pure SHA update. Remove side effects that populate versionDiffCounts, versionRebaseInfo, etc.
setSelectedCommitSha — same. Remove the fire-and-forget loadParentCommitMessages call.
setCompareToSha, setCompareToCommitSha, resetVersionSelectors — same.
getCommitChangeId, loadCommitChangeIds, loadParentCommitMessages — deleted; consumers use Phase 0 hooks.
computeFullBranchInterdiff — moved into a pure function in pr-review-derived.ts, called from useInterdiff / useVersionDiffCounts.
Consumer changes
pr-review.tsx, pr-overview.tsx, and any commit-list / version-picker UI switch from usePRReviewSelector(...) to the Phase 0 hooks.
Watch for
Today, SHA setters clear files + loadedDiffs atomically before refetching, so nothing sees a mid-transition state. After migration, files/diffs are keyed on SHA in RQ — swaps are atomic per-query, but consumers may momentarily see selectedHeadSha = new while useFiles() is still isPending. Audit each SHA-reading consumer for loading-state handling.
Tests
- Test SHA-setter methods now only mutate SHAs (no side effects, no store mutations for derived fields).
- Test derived hooks recompute correctly when SHAs change (fixture-driven).
- Regression test: component reads
selectedHeadSha + useFiles() — confirm it handles the "new SHA, files still loading" transitional state without crashing or showing stale data.
- End-to-end style: switch push versions; version-picker updates without flicker.
Part of #351
Depends on #352, #353.
Move version-comparison and interdiff derived data off the store. After this phase, SHA-setter methods only mutate SHAs; derived data recomputes automatically via Phase 0 hooks.
Fields removed from store
versionDiffCountsversionRebaseInfocommitVersionHistorycommitsByVersionparentCommitMessagescommitChangeIdsinterdiffLoadedDiffsversionCompareNoChangeFilesMethods reduced or removed
setSelectedHeadSha— reduced to a pure SHA update. Remove side effects that populateversionDiffCounts,versionRebaseInfo, etc.setSelectedCommitSha— same. Remove the fire-and-forgetloadParentCommitMessagescall.setCompareToSha,setCompareToCommitSha,resetVersionSelectors— same.getCommitChangeId,loadCommitChangeIds,loadParentCommitMessages— deleted; consumers use Phase 0 hooks.computeFullBranchInterdiff— moved into a pure function inpr-review-derived.ts, called fromuseInterdiff/useVersionDiffCounts.Consumer changes
pr-review.tsx,pr-overview.tsx, and any commit-list / version-picker UI switch fromusePRReviewSelector(...)to the Phase 0 hooks.Watch for
Today, SHA setters clear
files+loadedDiffsatomically before refetching, so nothing sees a mid-transition state. After migration, files/diffs are keyed on SHA in RQ — swaps are atomic per-query, but consumers may momentarily seeselectedHeadSha= new whileuseFiles()is stillisPending. Audit each SHA-reading consumer for loading-state handling.Tests
selectedHeadSha+useFiles()— confirm it handles the "new SHA, files still loading" transitional state without crashing or showing stale data.Part of #351
Depends on #352, #353.