Files
shopify-ai-backup/opencode/specs/13-file-tree-fetch-discipline.md
2026-02-07 20:54:46 +00:00

89 lines
2.4 KiB
Markdown

## File tree fetches
Make directory listing triggers explicit and minimal
---
### Summary
`packages/app/src/components/file-tree.tsx` currently invokes `file.tree.list(path)` from a generic effect in each tree instance. Even with inflight guards, this pattern causes avoidable list calls and makes load behavior harder to reason about. This spec tightens fetch triggers.
---
### Goals
- Avoid redundant list invocations from passive rerenders
- Fetch directory data only when needed (mount + expansion + explicit refresh)
- Keep tree behavior unchanged for users
---
### Non-goals
- Replacing recursive tree rendering with virtualization
- Changing file-tree visual design
- Backend/API changes for file listing
---
### Parallel execution contract
This spec owns:
- `packages/app/src/components/file-tree.tsx`
This spec should not modify:
- `packages/app/src/context/file.tsx`
- `packages/app/src/pages/session.tsx`
---
### Implementation plan
1. Replace broad list effect with explicit triggers
- Load root path on mount.
- For nested directories, list only when:
- node is expanded, or
- parent explicitly requests refresh.
2. Guard expansion-driven fetches
- Keep `file.tree.expand(path)` as the primary source of truth for expansion fetches.
- Ensure passive rerenders do not retrigger `list(path)` calls for already loaded dirs.
3. Keep filter auto-expand behavior
- Preserve existing "allowed filter" directory auto-expansion.
- Ensure auto-expanded directories still fetch exactly once unless force refresh occurs.
---
### Acceptance criteria
- `file-tree.tsx` no longer calls `file.tree.list(path)` from an unscoped rerender effect.
- Expanding a folder still loads its children correctly.
- Filtering by `allowed` still opens and shows required parent directories.
- No regressions in change/all tabs where `FileTree` is used.
---
### Validation plan
- Manual:
- Expand/collapse deep directory trees repeatedly.
- Switch between "changes" and "all" tree tabs.
- Open review, click files, verify tree stays responsive.
- Optional instrumentation:
- count list calls per user action and compare before/after.
---
### Risks and mitigations
- Risk: directories fail to load when expansion timing changes.
- Mitigation: rely on `expand()` path and verify for root + nested nodes.
- Risk: filter-driven auto-expand misses one level.
- Mitigation: keep existing auto-expand iteration and add regression checks.