## ADDED Requirements ### Requirement: Canonical Desktop Data Root TrueGrowth SHALL use a single writable per-user desktop data root as the canonical location for business persistence. #### Scenario: Local API starts outside Electron - **WHEN** the Local API starts without explicit runtime path environment variables - **THEN** it resolves the same platform user data root that Electron uses - **AND** it stores canonical data under a `data` directory and runtime outputs under a `runtime` directory. #### Scenario: Electron starts the Local API - **WHEN** Electron launches or imports the Local API - **THEN** it provides the canonical `TRUEGROWTH_ELECTRON_USER_DATA` and `TRUEGROWTH_RUNTIME_STATE_DIR` - **AND** repeated desktop launches use the same persisted data root. ### Requirement: SQLite Business Ledger TrueGrowth SHALL store desktop business records in a canonical SQLite ledger. #### Scenario: Runtime task is created - **WHEN** a local runtime task is queued, updated, completed, failed, or cleared - **THEN** the task and clear marker are written to the ledger - **AND** restarting the Local API restores the latest task state from the ledger. #### Scenario: Runtime asset is imported or generated - **WHEN** a media asset is imported or generated - **THEN** its metadata is written to the ledger with local file path and URL identity - **AND** the media file remains in the managed runtime output directory or its indexed legacy path. #### Scenario: Workflow or publishing state changes - **WHEN** workflows, schedules, runs, events, accounts, campaigns, or jobs change - **THEN** the aggregate state is saved to the ledger - **AND** JSON shadow files remain compatible during migration. ### Requirement: Storage Diagnostics And Migration TrueGrowth SHALL expose local storage diagnostics and safe migration controls. #### Scenario: User checks storage health - **WHEN** a client requests storage diagnostics - **THEN** the response includes canonical paths, active runtime path, SQLite availability, ledger path, legacy source status, and warnings for split roots. #### Scenario: Legacy project runtime exists - **WHEN** migration runs and `.truegrowth-runtime` contains previous records or outputs - **THEN** TrueGrowth imports metadata and indexes file paths without deleting or copying large files by default - **AND** records the migration result in the ledger. #### Scenario: User exports or imports local data - **WHEN** export or import is requested - **THEN** TrueGrowth serializes or restores ledger-managed business data through the Local API - **AND** invalid import payloads are rejected without clearing existing data.