- Decision
- Import sorts folders by depth (parents before children), creates Convex nodes, and stores binaries via upload URLs. Export rebuilds full paths from the parentId chain, creates Git blobs, a single tree, and one commit.
- Why
- GitHub uses flat path-based trees. Curate uses recursive parentId nodes. Binary files need Convex storage, not text content. The translation must be explicit.
- Tradeoff
- This is import/export, not sync. No incremental updates, no branch selection (defaults to main/master), and individual file failures are logged but not surfaced to the user.
- Evidence
- src/features/projects/inngest/import-github-repo.ts, export-to-github.ts