Skip to main content

Changelog

1.35.0 (2026-07-08)​

🧠 Code intelligence​

  • Ruby call-graph navigation (get_callers/find_callers) now resolves calls dispatched through a shared abstract method invoked via self β€” including the common two-hop ClassName.call -> new.call service-object delegation pattern β€” instead of returning no results for these call sites.

⚑ Indexing & performance​

  • Incremental reindexing now updates git-derived file signals (age, churn, ownership) incrementally instead of re-scanning the full git history on every run, including on repositories with rebased or merged branch history β€” making incremental reindexes on large repos noticeably faster.
  • Indexing no longer stalls the whole run while computing git blame on repositories with deep file histories β€” blame is now computed off the main thread, with a new tunable concurrency knob for large monorepos.

πŸ›  CLI & workflow​

  • Setup now asks which git history engine to use for indexing β€” the standard git CLI or a faster in-process alternative (recommended automatically for very large repositories) β€” configurable per project via a new GIT_ADAPTER setting, and tune reports which engine is active.
  • tea-rags tune --project now saves the performance settings it measures directly into the project's configuration, so future indexing runs pick them up automatically instead of requiring the generated .env file to be copied in by hand.
  • The CLI indexing progress display now reports code-graph write progress instead of appearing to stall near the end of a run.

🩹 Fixes​

  • Code intelligence results (e.g. get_callers) could silently miss up to 255 files' symbols after a full reindex β€” the call graph now captures every file's symbols instead of dropping a batch's remainder.
  • Call-graph results for Ruby code no longer include meaningless noise entries from call chains rooted in external libraries.
  • Indexing very large repositories no longer risks running out of memory during git-history enrichment β€” concurrent batches previously each triggered their own full git-history scan, and a hidden concurrency floor ignored lower concurrency settings meant to bound memory use.
  • Indexing large repositories no longer fails with a false timeout while scanning git history β€” the timeout now resets on activity instead of capping total duration, so long-but-alive scans (including ones with a single giant commit) complete instead of being killed.
  • The embedded Qdrant daemon now self-heals when a previous interrupted reindex leaves behind a corrupted collection, instead of permanently failing to start.
  • tea-rags tune --project now works on projects using the embedded Qdrant daemon β€” previously it failed immediately, either erroring while the daemon was still starting up or misresolving the embedded connection address.
  • CLI indexing commands now wait for the embedded Qdrant daemon to finish recovering after a restart instead of failing immediately, and --json output now reports the actual error instead of exiting silently with no output.
  • A reindex run with no environment variables set now reproduces the project's last configured indexing settings instead of silently falling back to code defaults.
  • Incremental reindexing now automatically cleans up leftover data from previous interrupted full reindexes, instead of it accumulating until the next successful one.
  • Interrupting an indexing run (Ctrl-C) now fully stops its git subprocesses instead of leaving orphaned git processes running in the background.

πŸ”§ Environment Variables​

  • GIT_ADAPTER Β· Selects the git history engine used for indexing: the standard git CLI or a faster in-process es-git library (auto-recommended for very large repositories) Β· default: git (new)
  • TRAJECTORY_GIT_BLAME_POOL_SIZE Β· Number of worker threads used to compute git blame off the main thread during indexing Β· default: min(4, cpus - 1) (new)
  • TRAJECTORY_GIT_CHUNK_CONCURRENCY Β· Number of concurrent git-blame operations during chunk-level enrichment; a hidden floor that kept this at a minimum of 10 was removed, so lower values are now honored Β· default: 10 (changed)
  • TRAJECTORY_GIT_LOG_TIMEOUT_MS Β· Now an inactivity window that resets on any output, instead of a hard cap on the total duration of the bulk git-history scan Β· default: 60000 (changed)

1.34.1 (2026-07-04)​

🩹 Fixes​

  • Indexing no longer crashes if the git process behind it exits unexpectedly mid-scan

1.34.0 (2026-07-04)​

🧠 Code intelligence​

  • Ruby call-graph resolution now narrows ambiguous, duck-typed method calls using call-site evidence β€” argument count, keyword arguments, block usage, and literal receiver types β€” so calls that previously fanned out to dozens of unrelated methods now resolve to far fewer, more precise targets; navigation tools (get_callers/get_callees) also hide the low-confidence leftovers.
  • Ruby call-graph resolution now follows self-sends inside class bodies and callbacks, methods defined via included concerns/modules, super across module hierarchies, namespaced and inherited classes, and Sidekiq/ActiveJob-style enqueue dispatch β€” call sites that previously resolved to nothing (or to the wrong same-named method elsewhere) now resolve correctly.
  • An ambiguous method call reachable from hundreds of classes is now capped and tracked as its own category instead of flooding the call graph with hundreds of thousands of low-value edges, and fan-in/importance rankings are weighted by resolution confidence so ambiguous calls no longer manufacture fake 'most-connected' methods.
  • Ruby dynamic-dispatch resolution now also narrows candidates by which classes are actually instantiated elsewhere in the codebase, not just structurally reachable ones β€” another layer of precision for ambiguous method calls.
  • Rails framework conventions β€” Sidekiq/ActiveJob enqueueing, callbacks, enum, AASM state machines, Concern class methods, Pundit policies, routing, and caching β€” are now modeled as real call-graph edges instead of being invisible to code navigation.
  • The code-graph daemon now temporarily raises its own memory ceiling during large bulk-index writes to avoid running out of memory, and automatically restarts itself after tea-rags is upgraded instead of silently continuing to serve results from the old version.
  • get_callers can now optionally include ambiguous dynamic-dispatch call sites that might reach a target method, on request, without cluttering the default result set.

⚑ Indexing & performance​

  • The vector index now uses 8x quantization (TurboQuant) by default for a smaller on-disk footprint β€” new collections are created with it, existing collections auto-migrate on startup, indexing shows migration progress, and search results are automatically rescored so accuracy is unaffected.
  • A new low-memory mode keeps the embedded Qdrant index on disk instead of in RAM for memory-constrained machines, plus an optional strict memory ceiling and search-batch-size cap to prevent Qdrant from running out of memory.
  • Indexing now marks a stalled enrichment stage as failed after 15 minutes of no progress instead of showing 'in progress' forever, so status reporting reflects reality and a fresh reindex can recover.
  • CLI reindexing and the session digest now automatically pick up the same performance-tuning settings the MCP server used when a project was first indexed, instead of silently falling back to defaults in a fresh shell.

πŸ—£ Language support​

  • Ruby/Rails DSL detection (Sidekiq, CarrierWave, AASM, state_machines, PaperTrail, Geocoder, dry-rb, Chewy, ActiveModelSerializers, and more) now activates per project based on the gems actually declared in its Gemfile, instead of applying every framework's rules to every Ruby project β€” fewer false call-graph edges from gems a project doesn't use.
  • Ruby type inference now follows memoized (||=) instance-variable and local-variable assignments, relation-to-collection conversions, element access on identifiers, and a fuller set of ActiveRecord finder/query methods β€” more accurate types mean more call-graph targets resolve correctly.
  • Ruby type inference now types instance variables assigned from a parameter, local variable, or association chain, and follows YARD @param documentation to seed Const.new call chains as typed instances.
  • Rails database migration and data scripts (db/migrate, db/data) are now excluded from Ruby call-graph analysis, so they no longer count as unresolved code and skew code-intelligence results for a project.
  • The README and docs now show a generated, always-accurate language support matrix β€” per-language code-intelligence and test-tooling capabilities β€” instead of a hand-maintained table that could drift from what's actually shipped.

πŸ›  CLI & workflow​

  • get_index_status now reports the index's on-disk size, vector quantization mode, and the running Qdrant server version.
  • tea-rags now requires Qdrant 1.18.2 or newer; an older external Qdrant server is rejected at startup with a clear error instead of failing unpredictably, and the embedded daemon auto-updates to the required version.
  • Worktree index lifecycle is now explicit and visible: creating a worktree clones its index, each completed task step reindexes it, and merging or abandoning the branch automatically tears the clone down β€” replacing the previous implicit auto-reindex-on-commit behavior.
  • The session-start digest now shows a one-line summary of which embedding, Qdrant, and codegraph settings are actually active for a project.

🩹 Fixes​

  • Fixed several Ruby call-graph resolution bugs: namespaced base classes and included concerns weren't matched correctly (so self-sends inside them silently failed to resolve), a namespaced method could incorrectly match a same-named method in an unrelated class, a compact class declaration (class A::B::C) could fabricate a nonexistent external base class, destructured or multiple-assignment local variables were mistaken for method calls, and a method marked private via private :name after its definition was incorrectly treated as public.
  • Fixed find_symbol returning no results for Rails DSL-defined symbols (scope, has_many, delegate) even though they were reachable through code navigation.
  • Fixed find_symbol on a large method split into multiple chunks returning several conflicting results instead of one merged definition.
  • Fixed YARD @param type parsing to also support the bracket-first form (``@param [Type] name) used by Rails/mastodon-style docs, so more instance-variable types resolve correctly.
  • Fixed indexing aborting entirely on a brief Ollama outage mid-run β€” indexing now retries with backoff and survives transient unavailability instead of losing all progress.
  • Fixed the embedded Qdrant daemon continuing to serve the old version indefinitely after a binary auto-upgrade β€” the stale daemon is now restarted.
  • Fixed indexing failing with 'Qdrant is not reachable' for older projects after the embedded Qdrant daemon restarted on a new port.
  • Fixed indexing status getting stuck showing an enrichment stage as crashed even after it had already recovered on a later reindex.
  • Fixed reported index disk size being several times too large, or missing entirely, by counting actual disk usage instead of preallocated space.
  • Fixed indexing from a worktree clone, or from a fresh shell, sometimes crashing or connecting to the wrong Qdrant instance by correctly inheriting embedded-Qdrant connection settings.

πŸ”§ Environment Variables​

  • QDRANT_TURBO_QUANT Β· Enables 8x vector quantization (TurboQuant) to shrink the on-disk index while search results are automatically rescored to preserve accuracy Β· default: true (new)
  • CODEGRAPH_DB_MEMORY_LIMIT_MAX Β· Ceiling the code-graph daemon may temporarily raise its memory limit to during large bulk-index write bursts Β· default: 4GB (new)
  • QDRANT_LOW_MEMORY Β· Forces the embedded Qdrant daemon to keep vectors and payloads on disk instead of in RAM, for memory-constrained machines Β· default: false (new)
  • QDRANT_MAX_RESIDENT_MEMORY_PERCENT Β· Optional strict-mode ceiling on Qdrant's resident memory usage, to guard against out-of-memory crashes Β· default: unset (guard off) (new)
  • QDRANT_SEARCH_MAX_BATCHSIZE Β· Optional cap on the number of vectors a single search batch may process Β· default: unset (no cap) (new)
  • EMBEDDING_TUNE_UNAVAILABLE_RETRY_MAX_WAIT_MS Β· Maximum time indexing keeps retrying embedding calls through a transient Ollama outage before giving up Β· default: 240000 (4 minutes) (new)
  • EMBEDDING_TUNE_UNAVAILABLE_RETRY_BASE_DELAY_MS Β· Base backoff delay between embedding retry attempts during an Ollama outage Β· default: 2000 (new)
  • ENRICHMENT_STALL_DEADLINE_MS Β· How long an enrichment stage may report no progress before indexing status marks it failed (and eligible for recovery on the next reindex) Β· default: 900000 (15 minutes) (new)
  • TEA_RAGS_CODEGRAPH_BUILD_FINGERPRINT Β· Overrides the build fingerprint the codegraph daemon and client exchange to detect a stale daemon after an upgrade Β· default: derived automatically from module path, version, and mtime (new)
  • TRAJECTORY_GIT_CHUNK_CONCURRENCY Β· Git chunk-churn walk concurrency; a configured value below the built-in default is now ignored, so this env var can only raise concurrency, never silently lower it Β· default: 10 (changed)

1.33.0 (2026-06-26)​

api​

  • index-codebase --name registers a project alias before forking the worker, aborting with typed text or JSON errors on validation failure (28d142f, 51e7cfb)
  • worktree create/list/remove/info methods exposed on App (c7a0125)

cli​

  • project exist command for registry membership guard (7dcc41f)
  • worktree create/list/remove/info command group (2239d32)

contracts​

  • RubyTypeRef and type-source interfaces added to contracts; ivarTypes and structuredReturnTypes added to CallContext for the type-propagation engine (3a5abcf, 4c373ba)
  • member-aware external classification for AR-core members added to ExternalVocabulary (41a6703)

dinopowers​

  • finishing-branch flow updated with post-merge cleanup step: worktree remove via CLI and hook-driven reindex (89e156d)

factory​

  • CollectionFootprintFactory and WorktreeOps wired into App bootstrap (3be7169)

ingest​

  • fix: gitignore whitelist patterns correctly descend into subdirectories when directory entries are probed with a trailing slash (90d8bd8)

maintenance​

  • worktree maintenance domain: footprint kernel, artifact clone methods, registry provenance fields, and transactional WorktreeOps create-saga with provenance-guarded remove (6cc22ec, 02607b2, 252900d, 6fec406)
  • fix: worktree saga correctness: collection collision guard before clone, rollback of git worktree and cloned artifacts on saga failure, codegraph clone by physical version, and cloneDatabase target dir guard (17f90ff, e22b2ec, ccdf57d, 38a0dbd)

mcp​

  • reindex_changes MCP tool removed; index_codebase auto-detects changed files and performs incremental updates (961af5a)

pipeline​

  • fix: WorkerDispatchPool.dispatch bounded by per-worker liveness timeout with automatic worker respawn on expiry, preventing pool wedge from hung tree-sitter workers (103a7ea)

qdrant​

  • QdrantManager gains createSnapshot, recoverFromSnapshot, and deleteSnapshot for collection clone via snapshot-recover lifecycle (db4b6e2)
  • fix: snapshot create and recover failures throw typed QdrantOperationError instead of plain Error (10310d3)

tea-rags​

  • post-commit and post-merge auto-reindex hook registered as PostToolUse:Bash trigger (dfc4a48, 48b1061)
  • fix: auto-reindex hook reads canonical .tool_response payload key, fixing dead success/failure guard that caused reindex on every git commit including failures (111fb11)

trajectory​

  • Ruby receiver type-propagation engine resolves types through single- and multi-hop call chains via TypeFactStore with source precedence and union/container normalization (20d6d31, e4b476f, 9d03b86, 39c9d7e, 72adc4d, d14795a)
  • union receiver types fan out to typed members; container receivers propagate element type through blocks and index access; exotic YARD tags (@type, @!attribute, @option) contribute type facts (176dff6, 8d48950, d4cff93)
  • ActiveRecord core instance-member vocabulary identifies AR members as external, suppressing spurious dynamic fan-out on untyped receivers (2a3ae9f, 66c57b4)
  • fix: YARD @return facts scoped to enclosing class; @!attribute-owned @return no longer leaks to the next unrelated method (a913793, a400d8f)
  • fix: structuredReturnTypes and ivarTypes wired from TypeFactStore into resolve-time CallContext, activating the precise multi-hop type-propagation paths (b796f89)
  • fix: Ruby call resolution precision: inherited method ancestor walk when class file unresolved, core/gem-typed receivers classified external, singleton-class mixin ancestors populated, runtime-hook super classified external without fabrication, bare-call prefers instance form, typeable chain receivers deferred to chainType strategy (7803390, 29f7359, 5706cab, d3b0623, d601b6f, ec6fcfa)

1.32.0 (2026-06-24)​

trajectory​

  • inProjectEdgeRecall replaces resolveSuccessRate as the always-on completeness metric in get_index_status (resolveSuccessRate is now DEBUG-only) (2039ece)
  • CHA cone devirtualization for Ruby and Python: polymorphic dispatch fans out to overriding subtypes (241a560, 3a0034a, f036350)
  • class hierarchy edges persisted and normalized per file as substrate for CHA and blast-radius queries (83b3320, eb31405)
  • Ruby @ivar field type inference: constructor-assigned types collected and fed into receiver resolution (90036e7, 978ec6a, af0a4fc)
  • Ruby return-type binding resolution: method body return types resolve subsequent call receivers (e5b650c, 0f26fb5, 570174a)
  • Ruby receiver type inference for ActiveRecord association chains, block params, and class-valued vars (increment B) (64f6f93, 7a61733, ee2f1e2, 9b97fb7, 9b0fb95)
  • Ruby DSL/dynamic/YARD resolution and poly-base edge expansion via per-framework vocabulary registry (fd5a3b7, cef11a4, 3456e28, 954db08)
  • index-access receivers (arr[k].method) classified as external and suppressed from dynamic dispatch fan-out (73fa33f, c21fc94, 47ac9bd)
  • dynamic send(var) counted as unresolvable instead of a resolver miss, keeping the denominator honest (f70ae96, 046c5bb)
  • registry-literal dispatch: CONST[k].new.method edges resolved for Ruby dispatch-table idioms (1a01fca)
  • dynamic receiver kind split into ivar/chain/index sub-buckets for targeted precision measurement (f0b50e0)
  • external-library and gem calls excluded from codegraph resolve rate (fcef101)
  • symbolβ†’covering-chunk ID stored on cg_symbols so find_symbol can locate collapsed-class methods via two-hop fallback (acabb67, e4ce2d3, 3beb400, 0fd66bb)
  • prepended modules walked in Ruby self/super MRO resolution (70b10e5)
  • Ruby accessor methods synthesized for attribute/attachments/class_attribute/store_accessor macros (29eb2d1, 5ecc572)
  • per-receiver-kind resolve instrumentation with method edge_kind and confidence persisted to cg_run_stats (58cc525, 70af7e8, df00c27)
  • fix: explicit self.<member> calls now resolve via enclosing-class MRO walk (4a1248e)
  • fix: CHA cone hierarchy snapshot threaded into resolve context β€” cone dispatch was producing zero edges in production (9dfe811)
  • fix: increment B receiver-type sets pruned of merge/.to_h/.to_json false positives (a418e6e)
  • fix: extractOneFile materializes AST after parse for deterministic incremental codegraph path (d743780)

ingest​

  • poison-pill quarantine: files that crash indexing are isolated, retried on reindex, and their count surfaced in get_index_status (0a7b04c, a7928f1, 6e4570b)
  • embed-phase quarantine isolation: oversized or rejected chunks no longer abort the entire embedding pass (791c499)
  • index-codebase CLI command with live progress streaming and enrichment waiting (355c472)
  • filesCount populated from the persisted distinct-paths stat in get_index_status (e8b1533)
  • fix: quarantine durability across snapshot swaps and reindex retry path corrected (3 bugs found by live MCP test) (9d4dce5)
  • fix: clear_index removes quarantine and stats sibling files so stale quarantines do not persist (f94e1c0)
  • fix: codegraphEnabled persisted in project registry so tea-rags prime applies the correct signal set (249863b)
  • fix: enrichment progress bars use correct denominator and unit (chunks vs files) across all phases (ab36584, 6c3f479, ca7a189, 5a65f7e, ca2f336, ac25994, 641bc40)

cli​

  • live progress bars for index-codebase β€” embedding and enrichment phases with per-phase timing, ETA, and --json output (6e35dfe, eb4c81b, 16c19ac, 446e47e)
  • tea-rags doctor --quarantine renders quarantine list as a human table or --json for agent triage (21a101d)
  • fix: progress bar ETA uses observed throughput rate; bars freeze on completion; --json mode keeps stdout clean (272356b, 275ddba, a70183f, add671b)
  • fix: index size reports actual disk usage (blocksΓ—512) and resolves versioned Qdrant collection paths correctly (5c89e76, 0ef3d59)

codegraph​

  • chunker workers feed FileExtraction to codegraph β€” one parse serves both chunk storage and call-graph extraction (64a2785, 25c8418)
  • TypeScript CHA cone-dispatch engine wired (TSConeTypeLocator) for polymorphic TS call resolution (8657fcc)
  • per-language grain for cg_run_stats resolve summary (3727cd1)
  • position-aware localBindings and Ruby RHS expansion for flow-sensitive type inference (5e707d0)
  • fix: deterministic resolve metrics: run-state reset, cross-batch dedup, per-collection serialization, and spill ordering all corrected (8a9c592, bfba7e9, b1c1d3a, 2b20110, d2563d2)

chunker​

  • chunker workers run as child processes β€” process-isolated tree-sitter parsing eliminates parallel parse corruption (1f3c029, 7022b7e, 60d2cd1, 1ff870a)
  • Ruby walker emits inheritance edges with full kind parity (super/include/extend/prepend) with per-kind ordinals (7db0b24)
  • TS walker captures class extends, implements, and interface-extends into unified inheritanceEdges (47766ed)
  • fix: AST materialized eagerly after parse for deterministic walker extraction (rdv7d root cause resolved) (bbe75bb, e66135d, f906fb8)

explore​

  • find_symbol resolves collapsed-class methods via two-hop codegraph fallback (symbol_id β†’ chunk_id β†’ getPoint) (3c607ad, 1c06c37)

rerank​

  • codegraph composites and graph tools (get_callers, get_callees, find_cycles, blast-radius) integrated across plugin skills (97a0da3)
  • fix: codegraph nested-symbols payload shape resolved in raw signal paths so adaptive bounds are now active (213abeb)
  • fix: similarity min-max normalized per result batch so preset weights calibrate consistently across tools (f6342b1)

signals​

  • percent display-format hint on prime signal thresholds (codegraph.chunk.pageRank, git.*.bugFixRate) (9b4d2dc)
  • fix: FanOutPerLineSignal denominator uses the real chunk line span instead of a phantom payload field (766922a)
  • fix: squash-mode chunk bugFixRate counts fix sessions (not raw commits), keeping the rate in [0, 100] (7486a26)
  • fix: KnowledgeSiloSignal uses piecewise-linear scoring for blended contributor counts (61e5b00)
  • fix: PathRiskSignal matches path tokens instead of raw substrings, eliminating false positives on common words (8fe01df)

api​

  • codegraphResolve gains exactEdgeRatio edge-kind breakdown and per-receiver-kind inProjectEdgeRecall in get_index_status (f018e95, 167d850)
  • IndexStatus extended with indexSizeBytes, enrichmentMetrics, and projectName fields (8cb1586)

mcp​

  • tea-rags:report-issue skill guides users through filing GitHub issues with mandatory known-issue dedup (91edb07)
  • per-receiver-kind resolve breakdown added to get_index_status (DEBUG-gated) (42bb424)

contracts​

  • ExternalVocabulary interface and generic ExternalCallClassifier engine for cross-language external-call classification (18fa4b1)
  • AstNode type and materializeTree eager single-pass boundary primitive (aa7253c)
  • hierarchy graph types: HierarchyView, InheritanceEdge, InheritanceKind, HierarchySnapshot (8b8d058)
  • SymbolChunkResolver and GraphFacade.resolveSymbolChunk for symbol-to-chunk lookup (fab7c01, 532ba33)
  • fix: withReadHandle close behavior reverted; resolveSymbolChunk test mock corrected (e72cb1f)

adapters​

  • hierarchy read queries: getSubtypes, getSupertypes, transitive CTE, bulk snapshot, and inheritance edge persistence (0f60f88, 63c3fe4)

pipeline​

  • pluggable WorkerTransport interface with ThreadTransport and ProcessTransport implementations (f912b2f, 3636f5a)

embedding​

  • primary and fallback ollama endpoints probed and surfaced independently in prime digest (59593a2)

config​

  • chunker pool default restored to min(4, cpus-1) now that process isolation makes parallel parsing safe (f190873)

migration​

  • cg_symbols_inheritance table with bidirectional reverse indexes for class hierarchy edges (3e252fa)

language​

  • ActiveRecord association and scope declares added to Rails DSL module (single source for chunker and codegraph) (64086d7)

infra​

  • MapHierarchyView: in-memory sync bidirectional view over hierarchy snapshot with MRO-ordered traversal (6ea3aa3)

presets​

  • fix: dead chunkChurn weight removed from file-level securityAudit and ownership presets where it always scored zero (1f2631a)

1.31.1 (2026-06-06)​

ci​

  • fix: release changelog workflow uses headless claude CLI to support release event triggers (2453abe)

1.31.0 (2026-06-06)​

ci​

  • post-release workflow generates declarative changelogs grouped by domain, with fix: markers, release date headers, and dual-format rendering (b54076c)

1.30.0 (2026-06-06)​

api​

  • trace_path tool β€” bounded-frontier BFS that traces execution paths between two symbols, with DTOs, MCP registration (gated by codegraph.symbols), codegraph-disabled fallback, batch payload hydration, and a config-driven curated rerank preset (022cb50, 859734c, cb74047, 8ac8a1c, 063c679, b3a17f7, 12b008c, 5c962af, 0977346)
  • fix: pass exact limit to trace_path step hydration (fd63ee7)

codegraph​

  • TypeScript same-file symbol resolution pass added to the resolver chain (position 8) (2c6dcd9, 57396a3)
  • Ruby file- and chunk-level graph edges from zeitwerk constants, registry constant-literals, and delegate ... to: targets (82a375b, 6fc24de, 1f786ec)

rerank​

  • annotate-only mode (reorder:false) attaches ranking overlays while preserving the input order (7a7db0d)

mcp​

  • pathPattern scope filter for find_cycles (266cd3c)

cli​

  • colored informative table for tea-rags projects (0a16095)

prime​

  • fix: default prime path to cwd when no path/project is given (d35f137)

skills​

  • 4 codegraph sub-patterns added to tea-rags:explore, plus a project auto-registration step in the setup wizard (771ecb8, d5e71d3)

1.29.0 (2026-06-05)​

config​

  • Codegraph enrichment is now opt-in (beta), disabled by default (d654c3f)
  • ESLint dependency-direction guard enforces the full layer-direction matrix (3ca1f7f)

ingest​

  • Policy-skipped files are reported as ignoredFiles, separate from missedFiles (9ca0f07)
  • Per-file enrichment policy: files with scope=none are excluded from file-level enrichment, chunk-churn is skipped for non-full scopes, and an enrichmentScope helper bridges classification with shouldEnrich (b075d56, b534c2c, 727b8ff)
  • fix: Enrichment policy is honored on backfill, recovery, and the unenriched count (7e49de6)
  • fix: Pre-reindex recovery is awaited so degraded markers clear before the run (f507414)
  • fix: Enrichment writes are retried with residual backfill and aligned unenriched filters (605ca82)
  • fix: Heartbeat covers the full enrichment tail β€” applier apply-site, git chunk-churn drain, post-embedding enrichment, and deferred codegraph β€” so long enrichment is no longer false-flagged as stalled (db88bb1, 9be7401, 97f3805, 5c3e428)
  • fix: Git enrichment runs inline in-process, reverting the worker-pool affinity path that was slower live (42a53a5)
  • fix: matchedFiles counts unique paths instead of double-counting across enrichment passes (17a72cb)
  • fix: Chunk-enrichment duration is reported as wall-clock per run, resetting each run instead of accumulating across the daemon lifetime (41f9a14, 08b1440)
  • fix: Git enrichment is pinned per-collection to restore blame/churn reuse (a8d2ec4)
  • fix: Enrichment markers are terminal-only with runId staleness tracking (a93e3db)
  • fix: Codegraph daemon is kept alive across the whole index run (fbc2aeb)
  • fix: Stateless work no longer steals an affinity-pinned ThreadPool thread (6fe3490)
  • fix: Per-provider enrichment is decoupled so all four enrichment kinds run in parallel (01be8a6)
  • fix: Codegraph DuckDB files are deleted on alias-swap and Qdrant orphan-collection cleanup, sweeping ancient orphans (263573d, 0117819)
  • fix: Non-serializable concurrencySemaphore is stripped before crossing into the enrichment worker (4cf30a7)
  • fix: Reindex version is derived from Qdrant rather than the snapshot (f45a424)
  • fix: Ollama health probe is retried before a fatal abort (566fa8f)
  • Unified enrichment worker pool: WorkerPoolEnrichmentExecutor with affinity routing and release is the production default, with a worker entry/protocol carrying a provider cache and a releaseCollection seam, wiring workerDescriptor for git and codegraph providers (bbeba70, 5f61b11, 88e1d9a, 603d142, 11cfb61)
  • Streaming per-batch enrichment with no prefetch gate: deferred-provider extraction is driven in streaming, unmatched files are stamped, and codegraph chunk enrichment is deferred (e2b44ab, bba7673)

trajectory​

  • shouldEnrich policy: codegraph treats generated and test files as none; git treats generated as none and docs as file-only (80c6e5c, 2bf832b)
  • Codegraph enrichment supports a worker-pool seam with onRelease, and a git provider factory produces a serializable GitWorkerConfig (0afa57a, 6f914fc)
  • Codegraph streaming extraction with file-only finalizeSignals and a leak fix, plus git streamFileBatch with empty finalizeSignals (b1f6228, cee85b1)

infra​

  • File-classification single source of truth via classify() (64b28ff)

contracts​

  • FileClassification, EnrichmentScope, and shouldEnrich are part of the contract surface (012a686)
  • EnrichmentProvider gains worker-pool lifecycle (WorkerEnrichmentDescriptor, onRelease, releaseCollection inline no-op) and streaming hooks (streamFileBatch, finalizeSignals) (11cfb61, 8d37a12, 88c6cb3)
  • Per-language capability interfaces and a LanguageChunkClassifier capability with ChunkDecision, plus SymbolIdComposer and language-domain kernel (2b94e17, 6503d32, f82cbec)

api​

  • api/public is widened into the single consumer facade for core access (77d79ab)

language​

  • A real LanguageFactory replaces the legacy adapter map; the dormant legacyAdapter is introduced and later removed (951e3a0)

registry​

  • fix: Prime registry-first override propagates to the embedding factory (56e9757)
  • fix: Embedding endpoints are tracked and both URLs surface in the prime digest (42f445e)
  • fix: Stale project aliases are detected and the alias is renamed on re-register (63d9be2)

hooks​

  • fix: Full tool_input is preserved in Agent PreToolUse updatedInput (a48b7de)

chunker​

  • Ruby DSL catalogue provides a single class-body declaration vocabulary, deriving chunk groups; static symbols are emitted for macros inside class << self singleton_class (2a938a8, 1912126, 2d0189a)
  • Language-agnostic ChunkClassifier: JS and Go chunk classifiers (with Receiver#Method via goSymbolOf) sit behind a shared LanguageChunkClassifier capability (53441d4, 58cfadc)
  • fix: Object.defineProperty getters/setters are extracted in the JS walker (d04eb56)
  • fix: Abstract class methods are extracted as chunks (8d26612)

codegraph​

  • DuckDB daemon as the default write path: wire protocol with newline-JSON framing, request dispatch with daemon-side graph analysis, socket proxy, mode-aware GraphDbClientPool acquireRead/acquireWrite, READ_ONLY access mode, bootstrap wiring with spawn-on-demand, and finalizeReindex deletes superseded version DBs after alias swap (d709727, 4a97b24, 7d15dda, b9bc374, 9b4a81b, 4f5d81f, fb07c3e, e2804e3, 877c175, be57cba, d60573b)
  • fix: Daemon releases its DuckDB lock on idle (per-collection client cache + bounded shutdown) and proxies the full GraphDbClient surface (getCallers/getCallees/findCycles) ensuring the daemon is up on reads (4bb5e77, 4464ad8, 43c624c)
  • fix: Per-collection symbolTable is cached in the daemon write path (a32b553)
  • fix: Graph read path resolves the alias to the active versioned collection (baf6ecf)
  • Multi-target dispatch resolves through lookup tables (d60573b, 44b29a5)
  • fix: Same-file bound-type method resolves correctly on cross-file type-name collision (5ae7cec)
  • Cross-language call resolution: Python inherited methods via base-class walk, self.field cross-method calls and stdlib external targets; Go var/receiver/local-var types and function-return-bound vars; Java parameter/field/local-var types and java.lang static auto-import; Rust localBindings and struct field types; TS named import specifiers and typed function parameters (df2e19b, 959725e, 608e28e, e8fda06, 7ed1afa, 18027ff, b33d239, 6d6c4ab, 743171f, 5ab7d75, 2b37bd7)
  • Codegraph trajectory is wired into validation, overlay, dampening, metrics, and projection, with stats.labels, connectionCount, and instability confidence; payload signals are exposed via typed filter params and get_callers/get_callees/find_cycles accept project/collection params (3427f9e, fcb0261, 973620c, dbdec9e)
  • fix: Bare payload inner keys are written and Qdrant payload indexes created so codegraph filter paths resolve, with isHub computed against collection p95 at index time (772b6fb, 078778a, 8337b13)
  • fix: Derived signals are read from the nested Qdrant payload shape (34f886a)

qdrant​

  • fix: Embedded daemon is re-resolved on reconnect instead of attach-only (8222198)

git​

  • fix: Blame fields are owned-copied and blameByRelPath is released after chunk enrichment (4cf151f)

adapters​

  • Codegraph daemon lifecycle: paths, file refcount, and idle watcher (7d15dda)
  • fix: Per-collection symbolTable is cached in the daemon write path (a32b553)

duckdb​

  • fix: Write-connection memory_limit is capped (default 2GB) with verification that it applied (ab85e67)

explore​

  • fix: find_symbol outline preserves the codegraph section and perLanguage stats (ae55b29)

1.28.0 (2026-05-24)​

codegraph​

  • Cross-language call graph extraction with polyglot walkers for TypeScript, JavaScript, Python, Ruby (Zeitwerk-aware), Go, Java, Rust, and Bash, plus a universal entryPoint composite (fc44110, 15b2dde, 9e73e14, 1e48a37)
  • Ruby resolver understands inheritance and mixin walks, DSL macros (attr_*, AR associations, send/&block, delegate, habtm, define_method), class << self class methods, and local type tracking via constructors, AR finders, and YARD; Rails db/schema.rb excluded from the graph (84544fc, 25165c5, 5d80031, 6061115, 3170ec4, 61e03f2)
  • Per-collection DB pool, streaming NDJSON spill, layered ignore handling, and Python type inference (e8d96a5)
  • Symbol graph persisted to DuckDB with lazy hydration, backed by an in-memory GlobalSymbolTable and a SymbolsTrajectory with L1 family factory (9eb3a84, f2b2002, 7160efe)
  • TypeScript CallResolver resolves calls through tsconfig path mapping (9e73e14)
  • find_cycles MCP tool detects cyclic dependencies via Tarjan SCC over file and method graphs (0968694)
  • PageRank method-graph signal exposed via the cg_symbols_metrics table (d87f45c)
  • transitiveImpact file signal computed through depth-capped reverse BFS (0b8b7a1)
  • Seven codegraph derived signals plus a blastRadius preset for graph-aware reranking (f29cce9)
  • CodegraphEnrichmentProvider produces file and chunk signals into the enrichment sink (ec1c75d)
  • Codegraph wired end-to-end with env-driven CODEGRAPH_ENABLED through composition and bootstrap (4dfa101)
  • fix: Go methods are qualified and unsafe short-name fallbacks dropped in the Go and Java resolvers (14a31a0)
  • fix: classFieldTypes and classAncestors stored as Record (not Map) so they survive NDJSON spill (8d417ee, 53620c7, fd472f0)
  • fix: Zeitwerk dispatch prefers Class.method over Class#method, walks ancestors for Class.method calls, and matches qualified type names against the scope tail (f19ee51, a02d49e, 24ffb0e)
  • fix: classAncestors aggregated globally across all files in the pass-1 to pass-2 transition (0c16cf8)
  • fix: End-to-end live MCP codegraph integration on tea-rags with chunk metric rename (886cc4e)
  • Comprehensive multi-language corner-case fixes across JS, Python, Go, Java, and Rust (7476636)

chunker​

  • TypeScript extraction walker emits file-level symbols (1e48a37)

sync​

  • File deletions routed through EnrichmentCoordinator before reaching Qdrant, with a handleDeletedPaths hook on EnrichmentProvider and coordinator dispatch (3cd0bab, d32ea83)

api​

  • Codegraph slice 1 exposed through App methods, a GraphFacade, and MCP tools (be952e3)

presets​

  • Composite trajectory preset namespace with D4 overrides and an architecturalHub preset for codegraph-aware reranking; blastRadius moved into it (ec6db7c, 6156b6c)

metrics​

  • Per-provider EnrichmentMetrics including codegraph extraction stats (7d4cafb)

adapters​

  • DuckDB graph adapter with a migration runner and cg_symbols schema (d22edce)

skills​

  • fix: DSL test-chunker language list corrected to include Ruby (f943ae7)

1.27.0 (2026-05-19)​

tea-rags​

  • The extract-project-patterns recipe skill surfaces battle-tested reference code as templates via a three-level locality cascade (cc88140)

rerank​

  • The ProvenPreset ranking strategy is now available to the find_similar tool (e992ebd)

1.26.0 (2026-05-17)​

chunker​

  • TypeScript test-spec files are split into per-spec searchable chunks via a dedicated test DSL chunking hook, with an orchestrator claim invariant ensuring each node is captured exactly once (577e1f5)

tea-rags​

  • Test specs are available as first-class generation context through a tests-as-context skill and DSL test-chunk integration (6dbeb1a)
  • fix: Spec-extraction recipe resolves examples through semantic_search instead of find_symbol, returning the intended chunks (14aa725)

skills​

  • Agents can invoke dedicated filter-building and analytics-rerank skills directly (999d810)

api​

  • fix: The path argument is optional for search_code and index_codebase, and the fs.watch-based test is no longer flaky (0dde42b)

hooks​

  • fix: The plugin-version-bump check is skipped on merge commits, so merges no longer fail the hook (2724330)

tests​

  • fix: Git-filter and limit assertion drifts plus embedded-Qdrant cascade and smoke-run drifts are resolved; the suite is green (98d814f, a8dd218)

1.25.1 (2026-05-15)​

scripts​

  • fix: Changelog generation escapes curly braces so the output is safe to render as MDX (84d4b2d)

website​

  • fix: The documentation site builds successfully again after the 1.25.0 release (db27a3d)

1.25.0 (2026-05-15)​

project registry​

  • A named-alias project registry lets every project-aware tool and CLI command target an indexed codebase by short alias instead of an absolute path (c44c9e4, 3a5cd53, e7d0397, 0c79cc8, 7f004e3, a6f4d83, fdf85d1, d4ae2b1, 73f726d, bb05095, 4ed4d12)
  • MCP exposes register_project, unregister_project, and list_projects tools, with project marked as the RECOMMENDED way to address a codebase across tool descriptions (4c4da0a, 7147f0e, 6d59ff2, 5eb2389, 2fc456c)
  • A tea-rags projects command group manages aliases: register, list, orphans, and unregister --purge, replacing the former flat project-* commands (8dbc43a, ac84fa2, 35ae60c, ed52ec9)
  • A tea-rags doctor command reports registry health and can recover the registry from Qdrant, surfacing orphans, realpath divergence, and missing-on-disk projects (bf92a3e, da99ae7, 2df7a9f)
  • CollectionRegistry persists atomically with inode+mtime CAS merge-on-write, rejects malformed entries, backs up corrupt files, and runs through a migration framework (e7d0397, 3a5cd53, 3235ca4, fdf2c7c, cfafc57)
  • The registry cache invalidates via fs.watch on the data directory, kept live by a watcher started in the MCP server bootstrap context (0e515fe, 828b4d9)
  • Shell tab-completion resolves --project alias values (bash/zsh), with fish completion auto-installed via postinstall when fish is detected (5a0082b, 0f161d1)
  • Typed validation errors cover project registry input, including ProjectPathMissingError, a shared PROJECT_NAME_RE constant, and RegistryConcurrencyError (0c79cc8, f61e9d7, d84180e)
  • fix: Registry orphan detection excludes aliased physical collections and aligns the doctor orphan count with the projects orphans alias filter (5a0a1c7, da5ea1f)
  • fix: register_project recovers teaRagsVersion and indexedAt from the indexing-marker, and enrichment reads embeddingModel from the marker rather than a random chunk (9268dd8, 24b9310)

signals​

  • Signals carry a unified SignalConfidence declaration (with ConfidenceClampRule) that drives both score dampening and confidence-aware label resolution through the reranker, with bugFixRate opting in (9384f65, 51fe043, e888558, 3af8695)
  • Percentile thresholds for confidence resolve lazily at rerank time, recomputing only the specific missing percentiles, backed by percentilesToCompute and validateSignalDependencies (fa080a1, 80490ce)
  • fix: BugFixSignal dampening keeps adaptive-percentile precedence over the static floor (acac56c)
  • fix: Sibling support values for confidence clamping are read from the raw payload (c781803)

api​

  • The embedded Qdrant daemon auto-spawns when no Qdrant URL is provided, and register_project takes a rename-only fast path that skips Qdrant for already-populated entries (c5ef73f, 620df09)

cli​

  • fix: Tab-completion fires correctly through the yargs fallback-fn protocol with per-option file completion and suppressed noise on --name register (b36333b, 5b5d26b)

1.24.0 (2026-05-12)​

cli​

  • tea-rags update subcommand auto-updates the installed package, checking the npm registry for newer versions and surfacing available updates in the prime digest (005b388, fa8913e, bdba841, 6665896, fb73433, 55c4b79, 1c7a4f7, 5269984, a563a9b)
  • tea-rags prime produces a session digest covering indexing status, schema drift, polyglot detection, signal thresholds, infra-health, enrichment, stale-index warnings, file count, and embedding model (5fd5557, 10b9cfb, 545cb61, 853673d, 9e7c1c4, 3ac46f9, 6a1da1e, 06724dd, 90df058)
  • fix: tea-rags update forces postinstall to run so the updated package is fully provisioned (b3e1e46)
  • fix: Embedded Qdrant port is discovered via daemon.port, fixing connection in prime when the port is non-default (63de71e)

hybrid​

  • Hybrid search uses server-side RRF fusion in Qdrant, combining dense and sparse results in a single query instead of client-side merging (b05b71f)

plugin​

  • /tea-rags:prime slash command is available and the prime digest autofires on SessionStart and PreCompact (2002097, 7d7fad6)

dinopowers​

  • An Index Freshness Protocol, backed by a shared FRESHNESS.md, keeps dinopowers wrappers aware of index staleness (fbed0dc)

1.23.2 (2026-05-08)​

enrichment​

  • fix: Concurrent enrichment runs no longer corrupt each other's state: each run gets an isolated RunState container, overlapping prefetches are FIFO-serialized, and chunk-enrichment completion re-fires correctly after backfill (3789a34, b8414ec, 5a85183)

1.23.1 (2026-05-07)​

plugin​

  • fix: Plugin no longer registers type:mcp_tool hooks, which were unreliable under Opus 4.7 timing (b35170e)

1.23.0 (2026-05-07)​

⚠ BREAKING CHANGES​

  • stats: STATS_ACCUMULATOR_KEYS.AUTHOR_COUNTS / LINE_AUTHOR_COUNTS keys were renamed to RECENT_AUTHOR_COUNTS / BLAME_AUTHOR_COUNTS. Any external code referencing the old keys must be updated. Distributions DTO gains a new required field topBlameAuthors.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • presets: proven preset ranking shifts. Files where ownership and knowledgeSilo disagreed (concentrated author share with β‰₯3 contributors) no longer get penalized. Stable preset top-N also moves slightly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • signals: payload field renames break existing search queries that filter by git.file.dominantAuthor, git.file.authors, git.file.contributorCount, or git.chunk.contributorCount. Schema migration applies on next index_codebase run; agents/skills must update to the new field names. Filter params author and lineOwner removed; use recentAuthor and blameOwner.

Refs spec 2026-05-06-line-based-ownership-from-blame.md (Task 7.5).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • signals: rerank: "ownership" returns different top-N than before. Files written long ago by a now-departed author who still owns the live lines now rank as silos correctly; files only recently fix-touched no longer falsely register as concentrated. Plugin heuristics that read raw ownership values must reindex with forceReindex=true to populate lineDominantAuthor* fields.

Refs spec 2026-05-06-line-based-ownership-from-blame.md (Task 5).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Features​

  • api: expose line-based ownership in filters, stats, MCP schemas (eb6649a)
  • filters: name-or-email author match + recent-contributor range (75b1ecb)
  • git: add blame primitive for line-based ownership (807b78b)
  • plugin: auto-fire session start protocol via mcp_tool hooks (ecbbcd1), closes #26112
  • presets: add line-based ownership to overlays + recentActivityConcentration weight (68b4aa2)
  • signals: add blame ownership extractor for line-based signals (3d4bd1b)
  • signals: add line-based ownership payload schema (45f12cf)
  • signals: reorient ownership/knowledgeSilo to live-line authorship (d2ea7cc)
  • signals: wire blame ownership into chunk-level overlays (2d3f844)
  • signals: wire git blame into file-level ownership signals (b639eaf)

Improvements​

  • dinopowers: chain executing-plans into tea-rags:data-driven-generation for code-gen Tasks (48f090b)
  • presets: knowledgeSilo for proven, drop ownership from stable (9970121)

Bug Fixes​

  • enrichment: chunk-level backfill + surface marker write failures (03faeb4)
  • enrichment: re-poll unenriched count after grace period for marker (d940199)
  • enrichment: use scoped key for backfill writes (clobber prevention) (449fed2)
  • enrichment: wait for streaming work before firing onChunkEnrichmentComplete (fe7e457)
  • migration: write nested git.* keys instead of flat dot-keys in V13 (2a625cc)
  • rules: correct duplicate step 3 numbering in Session Start section (024657d)
  • signals: accumulate blameByRelPath across batched buildFileSignals calls (fdd2adf)
  • signals: process single-chunk files through chunk-level pipeline (73b7341)
  • stats: write enrichment stats under public alias + clarify author taxonomy (6ae9d83)

Documentation​

  • dinopowers,tea-rags: switch plugin skills to recent*/blame* ownership split (1fac677)
  • plan: add enrichment-coordinator split implementation plan (90d4375)
  • rules: add end-to-end verification and nested-write guidance for migrations (0400cd1)
  • spec: add enrichment-coordinator split design (7d272c6)
  • specs: add codegraph symbols sub-trajectory vertical slice 1 design (391fb49)
  • website,rules: document recent*/blame* ownership split (8ab19c2), closes #6

Code Refactoring​

  • enrichment: coordinator finalization + barrel cleanup (1059748)
  • enrichment: extract ChunkPhase with shared Semaphore + streaming dedup (3e6574c)
  • enrichment: extract CompletionRunner with explicit 7-step run (1a7489c)
  • enrichment: extract EnrichmentBackfiller; narrow applier accessors (5c21270)
  • enrichment: extract EnrichmentMarkerStore from coordinator (ca3f3c0)
  • enrichment: extract FilePhase with prefetch + per-batch apply (1ca1899)
  • enrichment: introduce ProviderContext type computed in prefetch (575beff)
  • enrichment: move runRecovery race-guard into EnrichmentRecovery.recoverAll (db36cab)
  • signals: rename ownership payload fields with semantic prefixes (85e4916)

1.22.0 (2026-05-05)​

⚠ BREAKING CHANGES​

  • dinopowers: New UserPromptSubmit hook injects routing context into every user prompt in projects with the dinopowers plugin enabled. Users who don't want this can disable the plugin or comment out the hook in plugin.json.

Benchmark: .claude-plugin/.benchmarks/dinopowers-wrappers/benchmark.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Features​

  • dinopowers: rewrite descriptions, add main-session hook, override CLAUDE.md naming (783377c)

Bug Fixes​

  • chunker: enforce hard cap on chunk size to prevent Ollama context overflow (3797b04), closes symbolId#partN
  • ingest: apply context safety factor even when user sets chunkSize (dd76155)

Code Refactoring​

  • ingest: split file/chunk marker writes in awaitCompletion (aeb992d)

1.21.0 (2026-04-24)​

⚠ BREAKING CHANGES​

  • qdrant: QdrantManager constructor 4th parameter changed from isStarting?: () =&gt; boolean to daemon?: EmbeddedDaemonProbe. Internal API only - no public DTO change.

Features​

  • adapters: add QdrantOptimizationInProgressError (2b219d7)
  • adapters: expose Qdrant status and optimizerStatus in getCollectionInfo (a4df5a7)
  • adapters: probe collection status on countPoints failure (ecdccc3)
  • config: embedded-aware delete tuning defaults (c3960b8)
  • config: introduce .qdrant-required-version + rename to EMBEDDED_QDRANT_VERSION (0b5cc18)
  • contracts: add ChunkSignalOptions with external semaphore support (94be2e4)
  • contracts: add status and optimizerStatus to CollectionInfo DTO (db74c1e)
  • contracts: surface Qdrant collection status in IndexStatus.infraHealth (86c5153)
  • infra: add async Semaphore for bounded concurrency (1964e2c)
  • ingest: DeletionOutcome tracks per-path delete success (b842029)
  • ingest: ReindexCoordinator gates upsert on delete success per file (5896815)
  • ingest: use cached pointsCount for deletion delta reporting (7fe52a7)
  • pipeline: AdaptiveBatchSizer halves upsert batch on Qdrant yellow (2fa202f)
  • pipeline: ChunkPipeline reduces upsert batch size on Qdrant yellow (d8a27ca)
  • pipeline: per-file FILE_INGESTED telemetry with top-N slow-file tracker (0a393f1)
  • pipeline: register schema v12 in SchemaMigrator (51f7c50)
  • pipeline: schema v12 migration adds enrichment payload indexes (3bc3d36)
  • pipeline: streaming chunk enrichment per-batch in coordinator (9012768)
  • qdrant: enable multi-core defaults for embedded daemon (66adad5)
  • qdrant: split embedded daemon startup errors, non-blocking spawn (146ec62)
  • qdrant: unify version constant, add external check and downgrade guard (3978b8e)
  • signals: add pair diagnostics layer for architectural interpretation (5f92166)

Bug Fixes​

  • explore: symmetrize find_symbol payload contract with semantic/hybrid (dc1a2a1)
  • ingest: gate modified-file upsert on delete success per file (7fe355d)
  • ingest: prevent stale enrichment marker overwriting current run (b09bcd1)
  • ingest: recover stale enrichment.in_progress at health-mapper read (600744d)
  • ingest: run enrichment recovery even on reindex with 0 changes (9fa596d)
  • ingest: stamp chunk-level enrichedAt for missed files, sync marker with real count (d74b09a)
  • ingest: surface per-path delete failures via DeletionOutcome (1a07d70)
  • pipeline: getIndexStatus reads from alias, not orphan _v(N+1) (3311406)

Performance Improvements​

  • qdrant: scroll+delete-by-IDs and optimizer pause for large-delta reindex (6220f86)

Documentation​

  • specs: add sub-collections cold memory design spec (4aaa873)
  • specs: implementation plans for reindex resilience and yellow handling (f3b43c2)
  • specs: qdrant yellow-status handling design (7f75745)

Code Refactoring​

  • pipeline: fix FILE_INGESTED type cast and hoist bytes computation (60fe61f)

1.20.0 (2026-04-22)​

⚠ BREAKING CHANGES​

  • config: TRAJECTORY_GIT_ENABLED default changed from false to true. Users who previously relied on the absent-env-var meaning "disabled" must now set TRAJECTORY_GIT_ENABLED=false (or CODE_ENABLE_GIT_METADATA=false) to opt out. No action needed for users already setting the variable explicitly, or for non-git directories (silently skipped either way).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Features​

  • dinopowers: add brainstorming wrapper with 3-preset risk enrichment (9eb9054)
  • dinopowers: add executing-plans wrapper with per-Task pre-touch guard (c28b28b)
  • dinopowers: add finishing-a-development-branch wrapper with branch-wide risk scan (b5ccf04)
  • dinopowers: add receiving-code-review wrapper with impact-verdict ladder (b770086)
  • dinopowers: add requesting-code-review wrapper with reviewer-context bundle (4308ecc)
  • dinopowers: add subagent routing hook, README, versioning rule entry (a3ae389)
  • dinopowers: add systematic-debugging wrapper composing with tea-rags:bug-hunt (4fd8dd9)
  • dinopowers: add test-driven-development wrapper with proven-test pattern search (c60129e)
  • dinopowers: add verification-before-completion wrapper with collateral-damage scan (0167524)
  • dinopowers: add writing-plans wrapper with per-file impact enrichment (22f675f)
  • dinopowers: scaffold plugin and add writing-skills bootstrap wrapper (52660b7)

Improvements​

  • config: enable git trajectory enrichment by default (f0a9e17)

Bug Fixes​

  • dinopowers: redirect inner superpowers:Y chain-hops to dinopowers:Y wrappers (6d8f78f)
  • embedding: detect primary Ollama death mid-session via background probe (dd4e1f0)
  • setup: correct Node version, use global tea-rags binary, auto-install Ollama on macOS (98e61cc)

Documentation​

  • add specs and plans for 3 hygiene refactorings (f2bac4b)
  • document dinopowers plugin in skills page and main README (b03ae0b)
  • explore: plan for Reranker.rerank() phase extraction (8a73803)
  • explore: spec for Reranker.rerank() phase extraction (a44741a)
  • fix superpowers attribution (obra/superpowers, not anthropic/skills) (db25657)
  • readme+website: fix "not for solo projects" β€” document GIT SESSIONS mode (906b308), closes #git-sessions
  • readme: align README with landing page, drop docker/npm clone, add plugin install (c2b366d)
  • website: fill priority empty sections + mermaid fix (00c24c0)
  • website: fill remaining extending + knowledge-base stubs (fdda285)
  • website: fill roadmap sections from beads epics (22934cc)
  • website: invert quickstart flow, fix claude mcp add syntax (028cf04)
  • website: plugin-first quickstart with manual install fallback (3c25dc6)
  • website: restructure usage/, rewrite landing, fix concept drift (3e78a34)
  • website: sync api/config/architecture/agent-integration with current signals and env vars (4a38f03), closes #9

Code Refactoring​

  • bootstrap: extract resolveInfrastructure + wireComposition from createAppContext (0fb5772)
  • chunker: extract phase methods from MarkdownChunker#chunk (2ecfc73)
  • explore: add isSimilarityOnly + groupByTop pure helpers for rerank() (ac830bf)
  • explore: collapse semantic+hybrid dispatchers, extract ctx builders (e7a60ef)
  • explore: extract ExploreOps + close the cosmetic-thinning loophole in facade-discipline (e24f107)
  • explore: extract findSimilar validation into validateFindSimilarRequest (846a52e)
  • explore: extract findSymbol into SymbolSearchStrategy + FileOutlineStrategy (cc9cb8d)
  • explore: extract getIndexMetrics into IndexMetricsQuery (c0cc189)
  • explore: extract resolveMode + scoreResults and rewrite rerank() as orchestrator (8513700), closes Reranker#resolveMode Reranker#scoreResults
  • extract phases from createAppContext and TreeSitterChunker#chunk (2f3047c)
  • ingest: complete IngestFacade under facade-discipline iter-3 (ce5e9f8)
  • ingest: decompose extractSignalValues into trajectory-owned StatsAccumulators (f8e6967)
  • ingest: extract indexCodebase branching into IndexingOps (38c9412)
  • mcp: replace 5 copy-paste registerToolSafe blocks with SEARCH_TOOLS array (7ef22c8)

1.19.1 (2026-04-10)​

Bug Fixes​

  • build: include benchmarks/ in published package (0dd332c)

1.19.0 (2026-04-06)​

Features​

  • api: add relativePath parameter to find_symbol (5ce07fa)
  • chunker: use # separator for instance methods, . for static (06fd221), closes Reranker#rerank
  • drift: add schema-v11 migration for parentName β†’ parentSymbolId rename (405e52c)
  • explore: add ChunkGrouper component (CodeChunkGrouper + DocChunkGrouper) (eb02cfd)
  • explore: chunk grouping β€” file outlines, doc TOC, #/. separator (86e0fcf), closes Class#method
  • git: add merge-branch-resolver for fix branch propagation (b5fb30e)
  • git: add offset-tracker for drift-free chunk attribution (9b2ddaf)
  • git: add parent SHAs to CommitInfo via %P in git log format (ea048e4)
  • onnx: add resolveModelInfo for runtime dimensions and context length (b1050b7)
  • pipeline: set parentName to relative path for doc chunks (e99ac33)
  • presets: add 'dangerous' composite preset for high-risk code detection (63010c9)
  • presets: add proven rerank preset for battle-tested code (faf6533)

Improvements​

  • api: expose headingPath in API responses for agent navigation (2742457)
  • dx: add mid-session reindex rule to search-cascade (7e1f84a)
  • dx: persist eval cases for chunk-grouping + enforce in optimize-skill (749de06)
  • dx: update search-cascade for chunk grouping features (e4ea7b5)
  • explore: remove members array from ChunkGrouper output (d7bda45)
  • explore: slim down ChunkGrouper payload β€” no spread, explicit fields only (3f028b4)
  • mcp: generate signal-labels resource dynamically from PayloadSignalDescriptors (26b7a98)
  • mcp: generate signal-labels resource dynamically from PayloadSignalDescriptors (657fe70)
  • signals: wire merge-branch-resolver into chunk-level bugFixRate (2ee0d25)
  • signals: wire merge-branch-resolver into file-level bugFixRate (a074915)

Bug Fixes​

  • ci: remove dead integration test step from pre-commit hook (59b338d)
  • embedding: Ollama fallback race condition and cooldown bugs (ed474f2)
  • explore: merge essential trajectory fields with overlay in metaOnly (cde0eda)
  • git: wire offset tracker into chunk-reader for drift-free attribution (e8c4d54)
  • qdrant: countPoints error wrapping and deletion filter explosion (d54a010)
  • signals: raise BugFixSignal FALLBACK_THRESHOLD from k=8 to k=10 (2f5ed3c)
  • signals: rewrite isBugFixCommit with strict classification (f880b76), closes #123
  • signals: rewrite isBugFixCommit with strict classification (01be60e), closes #123

Documentation​

  • explore: add outlineDoc strategy + chunk-grouping plan (f8a2565)
  • mcp: update find_symbol description with #/. separator convention (b82c9fc)
  • mcp: update search-guide and overview resources for chunk grouping (ebcf9fc)
  • signals: add bugFixRate accuracy implementation plan (b103683)
  • signals: update bugFixRate detection rules in website docs (24f1dfa)
  • signals: update bugFixRate plan β€” k=10, drift fix via offset tracker (fcf8d2a)
  • specs: add file-level find_symbol design spec (74a28d7)

Code Refactoring​

  • api: rename parentName β†’ parentSymbolId across codebase (227bbcb)
  • explore: integrate ChunkGrouper into resolveSymbols (178a051)
  • mcp: deduplicate search-guide β€” examples only, routing in cascade (413b03b)
  • test: split git-log-reader.test.ts into domain-specific modules (f4677c2)

1.18.0 (2026-04-01)​

Features​

  • adapters: add OllamaEmbeddings.resolveModelInfo() via /api/show (38b2da8)
  • chunker: write headingPath to markdown chunk metadata (5e7cf76)
  • drift: track navigation field in schema drift detection (5dcb0a2)
  • dto: add stripInternalFields to hide headingPath from API responses (a2c0fa5)
  • ingest: auto-detect model context and dimensions from Ollama (cd38fd0)
  • migration: schema v10 β€” purge markdown chunks for re-chunking (3d68028)
  • pipeline: generate doc symbolId hashes and navigation links (95c65cc)
  • presets: add documentationRelevance preset with auto-activation (79c81e4)
  • signals: add HeadingRelevanceSignal for markdown heading boost (1fee0e2)
  • trajectory: write navigation and headingPath to Qdrant payload (e2a9e93)
  • types: add navigation field to CodeChunk metadata (6245061)

Improvements​

  • chunker: group small h3 sections into parent h2 chunk (ec49fe0)
  • dx: optimize coverage-expander agent for tea-rags and npm scripts (8f45f3f)

Bug Fixes​

  • adapters,chunker: Ollama error taxonomy and markdown chunk splitting (d1649c5)
  • adapters: prevent mid-operation URL switching in Ollama fallback (3a60511)
  • adapters: replace OperationLock with per-operation URL snapshot in Ollama fallback (73d617e)
  • chunker: include grouped h3 headings in headingPath (51d12e4)
  • explore: move collection existence check to resolveAndGuard (5a422ae)
  • ingest: lower CHARS_PER_TOKEN from 3 to 2 for safer context cap (1e8fece)
  • migration: use mtime=0 instead of hash="" for snapshot invalidation (f831b8a)
  • pipeline: persist sparseVersion in schema metadata on fresh index (99dbc95)
  • pipeline: skip secrets detection for test files (1ba9856)
  • scripts: save tune history to ~/.tea-rags/benchmarks and show Qdrant mode (56fa223)

Documentation​

  • dx: add chunk navigation guidance to search-cascade (af875be)
  • plans: add chunk navigation implementation plan (7c5cb24)
  • plans: add Ollama model info auto-detection implementation plan (3fd1332)
  • rules: add snapshot invalidation guide to migration rules (730438b)
  • search-cascade: add documentation rerank auto-activation rule (a368c1d)
  • specs: add chunk navigation design spec (fc19cd7)
  • specs: add heading relevance boost design spec and plan (65d59d3)
  • specs: add Ollama model info auto-detection design (73c7a29)

1.17.6 (2026-03-30)​

Improvements​

  • embedding: add Ollama fallback switch observability to pipeline log (d2c4665)

Bug Fixes​

  • pipeline: self-correcting recovery guard detects stale markers (4103e1e)
  • pipeline: skip enrichment recovery when marker shows all enriched (9b21ea7)

Performance Improvements​

  • pipeline: deduplicate facade pre-checks, remove index skill subagent (d79943b)
  • pipeline: local file guard for recovery, fire-and-forget execution (ba48370)
  • pipeline: make refreshStats non-blocking for incremental reindex (6a74f30)

1.17.5 (2026-03-30)​

Improvements​

  • dx: enforce tea-rags search injection for all subagents (bede8e9)

1.17.4 (2026-03-30)​

Bug Fixes​

  • dx: resolve plugin source paths relative to repo root (910f1df)

1.17.3 (2026-03-30)​

Bug Fixes​

  • dx: use relative source paths in marketplace.json, fix ENAMETOOLONG on plugin update (eac2343)

1.17.2 (2026-03-30)​

Improvements​

  • plugin: merge research into explore, add baseline-first eval to optimize-skill (ffc6c42)
  • plugin: optimize risk-assessment skill, decouple from DDG chain (3e8c8fe)

Documentation​

  • architecture: add pattern vocabulary design spec (2e47001)

1.17.1 (2026-03-29)​

Improvements​

  • dx: add skill-creator dependency to optimize-skill, enforce marketplace version sync (08cc218)

1.17.0 (2026-03-29)​

⚠ BREAKING CHANGES​

  • ingest: IndexPipeline.indexCodebase() now throws IndexingFailedError instead of returning stats with status='failed'. MCP error handler already handles typed errors correctly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

  • ingest: IndexPipeline.indexCodebase() now throws IndexingFailedError instead of returning stats with status='failed'. MCP error handler already handles typed errors correctly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

Features​

  • api: add risk-assessment skill for multi-dimensional code health scan (ba99b7f)
  • ingest: add IndexingFailedError + wrapUnexpectedError base method (b12eff3)

Improvements​

  • plugin: optimize explore skill β€” eval-driven, fix pathPattern + codeReview bugs (ef974a0)
  • plugin: refactor search-cascade β€” modularize, skills-first, eval-driven (2f25288)
  • plugin: update risk-assessment skill (4d8df59)

Bug Fixes​

  • explore: apply pathPattern filter in findSimilar via buildMergedFilter (edf1e7b)
  • explore: propagate chunk ID through rank_chunks pipeline (0a01d0f)
  • explore: propagate must_not from pathPattern in findSymbol (3c5dd45)
  • explore: wrap Qdrant 404 as ChunkNotFoundError in find_similar (378ebaa)
  • ingest: harden risk zones β€” daemon lock, status-module codec, unified errors (ef94055)
  • ingest: unify IndexPipeline error handling, reorder alias-before-marker (65ead0a)
  • pipeline: stamp enrichedAt on chunks with no git commits (79a762d)
  • qdrant: use exact match for pathPattern with literal file paths (2a35062)

Documentation​

  • ingest: add reindexing decomposition spec and implementation plan (47a8a8b)
  • plans: add ingest risk zones hardening implementation plan (7719f9a)
  • specs: add ingest risk zones hardening design (f825eec)

1.16.0 (2026-03-29)​

⚠ BREAKING CHANGES​

  • deps: zod upgraded from v3 to v4. Users extending MCP tool schemas must use z.record(z.string(), valueSchema) instead of z.record(valueSchema). No changes needed for MCP tool consumers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

  • deps: Minimum Node.js version remains 22, but .tool-versions now defaults to 24.14.1. Users on Node 22 are unaffected. tree-sitter dependency now resolves to @artk0de/tree-sitter fork with prebuilt native binaries β€” no CXXFLAGS or compilation required.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

  • enrichment: EnrichmentInfo and ChunkEnrichmentInfo removed. IndexStatus.enrichment is now Record<string, EnrichmentProviderHealth>. IndexStatus.chunkEnrichment removed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

  • api: get_index_metrics signals format changed from Record<signalKey, SignalMetrics> to Record<language, Record<signalKey, SignalMetrics>>. Global stats are now under signals["global"]. Per-language stats under signals["typescript"] etc. Consumers must update to access signals.global instead of signals directly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

Features​

  • api: add find_symbol MCP tool β€” LSP-like symbol lookup (810eb52)
  • api: add infraHealth to get_index_status + auto-cleanup stale markers (3c13bcd)
  • api: add infraHealth to get_index_status + auto-cleanup stale markers (5e02ebd)
  • api: per-language signal statistics (e967864)
  • api: per-language signals in get_index_metrics response (7a737ea)
  • api: scoped signal metrics in get_index_metrics output (2636794)
  • chunker: add RSpec scope-centric chunking with parent setup injection (2ad5cd3)
  • chunker: add RSpec scope-centric chunking with parent setup injection (6a119a2)
  • cli: add tea-rags tune command (7d4a550)
  • contracts: add perLanguage to CollectionSignalStats type (97856a5)
  • contracts: add ScopedSignalStats type, CODE_TEST_PATHS config, and v5 cache (cbc20ef)
  • dx: add /tea-rags-setup:tune skill, remove tune scripts (8f9c073)
  • dx: add node, tea-rags, and ollama install scripts (unix) (64ae330)
  • dx: add qdrant, tune, analyze, and configure scripts (unix) (c25ccec)
  • dx: add setup progress CRUD script (unix) (b9c750a)
  • dx: add setup scripts (windows) (63aa8c6)
  • dx: add setup skill orchestrator (SKILL.md) (c812177)
  • embedded: auto-reconnect to Qdrant daemon on port change (d893617)
  • enrichment: add enrichedAt migration for existing collections (e1d2848)
  • enrichment: add enrichment health to get_index_metrics output (949be11)
  • enrichment: add EnrichmentRecovery module for unenriched chunk detection and re-enrichment (6a448ff)
  • enrichment: add health mapper with stale detection for StatusModule (f7be1c9)
  • enrichment: enrichment failure recovery with per-provider health tracking (b30f64a)
  • enrichment: per-level marker updates with heartbeat in coordinator (923b628)
  • enrichment: replace flat EnrichmentInfo with per-provider health types (f34751c)
  • enrichment: wire recovery and migration into indexing pipeline (271b4e3)
  • enrichment: write enrichedAt timestamps in applier batch payloads (3b881a3)
  • explore: add ExploreFacade.findSymbol() with scroll + resolve pipeline (19e9df4)
  • explore: add symbol-resolve.ts with merge and outline strategies (dfda4b9)
  • filters: add symbolId filter with text index and partial match (c038f2e)
  • infra: add detectScope() utility for test/source classification (57e8d1f)
  • infra: add migration framework β€” Migrator, Migration interface, types (6416a71)
  • infra: add SnapshotMigrator and snapshot migration classes (72ffee2)
  • ingest: add per-provider per-level enrichment marker types (8632769)
  • ingest: compute per-language signal statistics (bb470e7)
  • ingest: scope-aware signal stats computation (source vs test) (c63a161)
  • mcp: health-aware error interceptor with infra context (1ebb68e)
  • mcp: health-aware error interceptor with infra context (e1deef2)
  • mcp: register find_symbol tool with Zod schema (dccc9a7)
  • qdrant: add QdrantManager.scrollFiltered() for filter-based scroll (d1e2159)
  • rerank: scope-aware label resolution (source vs test thresholds) (0c91455)
  • scripts: abstract embedding provider for Ollama/ONNX support (2c48d48)
  • scripts: add --path arg and test values for new benchmark params (17573b3)
  • scripts: add benchmark functions for pipeline, qdrant gaps, and git trajectory (dc720d8)
  • scripts: add file collector for benchmark corpus (27fe55a)
  • scripts: add new params to benchmark output (5a66096)
  • scripts: benchmark expansion β€” pipeline, git trajectory, ONNX, CLI tune command (1d490c8)
  • scripts: integrate git trajectory benchmarks into tune.mjs (0e67210)
  • scripts: integrate pipeline + qdrant gap benchmarks into tune.mjs (98d20b1)

Improvements​

  • cli: add --qdrant-url, --embedding-url, --model, --provider params to tune command (918633c)
  • cli: add tune embeddings subcommand, fix provider display, remove device restrictions (cfc693a)
  • dx: add subagent tea-rags injection rule to search-cascade (99c9b54)
  • dx: add subagent tea-rags injection rule to search-cascade (54a1b8a)
  • dx: add subagent tea-rags injection rule to search-cascade (13b3c79)
  • dx: emphasize duration field in index/force-reindex skill prompts (c6310bd)
  • dx: enhance migration rule frontmatter, fix skill templates (610ef09)
  • dx: harden install wizard β€” cross-platform fixes, decompose SKILL.md (a727edd)
  • dx: inject tea-rags search rules into subagent prompts via PreToolUse hook (2368987)
  • dx: inject tea-rags search rules into subagent prompts via PreToolUse hook (3270062)
  • dx: replace configure-mcp scripts with MCP integrator agent (a5da1f0)
  • dx: require explicit user confirmation for force-reindex skill (40afa1d)
  • dx: require explicit user confirmation for force-reindex skill (c55718d)
  • dx: update skills for per-language signals format (33f7d74)
  • ingest: add 'code' (fenced blocks from markdown) to config languages (ec18c11)
  • ingest: exclude config languages (markdown, bash, json, etc.) from per-language stats (e9c33bd)
  • ingest: exclude config languages from global, hide global if mono-lang (b601fde)
  • mcp: add limit/offset to find_symbol for pagination (e8f81ec)
  • mcp: add metaOnly to find_symbol, update plugin skills (4fc6095)
  • mcp: add rerank parameter to find_symbol for ranking overlays (e0f83b9)
  • mcp: clean up TODO markers in enrichment output formatters (f2cb4be)
  • qdrant: cap scrollFiltered total results at limit parameter (215c6f2)
  • rerank: labels only for code languages in perLanguage, no global fallback (9f81f6b)

Bug Fixes​

  • api: add missing FindSymbolRequest DTO and barrel export (b41dd91)
  • benchmarks: update import paths after project restructuring (27c55d9)
  • chunker: fix RSpec scope chunking and expand signal coverage (76ac375)
  • dx: correct plugin version to 0.11.0 (3b639db)
  • embedding: add health probe before embed to fix cold-start timeout (1e9e6ed)
  • embedding: add health probe before embed to fix cold-start timeout (b2a52ac)
  • enrichment: use _type filter instead of has_id to exclude metadata points in recovery scroll (8a4742b)
  • explore: detect class from residual block with parentType (b31fe43)
  • explore: detect class from residual block with parentType=class_declaration (9e011ee)
  • ingest: cleanup stale _vN when legacy real collection or alias exists (cabc89c)
  • ingest: cleanup stale _vN when legacy real collection or alias exists (6b38f37)
  • ingest: delete chunks for newly ignored files during incremental reindex (6ff33cf)
  • ingest: heartbeat-based stale detection + remove embedding check from getIndexStatus (84e0dd6)
  • ingest: heartbeat-based stale detection + remove embedding check from getIndexStatus (c9d4a7c)
  • ingest: heartbeat-based stale detection + remove embedding check from getIndexStatus (1ded172)
  • ingest: resolve versioned collection status + batch timeout (24e71ae)
  • ingest: resolve versioned collection status + batch timeout (4bfd471)
  • ingest: resolve versioned collection status + batch timeout (daa4ccb)
  • mcp: omit driftWarning from structured output when null (7c8f5a5)
  • migration: SparseVectorRebuild version 2 β†’ 1 to match CURRENT_SPARSE_VERSION (c06bb9d)
  • migration: use _type filter in enrichment store adapter, add empty collection guard in v9 (474d6bb)
  • onnx: auto-detect device, fix socket path, add connect keepalive, terminate on exit (d024261)
  • qdrant: centralize connection error handling via call() guard (1e1e134)
  • qdrant: centralize connection error handling via call() guard (677694e)
  • rerank: per-language + level-aware label resolution in overlay (c06b941)
  • rerank: skip label resolution for config languages in overlay (a887136)
  • scripts: align QDRANT_TUNE_DELETE_FLUSH_TIMEOUT_MS key between tune and output (38120ba)
  • scripts: correct import paths in benchmarks/lib/ (../../build not ../build) (3a6f9cf)
  • scripts: use ONNX default model name instead of Ollama model name (78ee713)
  • test: add retry and timeout to flakey GitLogReader integration tests (bca75ca)
  • test: add retry and timeout to flakey GitLogReader integration tests (0371422)
  • test: update ingest-facade mocks for enrichment recovery wiring (b9bb104)

Documentation​

  • api: add find_symbol design spec (0c9c402)
  • api: add find_symbol implementation plan (fa3392f)
  • api: add migration framework design spec (0d1044d)
  • api: update migration framework spec β€” remove stats-cache, add file structure (5cfd651)
  • dx: add migration rule and add-migration skill (f87a894)
  • dx: add plugin restructuring spec (60b547a)
  • dx: add setup skill spec and implementation plan (779201c)
  • enrichment: add enrichment recovery design spec (b377994)
  • enrichment: add enrichment recovery implementation plan (66996df)
  • enrichment: add heartbeat-based stale detection to recovery spec (7dcb44d)
  • infra: add migration framework barrel export and update project docs (d77b728)
  • infra: add migration framework implementation plan (6e9ee50)
  • mcp: update get_index_metrics docs for scoped signal output (11061ba)
  • specs: per-language signal statistics spec and plan (507abed)

Code Refactoring​

  • dx: rename setup plugin to tea-rags-setup (e1aecdc)
  • dx: rename setup skill to install (51169b7)
  • dx: split plugin into tea-rags@tea-rags + setup@tea-rags (e649590)
  • infra: unify migrations into infra/migration framework (d4af2e2)
  • ingest: remove old migration code replaced by infra/migration framework (fa18e73)
  • ingest: wire Migrator into factory and ReindexPipeline (9a0c412)
  • migration: extract SparseMigrator from SchemaMigrator (dac3173)
  • migration: latestVersion on all runners, rename snapshot migrations (df6fd24)
  • migration: move enrichedAt backfill to migration framework as schema-v9 (372de9d)
  • migration: move sparse rebuild to sparse_migrations/sparse-v1-vector-rebuild (fe707d5)
  • migration: remove CURRENT_SPARSE_VERSION hardcode, simplify sparse apply() (26a4b3b)

Chores​

1.15.1 (2026-03-23)​

  • (a48e5b0)
  • improve(dx): redesign bug-hunt skill + add navigation branch to search-cascade (65cd2ef)

1.15.0 (2026-03-22)​

  • improve(api): expose qdrantUrl in get_index_status response (04ca10a)
  • improve(dx): optimize bug-hunt skill to reduce unnecessary tool calls (d5c6d8b)
  • improve(dx): require full metrics output in index/force-reindex skills (af8ec5f)
  • improve(dx): simplify index/force-reindex skills β€” report complete response as-is (1d27adf)
  • improve(dx): update search-cascade with BM25 v3 audit results (6f4c084)
  • improve(embedding): background probe for primary URL recovery (29f1834)
  • improve(embedding): better hint for OllamaModelMissingError (020195d)
  • improve(ingest): address code review β€” tmpdir() in tests, rename path variable (e828992)
  • improve(ingest): wire checkSparseVectorVersion() into runMigrations() (8b7f86c)
  • improve(ingest): wire SnapshotCleaner into IndexPipeline.indexCodebase() (b5a0032)
  • improve(ingest): wire SnapshotCleaner into ReindexPipeline.reindexChanges() (338a29f)
  • fix(api): expose sparseVersion in get_index_status response (ed927f5)
  • fix(api): pass migrations from reindexChanges through incremental indexCodebase (008b6e8)
  • fix(config): treat BREAKING CHANGE as minor bump, not major (e00da12)
  • fix(dx): add PreToolUse hook to block unauthorized git push (b22c1c4)
  • fix(dx): allow summarize in index/force-reindex skill output (b490ffb)
  • fix(embedding): propagate OllamaModelMissingError without fallback attempt (838965c)
  • fix(embedding): run model guard before embed call in all facades (e291820)
  • fix(filters): add is_empty guard to age filters for missing chunk fields (49bb006)
  • fix(filters): maxAgeDays/minAgeDays false positives from chunk ageDays=0 (98cf09e)
  • fix(ingest): fix empty debug labels in SnapshotCleaner log output (3b90d4f)
  • chore(ci): reduce pre-commit hook output β€” dot reporter, suppress stderr (c3da3f3)
  • chore(ci): reduce pre-commit hook output β€” dot reporter, suppress stderr (c54e39f)
  • chore(dx): bump plugin version to 0.8.1 (6c95e3b)
  • feat(config): default enableHybrid to true (401a259)
  • feat(dx): add post-search-validation rule with no-match detection and disambiguation (1111b4b)
  • feat(embedding): add EmbeddingModelGuard to detect model mismatch (27c20e2)
  • feat(hybrid): rebuild BM25 sparse vectors β€” code tokenizer, feature hashing, TF-only (e04a58e)
  • feat(ingest): add SnapshotCleaner for post-indexing artifact cleanup (ea552de)
  • feat(metrics): add git enrichment time range to collection stats (c9d95b1)
  • feat(qdrant): add checkSparseVectorVersion and v7 schema migration (1fa242f)
  • feat(qdrant): add updateCollectionSparseConfig() and scrollWithVectors() (2a90acc)
  • docs(dx): add embedding model guard spec and test golden rule (d7ed2d3)
  • docs(plans): add snapshot cleanup spec and plan (e656bbb)
  • docs(plans): add sparse vector migration implementation plan (8c018b8)
  • docs(specs): add safety net for enableHybrid toggle after schema v7 (254ea54)
  • docs(specs): add sparse vector migration and snapshot cleanup specs (eb4d4ca)
  • docs(website): update enableHybrid default to true and migration guidance (0b05b81)

BREAKING CHANGE​

  • Existing hybrid collections must be reindexed β€” sparse vectors are incompatible with previous vocabulary-based implementation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

  • footer should not trigger major version bumps for this project. Internal data format changes (sparse vectors, migrations) are handled automatically and don't break the user-facing API.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

  • INGEST_ENABLE_HYBRID now defaults to true. Existing non-hybrid collections auto-migrate on next reindex.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

1.14.4 (2026-03-22)​

  • fix(dx): register check-plugin-version hook in settings.json (237a7c1)
  • improve(dx): skill audit round 2 β€” proven weights, taskIds essential, disambiguation (b45f0f3)

1.14.3 (2026-03-21)​

  • improve(dx): skill audit fixes β€” polyglot rule, filter levels, stable preset, resource DRY (ae9eb9a)
  • improve(plugin): optimize bug-hunt skill for speed and token efficiency (9c2fcf4)
  • fix(dx): add plugin versioning rule and bump to 0.5.1 (71d4584)
  • fix(plugin): restore lost rules from bug-hunt pre-cascade version (29a5153)
  • fix(plugin): restore pagination and analytics options in bug-hunt REFINE (32c5390)
  • fix(plugin): restore two-phase search in bug-hunt skill (9280400)
  • fix(plugin): skip VERIFY when all checkpoint fields filled in DISCOVER (3e25974)
  • fix(plugin): use metaOnly=false in bug-hunt DISCOVER step (840e892)

1.14.2 (2026-03-21)​

  • improve(embedding): platform-aware Ollama hints and RFC1918 local IP detection (0574942)
  • (7cb6705)

1.14.1 (2026-03-21)​

  • fix(ingest): clear enrichment in_progress marker when no chunks produced (1230e45)

1.14.0 (2026-03-21)​

  • feat(embedding): add EMBEDDING_FALLBACK_URL for Ollama provider failover (0fe1a88)
  • chore(dx): bump plugin version to 0.5.0 (bb915ff)

1.13.1 (2026-03-21)​

  • fix(ingest): preserve enrichment coverage stats on scoped reindex and regroup output (2e73825)

1.13.0 (2026-03-21)​

  • improve(explore): address 12 skill audit findings in search-cascade (fc3f6a9)
  • improve(explore): complete search-cascade audit fixes (eeec0a3)
  • improve(mcp): unify index_codebase and reindex_changes output format (63bdd06)
  • fix(explore): preserve rankingOverlay in rank_chunks results (284a496)
  • fix(ingest): scope enrichment to changed files and skip for deletion-only reindex (6b5da2d)
  • feat(chunker): add RSpec-aware chunking for Ruby spec files (6e7389c)

1.12.3 (2026-03-21)​

  • improve(ingest): update lastUpdated on no-change incremental reindex (4b46a3f)
  • fix(ingest): update completedAt marker on incremental reindex (1c27125)

1.12.2 (2026-03-21)​

  • fix(website): escape MDX placeholders and fix broken links in troubleshooting page (7666b6b)

1.12.1 (2026-03-21)​

  • fix(dx): move marketplace.json to repo root for plugin discovery (28f0b04)

1.12.0 (2026-03-21)​

  • fix(adapters): pass original error as cause instead of wrapping in new Error (b3b1855)
  • fix(all): replace every remaining plain Error with typed errors (35d2e41)
  • fix(bootstrap): update default Ollama model to unclemusclez/jina-embeddings-v2-base-code (e15e209)
  • fix(config): add OLLAMA_URL as fallback for EMBEDDING_BASE_URL (3421332)
  • fix(infra): add defensive assertion in resolveCollection, fix no-op test (41c5095)
  • fix(ingest): add embedding health check before indexing and status queries (2d559a3)
  • fix(ingest): propagate TeaRagsError from indexCodebase instead of swallowing (0245241)
  • fix(pipeline): propagate batch errors instead of silently swallowing them (ad376cf)
  • test(ingest): add TDD tests for OllamaUnavailableError propagation (681e41b)
  • improve(bootstrap): graceful startup β€” remove pre-flight Ollama check (d17ca83)
  • improve(dx): merge reindex-changes into index skill (5b3bbc1)
  • improve(mcp): deprecate reindex_changes β€” index_codebase handles both (d49ad79)
  • improve(plugin): delegate tool selection to search-cascade, add refactoring-scan skill (5cc8cee)
  • improve(plugin): enforce search-cascade as critical tool selection rule (ec84096)
  • improve(plugin): expand LSP profile with call chain, implementations, performance warning (0290e74)
  • improve(plugin): expand pattern-search intent triggers in explore skill (4e10504)
  • improve(plugin): integrate pattern-search as internal explore strategy (7917a0b)
  • improve(plugin): integrate search-cascade into pattern-search SEED step (f0362d9)
  • improve(plugin): remove LSP references β€” causes hangs, use ripgrep/tree-sitter (01ffd96)
  • improve(plugin): rewrite search-cascade with combo strategy and profiles (0d2dcad)
  • refactor(adapters): extract shared retry utility and deduplicate config/schema builders (b507faf)
  • refactor(all): extract logic from barrel index.ts files (b67ffb4)
  • refactor(ingest): extract helpers and remove unused for+break duplicates (aaa2211)
  • feat(adapters): add InfraError hierarchy with adapter-specific errors (e0924fe)
  • feat(cli): add CLI entrypoint and update bin to cli/index.js (0d55a84)
  • feat(cli): add YAML config loader with project/global merge (7f65da5)
  • feat(cli): add yargs entrypoint with server command stub (81cfbb6)
  • feat(cli): implement tea-rags server command (f86f762)
  • feat(contracts): add TeaRagsError hierarchy, InputValidationError, migrate CollectionRefError (e915bd7)
  • feat(dx): add background indexing skills and update search-cascade (4847cf7)
  • feat(ingest): track ignore pattern changes in reindex + decompose pipelines (2ee3843)
  • feat(ingest): zero-downtime forceReindex via Qdrant collection aliases (414781c)
  • feat(mcp): add errorHandlerMiddleware, migrate all tools to registerToolSafe (e5be47f)
  • feat(plugin): add pattern-search skill for cross-codebase pattern discovery (4ac2ed0)
  • feat(qdrant): add static payload indexes for language, fileExtension, chunkType (24266d4)
  • docs(cli): add CLI executable design spec (86811d2)
  • docs(dx): add typed-errors rule for mandatory error hierarchy usage (e646922)
  • docs(dx): update search-cascade for typed error handling (9dc91bc)
  • docs(operations): add AliasOperationError and zero-downtime reindex FAQ (31ccecc)
  • docs(operations): add error codes reference, rename troubleshooting page (51b41e3)
  • docs(plans): add collection aliases implementation plan (41143cf)
  • docs(plans): add error handling implementation plan (6c7ca33)
  • docs(plans): add streaming chunk enrichment plan (e86701c)
  • docs(specs): add collection aliases and project registry design specs (bbecbe9)
  • docs(specs): add unified error handling design spec (3ed02fd)
  • docs(specs): fix error handling spec after review (f10c8fc)
  • docs(specs): fix review issues, add typed-errors rule, complete migration (1425c23)
  • docs(specs): update error handling spec with brainstorming decisions (926982f)
  • docs(usage): add Ignoring Files page with dynamic ignore tracking (5a16536)
  • chore(deps): add yargs and yaml for CLI (2daa77e)
  • chore(plugin): bump version to 0.3.1 for new indexing skills (5534a4c)
  • feat(adapters,domains): migrate all throw sites to typed errors (5c500df)
  • fix(adapters,domains): replace all remaining plain Error throws with typed errors (0b5fe9c)
  • style(rerank,schemas): apply eslint auto-fixes (9e2ae4d)

1.11.0 (2026-03-17)​

  • test(explore): add offset pagination tests for BaseExploreStrategy (e9846da)
  • fix(dx): deny commit instead of ask when plugin version not bumped (448e611)
  • feat(api): add offset parameter to semantic_search, hybrid_search, search_code (95f6119)
  • feat(dx): add PreToolUse hook to check plugin version bump before commit (84b0ace)
  • refactor(plugin): move pagination to cascade rule β€” applies to all tools (2c96c0e)
  • improve(plugin): remove hard limits from research β€” agent decides iteration (e3ecc40)
  • improve(plugin): remove symbol verification from research, add balanced rerank (6e97f55)
  • improve(plugin): research outputs facts not strategy, adds iteration budget (3791215)
  • improve(plugin): research skill flags problematic zones, uses filters (81d307e)

1.10.0 (2026-03-17)​

  • feat(plugin): add explore + research skills, refactor data-driven-generation (467fa49)
  • chore(plugin): bump version to 0.1.1 (88ed825)

1.9.1 (2026-03-17)​

  • improve(plugin): make session start instructions imperative (3bdbd17)

1.9.0 (2026-03-17)​

  • fix(plugin): always reindex_changes on session start, not only on drift (b9abfb6)
  • fix(plugin): prepare for marketplace install with working hooks (80a4699)
  • fix(plugin): use script for hook instead of inline cat with env var (5f14117)
  • improve(plugin): add session start check, presets/filters reference to cascade (c18e422)
  • improve(plugin): add tool selection examples to search-cascade rule (ea046f9)
  • improve(plugin): LSP-first cascade, auto-detect tools on session start (6c5c349)
  • improve(plugin): memorize label thresholds after indexing (066abf4)
  • improve(plugin): remove mandatory verify β€” trust the index (014f606)
  • feat(plugin): inject search-cascade rules via SessionStart hook (37e2176)

1.8.0 (2026-03-17)​

  • improve(plugin): drill-down + spread check in bug-hunt (415ea7d)
  • improve(plugin): enforce self-execution and label trust in bug-hunt (10b10dc)
  • improve(plugin): force ripgrep MCP in bug-hunt verify step (ecbe63d)
  • improve(plugin): make ripgrep optional in bug-hunt β€” agent decides (381cf73)
  • improve(plugin): multi-query discovery with intersection in bug-hunt (f75e7b5)
  • improve(plugin): optimize bug-hunt to 4 steps with parallel tool calls (4bfe45e)
  • improve(plugin): parallel tree-sitter + ripgrep in verify discover step (7e70c92)
  • improve(plugin): restructure bug-hunt skill as checkpoint loop + fix applier overwrite (63eabd5)
  • feat(filters): glob pre-filter via Qdrant full-text index on relativePath (1f06e5b)
  • fix(plugin): consolidate bug-hunt skill β€” original structure + mandatory ripgrep (b8c67ae)
  • fix(plugin): fix cascade rule β€” read files for understanding, ripgrep for confirming (7ff01f6)
  • fix(plugin): limit=10 default, use offset for pagination (c089f64)
  • fix(plugin): make ripgrep MCP mandatory in bug-hunt (c9377b2)
  • fix(plugin): no rerank on discover step β€” pure similarity for area finding (4d6e274)
  • fix(plugin): scope ripgrep to discovered area, not entire project (aa902e9)
  • fix(plugin): split discover + verify into separate steps in bug-hunt (547b314)
  • fix(presets): add rank_chunks to bugHunt preset tools list (dd23c4b)
  • refactor(plugin): enforce strict tool discipline in bug-hunt skill (62d7408)
  • refactor(plugin): remove redundant verify, prefer ripgrep over file reads (d0d525c)
  • refactor(plugin): rewrite bug-hunt skill per writing-skills best practices (8b2c05c)
  • revert(plugin): restore per-step verify in bug-hunt skill (14b8429)

1.7.3 (2026-03-16)​

  • improve(plugin): move validation to single verify step in bug-hunt (366bcd4)

1.7.2 (2026-03-16)​

  • improve(plugin): make bug-hunt verify step concrete (94501b3)

1.7.1 (2026-03-16)​

  • improve(ingest): add .contextignore.local support and raise test coverage to 96.9% (f98323c)
  • improve(plugin): enforce strict tool parameters in bug-hunt skill (51a843e)
  • fix(explore): overfetch in scroll-rank when pathPattern is set (35164ce)
  • chore(plugin): add marketplace.json for local and remote installation (434d02a)

1.7.0 (2026-03-16)​

  • improve(plugin): add hybrid_search fallback to semantic_search (2d076b2)
  • feat(plugin): create tea-rags Claude Code plugin (2d70a06)
  • docs(plans): add data-driven generation plugin implementation plan (9b96737)
  • docs(specs): add data-driven generation Claude plugin design spec (1952a42)

1.6.0 (2026-03-16)​

  • feat(mcp): add signal-labels schema resource, fix label declarations (05d2a58)
  • fix(ingest): use readPayloadPath for dominantAuthor in distributions (057d32a)
  • fix(onnx): detect stale daemon socket and respawn automatically (88321c7)

1.5.0 (2026-03-16)​

  • feat(api): add getIndexMetrics to App interface and ExploreFacade (6657cb2)
  • feat(dto): add IndexMetrics DTO for get_index_metrics (2d66e68)
  • feat(infra): bump StatsCache to v3 with distributions support (b0f5cab)
  • feat(ingest): compute distributions and min/max in computeCollectionStats (f8ceb71)
  • feat(mcp): register get_index_metrics tool (ec42101)
  • feat(presets): add bugHunt preset for finding potential bug locations (65d13b3)
  • feat(reranker): add label-resolver for overlay value labeling (68daa7f)
  • feat(reranker): integrate label resolution into buildOverlay() (26c80e3)
  • refactor(contracts): add min/max to SignalStats, add Distributions (72d7863)
  • refactor(contracts): replace percentiles with labels in SignalStatsRequest (6979647)
  • refactor(reranker): remove derived from OverlayMask and RankingOverlay (7f764b5)
  • docs(plans): add index-metrics + overlay labels implementation plan (780aae7)
  • docs(presets): add JSDoc to all 11 rerank presets (9da1aaf)
  • docs(signals): add JSDoc to all 20 derived signals and enforce in rules (85ec69e)
  • docs(specs): add get_index_metrics + overlay labels design spec (d608e82)

1.4.0 (2026-03-15)​

  • feat(config): add QDRANT_QUANTIZATION_SCALAR env flag (a767bc8)
  • feat(ingest): pass quantizationScalar to collection creation in IndexPipeline (5efd311)
  • feat(qdrant): add scalar quantization support to createCollection (d83b9f2)
  • feat(qdrant): wire quantizationScalar through CollectionOps and AppDeps (679c219)
  • refactor(infra): move signal-utils from contracts/ to infra/ (5fae09c)
  • docs(plans): add scalar quantization implementation plan (d76ca6f)
  • docs(specs): add scalar quantization design spec (1587b5b)
  • style(mcp): fix no-useless-concat in schema descriptions (cb6b5a1)

1.3.0 (2026-03-15)​

  • fix(api): fix schema inconsistencies and incorrect resource examples (b96bd97)
  • improve(api): compact search_code and index_codebase descriptions (10bfe54)
  • improve(api): compact semantic_search and hybrid_search descriptions (abaef5d)
  • improve(api): consolidate filter parameters in MCP schemas (908047a)
  • improve(api): trim 'Use for' from typed filter descriptions (e9e7846)
  • improve(mcp): add schema overview link to search tool descriptions (1581205)
  • improve(mcp): add ToolAnnotations to all tools (1714577)
  • improve(mcp): compact SchemaBuilder β€” remove per-value descriptions from tool schema (fc43880)
  • improve(presets): add per-preset descriptions to MCP schema (076a93f)
  • test(api): tighten path assertion in indexing guide test (703452a)
  • test(signals): add signal level tests for types, helpers, and blending (689cfaa)
  • feat(api): add search-guide and indexing-guide resource builders (fbb9597)
  • feat(api): extend PresetDescriptors with preset details for resource docs (af11e04)
  • feat(api): register search-guide and indexing-guide resources, add Guides to overview (b2dfa26)
  • feat(mcp): add schema documentation MCP Resource (3f99285)
  • feat(mcp): add shared outputSchema for search tools (c436059)
  • feat(mcp): split schema documentation into 4 focused MCP resources (2ff993e)
  • docs(api): add schema compaction wave 2 design spec (b138140)
  • docs(api): add schema compaction wave 2 implementation plan (49d367f)
  • docs(mcp): add per-resource schema docs implementation plan (07c09f5)
  • docs(mcp): add per-resource schema documentation design spec (16ae541)
  • docs(mcp): improve tool and parameter descriptions (6796bf6)

1.2.1 (2026-03-15)​

  • docs(api): add level parameter and signalLevel docs to tools.md (22ac932)

1.2.0 (2026-03-15)​

  • feat(rerank): add signalLevel system for preset scoring granularity (2d5d83c)
  • docs(plans): signal level implementation plan β€” 11 tasks (50a2465)
  • docs(specs): replace SignalLevel "auto" with "chunk" β€” explicit is better (a7df600)
  • docs(specs): signal level & consistent level parameter design (394ebc6)

1.1.1 (2026-03-15)​

  • improve(presets): add chunk-level signals to securityAudit, techDebt, ownership presets (2883199)

1.1.0 (2026-03-14)​

  • chore(dx): add .claude/worktrees to gitignore (438e09b)
  • docs(api): add find_similar tool documentation (43fa7e2)
  • docs(explore): add find_similar spec, plan, update add-mcp-endpoint skill (15877f5)
  • feat(api): add FindSimilarRequest DTO for find_similar tool (2a07f30)
  • feat(explore): add ExploreFacade.findSimilar() and App wiring (77f78ca)
  • feat(explore): add QdrantManager.query() for recommend API (9626a15)
  • feat(explore): add SimilarSearchStrategy for find_similar tool (b2c7cd1)
  • feat(mcp): register find_similar tool with Zod schema (9f6faa3)
  • feat(presets): add find_similar to preset tools[] arrays (e9d64ba)

1.0.4 (2026-03-14)​

  • (5c4ff7c)
  • fix(ci): escape angle brackets in changelog for MDX compatibility (ba48aae)
  • docs(dx): add parallel-sessions rule and .claudeignore (3640992)

1.0.3 (2026-03-14)​

  • (c70b1a2)
  • fix(ci): use markdown format: detect to fix changelog MDX parse errors (db47186)

1.0.2 (2026-03-14)​

  • fix(ci): deploy docs on every push, not just release commits (94630db)
  • fix(ci): deploy docs only on chore(release) commits (dbb7b89)
  • (682622b)

1.0.1 (2026-03-13)​

  • ci(docs): make deploy-docs a self-contained job with own checkout (7424f9c)
  • docs(dx): add path shortcuts, deep navigation rule, and add-language-hook skill (1ff2a0b)
  • docs(dx): add skills for signals/presets and rules for wiring/testing (25845cf)
  • refactor(dx): add domain barrel files and barrel-files rule (b869152)

1.0.0 (2026-03-13)​

  • chore(ci): reduce CI output to errors and warnings only (c89e11b)
  • chore(config): add files field for npm publish (195ca16)
  • chore(config): add md/json/yaml/css to lint-staged prettier (dc307c9)
  • chore(config): update rule paths from search/ to explore/ (1e773cb)
  • chore(dx): add .claude/**/.local/ to .gitignore (f29de79)
  • chore(dx): add skills for MCP endpoint and DTO creation (0f9b1b1)
  • fix(embedded): set cwd for Qdrant daemon to binary directory (db2e10b)
  • fix(embedded): store Qdrant binary in ~/.tea-rags/qdrant/bin/ (47839e7)
  • fix(embedded): use env vars instead of CLI args for Qdrant config (bf09cd7)
  • fix(presets): remove search_code from decomposition preset tools (015f87b)
  • fix(rerank): rank_chunks scoring, overlay visibility, and preset tuning (69f9dff)
  • fix(test): make validatePath test cross-platform (4807cb7)
  • style: run prettier on all source and test files (2e99305)
  • refactor: migrate home directory from .tea-rags-mcp to .tea-rags (6235cc6)
  • refactor: move embedded qdrant to core/adapters/qdrant/embedded (17d7ad5)
  • refactor(adapters): extract mergeQdrantFilters, add TrajectoryRegistry.buildMergedFilter (4f3cf13)
  • refactor(adapters): move filter-utils.ts β†’ filters/utils.ts (3cb2dec)
  • refactor(api): move domain modules into core/domains/ (ae404ce)
  • refactor(api): split core/api/ into public/ and internal/ (2c419ee)
  • refactor(bootstrap): add App to AppContext via createApp() (7fe2216)
  • refactor(config): add ResolvedPaths to AppConfig, DI all path consumers (522481a)
  • refactor(contracts): consolidate search types β†’ ExploreResponse, ExploreCodeRequest (0c62860)
  • refactor(contracts): extract App DTOs from api/app.ts to contracts/types/app.ts (b3fe83d)
  • refactor(contracts): move EmbeddingConfig, TrajectoryGitConfig, QdrantTuneConfig to core/contracts (e4ce1b7)
  • refactor(dx): split CLAUDE.md/AGENTS.md into focused rules (4399abd)
  • refactor(explore): add BaseExploreStrategy with shared defaults, postProcess, metaOnly (8282790)
  • refactor(explore): add rerank and metaOnly to SearchContext (58d8724)
  • refactor(explore): collapse searchCodeTyped+searchCode into single searchCode(DTO) (5bb6b1a)
  • refactor(explore): delete ExploreModule, legacy types, consolidate ExploreResponse (e99295d)
  • refactor(explore): ExploreFacade deps object, delegate buildMergedFilter to registry (dee9179)
  • refactor(explore): HybridSearchStrategy extends BaseExploreStrategy (da56f75)
  • refactor(explore): remove excludeDocumentation from ScrollRankStrategy (13f4286)
  • refactor(explore): rename RawResult β†’ ExploreResult<P>, executeSearch β†’ executeExplore (0cfdc8e)
  • refactor(explore): rename search domain to explore (e7ec383)
  • refactor(explore): rename search module to explore (1cde3de)
  • refactor(explore): rename SearchContext β†’ ExploreContext (4d9f572)
  • refactor(explore): rename SearchStrategy β†’ ExploreStrategy, extract base class to base.ts (88f4fe8)
  • refactor(explore): rewrite ExploreFacade with unified strategy pipeline (9c2d242)
  • refactor(explore): ScrollRankStrategy extends BaseExploreStrategy with own defaults (4727a38)
  • refactor(explore): update strategy factory and barrel, createSearchStrategy β†’ createExploreStrategy (6b9d81d)
  • refactor(explore): VectorSearchStrategy extends BaseExploreStrategy (b2d8154)
  • refactor(filters): extend FilterDescriptor for must_not support (FilterConditionResult) (3be7a04)
  • refactor(infra): extract isDebug into core/infra layer (d939542)
  • refactor(infra): move collection utils from ingest/ to infra/collection-name.ts (4c64b8d)
  • refactor(infra): move StatsCache and SchemaDriftMonitor from api/ to infra/ (76ef5b1)
  • refactor(ingest): move collection utilities from contracts to ingest (eee9259)
  • refactor(mcp): thin MCP handlers delegating to unified App interface (bfe5f55)
  • refactor(search): remove trajectory dependency via DI filter builder (c80c6ee)
  • docs: add scope-based versioning rules and improve commit type (82137d9)
  • docs(api): add GRASP/SOLID cleanup design spec (1baad7a)
  • docs(api): add GRASP/SOLID cleanup implementation plan (5abbe3f)
  • docs(config): update CLAUDE.md for domain boundaries and explore rename (3f498da)
  • docs(explore): add unified explore filters & type consolidation design spec (b2d83d0)
  • docs(infra): update CLAUDE.md layer descriptions and project structure (cb990d6)
  • docs(website): update documentation for embedded Qdrant and package rename (56dc94d)
  • feat(api): add App interface and typed response types (7045b9a)
  • feat(api): add CollectionOps and DocumentOps (21a67d2)
  • feat(api): add createApp() factory, rename SearchFacade β†’ ExploreFacade (8ce014c)
  • feat(api): expand SearchFacade with semantic/hybrid/rank methods (4c2c3dc)
  • feat(embedded): add Qdrant binary downloader and postinstall script (df7494d)
  • feat(embedded): add Qdrant daemon with refcounting and idle shutdown (82734d7)
  • feat(embedded): add version lock, Qdrant docs page, and strict lint (914a4f0)
  • feat(embedded): add Windows support for Qdrant binary download (f35d49f)
  • feat(embedded): integrate Qdrant daemon into bootstrap (ca5f14b)
  • feat(explore): add buildMergedFilter + TypedFilterParams for typed search filters (e6e0a7a)
  • feat(explore): add exploreCode method with auto-detect hybrid and typed filters (5098920)
  • feat(explore): add search strategies + post-process module (6b7d827)
  • feat(mcp): add rank_chunks tool with scroll-based chunk ranking (f09c0a0)
  • feat(mcp): add typed filter params to all search tool schemas (d335a6c)
  • feat(mcp): pass typed filter params through all search handlers (aa841c6)
  • feat(presets): add rank_chunks to all preset tool lists (c75b7a7)
  • feat(search): add RankModule for scroll-based chunk ranking (10ba9b0)
  • improve(api): address App interface review feedback (bb1bd26)
  • improve(explore): add barrel export and fix type casts in strategies (ac2e923)
  • improve(presets): refine rank_chunks and add hybrid_search to preset tool lists (badd8d1)
  • feat!: rename package to tea-rags (3e8a79f)
  • ci: configure BREAKING CHANGE ordering and commit rules (a4e4e87)
  • ci: use dot reporter for vitest to show only failures (a7c380c)

BREAKING CHANGE​

  • package renamed from @artk0de/tea-rags-mcp to tea-rags. Binary command renamed from qdrant-mcp-server to tea-rags.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

  • QDRANT_URL default changed from http://localhost:6333 to autodetect. Set QDRANT_URL explicitly if using external Qdrant.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

0.9.0 (2026-03-08)​

  • fix: resolve all ESLint errors and warnings (73 β†’ 0) (bd7e337)
  • fix(onnx): resolve eslint warnings in daemon and worker (7e7633a)
  • fix(onnx): revert pipeline batch size propagation, fix probe diversity (36384fc)
  • fix(test): stabilize flaky git-log-reader date filter test (a8e7099)
  • docs: add design docs for daemon batching and adaptive batch size (8d7510e)
  • docs: update ONNX provider scale and batch size documentation (49319c4)
  • refactor(onnx): move recommendedPipelineBatchSize to BatchSizeController (5317982)
  • refactor(onnx): rename GPU_BATCH_SIZE to DEFAULT_GPU_BATCH_SIZE, add adaptive constants (e5c641d)
  • feat(onnx): add BatchSizeController for adaptive GPU batch sizing (5e4f541)
  • feat(onnx): add calibrationCachePath to paths module (b2969dd)
  • feat(onnx): add daemon-side batch splitting for GPU-safe inference (3000740)
  • feat(onnx): add GPU_BATCH_SIZE constant (d65b160)
  • feat(onnx): add worker timing, calibration probe, and cache (4912a6f)
  • feat(onnx): expose recommendedBatchSize from OnnxEmbeddings (23f5d56)
  • feat(onnx): integrate BatchSizeController into daemon (ed5bc7b)
  • feat(onnx): pipeline uses GPU-calibrated batch size when not explicitly configured (ec19920)
  • feat(onnx): recommendedBatchSize = max(32, calibrated * 2) (23bde57)
  • feat(onnx): restore pipeline batch size propagation from calibration (5636959)
  • perf(onnx): add session options and warm-up batch for GPU inference (8e4d50f)
  • perf(onnx): raise default pipeline batch size from 8 to 32 (a0ec051)
  • chore: add .dolt/ and *.db to root .gitignore (d110cfb)
  • chore: remove unused check-coverage hook (19c0d8f)
  • chore(beads): untrack SQLite db files covered by .gitignore (f0f4be4)

0.8.0 (2026-03-07)​

  • chore: add remark-frontmatter dependency (c472322)
  • chore: AGENTS.md beads upgrade (7bb835e)
  • chore: enforce coverage threshold in pre-commit hook (48338b7)
  • chore(beads): close 2o2 (squash-aware sessions), open 6h3 (trace_metrics) (4846ccd)
  • chore(beads): sync issues, add post-merge hook, close 47m (af4a5b7)
  • chore(deps): add @huggingface/transformers as optional dependency (c156b5d)
  • chore(scripts): update verify-providers to use makeConfig helper (9b0ff9f)
  • docs: add markdown chunker implementation plan (e01ffb8)
  • docs: add markdown chunker quality improvement design (91f2c86)
  • docs: add ONNX worker thread design (242693f)
  • docs(providers): add embedding provider pages and refactor config (315c6d1)
  • test: raise code coverage to 97% with 48 new tests across 18 files (fb7e369)
  • test(chunker): add oversized section test (spec review fix) (5d3f5cd)
  • test(decomposition): add integration tests for methodLines/methodDensity scoring (6f48709)
  • test(onnx): add daemon end-to-end integration test (543ac56)
  • test(onnx): raise daemon coverage to 97% (19c3d39)
  • test(trajectory/static): add tests for StaticTrajectory, PayloadBuilder, filters + update CLAUDE.md (79097c1)
  • feat(chunker): add MarkdownChunker with frontmatter, code block dedup, and Mermaid filtering (daa7b13)
  • feat(chunker): populate methodLines in tree-sitter, add methodDensity to payload (fbfb0fa)
  • feat(config): add "onnx" to embedding provider enum (0349b96)
  • feat(config): add daemon socket and PID file paths (f789d17)
  • feat(config): add ingest, trajectoryGit, qdrantTune zod slices (ed85601)
  • feat(config): standardize env var naming with category prefixes (4b8acf2)
  • feat(config): zod schema for core + embedding slices (2b132d0)
  • feat(drift): payload schema drift detection β€” warn agent once per session (25e0013)
  • feat(embedding): adaptive batch sizing with exponential backoff (3d90152)
  • feat(embedding): add OnnxEmbeddings provider with lazy loading (ae1ea68)
  • feat(embedding): cache models in ~/.tea-rags-mcp, guided HF auth, int8 default (8474e6a)
  • feat(embedding): safe initial batch size, DI for cacheDir, backoff tests (5df5876)
  • feat(embedding): wire OnnxEmbeddings into factory (c5eba6a)
  • feat(factory): wire daemon socket paths into OnnxEmbeddings (229e5f8)
  • feat(hybrid): replace RRF/DBSF with weighted score fusion (0539075)
  • feat(onnx): add daemon CLI entry point and spawn logic (a0ccdf8)
  • feat(onnx): add daemon protocol types and NDJSON serialization (637875b)
  • feat(onnx): add EMBEDDING_DEVICE config with auto-detect and GPU fallback (864af4e)
  • feat(onnx): add NDJSON line splitter for socket communication (7244276)
  • feat(onnx): add process exit hook and GPU sequential lock (1662322)
  • feat(onnx): add worker thread message types (da9f08d)
  • feat(onnx): implement daemon server with Unix socket and lifecycle management (e93ea97)
  • feat(onnx): move inference to worker thread, rewrite proxy (0ce8d35)
  • feat(onnx): rewrite OnnxEmbeddings as daemon socket client (575f617)
  • feat(onnx): switch to WebGPU + FP16 for 2.5x faster embeddings (ca4f7ab)
  • feat(rerank): add decomposition preset with chunkDensity signal (f93605f)
  • feat(search): raise candidate pool defaults to Γ—4/Γ—6 with min 20 (0760beb)
  • feat(signals): ChunkSizeSignal reads methodLines, fix readRawSource for top-level keys (5c5ce21)
  • feat(trajectory): add squash-aware session grouping for git metrics (99c1633)
  • feat(trajectory): create static trajectory module with signals, presets, filters, payload builder (ce024fe)
  • feat(types): add methodLines to CodeChunk metadata (b7097d2)
  • fix: methodLins now correctly writes in chunk payload (23a4fe3)
  • fix: methodLins now correctly writes in chunk payload (c60d73b)
  • fix: update stale comment ref to MarkdownChunker (6fef9a9)
  • fix(chunker): graceful worker shutdown to eliminate flaky test crashes (cc918bd)
  • fix(chunker): splitOversizedChunk gives sub-chunks correct startLine/endLine (5085d7a)
  • fix(chunker): strip frontmatter from whole-document fallback (252454c)
  • fix(config): send deprecation warnings via MCP logging (9bf2567)
  • fix(embedding): add ambient types for optional @huggingface/transformers (bf719c3)
  • fix(embedding): add internal batch splitting to prevent OOM in ONNX (e31ac15)
  • fix(embedding): fix onnx build errors β€” proper Dtype typing, remove stale ts-expect-error (f295f9d)
  • fix(embedding): use q8 dtype (maps to model_quantized.onnx), not int8 (ef6ed00)
  • fix(git): use native child_process timeout instead of JS-level setTimeout (94ac050)
  • fix(logs): use local timezone for pipeline debug log timestamps (2f6ae55)
  • fix(mcp): coerce string params to number/boolean, lazy-init debug logger (3249e3b)
  • fix(signals): ChunkDensitySignal reads methodDensity with adaptive bounds (49a0665)
  • refactor(chunker): wire MarkdownChunker into TreeSitterChunker (933f03f)
  • refactor(composition): register StaticTrajectory, simplify resolvePresets to 2-level (6f31b57)
  • refactor(config): centralize app data paths into config/paths.ts (9fd2721)
  • refactor(config): kill CodeConfig, use typed Zod slices (64e153e)
  • refactor(config): modularize config.ts into config/ directory (63af188)
  • refactor(config): move defaults to config/, fix flaky pre-commit (028e21a)
  • refactor(config): parseAppConfig delegates to Zod, remove validateConfig (ea2c220)
  • refactor(config): replace debug-logger ENV reads with getConfigDump (8a22861)
  • refactor(debug): centralize DEBUG flag via runtime.ts (1a4dffd)
  • refactor(embedding): extract DEFAULT_ONNX_MODEL constant, use jinaai namespace (e457e62)
  • refactor(embedding): extract dtype from model name suffix (86cf8fb)
  • refactor(embeddings): DI config slice, remove createFromEnv and process.env (5a86dc1)
  • refactor(ingest): DI config slices for pipeline, remove process.env (847d4bc)
  • refactor(pipeline): delegate payload construction via PayloadBuilder DIP (4d84cd6)
  • refactor(qdrant): align hybridSearch contract with search() (89f6e87)
  • refactor(qdrant): DI config slice for accumulator + client (f31d3e5)
  • refactor(trajectory): delete old signal/preset files from search/, contracts/ (79cea84)
  • refactor(trajectory): DI config slice, remove process.env (a41bf01)
  • refactor(trajectory): make enrichment optional on Trajectory interface (97b9d1b)
  • refactor(trajectory): rename GIT** env vars to TRAJECTORY_GIT** prefix (ebd8cc8)
  • (bb0e815)
  • ci(release): exclude merge commits from changelog (22e71e4)

0.7.0 (2026-03-04)​

  • Merge branch 'main' of github.com:artk0de/TeaRAGs-MCP (63a2531)
  • feat(presets): enrich onboarding with age, ownership penalty, volatility (bb40e25)
  • feat(presets): enrich stable and recent with multi-signal weights (66f00e7)
  • ci(release): verify npm token before semantic-release (ec07642)

0.6.0 (2026-03-04)​

  • feat: wire signal stats lifecycle β€” cold start + post-index refresh (3d9160d)
  • feat(adapters): scrollAllPoints helper for collection-wide stats (3169cab)
  • feat(api): add composition root, wire TrajectoryRegistry (d47ffe8)
  • feat(api): StatsCache β€” JSON file persistence for collection signal stats (42ceeee)
  • feat(chunker): add TypeScript class body chunker hook (AST-based) (af45bc3)
  • feat(chunker): add TypeScript comment capture hook (AST-based) (1a0de42)
  • feat(chunker): merge adjacent small top-level declarations into blocks (1661f23)
  • feat(chunker): split markdown only on h1/h2 boundaries (84669d3)
  • feat(chunker): wire TypeScript hooks and enable class method extraction (f0dc534)
  • feat(contracts): add BASE_PAYLOAD_SIGNALS for static payload fields (7f5dc30)
  • feat(contracts): add derivedSignals to EnrichmentProvider, wire in git provider (c076732)
  • feat(contracts): add essential flag to PayloadSignalDescriptor (60378ae)
  • feat(contracts): add generic computeCollectionStats() for adaptive thresholds (5bfc6c6)
  • feat(contracts): add PayloadSignalDescriptor, ExtractContext, SignalStats types (0577a47)
  • feat(contracts): create contracts layer with provider and reranker types (34b7c64)
  • feat(contracts): DerivedSignalDescriptor type, add sources to git signal descriptors (6cbbe3a)
  • feat(contracts): TrajectoryRegistry.getAllDerivedSignals() with duplicate validation (136702f)
  • feat(git): add chunk-level taskIds from commit messages (c55ebb8)
  • feat(mcp): auto-generate ScoringWeightsSchema from signal descriptors (a2834b7)
  • feat(reranker): L3 alpha-blending, chunk temporal signals, techDebt redesign (1714371)
  • feat(search): add RelevancePreset + preset resolution infrastructure (c079277)
  • feat(search): descriptor-based scoring replaces monolith calculateSignals() (14fb640)
  • feat(search): mask git payload in metaOnly by overlay or essential fields (070f556)
  • feat(search): Reranker v2 class with ranking overlay, descriptor-based metadata (145412b)
  • feat(search): use collection-level p95 as adaptive bounds fallback (1785a76)
  • feat(search): wire essentialTrajectoryFields through deps chain (52f13e8)
  • feat(search): wire Reranker v2 into search-pipeline and search-module (798e434)
  • feat(trajectory): add chunk-level churnVolatility, flat payload descriptors, fix volatility blending (2d4d678)
  • feat(trajectory): add Git trajectory presets with descriptions (026a365)
  • feat(trajectory): add scorer classes, metrics decomposition, and config fixes (bc36120)
  • feat(trajectory): add shared trajectory contract types (8d62ac0)
  • feat(trajectory): add Trajectory interface and GitTrajectory entry point (422c928)
  • feat(trajectory): git signal descriptors and filter descriptors (01f93c2)
  • feat(trajectory/git): mark ageDays and commitCount as essential signals (5699902)
  • feat(website): update docusaurus config and navbar logo (67f8d97)
  • refactor: consolidate normalize() and p95() in contracts/signal-utils (be0b39d)
  • refactor: delete duplicate ingest/enrichment/trajectory/git/ (35ac52b)
  • refactor: delete Signal interface, remove dead code (c434720)
  • refactor: domain boundaries β€” Qdrant types, FieldDocβ†’Signal, CLAUDE.md (772add7)
  • refactor: enforce domain boundaries β€” registry, collection utils, SRP (1a26f65)
  • refactor: EnrichmentRegistry to contracts/, delete trajectory/types.ts (eda53e2)
  • refactor: finalize rerank/ directory structure, update CLAUDE.md (9538e01)
  • refactor: merge EnrichmentProvider+QueryContract, propagate overlay types (ed97b04)
  • refactor: move git payload accessors from contracts/ to trajectory/git/infra/ (8927220)
  • refactor: move presets into rerank/ directories (3c1a32c)
  • refactor: move signal-utils to contracts layer (b3851c6)
  • refactor: remove scorer classes β€” wrong abstraction level (d03f6f9)
  • refactor: reorganize signals β€” derived-signals layer, rename payload-fields to signals (68fe7ee)
  • refactor: terminology alignment β€” Metadataβ†’Signals, fix boundary violations (3786fca)
  • refactor: wire Reranker via composition root, make required in all consumers (7c626f4)
  • refactor(api): add SchemaBuilder β€” MCP schemas via DIP, no hardcoded imports (50fae12)
  • refactor(chunker): extract shared findClassBody util and clarify offset comments (f38fb57)
  • refactor(contracts): add OverlayMask type and transition fields to RerankPreset (9345c03)
  • refactor(contracts): add RerankPreset interface, update provider preset contract (3b1d476)
  • refactor(contracts): extensible PayloadSignalDescriptor.stats and SignalStats (b4174bc)
  • refactor(contracts): extract generic signal math from git helpers (4e4cdbf)
  • refactor(contracts): finalize RerankPreset β€” remove tool, require tools[] and overlayMask (77b36f6)
  • refactor(contracts): remove derived from overlay, flatten raw to file/chunk (b59e5f5)
  • refactor(contracts): update DerivedSignalDescriptor.extract() to (rawSignals, ctx?) (8305970)
  • refactor(reranker): move confidence dampening into descriptors (4069f7a)
  • refactor(reranker): move dampeningSource from trajectory-level to per-signal DerivedSignalDescriptor (f299a06)
  • refactor(reranker): per-source adaptive bounds, fix all derived signal sources (1b9dbc6)
  • refactor(search): address code review β€” import canonical RankingOverlay, guard empty git (18405b3)
  • refactor(search): consolidate types β€” remove duplication from reranker.ts (a370253)
  • refactor(search): DampeningConfig DI β€” remove trajectory-specific hardcode from Reranker (cf21672)
  • refactor(search): delegate git filters to TrajectoryRegistry.buildFilter() (fbe22c8)
  • refactor(search): extract structural signals into individual classes (c9322c9)
  • refactor(search): generic Reranker with PayloadSignalDescriptor[] and dot-notation (cfff0a5)
  • refactor(search): remove facade functions, fix domain boundary, simplify constructor (73835d6)
  • refactor(search): support tools[] matching and overlay mask in Reranker (8724c8f)
  • refactor(search): update preset resolution for tools[] array (1b0b0b3)
  • refactor(search): wire resolved presets into Reranker via optional DI (92a0fa8)
  • refactor(trajectory): convert gitSignals to gitPayloadSignalDescriptors (927d915)
  • refactor(trajectory): extract git derived signals into individual classes (e27517b)
  • refactor(trajectory): extract preset classes with overlay masks (51e9413)
  • refactor(trajectory): move TrajectoryRegistry to trajectory/index.ts (8429bf4)
  • refactor(trajectory): rename signals.ts β†’ payload-signals.ts, add stats to all numeric signals (531599b)
  • docs: add claude rules for payload-signals and rerank-presets (bd12711)
  • docs: add metaOnly git masking design (bf73d23)
  • docs: signal taxonomy glossary in CLAUDE.md (a02b471)
  • docs: update CLAUDE.md with preset class architecture and derived-signals layer (314ee16)
  • docs: update CLAUDE.md with reranker modularization changes (e79b663)
  • fix(chunker,search): metaOnly fields, 0-line chunks, body chunk merging (215b636)
  • fix(bootstrap): remove direct Reranker import, use CompositionResult type (b10833e)
  • fix(chunker): ensure minimum 1-line span for single-line AST nodes (45abfe8)
  • fix(contracts): remove non-null assertions in computeCollectionStats (b53b509)
  • fix(filters): correct stale Qdrant keys, add level-aware ageDays/commitCount (eac899d)
  • fix(presets): correct weights/overlays/tools, remove impactAnalysis, DRY defaultBound (d3799fa)
  • fix(reranker): fix chunk-only scoring, onboarding overlay, and adaptive bounds (39b90ce)
  • fix(trajectory): canonical file./chunk. sources, deduplicate chunk signals (da632ac)
  • fix(website): mobile sidebar and TOC broken by CSS containing block (e9e9693)
  • fix(website): restore search icon and make it gold in dark mode (f5e8201), closes #c5a864 #333
  • chore: remove dead code and stale re-exports (9e406f1)
  • chore(beads): plan reranker infrastructure tasks and techDebt redesign (d296e36)

0.5.3 (2026-02-25)​

  • docs: add chunk metrics and interaction model research documents (8c71159)
  • ci: use RELEASE_TOKEN PAT for semantic-release to trigger CI on release commits (7707697)

0.5.2 (2026-02-24)​

  • fix(ci): relaunch ci (2c821b6)
  • fix(ci): remove [skip ci] from semantic-release to fix Codecov coverage tracking (1cab357)

0.5.1 (2026-02-24)​

  • refactor: remove dead git field from ChunkItem, fix CI coverage (267a0ab)
  • ci: merge docs deployment into release pipeline (1ac3905)

0.5.0 (2026-02-24)​

  • build: reset versioning to 0.4.0 and add dual changelog output (464e7e3)
  • fix: make README logo clickable, links to docs site (31f8eeb)
  • fix: point all repo links to artk0de/TeaRAGs-MCP (b9edcd7)
  • fix: resolve all ESLint issues (329 β†’ 0 problems) (b07f753)
  • fix: update verify-providers.js import path after refactoring (6cbf6c2)
  • fix: use full-size logo in README (3a7c0d2)
  • fix(ci): exclude website tests from main suite, scope docs deploy to website/** (7981503)
  • fix(website): address code review β€” deps, ref placement, resetSeenHashes (b980b94)
  • fix(website): correct baseUrl to /TeaRAGs-MCP/ for GitHub Pages (cc74bf4)
  • fix(website): dino now reaches chicken before catch bang fires (38310d3)
  • fix(website): use useBaseUrl for logo path in DinoLogo (d6de9fa)
  • chore: merge refactor/solid-ingest-pipeline into main (96b62ea)
  • chore: sync beads from main (fbaf5d5)
  • test: add multi-provider and empty-provider coordinator tests (743a6e1)
  • test: restructure tests to mirror src/ and raise coverage to 95% (be7a4d9)
  • refactor: decompose EnrichmentModule into coordinator + chunk-churn + metadata-applier (6000857)
  • refactor: decompose src/ into bootstrap/core/mcp domain layers (SRP) (e100933)
  • refactor: delete deprecated git-metadata-service and blame types (8c8650a)
  • refactor: extract basic git operations to adapters/git/ layer (14db196)
  • refactor: extract chunk-reader from git-log-reader, move pathspec to adapters (33d1c66)
  • refactor: extract EnrichmentProvider interface and extractTaskIds to enrichment/ (919d6f3)
  • refactor: extract file-reader from git-log-reader (257ce77)
  • refactor: extract git enrichment cache to enrichment/git/cache.ts (81f707a)
  • refactor: extract infrastructure from orchestrators (Phase 6) (80153bb)
  • refactor: extract pure metrics to enrichment/git/metrics.ts (497f42e)
  • refactor: extract shared lifecycle into BaseIndexingPipeline (Phase 5) (f5bb62d)
  • refactor: inject dependencies via IngestDependencies factory (Phase 5b) (36d8a31)
  • refactor: layer git types and move GitLogReader into enrichment domain (76d525c)
  • refactor: make EnrichmentCoordinator multi-provider with ProviderState map (1e1adb6)
  • refactor: move enrichment into pipeline/, git into pipeline/enrichment/trajectory/git/ (6301ee4)
  • refactor: move git/ and enrichment/ into ingest/trajectory/ domain (Phase 8) (1582fce)
  • refactor: move status-module and indexing-marker into pipeline/ (2cfb1e2)
  • refactor: remove hardcoded git payload from ChunkPipeline (51dfe9e)
  • refactor: remove isomorphic-git heavy fallbacks to prevent OOM on large repos (f28cbf7)
  • refactor: reorganize pipeline/ into infra/, chunker/infra/, chunker/utils/ (8f97197)
  • refactor: restructure ingest/ domain layout (7596072)
  • refactor: SOLID cleanup of ingest domain β€” facades, Template Method, DRY (29612a1)
  • refactor: wire EnrichmentCoordinator, nested payload, delete old modules (ab65bae)
  • refactor: wire EnrichmentRegistry into IngestFacade, remove git guards from base (f3397c2)
  • feat: add createEnrichmentProviders registry factory (901acf9)
  • feat: create generic EnrichmentApplier with nested payload structure (0b4d785)
  • feat: create generic EnrichmentCoordinator with provider interface (27cf0dd)
  • feat: create GitEnrichmentProvider implementing EnrichmentProvider interface (89fa2a3)
  • feat(website): add Docusaurus documentation site with unified signal naming (a2c9efc)
  • docs: condense README with emojis and trimmed docs table (0cd340f)
  • docs: multi-provider enrichment architecture design (8d03350)
  • docs: multi-provider enrichment implementation plan (7ac870f)
  • docs: trajectory enrichment redesign plan (6cafd0c)