Changelog Archive: v0.5.x Series¶
[v0.5.9] - 2025-08-29¶
Added¶
- Daemon Repair Coordinator (FSM-driven) enabled by default when daemon is running
- Performs idle-only embedding repair using existing repair utilities
- New daemon repair metrics in StateComponent:
- repairIdleTicks, repairBusyTicks, repairBatchesAttempted, repairEmbeddingsGenerated, repairEmbeddingsSkipped, repairFailedOperations
- IPC streaming persistence
- Removed unsolicited end-of-stream heartbeat frame that could poison next response
- Fixed message framing hang under certain pooled flows; reduced over-eager retries
- MCP server alignment with pooled client API
- Corrected DaemonClientPool::acquire() usage (Result
→ Lease)
Known Issues¶
- Pooled reuse immediately after a streaming response can intermittently see “Connection closed by daemon” on follow-up unary calls (e.g., list/ping).
Changed¶
- Coordinator ownership/lifecycle: now a YamsDaemon member started in start() and stopped before IPC/services teardown in stop() for safe shutdown
Fixed¶
- Regressions in CLI / MCP tooling
- AddressSanitizer heap-use-after-free in IPC tests caused by coordinator thread outliving daemon members; resolved by proper ownership and shutdown ordering
- Readiness flags and lightweight observability counters for repair gating
- IPC/Streaming & Pooling
- Connection FSM guardrails with legal transitions for streaming and normalization
- Header-first streaming responses with chunked transfer; persistent sockets supported
- Client: pre-header reconnect-once (timeout/EOF/reset) and inter-chunk inactivity deadlines
- Time-to-first-byte (TTFB) metric and response timing hooks
- Streaming enabled for search, list, grep, and add document paths
[v0.5.8] - 2025-08-29¶
Fixed¶
- Release workflow: replaced invalid fromJSON() usage for matrix runner selection with direct
matrix.runs_onreference. - Docker workflow: stabilized ARM64 build by moving from macOS runner (no Docker daemon) to ubuntu-latest with QEMU emulation; added early
docker infochecks for both arches.
Changed¶
- Docker: standardized multi-arch build steps (QEMU + Buildx) and ensured consistent labels/tags across architectures.
[v0.5.7] - 2025-08-2¶
Known Issues¶
- Daemon Pool connection issues for updated streaming commands (search, grep, list)
- Search will return with backup, but grep will not
Added¶
- Implemented tinyfsm-based state machine for connection lifecycle management
- Added per-connection FSM adapter (
yams::ipc::ConnectionFsm) with clean state transitions - Vendored tinyfsm under
third_party/tinyfsm/with MIT license compliance - Added comprehensive state machine documentation and integration guide
- Groundwork for PBI-006
- Shared qualifier parser: inline query qualifiers (lines:, pages:, section:, selector:, name:, ext:, mime:) with quotes and spaces supported.
- Hybrid search normalization: qualifiers are stripped from scoring text and passed as structured hints to engines.
- Lines-range scoped snippets in hybrid engine: when
lines:is specified, result snippets are sliced to requested line windows. - Integrated PDF content extraction into search, cat, get. This will evolve into a plugin system to support custom file type search from stored files.
- Introduced daemon pooled request pattern across MCP/CLI boundaries.
- Lightweight
daemon_firstwrapper in CLI that usesDaemonClient::call<T>to preserve daemon-first behavior while commands migrate to pooled execution.
Changed¶
- Daemon Client/Server Pipeline Refactor
- AsyncSocket Simplification: Replaced complex generation-based tracking with tinyfsm state machine
- Removed atomic generation counters and complex mutex operations
- Implemented clean state transitions: Disconnected → Connecting → Connected → ReadingHeader → ReadingPayload → WritingHeader → StreamingChunks → Error/Closed
- Eliminated race conditions in socket lifecycle management
- Reduced memory footprint and improved debuggability
- DaemonClient Pipeline Consolidation: Unified timeout and request handling
- Consolidated timeout configuration (removed scattered env vars + config mixing)
- Single
PipelineConfigstruct with clear precedence rules - Streamlined request execution with
execute<T>()template method - Centralized send_message/receive_message helpers
- Improved error context with operation details
- AsyncIpcServer Threading Cleanup: Simplified thread pool management
- Clear separation between IO threads and worker threads
- Improved lifecycle management and resource cleanup
- Better thread naming and monitoring capabilities
- Cleaned up build system and devcontainer
- Hybrid/metadata parity: name/ext/mime qualifiers are honored across engines
- Hybrid: mapped to
vector::SearchFilter.metadata_filtersand enforced by both vector and keyword paths. - Metadata fallback: qualifiers merged into service filters (pathPattern, extension, mimeType) so behavior matches hybrid.
- MCPServer constructor simplified to
(std::unique_ptr<ITransport>, std::atomic<bool>*); serve command and yams-mcp tool updated to STDIO-only transport. daemon_helpersgeneralized to accept generic callables (lambdas) instead ofstd::function, improving template deduction and avoiding copies.
Fixed¶
- Search service: hash-prefix path used the wrong local variable; corrected to ensure path/type filters are applied correctly.
- Metadata search: removed references to non-existent request fields and unified name filtering via path pattern.
- MCP tools/call responses were not rendered by some clients due to missing MCP content wrapper. Non-MCP-shaped tool results are now wrapped in a top-level content array.
- search: paths_only results could be empty; fixed to return service-provided paths.
- list: limit and offset were not wired from MCP -> services; pagination is now honored.
- Protocol alignment: removed non-existent fields from daemon
SearchRequestmapping and explicitly cast similarity todouble. - Error handling: replaced non-existent
ErrorCode::UnavailablewithErrorCode::NetworkError. - Type mapping:
DeleteRequestnow maps toDeleteResponsein response traits. - Duplicates: removed duplicate
clientInfo_/negotiatedProtocolVersion_members and the extrahandleUpdateMetadatadefinition in MCP. - Linking: integrated daemon IPC implementation into
yams_mcpand linkedZLIB::ZLIB(CRC32) to resolveAsyncSocket/ConnectionPooland checksum undefined symbols. - Windows CI job fix (this will be a process)
- Release build fix for artfact upload on partial success
Notes¶
- CLI migration to pooled requests will proceed per-command; the temporary
daemon_firstwrapper keeps commands working until each is switched to the pooled manager.
[v0.5.6] - 2025-08-24¶
CI version bump - Release formatting fix
[v0.5.5] - 2025-08-24¶
CI version bump - Releases now generate regardless of build failures
Fixed¶
- Grep supports semantics search using embeddings
[v0.5.4] - 2025-08-24¶
Fixed¶
- Resolved MCP tool listing error
- Added mutex imports for macos x86 ci builds
[v0.5.3] - 2025-08-24¶
CI version bump
[v0.5.2] - 2025-08-24¶
Changed¶
- Release workflow: made Linux validation build non-blocking in release pipeline to allow packaging and publishing artifacts even if validation step fails. Validation failures are surfaced in job logs and summary but no longer block artifact creation.
Fixed¶
- Linux build: guarded macOS-specific Mach headers in RequestDispatcher with APPLE and added Linux-friendly memory/CPU sampling using /proc, fixing fatal includes on Linux targets.
[v0.5.1] - 2025-08-24¶
Known Issues¶
- Daemon connection exhaustion: running many concurrent yams processes (e.g., find -exec yams add …) can hit the default max_connections=100 and cause rejections. Mitigation: prefer recursive/batched commands or cap concurrency (e.g., xargs -P 4). Consider raising max_connections for CI.
- Regex alternation in yams search: search currently treats queries as keyword/FTS; compound regex expressions (e.g., A|B) aren’t supported there yet. Use yams grep for regex, or await a future –regex mode in search.
[v0.5.0] - 2025-08-22¶
Added¶
- Service-Based Architecture
- Complete app services layer implementation (
app/services/*.cpp) - Service factory pattern with centralized AppContext management
- RequestDispatcher Service Integration
- All daemon handlers migrated to use app services exclusively
- Complete feature parity between CLI and daemon operations
- Enhanced protocol mapping with proper field alignment
- SearchCommand Service Migration
- Tag filtering support with
--tagsand--match-all-tagsoptions - Comma-separated tag parsing with whitespace trimming
- Complete daemon_first pattern implementation with local fallback
- IndexingService Integration
- All document ingestion centralized through IndexingService
- Eliminated direct IndexingPipeline calls from CLI commands
- Directory recursion uses IndexingService::addDirectory() for consistency
- Embedding lifecycle managed exclusively by Indexin Service
- Auto-Repair for Vector Embeddings
- Daemon automatically generates missing embeddings when documents are added (hot-load behavior)
- New
enableAutoRepairconfiguration flag in DaemonConfig (default: true) - Background repair thread processes queued documents in batches
- Automatic detection and repair during semantic search operations
- Shared repair utility (
yams/repair/embedding_repair_util.h) for CLI and daemon use - Vector Index Persistence
- Implemented
saveIndex()andloadIndex()methods for VectorIndexManager - Binary serialization format for index state and metadata
- Automatic index saving on daemon shutdown
- Vector Management
- Implemented
removeVector()method for single vector deletion - Support for removing vectors from both flat and HNSW indices
- HNSW Index Support
- Complete implementation of Hierarchical Navigable Small World index
- Configurable M and ef_construction parameters
- Efficient approximate nearest neighbor search
- Improved Daemon Lifecycle Management
- New daemon instances now automatically kill existing daemons on startup
- Prevents resource conflicts and stale daemon processes
- Ensures clean daemon state for each new session
- Note: Older YAMS versions require manual daemon termination before upgrading
- Service-Based Test Architecture
- New comprehensive service layer tests:
IndexingService,DocumentService, andSearchService - Modern content handler tests using Universal Content Handler System (
pdf_content_handler_test.cpp) - CMakeLists.txt structure for organized test building and discovery
Fixed¶
- Service Interface Field Mapping
- Fixed field name mismatches between daemon protocols and service interfaces
- Corrected
lineNumbersvsshowLineNumbersmapping in RequestDispatcher, MCP server, and SearchCommand - Resolved compilation errors from protocol field alignment issues
- Fixed RequestDispatcher handlers to properly map request fields to service parameters
- Vector Index Persistence Deadlock
- Fixed critical mutex deadlock in VectorIndexManager loadIndex() method
- IndexPersistence test no longer hangs indefinitely during deserialization
- Fixed deadlock by properly releasing mutex before calling initialize()
- Added robust error checking for stream operations during serialization/deserialization
- Enhanced data validation with sanity checks for corrupted data
- Vector index save/load functionality now works correctly
- Model Loading Performance
- Removed unnecessary async wrappers causing 15+ minute timeouts
- Model loading now completes in seconds instead of timing out
- Fixed deadlock issues in OnnxModelPool initialization