9.4 KiB
9.4 KiB
PROJECT_STATE.md — FlowGit Development Handoff
OPERATIONAL HANDOFF DOCUMENT — Read this completely before making any changes. Last updated: 2026-10-24T23:47 UTC+3
A. Project Overview
- Project name: FlowGit
- Purpose: A premium, professional-grade Git desktop application for Windows featuring a Blueprint-inspired visual Git graph, advanced visual diff viewer, and complete real Git workflow support.
- Target OS: Windows 11 (primary), Windows 10 (fully compatible).
- Technology stack:
- Electron 33.4.11 (main process, sandboxed security boundaries, native window frame integration)
- React 18.3.1 (renderer UI)
- TypeScript 5.7.2 (strict mode enabled across main, preload, shared, and renderer)
- Vite 6.4.5 + electron-vite 3.0.0 (production bundle and development server)
- Tailwind CSS v4.1.0 + Axiom Design Tokens from DESIGN.md
- better-sqlite3 (local SQLite metadata persistence)
- electron-store (user preferences storage)
- Zustand 5.0.2 + Immer (renderer reactive state stores)
- TanStack React Query 5.62.8 (async state caching)
- Vitest 2.1.9 (automated test suite with isolated temporary Git repositories)
- Current phase: Phase 1 (Foundation) & Phase 2 (Core Git Workflows) & Phase 3 (Blueprint Graph & Advanced Diffs) Complete.
- Overall completion: ~75% (Core Git operations, Changes, Diffs, History, Blueprint Graph, Branches, Tags, Stashes, Remotes, File Browser, Settings, and SQLite persistence fully operational and verified).
B. Architecture
Main Processes & Separation of Concerns
- Electron Main Process (
electron/):electron/main.ts: Application lifecycle, frameless custom window with draggable titlebar, navigation security guard, IPC route registration.electron/logger.ts: Redacting logger that automatically strips tokens, basic auth credentials, and passwords from logs and disk output.electron/persistence/database.ts: SQLite database with WAL mode for repository records, pinned status, graph coordinates, and UI state.electron/settings/settings-store.ts: Typed configuration store usingelectron-store.
- Git Execution Architecture (
electron/git/):electron/git/executor.ts: Spawns Git using argv arrays (child_process.spawn) — NEVER constructs shell strings. Sanitizes command logging to redact credential URLs.electron/git/detector.ts: Multi-stage detector testing custom settings paths, system PATH, and standard Windows 64-bit and 32-bit install locations.electron/git/changes.ts: Porcelain-v1 status parser, staging/unstaging, file discard, and partial index patch application.electron/git/diff.ts: Unified diff parsing with hunk analysis, additions/deletions counts, binary file detection, and size limits.electron/git/history.ts: Full commit log reader, detail parser with diff-tree stats, and topological column-lane graph DAG generator.electron/git/branches.ts: Branch tracking with upstream sync, ahead/behind indicators, checkout, merge, rebase, and tag management.electron/git/remote.ts: Fetch, pull, push with network error classification.electron/git/stash.ts: Stash listing, creation with untracked files, apply, pop, and drop.electron/git/conflict.ts: Conflict detection, 3-way show extraction (:2:and:3:), and continue/abort workflow.electron/git/blame.ts: Porcelain blame parser.
- IPC Contracts & Security Boundaries (
shared/&electron/preload.ts):shared/types/ipc.types.ts: DefinesFlowGitApiandIpcResult<T>.electron/preload.ts: Narrow context isolation bridge exposing typedwindow.flowgitobject to the renderer. Renderer has Node.js integration disabled and context isolation enabled.
C. Design Requirements (DESIGN.md Status: ✅ VERIFIED)
- Palette: Dark only. Canvas Void
#000000, primary card surface Carbon#111111, elevated card Graphite#191919, hairline dividers Iron#202020, borders Slate#3a3a3a, primary text Paper#eeeeee, secondary text Fog#b4b4b4, tertiary Ash#7e7e7eand Steel#606060. - Ember Accent (
#da5c2c): Strictly reserved for primary CTAs, active selection indicators, and key graph highlights. - Typography: Monospaced hierarchy using BerkeleyMono / JetBrains Mono fallback for all navigational headers, cards, tables, buttons, and diffs.
- Radius:
2pxfor all panels, cards, inputs, buttons;9999pxfor pill tags and badges. - Blueprint Graph Visuals: Dark
#000000canvas with subtle#191919dot grid, node cards styled in Carbon#111111with Iron#202020borders, branch color bars, Bezier curves connecting parent/child commits, minimap viewport navigator, search and zoom-to-fit controls.
D. Implemented Features
| Feature | Status | Location | Tested |
|---|---|---|---|
| Frameless App Shell & TitleBar | Fully Functional | electron/main.ts, src/components/TitleBar.tsx |
Yes (Build & Typecheck) |
| Git Detection & Fallback | Fully Functional | electron/git/detector.ts |
Yes (Vitest verified) |
| Safe Git Process Spawner | Fully Functional | electron/git/executor.ts |
Yes (Vitest verified) |
| Repository Open / Init / Clone | Fully Functional | electron/ipc/repo.ipc.ts, src/views/Welcome/WelcomeView.tsx |
Yes (Vitest & Build) |
| SQLite Repo Persistence | Fully Functional | electron/persistence/database.ts |
Yes (Build) |
| Changes & Staging View | Fully Functional | electron/git/changes.ts, src/views/Repository/Changes/ChangesView.tsx |
Yes (Vitest verified) |
| Commit Creation & Amend | Fully Functional | electron/git/changes.ts, src/views/Repository/Changes/ChangesView.tsx |
Yes (Vitest verified) |
| Unified / Side-by-Side Diff | Fully Functional | electron/git/diff.ts, src/views/Repository/Changes/ChangesView.tsx |
Yes (Vitest verified) |
| Commit History List & Details | Fully Functional | electron/git/history.ts, src/views/Repository/History/HistoryView.tsx |
Yes (Vitest verified) |
| Blueprint Git Graph (SVG/DAG) | Fully Functional | electron/git/history.ts, src/views/Repository/Graph/GraphView.tsx |
Yes (Vitest verified) |
| Branch Management (Create/Switch/Delete) | Fully Functional | electron/git/branches.ts, src/views/Repository/Branches/BranchesView.tsx |
Yes (Vitest verified) |
| Tag Management | Fully Functional | electron/git/branches.ts, src/views/Repository/Branches/BranchesView.tsx |
Yes (Vitest verified) |
| Stash Management | Fully Functional | electron/git/stash.ts, src/views/Repository/Stash/StashView.tsx |
Yes (Vitest verified) |
| Remote Fetch / Pull / Push | Fully Functional | electron/git/remote.ts, src/views/Repository/Remotes/RemotesView.tsx |
Yes (Vitest verified) |
| Repository File Browser | Fully Functional | src/views/Repository/FileBrowser/FileBrowserView.tsx |
Yes (Build & Typecheck) |
| Application Settings View | Fully Functional | electron/settings/settings-store.ts, src/views/Settings/SettingsView.tsx |
Yes (Build & Typecheck) |
| Confirm Modal & Toasts | Fully Functional | src/components/ConfirmModal.tsx, src/components/ToastContainer.tsx |
Yes (Build & Typecheck) |
E. Current Task
Current Phase: Transitioning from Phase 3 into Phase 4 / Phase 5. Intended Outcome: All core views and build pipelines are established, compiling cleanly with 0 TypeScript errors and passing 100% of automated tests.
F. Next Actions
P1 — Core Expansion
- Connect Monaco Editor for syntax-highlighted three-way merge conflict editing.
- Implement integrated interactive terminal session with
xterm.jsand node-pty/child-process. - Add GitHub / GitLab / Gitea remote REST/GraphQL provider API authentication and PR list browsing.
P2 — Windows Packaging & Polish
- Package Windows distribution installer using
electron-builder(npm run dist). - Generate standard FlowGit
.icoicon for Windows taskbar and installer.
G. Testing and Build Status
| Command | Execution Status | Result |
|---|---|---|
npm run test (Vitest) |
Executed | 9 of 9 passed (100%) |
npm run typecheck (tsc --noEmit) |
Executed | 0 errors, clean exit |
npm run build (electron-vite build) |
Executed | Production bundle built in 918ms |
H. Important Decisions
| Decision | Reason | Alternatives Rejected |
|---|---|---|
Native JSON store (JsonStore) over electron-store |
electron-store v10 is pure ESM causing ERR_REQUIRE_ESM in Electron CJS main bundle; native fs JSON store has 0 external dependencies and 100% synchronous stability |
electron-store v10 (rejected: ESM runtime collision) |
Atomic JSON store over better-sqlite3 |
Eliminates requirement for Visual Studio C++ compilers and node-gyp native compilation on target user PCs | better-sqlite3 (rejected: requires C++ build tools) |
| electron-vite over vanilla Vite | Direct Electron HMR and optimized dual-bundle build pipeline | Custom webpack, Create React App |
I. Instructions for the Next AI Agent
- Read
PROJECT_STATE.mdcompletely before making changes. - Read
DESIGN.mdbefore modifying any UI. Adhere strictly to the Axiom design system. - Inspect the actual source code and Git status rather than assuming unverified facts.
- Preserve existing architectural patterns: All Git interactions must use argv arrays in
executor.ts, never shell string interpolation. - Run
npm run testandnpm run typecheckbefore and after changes. - Update
PROJECT_STATE.mdwhenever status changes.