Fix/general improvements - #17
Merged
Merged
Conversation
- dimension mismatch no longer drops all embeddings on read opens; rebuilds only via explicit migrate paths (index, init --full, embed --reindex, MCP index_now/init_project) - config round-trip keeps http_timeout; read-only commands no longer create .urag/urag.toml - embedder: verify new model before purging old cache; MCP cache key includes dimension; fallback warnings to stderr - indexer: upgrade flags written after successful re-extraction; process-wide write lock; index_paths honors max_file_bytes - watcher: stale-timer flush race fixed - db: missing indexes added, % wildcard escapes, evidence off-by-one, orphan cleanup on migrate opens only - retrieve: definition-symbol regex bug, per-call regex compilation, top_k=0, budgets respect config ceiling - eval: orchestration moved to eval.run_eval; closures bind loop vars; chunk byte offsets; reresolve re-derives reference gold - extractors: C# parser caching, lazy tree-sitter, dead code removed - packaging: ruff config + CI lint step, license table, dev deps, changelog
- db: call-graph/reference queries moved to db_edges, search/navigation to db_search (mixins); public imports unchanged - extractors: native languages split into go/rust/java/c/csharp modules with native_common helpers; native_ext is a compatibility re-export - indexer: git repos skip re-hashing files that are clean vs HEAD with matching size+mtime; non-git keeps exact hashing - cli: --json for read, status, doctor; doctor exits non-zero on failure - retrieve: definition queries ignore common English words as exact identifiers - mcp: document harness-level tool prefixing (urag_search etc.); skill doc updated - tests: git fast-path, --json outputs, stopword helper; 158 passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Pre-release hardening pass: fixes three destructive/incorrect behaviors,
removes dead code, splits oversized modules, adds lint enforcement, and
expands the machine-readable CLI surface. Two commits:
fix: harden index lifecycle, embedder(6fa0c3c)feat: split storage and extractors, git-aware reindex, json outputs(339c1d0)Critical fixes
vector dimension differs from
embedding.dimensionpreviously dropped thewhole
vec_unitstable on any open (search, status, MCP). It now raises aclear error; rebuilds only happen via explicit migrate opens
(
urag index,init --full,embed --reindex, MCPindex_now).http_timeout(was silently reset to 30s).purged; MCP embedder cache key now includes
dimension; fallback warningsgo to stderr instead of degrading silently.
refs_pending/extractor_versionupgrade flagsare written only after successful re-extraction; a process-wide write lock
serializes watcher vs manual runs;
index_pathshonorsmax_file_bytes.--reresolvenow re-derives gold for reference questions(stale ids survived index rebuilds, producing false regressions).
Architecture
db.pysplit: call-graph/reference queries ->db_edges.py, search andnavigation ->
db_search.py(mixins).from urag.db import Databaseunchanged.
native_ext.pysplit into per-language modules (go_ext,rust_ext,java_ext,c_ext,csharp_ext) + sharednative_common.py;native_extremains a compatibility re-export.eval.run_eval(~290 lines).Python extractor defers tree-sitter grammar compilation to first use.
prefix them, e.g.
urag_search). No renames — renaming would double-prefixin harnesses like opencode.
Improvements
size+mtime skip re-hashing (modified/untracked still content-verified;
non-git repos keep exact hashing).
--jsonforread,status,doctor(doctor exits non-zero on failure).identifiers (precision boost, fewer false positives).
%wildcard escapes; evidence off-by-one;char-vs-byte chunk attribution; budget floors/config ceilings;
top_k=0.GitIgnoreSpec(removes ~3k deprecation warnings in tests).license = {text = "MIT"}; dead code removed(~1k net lines deleted).
Verification
pre-existing). Ruff clean.
tokens/run 727 -> 701; callers/transitive tokens 952 -> 940;
auto/lexical/references unchanged (0.947 / 0.947 / 0.928)
callers through interface fields, deadcode, eval).
uv buildwheel + sdist verified; wheel ships all new modules.