Changelog

Every version, every fix, every improvement — documented in full.

Fixed
  • Benchmark symbol probe on external repos_BENCHMARK_SYMBOLS was hardcoded to CogniRepo's own symbols; running against flask/fastapi/celery returned symbol_hit_rate: 0.0. Now samples 5 symbols from the target repo's own AST reverse index via _sample_repo_symbols(). tools/benchmark.py
  • Benchmark precision golden set ignores repo-specific files — Now checks for benchmark_golden_{'{repo_name}'}.json first; falls back to generic file if no repo-specific set exists. tools/benchmark.py
  • manifest.json missing 2 toolsfind_symbol_path and get_service_endpoints were registered via @mcp.tool() but absent from the manifest; tool count was 32, now 34. server/manifest.json
  • scripts/sync_version.py — Now also syncs server.json packages[0].version (was leaving it stale).
  • .env resolved from wrong directoryload_dotenv() now uses find_dotenv(usecwd=True) so project .env is always loaded from the user's project, not the package source file.
Docs
  • docs/ARCHITECTURE.md — Corrected retrieval section from "four signals" to 3-signal weighted merge; BM25 role clarified; node and edge types updated to match real code constants.
  • docs/CONFIGURATION.md — Rewrote model config example to real four-tier QUICK/STANDARD/COMPLEX/EXPERT registry; corrected storage layout filenames.
  • docs/CLI_REFERENCE.md — Added missing commands: setup, migrate-config, ask, benchmark, search-docs, log-episode, history, seed, sessions, watch, user-prefs.
Added
  • glama.json — Glama MCP registry descriptor at repo root. All 34 MCP tools listed with inputSchema; includes $schema, name, description, license, homepage, and repository fields for discovery at glama.ai/mcp. glama.json
Added
  • version.yml — Single source of truth for version, name, description, author, repo URL, and MCP metadata. All code and static artifacts derive from it.
  • scripts/sync_version.py — Propagates version.ymlpyproject.toml, server/manifest.json, server.json. Supports --check flag for CI drift detection.
  • MCP registry entry (server.json)$schema, title, repository, and packages[].packageArguments fields added for MCP registry compatibility.
  • README — Added mcp-name header, GitHub Stars badge, project banner image, streamlined architecture section.
Biggest release since 1.0.0. Install size cut from ~1.5 GB to ~50 MB (no PyTorch/CUDA). 34 tools, new get_agent_bootstrap(), behaviour tracking, atomic writes, org rewire, and 25+ bug fixes.
Added
  • get_agent_bootstrap() MCP tool — Single-call session start replacing a 4-call sequence. ~300 tokens vs ~900 — massive efficiency gain for agents.
  • supersede_learning() MCP tool — Deprecate and replace an outdated memory entry in one call. No more stale knowledge accumulation.
  • cognirepo org rewire — Re-runs cross-service CALLS_API detection for every indexed org repo; repairs edges missed when services were indexed in the wrong order.
  • org_wide_search transparency — Returns {'{'}{'{'}results, count, repos_searched, repos_skipped{'}'}{'}'}} — missing repos are now visible instead of silently absent.
  • who_calls coverage honesty — When static call graph returns ≤2 callers, grep fallback is merged in and a coverage_note warns about dynamic/interface dispatch.
  • Behaviour tracking — Opt-in query recording across context_pack, lookup_symbol, who_calls, semantic_search_code, episodic_search. Encrypted when encryption is on. Auto-summarizes interaction style every 10 queries.
  • Service port auto-detectioncognirepo init detects server.port, YAML port:, and .env PORT=; surfaced via get_agent_bootstrap child_services.
  • indexing.unskip_dirs config — Un-skip default-skipped directories per repo (companion to skip_dirs).
  • Doctor checks 18–20 — AST index JSON validity, doc-index populated, org CALLS_API edges present. Now validates all 34 registered MCP tools.
  • queried_symbols + recently_modified_files in session brief — Replaces the misleading hot_symbols label.
Changed
  • pip install cognirepo — ~50 MB (was ~1.5 GB) — fastembed/ONNX replaces sentence-transformers + PyTorch. No more CUDA/nvidia packages on pip install cognirepo.
  • org_wide_search — Marked as PRIMARY cross-repo tool; org_search marked DEPRECATED fallback.
  • behaviour.json — Encrypted/decrypted using same Fernet key as graph.pkl when encryption is on.
Fixed (25+ bugs)
  • Encryption flag read from wrong repoget_storage_config() was resolving .cognirepo/config.json relative to bare CWD; 76k-node kubernetes graph reported 0 nodes on load (silent empty graph bug).
  • Segfault at end of large-repo indexing — chromadb 1.5.8 Rust core hits infinite recursion on large stores. Fix: doc ingestion now runs in isolated subprocess; crash-evidence self-heal with .opening sentinel and automatic quarantine.
  • context_pack empty on Kubernetes-style reposstaging/ removed from default skip dirs (holds real first-party source in k8s).
  • AST index corruption on large repos — Writes are now atomic (tmp + os.replace + fsync). Corrupt files renamed .corrupt and self-heal on load.
  • Subgraph memory blowup — Bounded BFS (hub nodes with degree > 500 skipped). Responses capped at ~30k chars. A single subgraph(depth=3) can no longer inflate RSS past the circuit-breaker limit.
  • Cross-process memory freshnessLocalVectorDB reloads FAISS index + metadata when another process wrote them (mtime check before searches). Long-lived MCP servers no longer serve stale snapshots.
  • Go structs/interfaces missing from indextype_spec added to tree-sitter class types; architecture_overview now shows Scheduler, Kubelet etc. for Go repos.
  • fastembed migration — Removed all model.encode() calls across 11 files; replaced with model.embed() generator API.
  • Memory duplicatesstore_memory and learning store dedupe identical (whitespace-normalized) text.
  • BFS O(n) queuelist.pop(0)collections.deque.popleft() in 3 locations.
  • context_pack response shape — Always returns {'{'}{'{'}query, status, token_count, sections, truncated{'}'}{'}'}}; no more 3 different shapes.
  • And 15+ more fixes — see full CHANGELOG on GitHub.
Docs
  • docs/MCP_TOOLS.md — All 34 tools documented.
  • MANUAL_TEST_SUITE.md — 39-test manual test suite with prompts and result blocks.
First stable release. Production-ready, Development Status: 5 - Production/Stable. 32 MCP tools, CI pipeline, external benchmark validation, multi-agent support.
Added
  • cognirepo setup — One-command onboarding: init + index + writes MCP configs for Claude, Cursor, VS Code.
  • get_last_context() / get_session_brief() — Resume full session state in <1s. New agent picks up mid-thought from where the previous stopped.
  • repo_path parameter on all 32 MCP tools — Single server process serves multiple repos without cross-repo data leaks.
  • _repo_ctx() context manager — Thread-safe per-call repo scope switching via ContextVar.
  • Idle resource eviction — Evicts embedding model, KnowledgeGraph, ASTIndexer after configurable idle TTL (default 10 min); frees ~400 MB+.
  • GET /status/detailed REST endpoint — Full diagnostics JSON (uptime, FAISS size, graph stats, circuit breaker).
  • Grafana dashboard — Pre-built Grafana 10 dashboard (HTTP rate, latency p50/p95, FAISS vectors, graph nodes/edges) at deploy/grafana/cognirepo.json.
  • precision@k benchmark — External repo golden sets for flask, fastapi, celery, ansible.
  • CI workflow — pytest on Python 3.11 and 3.12; bootstraps .cognirepo index before suite; --cov-fail-under=50.
  • Cursor MDC rules.cursor/rules/cognirepo.mdc with alwaysApply: true, session-start sequence, NEVER directives.
  • VS Code MCP config.vscode/mcp.json for VS Code / GitHub Copilot integration.
Changed
  • Install size ~75% smalleranthropic, google-generativeai, openai moved to [providers] optional extra.
  • cognirepo doctor exit codes0=healthy, 1=warnings only, 2=any error.
  • publish.yml — Migrated to OIDC trusted publishing; wheel-smoke job added between build and publish.
Fixed
  • org_graph.py concurrent writes_org_lock() using ~/.cognirepo/org_graph.lock; Fernet encrypt/decrypt on load/save.
  • lookup_symbol(include_org=True) thread-safety — Replaced process-wide globals with _CTX_DIR.set() / _CTX_DIR.reset() ContextVar pattern.
  • Concurrent cache miss amplification_IN_FLIGHT dict + threading.Event dedup; N concurrent misses → 1 retrieve call.
  • Test suite — 702 passed, 14 skipped, 2 xfailed, 0 failures. All cross-contamination eliminated.
Added
  • Cross-repository discovery and retrieval — Query symbols and context from other repos in the same local organization.
  • Project-scoped shared memory — Hierarchical organization/project structure with shared FAISS stores.
  • Local hierarchical summarization — Zero-API tree-based summaries of files, directories, and the entire repository.
  • .env seeded on cognirepo init.env.example shipped as package data and copied to .env on first init.
Fixed
  • Tree-sitter decorators and tags_walk_ts now extracts decorator names for FUNCTION and CLASS nodes. Previously @property, @classmethod, @app.route were silently dropped.
  • INHERITS edges — CLASS nodes now populate bases. EdgeType.INHERITS edges correctly written to knowledge graph for the first time.
  • CONSTANT / VARIABLE / TYPED_FIELD / LAMBDA absent from default index_parse_file now runs stdlib-ast after tree-sitter for Python files and merges results.
  • Arrow functions and const foo = () => ... — Added arrow_function and function_signature to _TS_FUNCTION_TYPES; JS/TS arrow-function assignments captured by variable name.
  • Stale graph nodes on re-indexindex_file() now calls graph.remove_file_nodes(rel_path) before re-parsing; deleted or renamed symbols no longer accumulate as orphan nodes.
Added
  • Zero-API QUICK-tier resolverorchestrator/model_adapters/local_adapter.py. Raises NoLocalAnswer to promote queries to STANDARD. Provider fallback chain with retry on UNAVAILABLE/DEADLINE_EXCEEDED.
  • AgentRegistry + Rich agents panel — Thread-safe AgentRegistry, SubAgent dataclass, render_agents_panel() Rich panel, streaming at 10 Hz.
  • /agents slash command — Lists sub-agent sessions, supports cancel <id>. /status shows active sub-agents when multi-agent is enabled.
  • cognirepo migrate-config — Renames legacy tier keys in config.json in-place with .bak backup.
Changed
  • Classifier tier names — FAST→STANDARD, BALANCED→COMPLEX, DEEP→EXPERT. Old keys in config.json raise ConfigMigrationError.
Added
  • Rich REPL faceliftRichUI with panels, syntax highlighting, and StdlibUI fallback.
  • Embedded docs FAISS indexcli/docs_index.py: markdown chunking, mtime-based staleness, confidence threshold 0.6. CogniRepo usage questions routed to QUICK tier.
  • CLI config file~/.cognirepo/cli_config.toml: [ui], [model], [session] sections. Session persistence: auto-save on every exchange. /save, /load, /index-repo slash commands.
  • Zero-friction init — Cursor (.cursor/mcp.json) and VS Code (.vscode/mcp.json) auto-config generated by cognirepo init.
Added
  • cognirepo doctor — Health checks with verbose output, exit codes (0=healthy, 1=warnings, 2=errors).
  • Encryption at rest — Fernet AES-128-CBC, secrets stored in OS keychain.
  • CI security gates — Bandit (HIGH severity), TruffleHog (verified secrets), Trivy (CRITICAL/HIGH CVEs), Snyk (CRITICAL dep vulnerabilities).
  • LICENSE, NOTICE, CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md — Full open-source compliance documentation.
Fixed
  • episodic_search ModuleNotFoundError — Declared rank-bm25>=0.2.2 as hard dependency in pyproject.toml.
  • stdout pollution — Removed print() from MCP-critical modules; replaced with logger.debug. Added CI guard scripts/check_no_stdout_pollution.py.
  • --project-dir and COGNIREPO_DIR not honouredorchestrator/session.py no longer captures session path at module-load time; all path resolution lazy via config.paths.get_path().
  • cron/prune_memory.py FAISS rebuild — Writes to configured project path instead of hard-coded relative ./vector_db/.
Added
  • COGNIREPO_GLOBAL_DIR env var — Redirect global storage (test isolation + containers).
  • Multi-platform smoke tests — Ubuntu / macOS / Windows × Python 3.11/3.12.
  • All 26 API tests passing — Fixed auth_headers fixture; removed silent skips.

Want the complete diff? View the raw CHANGELOG on GitHub.

Full CHANGELOG on GitHub