docs: update README with domain module architecture and encrypted fragment details

Co-Authored-By: Warp <agent@warp.dev>
This commit is contained in:
Jacob Schmidt 2026-02-23 22:01:32 -06:00
parent f06c1d15bb
commit e85a3f6d26

View File

@ -123,17 +123,20 @@ The `backend/` directory contains a .NET 10 implementation that provides the sam
``` ```
Entry (thin command dispatcher) Entry (thin command dispatcher)
├── IFragmentService → FragmentService → IFragmentRepository ├── Fragments/ IFragmentService → FragmentService → IFragmentRepository (SQLCipher)
├── IEntryFileService → EntryFileService → IEntryFileRepository ├── Entries/ IEntryFileService, IEntrySearchService, JournalParser, HtmlSanitizer
├── IEntrySearchService → EntrySearchService ├── Vault/ IVaultStorageService → VaultStorageService → IVaultCryptoService
├── IVaultStorageService → VaultStorageService → IVaultCryptoService ├── Database/ IJournalDatabaseService (SQLCipher schema/key derivation)
├── IJournalDatabaseService → JournalDatabaseService (SQLCipher) │ IDatabaseSessionService (encrypted connection lifecycle after auth)
├── IAiService → PythonSidecarAiService | DisabledAiService ├── Ai/ IAiService → PythonSidecarAiService | DisabledAiService
├── ISpeechBridgeService → PythonSidecarSpeechService | DisabledSpeechBridgeService ├── Speech/ ISpeechBridgeService → PythonSidecarSpeechService | DisabledSpeechBridgeService
├── CommandLogger ├── Sidecar/ PythonSidecarClient (shared Python process I/O), SidecarCli
└── IJournalConfigService → JournalConfigService ├── Logging/ CommandLogger, LogRedactor
└── Config/ IJournalConfigService → JournalConfigService
``` ```
Services are organized under `Journal.Core/Services/` in domain-specific subdirectories, each with its own namespace (e.g. `Journal.Core.Services.Ai`).
### Build & Run ### Build & Run
```bash ```bash
@ -179,6 +182,8 @@ dotnet run --project Journal.SmokeTests
- Vault: AES-256-GCM with PBKDF2-HMAC-SHA256 key derivation (600k iterations) - Vault: AES-256-GCM with PBKDF2-HMAC-SHA256 key derivation (600k iterations)
- Database: SQLCipher with PBKDF2-derived key - Database: SQLCipher with PBKDF2-derived key
- Standalone fragments are stored in the encrypted SQLCipher database (requires auth via `vault.load_all` or `db.hydrate_workspace`)
- `DatabaseSessionService` holds the encryption password in memory after first authentication
- Wire format matches the Python implementation for cross-language parity - Wire format matches the Python implementation for cross-language parity
## Notes ## Notes