Release Notes
Added
- (sync) a removed device re-enrolls under a fresh identity (#1477)
- (sync) list, remove and promote account devices (#1471)
- (mcp) memory_get, and memory_update and find_clones absorb their near-duplicates (#1451)
- (mcp) history_for and history_search replace eleven history tools (#1449)
- (plugin) expose the plugin's rag-rat on PATH through a ~/.local/bin shim (#1428)
- (enrollment) carry the checkpoint digest on the invite ticket (#1413)
- (checkpoint) propose, inspect and report control checkpoints (#1311) (#1411)
- (sync) persist and report unresolved table-row causes (#1344)
- (sync) key memory summaries by memory so a regeneration syncs as one upsert (#1320)
- (dream) flag memories derived from a dead source (#1444) (#1503)
- (dream) memory_duplicate findings for near-duplicate memory pairs (#1445) (#1484)
- (memory) warn on near-duplicate memories at memory_create (#1445) (#1478)
- (memory) hybrid memory_search with a vector arm over cached memory embeddings (#1443) (#1472)
- (mcp) list the coding surface by default and move maintenance tools into opt-in toolsets (#1442)
- (enrollment) refuse an invite the pin moved out from under (#1311) (#1414)
- (oplog) persist permanent account pins and block unsupported authority (#1352)
- (sync) restate a writer's own deletes so compaction can reclaim the entries that first stated them
- (enrollment) let any owner enroll a device (#1416) (#1420)
- (oplog) let any owner author, not only the founder device (#1416) (#1418)
- (checkpoint) store a pin's evidence for this store's own account (#1311) (#1412)
- (oplog) encode control-checkpoint bundles for transport (#1311) (#1410)
- (oplog) author a control-v2 device removal with its view manifest (#1311) (#1408)
- (oplog) sign a pinned account's control ops as control v2 (#1311) (#1406)
- (oplog) project applied v2 operations through the v1 effect pass (#1311) (#1405)
- (oplog) read folded authority under a pin this binary executes (#1311) (#1398)
- (oplog) make a control v2 cut's pre-cut manifest durable (#1364)
- (oplog) fold control v2 register effects into a pinned account's authority history (#1311) (#1363)
- (oplog) fold a pinned account from its checkpoint instead of retracting it (#1361)
- (oplog) execute owner-authorized control v2 cuts over a pinned checkpoint (#1355)
- (oplog) add isolated control v2 grammar and replay planning (#1351)
- (oplog) verify externally pinned legacy checkpoints for control v2 (#1350)
- (cli) expose tool catalog as native subcommands (#1273)
- (sync) sync devices through active MCP (#1114)
- (lens) add authenticated VS Code repository lens (#985)
- (distill) default to the validated 30B ephemeral box, with distillation docs (#876)
- (plugin) opencode plugin bundle — @rag-rat/plugin-opencode (MCP + hooks) (#785)
- (lang) add Swift baseline support (#639)
- (papertrail) add native GitHub project mirror (#638)
- (papertrail) add provider-neutral schema (#632)
- (plugin) one-step plugin for Claude Code + Codex — MCP via npx, harness-neutral hooks (#569)
- (dist) ship an android/Termux binary + make npx @rag-rat/bin work there (#616) (#621)
- (index) global database by default, rag-rat consolidate importer (#402) (#419)
- (embed) remote Ollama embedding — connect + ephemeral cookbook, hardened (#317/#318) (#330)
- (clones) write-time clone check — warn agents when they're duplicating existing code (#287) (#289)
- (clones) precompute the clone-edge graph in the background so find_clones scales (#286) (#288)
- cross-platform support — macOS + Windows (#244)
- (index) clone-detection fingerprint substrate — SourcererCC inverted index (#215) (#229)
- (impact) compact repo-memory view by default; full bodies on request (#37) (#194)
- (eval) gate eval behind a non-default feature + add CI eval job (#162)
- confidence-aware + SCIP-aware symbol importance ranking (#108) (#142)
- default to TOON output for CLI + MCP, --json opt-out (#104) (#123)
- (search) always-present retrieval_mode on every hit (#41)
- Claude Code grep-augmentation PreToolUse hook (#56)
- (embed) selectable embedding backend (minilm | model2vec | none) + init nudge
- background index file watcher (live freshness for uncommitted edits)
- (gc) worktree-safe pruning of dead-commit index rows
- (hooks) manage a post-commit reindex+reconcile hook
- (index) support C and C++ projects
- polish fastembed operational status
- expand ranking eval harness
- add real embedding backend abstraction
- add search evaluation harness
- parallelize indexing and embeddings
- add local vector search
- add discover incremental indexing
- add explicit schema migrations
- populate syntactic graph edges
- reconcile local ai artifacts
- cache github papertrail evidence
- index git history and blame
- broaden tree-sitter structural indexing
Fixed
- (ci) replace deprecated atomic fetch_update and format long lines for rustfmt
- (cli) close the dead ends and wrong turns in onboarding (#1430)
- (cli) run git hooks through the pinned npx package and keep the pin current (#1425)
- (oplog) refuse to extend a chain the device has forked (#1417) (#1424)
- (enrollment) never Debug-print an invite's one-time nonce (#1419) (#1422)
- (oracle) reject an unknown corpus tool or tier when the profiles load
- (index) stop indexing function-local variables as symbols (#1501)
- (index) recover whole declarations beneath ERROR nodes (#1487)
- (index) stop type references binding their own declaration or a non-type (#1485)
- (index) read names from grammar fields, not whole-subtree identifier scans (#1475)
- (oplog) grant the view-manifest reserve only to a manifest a stored cut cites (#1367) (#1394)
- (oplog) judge invite-reservation expiry by the wall clock (#1365)
- (oplog) retract a pinned account's projections and park its table entries once (#1360)
- (sync) pad discovery announcements to hide roster size (#1349)
- (core) advance migration replay test pin to schema v129 (#1347)
- (sync) retain outstanding suffix tips after floor adoption (#1346)
- (core) reject malformed local distill source tokens during hydration
- (core) raise rebind's durability guard after the backfill it runs
- (core) omit full error details from watcher test diagnostics
- (core) roll back failed overlay refresh commits
- (mcp) trim the repeated worktree description and advertise docs_for_symbol's real arguments (#1441)
- (db) discard derived verification rows during late repo merge (#1335)
- (papertrail) read a drifted error-class token as an unknown failure
- (oracle) gate indexed definition documents on index-vs-disk drift
- (query) recognize graph seed extensions from the language registry
- (clones) stop charging the template-lane cell budget for skipped members
- (sync) let a newer floor supersede an unfinished suffix obligation (#1502)
- (sync) let the accepted tail win a disagreeing chain witness instead of failing the session (#1499)
- (sync) re-adopt a removed writer's live rows at their original identity (#1498)
- (sync) skip a diverged table chain instead of failing the whole session (#1494)
- (oplog) let pre-V133 stores upgrade by reading an absent retired-identity table as empty (#1483) (#1493)
- (sync) serve a purge-restored table chain to peers behind its witness (#1490)
- (oplog) keep a device removal authorable when the ordinary budget is full (#1409) (#1423)
- (oplog) bound one signer's share of the view-manifest reserve (#1393) (#1403)
- (oplog) read folded authority under a pin, and gate the authoring seams (#1399) (#1400)
- (oplog) filter the v2 execution pool instead of refusing inside a bundle (#1395, #1396) (#1397)
- (oplog) keep a chain closed once a register join cannot decide it (#1368) (#1374)
- (oplog) correct stale control v2 composition docs and pin a forked revocation (#1366)
- (oplog) park a control v2 cut whose cited mint was not supplied (#1358)
- (oplog) identify malformed stored ids by their actual field
- (sync) bound an entries page by bytes as well as entry count (#1371) (#1373)
- (sync) refuse a writer nonce presented to the pairing flow as unknown
- (sync) report enrollment transport failures as transport, not storage
- (sync) report a stalled session peer as a timeout, not a protocol violation
- (sync) refuse an over-cap account-lane frame before writing it
- (mcp) tool-output quality pass — correctness, verbosity, descriptions
- validate drift anchors before returning context
- enforce fts freshness invariant
- switch rag-rat indexing back to sqlite
Other
- (setup) move repo scan, the config draft and git hooks into a rag-rat-setup crate (#1454)
- (deps) bump Rust 1.98, crates, cookbook images, npm locks and CI actions (#1453)
- (cli) share command parsing, locking and maintenance reports (#1336)
- (oplog) share account authority operations and type identifiers (#1338)
- (core) type clone delta report status tokens
- (sync) make SyncAlpn the crate's ALPN type for dialers and dispatchers
- (mcp) correct test references that name things that no longer exist
- (base) finish moving base's fixtures onto ScratchDir and test_git
- (base) keep the embedding registry to one row per model
- (base) route every hex encoding through base::hash
- (base) name the global and per-worktree listener lock families
- (base) settle the config enums on strum tokens and one config parser
- (base) back Language tokens with strum and rename as_str to as_db_str
- (oracle) pass the drift-gate snapshots as one ShaSnapshots bundle
- (sync) pin live table rows through the chain that carries them (#1495)
- (index) make per-language steps fail loudly, not silently (#1474)
- (index) node-kind tripwires for every language backend and the clone engine (#1473)
- (core) share index pipeline contracts and finalization (#1341)
- (core) clarify query and embedding API boundaries (#1340)
- (core) share graph extraction rules and clarify healing phases (#1339)
- (core) avoid dumping sync effects in assertion failures
- (core) move the remaining inline test tails into #[path] sibling files
- (core) read sync_driver's kv timestamps through typed meta accessors
- (core) split grep-augment's compose into its three lanes
- (core) carry the discovery advertisement's identity as one AdvertisementIdentity
- (core) reattach drain_synced_memory's doc and drop prompts.rs's module-wide dead_code allow
- (core) give the stream seal-policy and access-mode intents a token surface
- (core) route every lexical search entry point through LexicalQuery
- (core) share eval's recall predicates and pass its search knobs as SearchTuning
- (core) remove the unused search::hybrid and search::semantic modules
- (core) merge eval expectation lanes through one accessor pair
- (core) build signed node content and edge specs from the rows that carry them
- (core) split sync_driver's reconcile and resident start into named phases
- (core) share distill source tokens in the thread identity module
- (core) run distill extract and drain through one transaction helper
- (core) colocate watcher tests with their modules
- (core) split consolidation by import responsibility
- (core) name watcher pass inputs and lifecycle stages
- (core) document overlay transaction failure policies
- (core) share connection scope keys and view columns
- (core) report watcher overlay failures through tracing
- (core) pair on-open repairs with their read-only gates
- (core) bump overlay revisions in their matching change arms
- (core) name consolidation child slices and metadata sides
- (core) carry checkout keys through overlay scopes
- (core) enforce poison tripwire coverage from the schema registry
- (core) describe poison coverage against the current schema
- (core) align lifecycle documentation with its functions
- (db) move EdgeConfidence below the read layer and hang its ladders off it
- (query) type the persisted memory kind, status, confidence, source and relocation reason
- (db) tighten the digest lane and chunk-text decoder primitives
- (dream) type finding status and expose a typed kind on worklist and review rows
- (llm) cover endpoint redaction in the crate that owns it
- (base) name the workspace dir, legacy database, and imported marker
- (oracle) type the persisted run status as RunStatus
- (papertrail) isolate the reference-driven sync lane in ref_sync
- (papertrail) type the report's pause reason and sync-error status
- (mcp) drive tool schema checks from a complete per-tool table
- (mcp) turn the hook listener's task body into an ordinary function
- (mcp) export only the catalog's contract from the tools module
- (mcp) declare the resurface window once for both dedup lanes
- (mcp) route the clone file lens through file_lens
- (mcp) share the lens discovery record and serve options between serve paths
- (mcp) escalate graph completeness risk on the typed report
- (mcp) build the graph tools' traversal options in one place
- (mcp) declare the symbol selector and handle encoding once
- (mcp) stop advertising search knobs the plain full-text tools discard
- (base) share the config test fixtures instead of copying them
- (base) honour the crate's own clock, version, and import seams
- (base) resolve [index] root through one helper in Config::load
- (base) derive the retention sweep's owned log names from Role
- (db) split migrations into ladder infrastructure and per-era step modules
- (db) move the migration ladder's interleaved test modules into their own files
- (db) render PurgeIdSet's live subquery and temp capture from one descriptor
- (db) name the registration outcomes in a Registration enum
- (db) extract the adoption re-point phase into repoint_scoped_rows
- (db) route sqlite_master existence probes through one helper
- (db) pin the late-merge periphery list to its A5 prefix and fix stale coverage prose
- (db) retire the stale migration-registration doc and tests that cannot fail
- (db) carry each migration's ledger-atomic and refold flags in the roster
- (db) build SchemaStatus through one constructor
- (db) correct stale module headers and unresolvable cross-crate doc links
- (papertrail) split the mirror runner's test tail by concern
- (papertrail) route ref grammars on one reported MatchedShape
- (papertrail) fold the configless legacy-grammar fallback into parse_tracker_refs
- (papertrail) declare the transport's GitHub quota quirks as ProviderQuirks
- (papertrail) bind delete_item's item identity once
- (papertrail) bind the remaining enum tokens in SQL instead of spelling literals
- (papertrail) state the ref-kind claim rank once on RefKind
- (papertrail) type the mirror cursor's processed item kind as ItemKind
- (papertrail) derive the error-class tokens and bind the pause class in SQL
- (papertrail) name the persisted-health, symbol-span and issue-target shapes
- (papertrail) key evidence coalescing on RecordKey
- (papertrail) share the previous-civil-day rule between mirror and GitLab
- (papertrail) reattach the commit-closer doc block to its function
- (papertrail) route the tag and token fingerprints through hex_lower
- (llm) make lib.rs an index of the crate's surface
- (llm) correct provisioning visibility and stale module paths
- (llm) name the sweep's failure-breaker budget once
- (llm) build the tuner's and the benchmark's probe workload in one place
- (llm) put the cookbook's platform process handling behind named shims
- (llm) derive the embedding provision deadline from provision_deadline
- (llm) type CookbookInput's backend and capability
- (llm) fold the embedder's BuildParams into ProvisionedEmbedderParams
- (llm) build every Authorization header in the shared http transport
- (oracle) split backend tests by subject and narrow the lsp dead-code allow
- (oracle) drop the stale phase-1 module headers and index every module
- (oracle) collect store.rs row iterators instead of hand-rolled loops
- (oracle) split the live pass's per-definition verdict write out of resolve_one_file
- (oracle) give check_library_usage's cost-ordered phases their own functions
- (oracle) spell the edge_oracle.kind SQL lists from OracleResolutionKind
- (oracle) declare each live backend's moniker source on its registry entry
- (oracle) share the edge-join-candidate SELECT and row mapper
- (oracle) pin the corpus profile hash
- (oracle) record an oracle run from a named OracleRunRecord
- (oracle) express every drift gate through one pinning predicate
- (query) share persisted memory test fixtures
- (query) move memory tests into sibling modules
- (query) curate graph and impact exports and remove row collectors
- (query) make scoped_weighted_fan_in delegate to its batched sibling
- (query) one short_name helper, and distinct names for the two qualified-symbol rules
- (query) keep ImpactCategory typed through ImpactSurface
- (query) read import/export dependents through one shared query
- (query) share the traversal hop SELECT and summary counts between directions
- (query) split important_symbols into its load, graph, seed and hydrate phases
- (query) compose forward_visibility_filter from its three clauses
- (query) name graph_meta's call-edge set and count/list predicates
- (query) read binding resolution shadows through one named fragment
- (query) name the live-memory status predicate once
- (dream) match divergence evidence on the resolver's own resolution labels
- (dream) keep the finding builders and imports in reading order
- (dream) move the verdict grounding guards into their own module
- (dream) write memory_reality through one UPSERT for both outcomes
- (dream) build the pack content-line set once per grounding check
- (dream) share each model pass's scope and failure-stamp preamble
- (dream) name the unassigned repo sentinel through LEGACY_REPO_ID
- (clones) share the RefineMember fixtures and import test names directly
- (clones) pass the anti-unify class as one ClassView
- (clones) drop the redundant per-group cancel poll in the maximality pass
- (clones) split coherence_split_cancellable into named stages
- (clones) gather member-run tokens and fold agreement in one place each
- (clones) share one annotation-type scan
- (clones) drive both LCS lanes through the budgeted path
- (clones) type SigParam::type_source as an enum
- (clones) name the v1 confidence thresholds and derive band steps
- (clones) list str_escaped_char in the shared string-body kinds
- (clones) restore the opening sentence of the MemberStatement doc
- (clones) drop the crate-visible ClassAlignment and OccSpan re-export
- (clones) write the star align's skip-and-sample arm once
- (clones) make CellBudget own its spent/exhausted state
- (oplog) pin that a rejected v2 removal is not final (#1415) (#1421)
- (oplog) pin that a citation records the payload, not the checkpoint it names (#1311) (#1404)
- (oplog) pin that a v2 revocation's content cut reaches the projection (#1311) (#1402)
- (oplog) pin the last two rows — absent-verdict default and the reservation headroom refusal (#1372) (#1392)
- (oplog) a condemned removal must not tombstone the device it names (#1372) (#1390)
- (oplog) pin the mint gate a demote's peer-supplied owner_id reaches (#1372) (#1388)
- (oplog) make every plan_replay bound and refusal attributable (#1372) (#1386)
- (oplog) pin every conjunct of the v2 candidate admission check (#1372) (#1385)
- (oplog) pin the two structural refusals in the replay planner (#1372) (#1384)
- (oplog) compose two applied cuts so the ordering and epoch rows are reachable (#1372) (#1383)
- (oplog) complete both sides of the v2 register preconditions (#1372) (#1382)
- (oplog) let the determinism fixtures reach two of the fold's sort components (#1372) (#1381)
- (oplog) route the executor's two verdict maps through pure functions (#1372) (#1380)
- (oplog) pin the three preconditions a v2 revocation must satisfy (#1372) (#1379)
- (oplog) pin the control v2 ancestry walk's step conditions (#1369) (#1376)
- (oplog) trim the checkpoint legacy trace to what execution reads (#1359)
- (sync) pin v1 revocation credit and plan explicit account upgrades (#1343)
- (oplog) move large test modules to sibling files
- (oplog) retain typed pending reasons in ingest outcomes
- (oplog) share the identity-keyed wire set rules
- (oplog) carry row keys and clocks through merge bookkeeping
- (oplog) name projection ordering and assembly phases
- (oplog) name the persisted pre-context stream placeholder
- (oplog) name the (lamport, entry hash) chain cursor
- (oplog) add field-aware constructors for stored fixed-width ids
- (oplog) type the /5 scope id as ScopeId
- (oplog) derive the node-status and override-action wire tokens with strum
- (oplog) write the signed and stream-identity preimages through VecEncoderExt
- (oplog) retire the stale crate header, dead-code allows and mangled comments
- (sync) pin the two peer-facing caps a session cannot do without (#1372) (#1378)
- (sync) move the large inline test tails into tests modules and share the in-memory stores
- (sync) split endpoint.rs into a module directory by concern
- (sync) type the sync_invites role column as a StoredInviteKind
- (sync) share the redeem-under-writer-lock scaffold between both invite kinds
- (sync) expose transport error sources and derive discovery errors
- (sync) share one bounded dial between the two enrollment dialers
- (sync) bound every lane's frame IO through one deadline helper
- (sync) route every length-prefixed framing through one reader and writer
- (sync) carry the table session's idle timeout in its limits and pass capabilities, not bools
- (sync) generate the op-log stores' NodeAuth impls from one macro
- (sync) name lanes without ALPN-like suffixes and map every module in the crate docs
- (sync) pin framing bytes and refusal boundaries before consolidation
- document Go language support (#1061)
- (deps) upgrade Rust dependencies (#933)
- (readme) link the rag-rat.cq27.dev site (#749)
- split config.md into per-topic pages under docs/config/ (#669)
- explain Codex MCP approval for reviews (#628)
- (benchmarks) refresh kernel-index + SCIP-oracle numbers to v0.15.0 (#563)
- (init) print the MCP connect command instead of auto-registering (#542)
- complete the MCP tool catalog, trim the README, make the skills MCP-native (#539)
- (readme) reframe as an agent-workflow conversion path (#359)
- list Python in the README's code-graph languages (#183)
- rewrite README, add oracle/grep-augmentation docs, fix MCP setup footgun
- integrate release-plz with lockstep workspace versioning (#124)
- Auto-migrate forward on open — no manual
rag-rat migrate (#102) (#103)
- (readme) SCIP oracle capability, benchmarks section + Bencher badge
- (readme) lead with positioning + surface the grep-augmentation proof
- (readme) add crates.io badge, drop hardcoded release version
- GitHub Actions for fmt, clippy, test, full build, and coverage
- v0.3.2
- add Opus 4.8 take to README
- v0.3.1
- v0.3.0
- v0.2.0
- move install guide near overview
- prepare crates.io release
- simplify command examples
- use sequence diagram for evidence flow
- add evidence flow diagram
- describe rag-rat init workflow
- Add interactive init command
- Document generic installation flow
- Add GPT-5.5 usage quote
- Add MIT license
- Document supported rag-rat features
- simplify rag-rat config examples
- Add bounded maintenance hooks
- Configure default embedding runtime profile
- Add commit-addressable worktree overlays
- Add logical symbol groups for graph exactness
- Optimize embedding reconciliation
- Improve graph resolution trust modes
- add MCP server install guide
- cover sqlite baseline status
- Initial rag-rat workspace
Install rag-rat 0.24.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/cq27-dev/rag-rat/releases/download/v0.24.0/rag-rat-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/cq27-dev/rag-rat/releases/download/v0.24.0/rag-rat-installer.ps1 | iex"
Install prebuilt binaries into your npm project
npm install @rag-rat/bin@0.24.0
Download rag-rat 0.24.0