diff --git a/GEMINI.md b/GEMINI.md index 5929199d..feaf85c0 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -280,17 +280,25 @@ The `frontend_svelte` agent provided critical feedback to `backend_fastapi` for ### Session Learnings (2026-01-08) -**Context:** Refactored the core Aether API helper suite (`get`, `post`, `patch`, `delete`) to ensure architectural consistency, robust error handling, and support for unauthenticated lookups (the "Bootstrap Paradox"). +**Context:** Finalized the core Aether API stack refactor, achieved 100% unified type parity for all 42 active interfaces, and initiated the Journals module UI/UX audit. **Key Accomplishments:** -- **API Helper Alignment:** Standardized all primary helpers to support custom `fetch` injection (essential for SvelteKit SSR), kebab-case header standardization, and automated JWT-to-Authorization header injection. -- **Bootstrap Paradox Resolution:** Implemented a robust bypass in the header merging logic. By passing `x-no-account-id: null` to the helpers, the default `x-account-id` is stripped, and a non-null dummy value is sent, allowing unauthenticated V3 searches for site domains. -- **Non-Mutating Config:** Eliminated direct mutations of the shared `api_cfg` object within the helpers, preventing difficult-to-track side effects across the application. -- **System Testing Dashboard:** Upgraded the `/testing` page with a dedicated suite for core helper verification and V3 search validation. -- **CLI Verification Suite:** Created `agents_sync/scripts/test_ae_api_v3.py` for rapid, headless verification of the API stack from the command line. +- **API Helper Alignment:** Standardized all primary helpers (`get`, `post`, `patch`, `delete`) to support custom `fetch` injection (essential for SvelteKit SSR), kebab-case header standardization, and automated JWT-to-Authorization header injection. +- **Bootstrap Paradox Resolution:** Implemented a robust bypass in the header merging logic. By passing `x-no-account-id: null` to the helpers, the default `x-account-id` is stripped and a dummy string sent, allowing unauthenticated V3 searches. +- **MISSION COMPLETE (Unified Types):** Established `src/lib/types/ae_types.ts` and migrated all 42 active Aether interfaces. Standardized on the "Triple-ID" pattern (`id`, `[type]_id`, `[type]_id_random`) for Dexie and V3 API compatibility. +- **Journals Module Refinement:** Standardized iconography to Lucide, improved header responsiveness for mobile/tablet, and implemented a robust 3-state toggle (View/Cancel/Save) for journal entries using Svelte 5 `$derived.by` for reactive change detection. +- **CodeMirror Evolution:** Refactored the editor component to support `bind:value` and exposed the internal `editorView` for external control. Preserved formatting logic in `ae_journals_editor_helpers.ts`. **Key Learnings:** -- **Implicit Header Requirements:** Some backend environments (like the Aether V3 API) strictly require the presence of a "bypass" header even when credentials are omitted. A null value in the client-side header map is often stripped by `fetch`, so a dummy string value (e.g., "Nothing to See Here") is necessary for the header to be successfully transmitted. -- **Environment Parity in Testing:** Verifying API helpers in both the browser (via the `/testing` page) and the CLI (via Python scripts) is critical for identifying environment-specific issues like CORS, header formatting, and timeout behavior. -- **Barrel File Strategy:** As the API stack grows, a pure barrel file strategy for `api.ts` (exporting from dedicated modules) is superior to a single "God Object" for maintainability and code splitting. +- **Svelte 5 Change Detection:** Using `$derived.by` for complex object comparison (e.g., comparing `tmp_entry_obj` vs `orig_entry_obj`) is significantly more reliable and predictable than `$effect`-based detection for UI state toggles. +- **CodeMirror 6 Transactions:** CM6 is extremely strict about its update cycle. Overriding the low-level `dispatch` can lead to deadlocks with Svelte's reactivity. The `EditorView.updateListener` pattern is the safer way to sync state. +- **Header "Presence" vs "Value":** Backend V3 guest lookups sometimes require the *presence* of a bypass header even if the value is a dummy string. `fetch` may strip `null` headers entirely, so a non-empty string like "Nothing to See Here" is functionally required. + +**Known Challenges:** +- **Editor Toolbar:** The formatting toolbar (`wrapSelection`) is currently commented out in the Journal Entry view. While the logic is sound, it triggered `TypeError` in the CodeMirror core during transactions. This needs isolated testing before re-enablement. + +**Next Steps:** +- **Journals Audit (Phase 2):** Clean up the Journals configuration and category menus. Remove legacy CSS in favor of Tailwind. +- **Core UI Expansion:** Build dedicated Create/Edit forms for `Person`, `Address`, and `Contact` using the new unified types. +- **CodeMirror Tooling:** Stabilize the formatting helpers and re-enable the Markdown toolbar. diff --git a/src/routes/journals/JournalEntry_AITools.svelte b/src/routes/journals/JournalEntry_AITools.svelte new file mode 100644 index 00000000..d9ce9451 --- /dev/null +++ b/src/routes/journals/JournalEntry_AITools.svelte @@ -0,0 +1,94 @@ + + +