5.9 KiB
5.9 KiB
Changelog
All notable changes to YAMS (Yet Another Memory System) will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Archived Changelogs
- v0.7.x archive: docs/changelogs/v0.7.md
- v0.6.x archive: docs/changelogs/v0.6.md
- v0.5.x archive: docs/changelogs/v0.5.md
- v0.4.x archive: docs/changelogs/v0.4.md
- v0.3.x archive: docs/changelogs/v0.3.md
- v0.2.x archive: docs/changelogs/v0.2.md
- v0.1.x archive: docs/changelogs/v0.1.md
[v0.7.9] - Unreleased
Added
- Path Tree Repair: New
yams repair --path-treecommand to rebuild path tree index for documents added before the feature was implemented- Automatic background repair task runs after daemon reaches Ready state with no degraded subsystems
- FSM-based scheduling waits for optimal system load before starting repair scan
- Added metadata-only
RepairManagerconstructor for path tree operations
- Tag and Metadata Search: Search engine now supports tag-based and metadata attribute search as fusion components
- New
queryTags()component finds documents by tags with AND/OR matching - New
queryMetadata()component matches documents by mimeType, extension, and modified time filters - Results are fused with other search components (FTS5, vector, path tree, etc.) using weighted scoring
- Added
SearchParams.tags,matchAllTags,mimeType,extension,modifiedAfter,modifiedBeforefields - Configurable weights:
tagWeight(default 0.10) andmetadataWeight(default 0.05)
- New
- Session Tree Integration: SessionService now uses path tree index for efficient document queries
- New
getTreeBranch()method returns tree node info with child segments for a path prefix - New
getDocumentsFromTree()method queries documents usingfindDocumentsByPathTreePrefix() warm()now uses tree-based queries instead of pattern matching for faster materialization
- New
Removed
- TUI/Browse Interface: Removed FTXUI-based terminal UI components in preparation for Flutter mobile application
- Removed
src/cli/tui/directory and all TUI source files - Removed
include/yams/cli/tui/directory and TUI headers - Removed browse command (
src/cli/commands/browse_command.cpp) - Removed FTXUI dependencies from build system
- Updated command registry and CLI help to remove browse references
- Removed
Fixed
- Tree Command: Fixed "Metadata repository unavailable" error by ensuring storage initialization before accessing metadata
- Path tree now properly populated during document ingestion via
upsertPathTreeForDocument()
- Path tree now properly populated during document ingestion via
- List Command: Fixed
--name "*.md"glob patterns being incorrectly treated as file paths- Patterns starting with
*or?now correctly handled as glob patterns instead of literal filenames
- Patterns starting with
- Windows Support
- Thread Safety: Fixed critical race conditions detected by ThreadSanitizer (TSan)
- Fixed AsioConnection destructor race by properly canceling and closing sockets before destruction
- Fixed RepairCoordinator access race by adding mutex protection around all accesses from TuningManager callbacks
- Added mutex synchronization for RepairCoordinator lifecycle (creation, access, destruction)
- Enabled ThreadSanitizer by default for Debug builds to catch race conditions early
- Streaming Response Hang: Fixed coroutine race condition and idle timeout bypass causing streaming requests to hang
- Streaming requests would timeout after connection went idle due to writer_drain not completing properly
- Root cause 1:
enqueue_framecoroutine suspension between flag check and flag set allowed multiple writers to start - Root cause 2: Connections with in-flight requests bypassed idle timeout, staying open indefinitely (105+ minutes observed)
- Solution 1: Created synchronous
enqueue_frame_sync()that setswriter_running_flag atomically before suspension - Solution 2: Close idle connections even with in-flight requests - if client stopped reading, requests are stuck anyway
- Added comprehensive test suite (
writer_drain_test.cpp) with 5 integration tests validating the fix - Files:
src/daemon/ipc/request_handler.cpp,include/yams/daemon/ipc/request_handler.h
- Document Retrieval: Fixed "Document not found" error when multiple instances of a document exist
yams get --namenow returns the most recently indexed document by default when multiple matches exist- Added
--oldestflag support to retrieve the oldest indexed version instead - Updated
resolveNameToHashto accept disambiguation strategy parameter - Non-blocking for LLM usage - always returns a result without requiring manual selection
- Snapshot Creation: Fixed "File found in index but not in any snapshot" error
- Simplified snapshot logic to always create snapshots on every ingestion
- Removed conditional 24-hour check that prevented snapshot creation for existing documents
- All documents now properly tracked in version history via
yams list <filename>
- Connection Pool Reliability: Simplified connection lifecycle management following daemon-managed best practices
- Removed all client-side staleness prediction logic (
is_stale(), age-based checks, peek logic) - Daemon now fully controls connection lifecycle via idle timeout (6 seconds)
- Client pool simplified to only remove expired weak_ptrs, no health prediction
- Read loop starts immediately on connection creation for proper request/response flow
- Client reacts to natural I/O errors with automatic retry instead of trying to predict failures
- Removed synchronization complexity (
read_loop_readyflag and polling)
- Removed all client-side staleness prediction logic (
Changed
- Build System: Removed
enable-tuibuild option from meson_options.txt - Developer Experience: ThreadSanitizer now enabled by default in Debug builds via setup.sh