diff --git a/GEMINI.md b/GEMINI.md index 9b1d244b..72314850 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -95,55 +95,44 @@ - [ ] **[Recipient Agent]**: [Description of request] (Sent: [YYYY-MM-DD]) ### 🎯 Strategic Goals (Current Sprint) -- **Primary:** Performance Sprint & Journals Standardization. +- **Primary:** Launcher Stabilization & Performance. - **Secondary:** V3 API Migration and System Health Stability. ### 🚧 Active Workstreams +- **[Launcher Stabilization]:** Hardening the native bridge and resolving session selection reactivity issues. - **[Leads Module V3]:** Transitioning Exhibitor Leads to V3 API and mobile-first dashboard. - **[Hydration Optimization]:** Implemented SWR pattern and non-blocking layouts to eliminate "white page" delays. - **[Search Hardening]:** Standardized debounced reactive search logic across Recovery Meetings, Badge Search, and Journals modules. -- **[Service Worker]:** Re-enabled registration and implemented robust asset caching. - **[Telemetry]:** Modern dashboard in Launcher Config with visual CPU/RAM gauges. -- **[Journals Module]:** Standardized naming (`ae_comp__*`), normalized props to snake_case, and unified icons. ### 🧠 Recent Learnings & Decisions -- **V3 Search Context:** POST search for child objects (e.g. `event_exhibit_tracking`) requires explicit `for_obj_type` and `for_obj_id` query parameters to assist the backend in partitioning, otherwise it may inject incorrect legacy filters like `event_id_random`. -- **SWR Pattern:** Crucial for eliminating page load delays in Sites, Events, and Journals. -- **Debounced Search:** Replacing manual triggers and loops (like setInterval) with reactive debounced effects significantly improves UX and reduces API noise. -- **Quiet Logs:** Silenced noisy `AbortError` and `NetworkError` in background fetches to reduce noise. -- **Details Toggle:** Optimized Event Session list by deferring expensive sub-components. +- **LiveQuery Reactivity:** `liveQuery` observables require explicit prefixing ($) in templates. Re-assigning them to `$state` variables in effects can lead to `store_invalid_shape` errors if prefixes aren't updated. +- **Global Page State:** Migrating from manual prop-passing (like `data_url`) to the global `$page` state significantly simplifies component trees and avoids "undefined" errors during navigation. +- **Native Handover:** Using `.tmp` files for downloads and only renaming to `.file` after SHA-256 verification ensures cache integrity in the native bridge. --- ## 3. 🧠 Short Term Memory (Session Context) -- **Status:** Session Concluded / System Stable. +- **Status:** Session Concluded / System Reverted to Stable. -- **Last Action:** Finalized V3 Leads foundations, fixed dashboard routing, and implemented booth management. +- **Last Action:** Reverted uncommitted reactivity refactors in `launcher/+layout.svelte` and `launcher_session_view.svelte` due to page load failure. - **Key Learnings:** - - **Backend API Bug:** Identified a 400 Database Schema error in `event_exhibit_tracking` search caused by the backend incorrectly injecting legacy `event_id_random` filters. Frontend is verified clean and strictly follows base `_id` standards. - - - **Nested Routing Logic:** Lead Detail routes MUST be nested under the Exhibit ID to maintain context and resolve 404 errors in the capturing workflow. - - - **Property Processor Hardening:** Hardened processors to prioritize base `_id` mapping to internal `id` fields, ensuring robust Dexie synchronization for string-only identifiers. + - **Reactivity Race Conditions:** Manual store updates synchronized via URL can clash with layout effects, leading to clobbered states. + - **Svelte 5 Store Prefixes:** Standardizing on `$lq__obj` for observables is critical; switching to direct state variables requires surgical template updates. - **Accomplishments:** - - **V3 Leads Module Foundations:** Modularized `ae_events__exhibit` and `ae_events__exhibit_tracking` with V3 SWR standards and trace-ready performance logging. + - **'download' Filename Bug Fix:** Explicitly passed filenames to V3 Action endpoints and implemented a safety net in `api_get_object.ts`. + - **Menu Refactor:** Migrated `menu_session_list.svelte` and `menu_location_list.svelte` to use global `$page.url` state. + - **Native Caching:** Implemented SHA-256 verification and stale temp purge in the Electron bridge. + - **UI Initialization:** Ensured `event_session_id` defaults to `null` and added explicit no-session prompts. - - **String-Only ID Standardization:** Standardized all Lead capture and search functions to use base `_id` keys instead of the `_random` suffix dependency. +- **Current Blocker:** Session Selection Hang (Page fails to load or UI hangs when selecting a session if starting from a path without an initial ID). - - **Leads Dashboard Orchestration:** Implemented a mobile-first, high-contrast dashboard with persistent tab navigation (Add Lead, Lead List, Manage). - - - **Lead Detail Profile:** Implemented a comprehensive read-only Lead Profile view featuring custom responses and exhibitor notes. - - - **Booth Management:** Implemented the Manage/Config tab using `Element_ae_crud_v2` for live-revalidating booth profile updates. - -- **Current Blocker:** Backend Search Bug for `event_exhibit_tracking` (injecting `event_id_random`). - -- **Immediate Next Step:** Verify Staff Sign-in workflow and License assignment logic once the search bug is resolved. +- **Immediate Next Step:** Investigate Dexie/Svelte reactivity in the Launcher layout without introducing breaking clobbers. --- @@ -177,22 +166,11 @@ ## Gemini Added Memories -- The Aether Docker environment now has a robust physical database management suite: restore_db.sh, check_and_import.sh, and export_db.sh. Password escaping issues resolved using single quotes in .env. - -- Standalone DB tests in API project: Use virtual environment at 'environment/bin/python3', extract credentials from container env, and manually construct SQLAlchemy URI to bypass 'app.config' dependency issues. - -- [Harden: ID Integrity] Generic object processors MUST use truthy checks when mapping `_random` variants to clean keys to prevent `null` or `undefined` values from clobbering valid linking IDs received from V3 API responses. - -- [Harden: Event File Loader] Implemented a "Safety Net" in `_refresh_file_li_background` to inject missing `for_id` and `for_type` from the query context before saving to Dexie, ensuring robust indexing even with partial API responses. - -- Centralized 'public_read' flag in object definitions (core.py, cms.py, etc.) controls guest access in V3 API. - -- V3 API 'view' parameter rollout complete across core event library modules. - -- Presentation Management reports utilize the 'alt' view for file data shapes. - +- [Harden: ID Integrity] Generic object processors MUST use truthy checks when mapping `_random` variants to clean keys. +- [Harden: Event File Loader] Safety Net in `_refresh_file_li_background` to inject missing metadata from query context. +- [Harden: API Safety Net] `api_get_object.ts` fallback-extracts `filename` from `params` if the explicit argument is missing. +- [Native: Cache Reliability] Implemented SHA-256 integrity checks and stale `.tmp` purge in Electron `file_handlers.ts`. +- [Layout: Page State] Use `page` from `$app/state` for layout-level store synchronization to avoid clobbering manual updates. - The user prefers snake_case or Snake_Case over CamelCase for all naming and identifiers. - -- Formatting Standard: Prettier printWidth is set to 80 to force multi-line expansion for attributes and calls. - -- The Aether API V3 search for 'event_exhibit_tracking' currently has a backend bug where it incorrectly injects a filter for 'event_id_random' instead of 'event_id', causing a 400 Database Schema error (MariaDB code 1054). The frontend is sending the correct V3 payload, but the backend mapping needs to be updated by the API agent. +- Formatting Standard: Prettier printWidth is set to 80. +- The Aether API V3 search for 'event_exhibit_tracking' has a backend bug injecting 'event_id_random'. \ No newline at end of file diff --git a/TODO.md b/TODO.md index c536fb5d..999d9c34 100644 --- a/TODO.md +++ b/TODO.md @@ -29,14 +29,21 @@ This is a list of tasks to be completed before the next event/show/conference. - [x] **Session Search:** Modernized logic, fixed layout bugs and icon exports. (Completed 2026-01-27) - [x] **Exhibit Search:** Standardized Exhibitor and Lead Tracking reactive search. (Completed 2026-01-28) +## Recent Accomplishments (Feb 10, 2026) + +- **AE Events Launcher Stabilization:** + - [x] **'download' Filename Bug:** Resolved issue where files were downloaded as generic 'download' by explicitly passing `filename` to the API and implementing a safety net in `api_get_object.ts`. + - [x] **Global Page State Migration:** Refactored menu components (`menu_session_list.svelte`, `menu_location_list.svelte`, `launcher_menu.svelte`) to use Svelte 5's reactive `page` state instead of obsolete `data_url` props. + - [x] **Native Bridge Hardening:** Implemented SHA-256 integrity checks, stale `.tmp` purge, and "Safe Handover" pattern in the native Electron bridge. + - [x] **UI/UX Refinements:** Initialized `event_session_id` to `null` and added explicit "No session selected" prompts to improve the empty-state experience. + ## Urgent Tasks (Feb 10, 2026) 1. **AE Events Launcher Hardening:** + - [ ] **Session Selection Hang:** Investigate why the page fails to load or hangs after selecting a session when starting from a path without an initial ID. (Current Attempt: Derived LiveQuery vs state-driven subscription). - [ ] **Temp Cleanup:** Implement auto/manual removal of `[tmp]` files older than 24 hours. - [ ] **Recording Access:** Add button to open `[recording]` directory in Finder (macOS). - [ ] **JWT Lifecycle:** Implement silent auto-refresh for long-running podium sessions. - - [ ] **Launch Protection:** Prevent "Duplicate Launch" via UI locking and status messaging. - - [ ] **Cache Reliability:** Implement `.tmp -> .file` rename pattern with post-download checksum verification. - [ ] **Native Actuators:** Plan macOS-specific commands for window focus and system orientation. - [ ] **Self-Update:** Implement simple directory/URL-based auto-update mechanism. - [x] **Audit:** Marked `electron_native.js` as `[DEPRECATED]` in favor of active native repo logic.