Summary
Follow-up to #28.
Move the main request list from array-backed row projection to a real windowed/paged data source backed by SessionStore.
Why
#28 introduces the row-model seam. This issue completes the next major architecture step: the table should no longer require the full filtered dataset to be materialized as in-memory arrays for large sessions.
This is the core scaling step toward 1M+ rows.
Scope
- Add summary/count/window queries to the production request-list path
- Introduce a window cache for visible and near-visible row ranges
- Back
NSTableView from that windowed source instead of full in-memory filtered arrays
- Preserve row identity, selection stability, and native AppKit behavior
- Keep column rendering driven by lightweight row summaries
Must Preserve
- smooth scrolling
- stable selection by UUID
- sort descriptors integration
- custom header columns
- built-in columns from current source
- comments/highlights/pin/save indicators
- inspector opening from selected row
Non-Goals
- full store-backed filtering/sorting logic in this issue
- final lazy detail loading for every action path
Acceptance Criteria
- Table can render from a windowed store-backed source
- Visible row fetches do not require full-array materialization
- Selection remains stable across window changes
- AppKit table interactions still feel native
- Focused tests cover window cache behavior and row identity mapping
Links
Summary
Follow-up to #28.
Move the main request list from array-backed row projection to a real windowed/paged data source backed by
SessionStore.Why
#28 introduces the row-model seam. This issue completes the next major architecture step: the table should no longer require the full filtered dataset to be materialized as in-memory arrays for large sessions.
This is the core scaling step toward 1M+ rows.
Scope
NSTableViewfrom that windowed source instead of full in-memory filtered arraysMust Preserve
Non-Goals
Acceptance Criteria
Links