From 40aafb033156cc5254f10a83545d8fea3fc4b13b Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Wed, 10 Dec 2025 21:44:20 +0100 Subject: [PATCH] docs: update changelog for v0.12.0-library-desk-enhancements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- CHANGELOG.md | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fb719e..2cc366e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,68 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Authentik SSO Milestones 4-5: Protect remaining services (deferred) - Disaster recovery and offsite backup strategy +## [0.12.0-library-desk-enhancements] - 2025-12-10 + +### Added +- **Wiki Change Detection** - Real-time page change notifications via PostgreSQL LISTEN/NOTIFY + - WikiChangeListener service connects to Wiki.js database + - Automatic re-ingestion when pages are created/updated/deleted + - Debouncing and loop prevention for automated updates + - Webhook router as HTTP fallback mechanism + - Setup scripts and documentation for PostgreSQL triggers + +- **Taxonomy-Aware Classification** - LLM uses existing wiki structure when classifying content + - `get_taxonomy_structure()` extracts category/subcategory paths from wiki + - Consolidation prompts include existing paths to prefer over creating new ones + - Prevents duplicate category creation (e.g., reuses `reference/political-entities/` instead of creating `reference/military-alliances/`) + +- **WikiJS Client Methods** + - `list_all_pages()` - Fetch all pages with path prefix filter (replaces stale search index) + - `get_taxonomy_structure()` - Extract category hierarchy for a user namespace + +- **Test Coverage** - New test files for recent features + - `test_graph_service.py` - Document node tags, entity-stub skipping + - `test_ingestion.py` - list_all_pages usage, batch ingestion + - `test_wiki_change_listener.py` - PostgreSQL notification handling + - Updated `test_consolidation.py` with taxonomy and ingestion_service tests + - Updated `test_integration.py` with list_all_pages and taxonomy tests + +### Fixed +- **Ingestion Pipeline** - Pages created during consolidation now properly indexed + - `ingestion_service` was not passed to ConsolidationService in router + - Added ingestion call to `_update_page_with_facts()` (was only in create path) + +- **Bulk Re-index** - `/ingest/all` endpoint now works reliably + - Changed from `search_pages("")` (stale index) to `list_all_pages()` + - Successfully re-indexed 95 pages + +- **Document Node Tags** - Neo4j Document nodes now include `tags` property + - Prevents warnings in related documents query + - Set via `d.tags = $tags` in MERGE query + +- **WikiJS Integration Script** - Page ID fetched via GraphQL + - Uses `pages.singleByPath(path, locale)` query during initialization + - Replaces unreliable page list search method + +### Changed +- **Entity Linking** - Improved matching with fuzzy logic + - Confidence scoring for containment and token overlap matches + - Self-referential link filtering (entities don't link to current page) + - Path preservation (keeps full `/users/username/path` format) + - Longest-first matching to prevent partial matches + +- **Consolidation Processing** - Searches marked processed even when skipped/errored + - Prevents unprocessed searches from accumulating indefinitely + +- **Stack Configuration** - Updated library-desk environment variables + - Replaced `WIKIJS_API_KEY` with `WIKIJS_USERNAME`/`WIKIJS_PASSWORD` + - Added `WIKIJS_DB_PASSWORD` for PostgreSQL connection + +### Technical Details +- **Dependencies:** Added `asyncpg~=0.29.0` for PostgreSQL async driver +- **New Files:** 10 files added (services, routers, tests, documentation) +- **Commits:** 10 logical commits covering all changes + ## [0.11.0-pydantic-ai-cleanup] - 2025-12-03 ### Major Changes