26 lines
2.3 KiB
Markdown
26 lines
2.3 KiB
Markdown
## Context
|
|
The desktop shell already pins Electron `userData`, but development Local API runs can still default to `.truegrowth-runtime`, while packaged or Electron-launched runs use `Application Support/TrueGrowth/runtime`. Browser `localStorage` and `IndexedDB` are origin scoped, so `127.0.0.1:7200` and preview ports cannot share data directly.
|
|
|
|
## Goals / Non-Goals
|
|
- Goals: make desktop business data survive restarts and port changes, expose storage health, migrate legacy runtime records, and avoid duplicating large media files.
|
|
- Non-Goals: rewrite every browser IndexedDB cache in one step, delete legacy runtime folders, or bundle a new native database dependency.
|
|
|
|
## Decisions
|
|
- Use `~/Library/Application Support/TrueGrowth/data/truegrowth.sqlite` (platform equivalent on Windows/Linux) as the canonical ledger.
|
|
- Continue using the existing `sqlite3` CLI integration pattern to avoid adding native npm dependencies.
|
|
- Store structured business records as JSON payloads in typed ledger tables, with a `kv` table for aggregate state and migration markers.
|
|
- Keep JSON shadows during migration for compatibility, but prefer SQLite reads whenever available.
|
|
- Index legacy large files by absolute path and local media URL; do not copy the 35GB `.truegrowth-runtime` tree by default.
|
|
|
|
## Risks / Trade-offs
|
|
- SQLite CLI may be missing on a fresh machine. Mitigation: diagnostics report unavailable status and Local API falls back to existing JSON behavior until the runtime readiness flow installs or bundles SQLite.
|
|
- Browser-only IndexedDB data cannot be read by Node without Chromium internals. Mitigation: make the desktop Local API the authoritative source going forward and keep browser storage as a transitional source.
|
|
- Migration may discover stale or deleted files. Mitigation: diagnostics report missing targets and preserve legacy source metadata.
|
|
|
|
## Migration Plan
|
|
1. Create canonical data/runtime directories under desktop user data.
|
|
2. Initialize ledger schema and record current storage roots.
|
|
3. Import legacy runtime tasks, cleared task IDs, business workflow JSON/SQLite state, AIGCPanel state, social publishing state, and media file indexes.
|
|
4. Keep legacy files untouched and record migration versions in `storage_migrations`.
|
|
5. Expose diagnostics so support can see which roots are active and which legacy sources were imported.
|