# Changelog All notable changes to YAMS (Yet Another Memory System) will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - [SourceHut](https://sr.ht/~trvon/yams/): https://sr.ht/~trvon/yams/ ## Archived Changelogs - 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.0-pre] - 2025-09-21 ### Highlights - These changes reduce CPU spikes observed in profiles for large greps and remove blocking storage scans from interactive status paths. Post-ingest work is intentionally bounded; processing may take longer, but overall system responsiveness improves. - Stability: resolved connection timeouts under multi-agent load by removing the hard 100-connection cap and deriving a dynamic accept limit. Defaults honor `YAMS_MAX_ACTIVE_CONN` or compute a safe cap from CPU cores and IO concurrency. - Throughput: added tuning profiles (efficient | balanced | aggressive). Profiles modulate pool growth, IO thresholds, and post-ingest workers. Default is `balanced`. - Indexing UX: Add/ingest returns fast; post‑ingest queue handles FTS/embeddings/KG in the background. Path‑series versioning (Phase 1) is on by default behind an env flag. ### Added - Tuning profiles selectable via config or env: - Config: `yams config set tuning.profile ` - Env: `YAMS_TUNING_PROFILE=` - Config defaults now include `[tuning] profile = "balanced"`. - Docs: `docs/admin/tuning_profiles.md` covering profiles, envs, and observability. - Versioning (Phase 1): path‑series lineage with `VersionOf` edges and metadata flags `version`, `is_latest`, `series_key`. Duplicate (same hash) re‑ingest does not create a new version; alternate locations and timestamps are updated. ### Changed - **Build System** - The primary build system has been migrated from CMake to Meson. All build, test, and packaging scripts have been updated to use the new Meson-based workflow. - Status/Stats (CLI): use daemon metrics by default and never trigger local storage scans. - `yams status` and `yams stats -v` now render from the same non-detailed daemon snapshot; removed the "scanning storage..." spinner and filesystem walks. - Verbose output formats the JSON fields instead of performing extra scans. - Tools/Stats (yams-tools): `tools/yams-tools/src/commands/stats_command.cpp` refactored to prefer daemon-first metrics with a legacy local fallback only if daemon is unavailable. - MCP add_directory: switched to daemon-first ingestion with a brief readiness wait to avoid "Content store not available" races. Removes local store preflight; maps NotInitialized to a clear, retryable message from the daemon. - MCP search: path normalization + optional diff parity with CLI. - New request field `include_diff` adds a structured `diff` block to results when the `path_pattern` points to a local file; mirrors `yams search` diff behavior. - MCPSearch DTOs extended to round-trip `include_diff`, `diff`, and `local_input_file`. - Daemon accept scaling: removed fixed cap; now dynamically computes `maxConnections` from `recommendedThreads * ioConnPerThread * 4` (min 256) unless `YAMS_MAX_ACTIVE_CONN` is set. - Backpressure: increased default read pause to 10ms to smooth heavy load. - Post‑ingest: preserves bounded capacity; de‑dupes inflight, indexes FTS, updates fuzzy index, and emits KG nodes/edges best‑effort. - Status/Stats: JSON correctness improvements; omit misleading savings when physical size unknown; surface post‑ingest bus usage and document counters. ### Fixed - Many tuning optimizations for daemon usage - Grep pipeline: staged KG → metadata → content with caps and budget. - Prefers "hot" text (metadata-extracted) and caps cold CAS reads; early path/include filters. - Added a global time budget (internal) to stop long content scans gracefully. - Capped grep worker threads to a small, background-friendly number by default (≤4). - Grep streaming optimization: replaced per-character streambuf overflow with bulk line splitting (memchr-based) to eliminate the per-byte hotspot in profiles during CAS streaming. - Post-ingest queue: bounded by configuration, not CPU heuristics. - Default worker threads set conservatively to 1 unless configured in `[tuning]` as `post_ingest_threads`. Queue capacity now honored from `post_ingest_queue_max`. - Added a tiny yield between tasks to reduce contention and smooth CPU. - Addressed intermittent CLI timeouts and “Broken pipe” logs observed when many agents connected concurrently. Accept loop backoff now respects the higher connection cap and IO pool growth from the tuning manager. - Minor unit test fixes (Result value handling) to unblock CI.