yams/CHANGELOG.md

88 lines
5.1 KiB
Markdown

# 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.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.