yams/CHANGELOG.md

5.1 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.11] - Unreleased

Performance

  • IPC latency reduced from ~8-28ms to ~2-5ms per request:
    • Connection pool now reuses idle connections
    • Replaced polling loop with async timer signaling
    • Request-type-aware timeouts (5s/30s/120s for fast/medium/slow ops)
    • Status retry delays reduced from 750ms to 175ms
    • Config parsing cached per-process
    • Async semaphore for connection slots
  • Post-ingest throughput improvements:
    • Dedicated worker pool for binary entity extraction to avoid starving metadata/KG work
    • Post-ingest pollers drain queues with adaptive backoff instead of fixed 25-50ms sleeps
    • Queue capacity honors configured post-ingest limits
    • Post-ingest enqueue avoids long blocking backoff when queue is full
    • Directory ingest batches post-ingest enqueues to reduce per-file overhead

Fixed

  • CLI now rejects multiple top-level subcommands (e.g., yams search graph) and suggests using --query when a search term matches a command.
  • Fixed --paths-only search returning no results: pathsOnly is now a CLI-only display option rather than being sent to the daemon, which was causing the search service to return paths in a different field that the daemon didn't read.
  • Session watch auto-ingest now always ignores .git contents, even when not present in .gitignore.
  • yams watch now waits for the daemon to report ready before enabling auto-ingest (configurable timeout).
  • Indexing skips known build artifacts and package dependency/cache paths based on magic number prune categories.
  • Expanded magic-number prune patterns for build output directories and language-specific caches (e.g., build/dist/target/.next/.pytest_cache).
  • Doctor prune now advertises the git-artifacts category in CLI help/docs.
  • Prune category detection now uses full file paths so git artifacts are detected.
  • Doctor prune now shows a spinner while waiting for long-running daemon operations.
  • Fixed ONNX model loading deadlock (EDEADLK code=36) on Windows:
    • ServiceManager now syncs embeddingModelName_ from PluginManager during model provider adoption, enabling proper startup preload paths.
    • ONNX plugin uses single-flight pattern to prevent concurrent model loading.
    • Changed OnnxModelPool to use std::recursive_mutex to work around Windows-specific issue with std::mutex/std::condition_variable interaction.
  • Download CLI now attempts daemon-first execution (when simple options are used) and falls back to local services on failure, reducing lock contention.
  • Streaming responses now use a 30-second chunk timeout by default to prevent hangs when processing stalls. Previously disabled (0ms default).
  • Streaming backpressure: when queue overflows, the producer loop now stops immediately instead of continuing to generate chunks that can't be sent.
  • Add command now returns immediately for file paths instead of blocking on hash computation. Hash is computed asynchronously during ingestion.
  • Replaced experimental boost::asio channel APIs with stable async_initiate pattern in DatabaseManager, ServiceManager, SearchEngineManager, and init_utils. This addresses TSAN data races in experimental channel implementations.
  • Replaced experimental awaitable_operators (operator||) with stable async_initiate pattern in request_handler, SocketServer, daemon client files (asio_connection, asio_transport, asio_connection_pool, daemon_client). Completes removal of all experimental boost::asio APIs.
  • Fixed experimental::as_tuple → stable as_tuple in request_handler.

Added

  • MCP graph tool for knowledge graph queries (parity with CLI yams graph).
  • Snapshot-scoped graph version nodes with canonical roots and observed_as edges.
  • Graph prune policy (configurable daemon.graph_prune) to keep latest snapshot versions.
  • Integration coverage for snapshot versioning + pruning in EntityGraphService tests.
  • Graph: file/path → symbol contains edges to improve dead-code analysis.
  • Graph CLI: --dead-code-report to emit scoped isolated-node reports (src/include allowlist).
  • Download CLI: progress streaming (human/json) via DownloadService callbacks.
  • Benchmarks: ingestion throughput baseline config and repeatable workflow docs.
  • Symbol-aware search ranking: symbol definitions now rank higher than usages in search results. Configurable via YAMS_SYMBOL_WEIGHT env var (default 0.15).
  • Zig language support in symbol extractor plugin: functions, structs/enums/unions, fields, imports, and call expressions are now extracted from .zig files.