5.8 KiB
5.8 KiB
Gemini Added Memories
My Role and Operating Principles
I am an interactive CLI agent assisting with software engineering tasks for One Sky IT, LLC, primarily on the Aether API project. My core mandates include:
- Adhering to project conventions and existing code style.
- Never assuming library/framework availability; always verifying project usage.
- Implementing changes idiomatically and with minimal, high-value comments.
- Being proactive, including adding tests for new features/fixes.
- Confirming ambiguity or actions beyond clear scope with the user.
- Prioritizing user control and project conventions.
- Strictly adhering to instructions and utilizing available tools effectively.
- Awaiting explicit user instructions for significant architectural changes or critical decisions.
Project Context - Aether API (FastAPI)
- Owner/Developer: Scott Idem (user).
- System Name: Aether (AE).
- Purpose: Events Presentation Management, Events Badge Printing, Leads, Attendee Tracking, Presentation Launcher, Journals, Archives, Posts.
- Started: Mid-2018.
- Frontend History: Python Flask -> Svelte (current: SvelteKit).
- Current API Version (FastAPI): v4.9.0.
- V3 Implementation: Modern parallel CRUD and Search endpoints under
/v3/crud.
API Versioning & Strategy
/crud(v1): Legacy, still used by older frontend parts./v2/crud(v2.5): Modern, preferred, and mostly functional endpoint./v3/crud: The goal of this project phase. A new, parallel implementation with a refined structure and advanced search. Runs alongside v1 and v2.
Technical Learnings
- Startup Errors & Logging: The "worker failed to boot" error is often an import-time error or a logging configuration failure.
- Root Cause: If
logging.config.dictConfigfails (e.g., due to missing/logsdirectories in Docker), the entire application crashes. - Prevention: Always wrap logging config in
try/exceptand useimport logging.configexplicitly. - Circular Dependencies: These are frequently masked as logging errors because
app.logis imported very early in most files. Breaking these loops by moving imports inside functions (deferred imports) is a primary fix.
- Root Cause: If
- V3 API Dependencies: Standardized
Responseinjection should use plain type hints (e.g.,response: Response) to avoid router initialization failures. - Pydantic Compatibility: The current environment uses Pydantic v1.10. Avoid v2 features like
computed_fieldormodel_validatorto prevent startup crashes.
V3 Architectural Progress (Jan 2026)
- Modular Object Definitions: Monolithic
ae_obj_types_def.pyrefactored into domain-specific files inapp/object_definitions/(core, events, journals, orders, cms, lookups, membership, other). - Granular Dependencies: Monolithic
Common_Route_Paramsreplaced with specialized dependencies inapp/lib_general_v3.py(AccountContext, Pagination, StatusFilter, Serialization, Delay). - Advanced Search (POST): Implemented
POST /v3/crud/{obj}/searchsupporting recursive AND/OR grouping and standardized full-text search via theqproperty. - Security Hardening: Implemented a 5-level recursion depth limit and a field allowlist (
searchable_fields) for the Search API. - Non-blocking Concurrency: Standardized on
asyncio.sleep()for delay simulation to prevent Gunicorn worker hangs.
Session Learnings & Progress (Jan 2-3, 2026)
V3 CRUD Infrastructure & Security
- Modular Object Definitions: Successfully refactored the monolithic
ae_obj_types_def.pyinto a domain-driven structure underapp/object_definitions/. This improved maintainability while keeping legacy V2 keys for backward compatibility. - Advanced Search (POST): Implemented a robust
/searchendpoint supporting recursive AND/OR logic and standardized full-text search via theqproperty. - Security Hardening: Enforced a 5-level recursion depth limit and a field allowlist (
searchable_fields) per object to prevent unauthorized data leaks. - JWT Authentication: Implemented modern JWT validation for V3, supporting both the
Authorizationheader and ajwtquery parameter (enabling secure, header-free file downloads). - Frontend Integration: Created a dedicated
V3_FRONTEND_API_GUIDE.mdto help the Svelte Gemini agent and developers migrate to the new endpoints.
Technical & Environment Stability
- Robust Logging: Standardized on module-level loggers and wrapped logging configuration in
try/exceptto prevent Docker startup crashes. - Circular Dependency Resolution: Identified and resolved a major circular dependency loop between
lib_general_v3,response_models, anddb_sql. - FastAPI Standards: Fixed
Responseinjection and parameter ordering issues that were causing "Worker failed to boot" errors.
Current To-Do List
- Docker Environment Insight Improvements (Priority: High): Implement methods/endpoints to give the agent more insight into the actual Docker runtime environment (environment variables, container status, log accessibility) to better diagnose recurring startup and configuration issues.
- Security - Field Allowlists (Priority: High): Finish populating
searchable_fieldsfor all remaining object definitions. - Security - Authentication (Priority: High): Continue refining and enforcing JWT-based authentication across all V3 endpoints.
- Specialized Endpoints (Priority: Medium): Identify and plan the modernization of custom logic (e.g., importing, websockets) to match V3 patterns.
- Directory Cleanup (Priority: Low): Long-term plan to archive old projects and standardize directory naming in
OSIT_dev. - Unused Route Cleanup: Successfully commented out
cont_edu_certrouters inmain.py.