Skip to content

Load ancestor columns on demand and retain recent ones - #121

Open
k-kostin wants to merge 2 commits into
omacom:mainfrom
k-kostin:codex/visible-columns
Open

k-kostin wants to merge 2 commits into
omacom:mainfrom
k-kostin:codex/visible-columns

Conversation

@k-kostin

Copy link
Copy Markdown

Summary

Deep column paths currently create a model and rows for every ancestor. Load only nearby ancestors initially, and retain recently shown columns within a viewport-sized count budget so returning does not rebuild them.

ancestor shell keeps its place
  current area + bounded recent set → live model and rows
  older evicted column              → saved scroll offset

Protect the whole current area before eviction, keep short trails resident within the same limit, and preserve selection, scroll restoration, RTL and drag-source lifetime. Retained offscreen models continue watching their folders.

Evidence

Local full suite: 200 passed, 0 failed. Tests cover warm model identity, actual eviction and fresh data, resize bounds, cache/fresh scroll restoration, settings, shrink, RTL, context menus and drops. Actual Left/Right also passes in standalone Qt windows at depths 4 and 24 in both directions. Independent review found no blockers.

Eight interleaved runs per version and scenario, synthetic 500-file ancestor folders, a 783 × 480 software/offscreen Qt 6.12 window on Ryzen 9700X; medians against main:

Deep 24-ancestor path Main Candidate
Visible rows ready 166.4 ms 39.6 ms
Initial process CPU 256.8 ms 50.1 ms
Initial process peak RSS 193.4 MiB 129.6 MiB
Process peak RSS after navigation 205.4 MiB 162.1 MiB
Return to a recent area 5.2 ms 2.4 ms

The 32-alternation stress series still costs 16.4 ms versus 5.3 ms on main, although it creates no new models. Short-path startup is 42.3 → 42.9 ms, approximately unchanged. These are instrumented actual-row readiness measurements, not monitor presentation; native compositor drag and physical smoothness were not measured.

Merge Danger

Door: two-way.

Blast Radius: columns.

Residency is bounded by column count, not arbitrary folder bytes; current/peek models and an active drag are accounted separately. Existing entry caching and already-running directory counts retain their previous behavior. Pending pane-width work will need semantic reconciliation if it lands first. No new runtime dependencies.

@greptile-apps

greptile-apps Bot commented Nov 13, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge; no actionable issues were found.

Summary

Loads nearby ancestor columns on demand and retains recently viewed columns within a viewport-sized budget.

  • Deep folder trails load nearby columns and keep recent ones ready.

No actionable issues were found. Tests were inspected but not run during this review.

Acknowledgment: k-kostin reports that the 32-alternation stress case remains slower than main, at 16.4 ms versus 5.3 ms. This disclosed limitation is not reported as a new finding.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart TD
  A[Trail or viewport changes] --> B[Find nearby ancestor columns]
  B --> C[Protect all nearby columns]
  C --> D[Fill remaining budget with recent columns]
  D --> E{Keep column loaded?}
  E -->|Nearby, recent, or dragging| F[Keep model and rows alive]
  E -->|No| G[Unload model and rows]
  G --> H[Keep shell and saved scroll offset]
  H -->|Column returns nearby| I[Load rows and restore position]
Loading

Reviews (1) · Last reviewed commit: "Retain recently shown columns within a b..." · Reviewed by Greptile

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant