Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
[Unreleased]
Fixed
- Revalidate retrieval candidates against the authoritative active document
versions immediately before returning results, preventing a concurrent
publication from exposing a superseded document version.
Security
- Require operator-supplied PostgreSQL, MinIO, and Grafana passwords instead
of checked-in Compose fallbacks. Existing development environments must add
the required database credentials and create the separate protected
monitoring environment file before restarting the affected stacks.
This is the first public HarborRAG 2.0 alpha release. Python package metadata,
distribution filenames, dependency pins, and release tags use the canonical
PEP 440 version 2.0.0a1; release tooling also accepts 2.0.0-alpha as an
operator-facing alias.
Documentation
- Rebuilt the public documentation website around HarborRAG 2.0.0 capabilities,
limitations, package boundaries, and project lineage.
- Added a publication-manifest hero, interactive ingestion/retrieval explorer,
accessible interface examples, and responsive navigation while retaining the
existing visual assets and splitting presentation code into focused modules.
- Added public data-lifecycle, runtime-reliability, publication, and security
guidance plus a CI guard against publishing private reference material.
Changed
Project renamed: Qdrant-loader → HarborRAG
- Qdrant-loader is now HarborRAG, restructured from a single Qdrant-coupled ingestion tool into a modular, provider-agnostic RAG framework. The old
qdrant-loader / qdrant-loader-core / qdrant-loader-mcp-server packages are replaced by eight ports-and-adapters packages (harborrag-core, harborrag-adapters, harborrag-engine, harborrag-memory, harborrag-runtime, harborrag-app, harborrag-mcp-server, harborrag), so connectors, parsers, model providers, and storage backends can evolve independently instead of being hardwired to Qdrant and a fixed provider set.
- Documentation, Docker assets, and CI workflows updated to reflect the new package layout and naming.
This is a breaking rename: import paths, package names, and CLI/config references from qdrant-loader do not carry over. See README.md for the current architecture.
1.0.3 - 2026-06-08
Added
Qdrant-loader
- Queue-based ingestion architecture with SQLite job queue, worker pool, scheduler, and new
serve/jobs/webhook CLI flows [#269] [#280] [#281] [#284] [#289] [#291] [#294] [#307]
- Excel ingestion improvements and Jira Data Center custom field mapping support [#251] [#276]
updated_after filter for Jira connector to limit ingestion to issues updated after a given date [#267]
- Container deployment setup with dedicated Dockerfiles and
docker-compose.yaml [#278]
Qdrant-loader-core
- Bedrock and Gemini provider support in the LLM/embedding layer [#275] [#292]
- Sparse retrieval primitives for hybrid search flows [#184]
Qdrant-loader-mcp-server
- Qdrant hybrid search support with sparse+dense pipeline integration [#184]
Fixed
Qdrant-loader
- Queue concurrency and failure-path hardening, including race-condition fixes and safer startup/auth/readiness handling [#307] [#311]
- State DB and Alembic path resolution reliability, plus safer rollback behavior for multi-project transactions [#270] [#285] [#290]
- Deleted Jira issues are now cleaned up from Qdrant during re-ingestion and delete flows [#307]
- Empty-chunk regression prevention and CORS environment configuration fixes [#268] [#293]
Changed
Qdrant-loader
- Ingestion pipeline refactored to a streaming-oriented flow for queue-driven execution [#295]
1.0.2 - 2026-05-12
Changed
Documentation
- Updated contributing guide for external contributors [#273]
1.0.1 - 2026-04-23
Fixed
Qdrant-loader
- Fixed UI layout issues across website pages [#253]
- Privacy policy
last_updated fallback now uses template file mtime instead of build date when Git timestamp is unavailable [#259]
Documentation
- Updated docs and removed broken internal links [#258]
1.0.0 - 2026-04-09
Added
Qdrant-loader
- Contextual embeddings for enriched chunk context during ingestion [#221]
Fixed
Qdrant-loader
- Jira Cloud connection failure due to deprecated search API endpoints [#215]
- Duplicate chunks for Python files by rewriting AST parser [#217]
- Duplicate document IDs causing missing chunks in metric tracking [#222]
- Ingestion metrics: aligned size metrics and aggregated project results [#222]
- JQL injection and query breaking when configuration values include special characters [#223]
- Jira connector validation for environment configuration and connection errors [#224]
- Optional
issue_types and include_statuses configuration for Jira connector [#223]
- Error message sanitization to prevent accidental exposure of sensitive data [#230]
- Contextual embedding content formatting [#228]
- YAML syntax error and broken markdown in configuration documentation [#231]
Qdrant-loader-core
- Sensitive data redaction in logging processors [#230]
Qdrant-loader-mcp-server
- Embedding logic and configuration for local (Ollama) model support [#229]
vector_search_service to use correct embedding_model parameter [#229]
- Retry logic and failure context reporting in search pipeline [#229]
Changed
Qdrant-loader
- Aligned configuration templates with Ollama-first and OpenAI unified setup [#231]
- Migrated pip/venv to uv for monorepo package management [#220]
- Updated deprecated GitHub Actions from Node.js 20 to Node.js 24 [#227]
- Updated website UI to v1 [#219]
0.9.0 - 2026-03-26
Added
Qdrant-loader
enable_semantic_analysis global NLP kill switch in chunking config to skip spaCy/LDA processing entirely for faster ingestion [#189]
enable_enhanced_semantic_analysis opt-in flag in chunking config to gate advanced NLP fields (pos_tags, dependencies, document_similarity) [#195]
Qdrant-loader-mcp-server
expand_chunk_context MCP tool to retrieve surrounding chunks for richer context around a specific chunk [#185]
cluster_session_id required parameter to expand_cluster tool schema for session isolation [#175]
Fixed
Qdrant-loader
- Semantic analyzer now filters out garbage/punctuation-only entities from NLP metadata [#178]
- Improved semantic similarity caching to avoid self-matches and keep similarity results fresh across repeated enhanced analyses [#195]
Qdrant-loader-mcp-server
- Instance-level
_clustering_cache causing cross-request data leakage in IntelligenceHandler; replaced with session-scoped store with TTL cleanup [#175]
- MCP server concurrency improved with FastAPI-centric workers and semaphore-based search load distribution [#176]
- Removed redundant top-level
schemas.py that duplicated per-tool schema modules [#181]
- Search handler config instance de-duplicated to eliminate redundant initialization [#174]
Changed
Qdrant-loader-mcp-server
- CLI and transport layer refactored:
server.py centralizes startup; HTTP handler split into focused route modules [#176]
0.8.1 - 2026-03-24
Fixed
- CI secret injection restricted to develop/main branches only [#187]
- CI secrets and integration tests skipped for fork/Dependabot PRs [#187]
Changed
- Removed
uv.lock from version control tracking [#187]
0.8.0 - 2026-03-17
Removed
Qdrant-loader
- Legacy binary Office formats (
.doc/.ppt) no longer supported [#145]
Fixed
Qdrant-loader
- Unsupported-type fallback now skips ingestion for legacy
.doc/.ppt files [#145]
- Excel chunk overlap consistency [#142]
.xls inputs now treated as Excel files for chunking strategy and metadata [#141]
Qdrant-loader-mcp-server
- Applied NLP processing only to keyword-search flow [#134]
- Lazily loaded
qdrant-client, spaCy, and network imports in MCP server [#132]
- Reduced CLI startup time by lazily loading the OpenAI SDK [#131]
Added
Qdrant-loader-mcp-server
- Cross-encoder reranking to improve retrieval relevance [#151]
expand_document MCP tool to expand context around a specific chunk [#149]
expand_cluster MCP tool with detailed analysis of document grouping and relationships [#146]
- WRRF ranking for hybrid search to improve result quality [#133]
Changed
- Simplified configuration with smart defaults and a setup wizard [#144]
0.7.6 - 2026-01-22
Changed
- Documentation terminology updated from “Release Notes” to “Changelog” [#112]
- Applied consistent formatting across workflow and updated navigation links [#112]
0.7.5 - 2026-01-20
Fixed
Qdrant-loader-mcp-server
- Mixed document types (dict/object) causing “Untitled” and empty
content_preview in results [#92]
- Incorrect usage of NestedCondition for
project_ids filter replaced with dot notation [#97]
- Search results not respecting user-specified
limit parameter (now defaults to 5) [#98]
Added
Qdrant-loader-mcp-server
- Optional
similarity_threshold parameter (default 0.7) to find_similar_documents for filtering by minimum similarity score [#91]
- Separate
fetch_limit from user limit with configurable defaults for better control [#98]
Changed
Qdrant-loader-mcp-server
- Updated
reason field from explanation to recommendation_reason in complementary content results [#100]
- Enhanced validation for text field types to prevent display issues [#92]
0.7.4 - 2025-12-11
Fixed
Qdrant-loader
- Windows asyncio event loop crashes with signal handling and stdio support [#76]
- –log-level CLI option not working after logging initialization [#63]
- Missing prometheus-client dependency causing import errors [#75]
- Deprecated langchain.text_splitter import warnings [#76]
Qdrant-loader-mcp-server
- Missing Spacy dependency causing Cursor MCP crash on startup [#82]
- MCP Search API compatibility issues with qdrant-client 1.16 [#78]
Added
Qdrant-loader
- Test suite cross-platform support [#76]
0.7.3 - 2025-09-11
Fixed
Qdrant-loader
- Logging duplication where CLI commands printed each log message 2-4 times [#56]
Changed
Qdrant-loader-core
- Unified logging architecture with centralized configuration across all packages [#56]
- Idempotent setup with new
reconfigure() method [#56]
0.7.2 - 2025-09-05
Changed
- Internal inter-package dependencies now pinned to unified release version [#54]
- Enhanced dry-run output to preview internal dependency pin changes [#54]
- Enforced explicit release order: bump → update classifiers → pin deps → commit → tag → release [#54]
- Updated commit messages to reflect classifier and internal dependency updates [#54]
0.7.1 - 2025-09-04
Added
Qdrant-loader-core
- Azure OpenAI support with robust endpoint handling (BETA) [#52]
- Ollama endpoint handling [#52]
- Unified
global.llm.* configuration for provider-agnostic setup [#52]
- Structured logging for LLM requests (provider, operation, model, latency) [#52]
- Secret redaction in logs [#52]
- Normalized exception mapping across providers [#52]
Changed
Qdrant-loader-core
- Vector size now read from config instead of hardcoded
1536 defaults [#52]
- Centralized LLM layer with provider adapters [#52]
- Direct OpenAI imports removed from application code [#52]
- Tests and documentation updated for provider-agnostic architecture [#52]
Qdrant-loader-mcp-server
- MCP server prefers config file loading with CLI/env/file precedence [#53]
Deprecated
Qdrant-loader-core
- Legacy fields
global.embedding.* and file_conversion.markitdown.* (deprecation warnings shown) [#52]
Security
Qdrant-loader-mcp-server
- Redacted
--print-config for MCP server [#53]
0.6.1 - 2025-08-13
Fixed
Qdrant-loader-mcp-server
- Timeout and error issues in
detect_document_conflicts tool (achieved P95 latency 8-10s) [#45]
- AttributeError in conflict formatter:
'dict' object has no attribute 'document_id' [#45]
Added
Qdrant-loader-mcp-server
- Tiered analysis with intelligent document pair prioritization [#45]
- Parallel processing with concurrent Qdrant vector retrieval [#45]
- 8 configuration options for conflict detection performance tuning [#45]
- Detailed performance statistics in tool responses [#45]
- Optional per-call parameter overrides for conflict detection [#45]
Changed
Qdrant-loader-mcp-server
- Strict budgeting for expensive LLM calls (default 2 pairs) [#45]
- Graceful degradation with partial results instead of hard failures [#45]
- Tool schema enhanced with performance parameters [#45]
- Error handling for malformed document data [#45]
0.6.0 - 2025-08-12
Added
Qdrant-loader-mcp-server
- FastAPI-based HTTP transport alongside stdio transport [#43]
- Server-Sent Events (SSE) streaming capabilities [#43]
--transport CLI option to choose between stdio and HTTP modes [#43]
- Health check endpoints for production deployment [#43]
- Structured tool output with JSON content [#43]
- Tool behavioral annotations for all 8 tools [#43]
- Protocol version validation with graceful degradation [#43]
- Comprehensive session management for HTTP connections [#43]
Changed
Qdrant-loader-mcp-server
- MCP Protocol upgraded from 2024-11-05 to 2025-06-18 [#43]
- Modular transport layer with clean separation [#43]
- Error handling with improved messages [#43]
- Connection handling performance optimizations [#43]
0.5.1 - 2025-07-28
Changed
Qdrant-loader-core
- All chunking strategies refactored into modular components [#39]
- Dedicated classes for document parsing, section splitting, metadata extraction [#39]
- HTML chunking with robust handling for empty content and malformed HTML [#39]
- Code and JSON strategy complete modular redesign [#39]
- Chunk processing with additional metadata fields [#39]
- Configuration templates with new strategy-specific options [#39]
0.5.0 - 2025-07-25
Added
Qdrant-loader-mcp-server
- Cross-document intelligence: similarity analysis, clustering, relationship detection [#35]
- Intent-aware adaptive search with AI-powered query understanding [#35]
- Knowledge graph integration with entity relationships [#35]
- Topic-driven search chaining with automatic discovery [#35]
- Dynamic faceted search with real-time generation [#35]
- spaCy integration for advanced NLP processing [#35]
Qdrant-loader
--force flag to bypass change detection for complete reprocessing [#35]
Changed
Qdrant-loader-core
- Topic extraction with enhanced LDA modeling [#35]
- Entity recognition with structured conversion [#35]
- Chunking with improved timeout handling [#35]
- Structured logging for semantic analysis [#35]
0.4.15 - 2025-07-22
Fixed
Qdrant-loader-core
- Critical chunking inconsistency (all strategies now use character-based
chunk_size) [#33]
Changed
Qdrant-loader-core
- Markdown strategy refactored into focused components [#33]
- Hierarchical metadata with intelligent section analysis [#33]
- Split level detection based on document structure [#33]
- Boundary detection using tokenizer for word/token boundaries [#33]
Added
Qdrant-loader-core
- Comprehensive integration tests for strategy consistency [#33]
0.4.14 - 2025-07-13
Fixed
Qdrant-loader-core
- Regex error in Excel table detection:
bad character range |-\s [#33]
- Large Excel tables treated as single massive chunks [#33]
- Token limit warnings for large Excel chunks [#33]
Changed
Qdrant-loader-core
- Logical unit management with intelligent splitting at line boundaries [#33]
- Efficient chunking for large Excel files [#33]
- Error handling with better error messages [#33]
- Table structure preservation during chunking [#33]
0.4.13 - 2025-07-11
Added
Qdrant-loader-core
- Sheet-aware sectioning for Excel files (split on H2 headers) [#33]
- Table-aware chunking with specialized
_split_excel_sheet_content method [#33]
- Intelligent content detection based on
original_file_type metadata [#33]
- 3 test cases for Excel chunking scenarios [#33]
Changed
Qdrant-loader-core
- Excel-to-markdown chunking in MarkdownChunkingStrategy [#33]
- Context-aware splitting with different header level thresholds [#33]
- Metadata tracking with
is_excel_sheet field [#33]
- Table boundary preservation in chunking [#33]
0.4.12 - 2025-07-10
Fixed
Qdrant-loader-core
- Missing chunk overlap in MarkdownChunkingStrategy [#33]
Added
Qdrant-loader-core
- Intelligent overlap calculation using paragraph/sentence boundaries [#33]
- Comprehensive overlap testing [#33]
Changed
Qdrant-loader-core
- Overlap configuration support (0 for no overlap, up to 25% for context) [1f53556]
0.4.11 - 2025-07-10
Fixed
Qdrant-loader-core
- File size detection limits for larger documents [6160435]
- MarkdownChunkingStrategy not respecting
chunk_size configuration [6160435]
- Unique chunk ID generation (chunks had identical IDs causing overwrites) [6160435]
Added
Qdrant-loader-core
max_chunks_per_document configuration parameter [6160435]
Changed
Qdrant-loader-core
- Chunk count management with configurable limits [6160435]
- Error messages with actionable configuration advice [6160435]
- Section limits now dynamic (50% of max_chunks_per_document) [6160435]
Removed
Qdrant-loader-core
- Conflicting
max_document_size parameter [6160435]
0.4.10 - 2025-06-18
Fixed
Qdrant-loader
- Duplicate debug logging with
[DEBUG] [DEBUG] tags [c72a872]
- Mixed path separators in Windows log output [c72a872]
- .txt file processing when
file_types: [] was empty [c72a872]
Qdrant-loader-core
- Windows file URL parsing for LocalFile connector [c72a872]
- Git connector document URL generation with Windows paths [c72a872]
Changed
Qdrant-loader
- Logging verbosity control for third-party libraries [c72a872]
- Emoji handling for Windows console [c72a872]
- SQLite logs now suppressed [c72a872]
Qdrant-loader-core
- Path normalization across all connectors [c72a872]
- Timeout handling (threading on Windows, signals on Unix) [c72a872]
Added
Qdrant-loader
- 38 Windows compatibility test cases [c72a872]
0.4.9 - 2025-06-18
Fixed
Qdrant-loader-core
- Missing
content_type="md" field in _create_deleted_document method [430cb2a]
0.4.8 - 2025-06-17
Fixed
Qdrant-loader-core
- Windows file URL parsing in LocalFile Connector [b60e6e0]
- Git Connector document URL generation with Windows paths [b60e6e0]
- File conversion timeout handling for cross-platform [b60e6e0]
- MarkItDown Windows signal compatibility [b60e6e0]
Qdrant-loader
- Console emoji handling for Windows [b60e6e0]
- Duplicate log level display [b60e6e0]
Added
Qdrant-loader
- 38 Windows compatibility test cases [b60e6e0]
0.4.7 - 2025-06-09
Fixed
Qdrant-loader
- Upgrade instructions to include
qdrant-loader-mcp-server package [fecc0dc]
Qdrant-loader-core
- Branch display logic to default to ‘main’ when unknown [fecc0dc]
Changed
Qdrant-loader
- Configuration template with detailed comments [fecc0dc]
- Release script with automatic RELEASE_NOTES.md validation [fecc0dc]
Qdrant-loader-core
- Logging in PublicDocsConnector [fecc0dc]
0.4.6 - 2025-06-03
Added
Qdrant-loader
- Automatic update notifications when new versions available [3604f92]
- Non-intrusive background version checking [3604f92]
0.4.5 - 2025-06-03
Fixed
Qdrant-loader
- Version detection using
importlib.metadata.version() [#25]
Qdrant-loader-core
- Circular imports in config → connectors → config cycle [#25]
Changed
Qdrant-loader
- CLI startup time reduced by 60-67% for basic commands [#24]
--help: ~6.8s → 2.33s (66% improvement)
--version: ~6.3s → 2.57s (59% improvement)
- Lazy loading for heavy modules (96-97% import time reduction) [#25]
Added
Qdrant-loader-core
- Warning capture system for Excel file processing [#25]
- Structured logging for openpyxl warnings [#25]
- Smart detection for “Data Validation” and “Conditional Formatting” warnings [#25]
- Summary reporting for unsupported Excel features [#25]
0.4.4 - 2025-06-03
Fixed
Qdrant-loader-core
- File conversion initialization with missing
set_file_conversion_config calls [#21]
- Converted files using wrong chunking strategy [#21]
- NLP processing skipped for converted files [#21]
- MarkdownChunkingStrategy infinite loops with very long words [#21]
Qdrant-loader
- ResourceManager cleanup causing workers to exit prematurely [#21]
Added
Qdrant-loader-core
- Safety limits:
MAX_CHUNKS_PER_SECTION = 100 and MAX_CHUNKS_PER_DOCUMENT = 500 [#21]
- Handling for words longer than
max_size [#21]
- Comprehensive tests for converted file NLP processing [#21]
Changed
Qdrant-loader-core
- Strategy selection based on conversion status [#21]
- Metadata propagation for converted files [#21]
MAX_CHUNKS_TO_PROCESS increased from 100 to 1000 chunks [#21]
- Large document handling (up to ~1000KB text limit) [#21]
Qdrant-loader
- Change detection for incremental updates [#21]
- Signal handling for graceful shutdown [#21]