cast(document_metadata["key"], String) generates CAST(col->'key' AS TEXT)
which preserves JSON string quotes (e.g. '"Fix login bug"'), causing
case-insensitive comparisons to never match.
Replace with .astext which generates the ->> operator (unquoted text
extraction), making issue lookups by title and identifier work correctly.
- LinearConnector.update_issue: return error early when no fields are
provided, preventing a silent no-op mutation and unnecessary KB sync
- Rename delete_from_db → delete_from_kb in delete_notion_page tool and
its frontend component to match the more accurate Linear naming and
keep both tool APIs consistent for the LLM
- Add rollback on exception to prevent dirty database state
- Fix block verification threshold from >=1 to >=80%
- Remove technical 'failed' language from user messages
- Add empty content validation with warning
- Add NotionKBSyncService for immediate KB updates after page changes
- Implement block ID verification to ensure content freshness
- Refactor duplicate block processing logic to shared utils
- Add user-friendly status messages
- Include debug logging for troubleshooting
- Introduced a health check endpoint to monitor API responsiveness.
- Updated SlowAPI limiter to increase default rate limits and added in-memory fallback for Redis unavailability.
- Implemented a timeout for seeding Surfsense documentation to prevent startup delays.
- Improved decision extraction logic in create, delete, and update Notion page tools to ensure proper handling of approval decisions.
- Added a static method to NotionHistoryConnector for consistent error message extraction from API responses, enhancing readability and maintainability.
- Added support for multiple queues in Celery worker configuration.
- Modified connector deletion to handle documents inline instead of using a background task.
- Updated response messages for document creation and connector deletion to reflect new processing status.
- Removed the obsolete connector deletion Celery task file.