All notable changes to GitNexus will be documented in this file.
- Migrated from KuzuDB to LadybugDB v0.15 (
@ladybugdb/core,@ladybugdb/wasm-core) - Renamed all internal paths from
kuzutolbug(storage:.gitnexus/kuzu→.gitnexus/lbug) - Added automatic cleanup of stale KuzuDB index files
- LadybugDB v0.15 requires explicit VECTOR extension loading for semantic search
- Language-aware symbol resolution engine with 3-tier resolver: exact FQN → scope-walk → guarded fuzzy fallback that refuses ambiguous matches (#238) — @magyargergo
- Method Resolution Order (MRO) with 5 language-specific strategies: C++ leftmost-base, C#/Java class-over-interface, Python C3 linearization, Rust qualified syntax, default BFS (#238) — @magyargergo
- Constructor & struct literal resolution across all languages —
new Foo(),User{...}, C# primary constructors, target-typed new (#238) — @magyargergo - Receiver-constrained resolution using per-file TypeEnv — disambiguates
user.save()vsrepo.save()viaownerIdmatching (#238) — @magyargergo - Heritage & ownership edges — HAS_METHOD, OVERRIDES, Go struct embedding, Swift extension heritage, method signatures (
parameterCount,returnType) (#238) — @magyargergo - Language-specific resolver directory (
resolvers/) — extracted JVM, Go, C#, PHP, Rust resolvers from monolithic import-processor (#238) — @magyargergo - Type extractor directory (
type-extractors/) — per-language type binding extraction withRecord<SupportedLanguages, Handler>+satisfiesdispatch (#238) — @magyargergo - Export detection dispatch table — compile-time exhaustive
Record+satisfiespattern replacing switch/if chains (#238) — @magyargergo - Language config module (
language-config.ts) — centralized tsconfig, go.mod, composer.json, .csproj, Swift package config loaders (#238) — @magyargergo - Optional skill generation via
npx gitnexus analyze --skills— generates AI agent skills from KuzuDB knowledge graph (#171) — @zander-raycraft - First-class C# support — sibling-based modifier scanning, record/delegate/property/field/event declaration types (#163, #170, #178 via #237) — @Alice523, @benny-yamagata, @jnMetaCode
- C/C++ support fixes —
.h→ C++ mapping, static-linkage export detection, qualified/parenthesized declarators, 48 entry point patterns (#163, #227 via #237) — @Alice523, @bitgineer - Rust support fixes — sibling-based
visibility_modifierscanning forpubdetection (#227 via #237) — @bitgineer - Adaptive tree-sitter buffer sizing —
Math.min(Math.max(contentLength * 2, 512KB), 32MB)(#216 via #237) — @JasonOA888 - Call expression matching in tree-sitter queries (#234 via #237) — @ex-nihilo-jg
- DeepSeek model configurations (#217) — @JasonOA888
- 282+ new unit tests, 178 integration resolver tests across 9 languages, 53 test files, 1146 total tests passing
- Skip unavailable native Swift parsers in sequential ingestion (#188) — @Gujiassh
- Heritage heuristic language-gated — no longer applies class/interface rules to wrong languages (#238) — @magyargergo
- C#
base_listdistinguishes EXTENDS vs IMPLEMENTS via symbol table +I[A-Z]heuristic (#238) — @magyargergo - Go
qualified_type(models.User) correctly unwrapped in TypeEnv (#238) — @magyargergo - Global tier no longer blocks resolution when kind/arity filtering can narrow to 1 candidate (#238) — @magyargergo
import-processor.tsreduced from 1412 → 711 lines (50% reduction) via resolver and config extraction (#238) — @magyargergotype-env.tsreduced from 635 → ~125 lines via type-extractor extraction (#238) — @magyargergo- CI/CD workflows hardened with security fixes and fork PR support (#222, #225) — @magyargergo
- Fix FTS Cypher injection by escaping backslashes in search queries (#209) — @magyargergo
- Auto-reindex hook that runs
gitnexus analyzeafter commits and merges, with automatic embeddings preservation (#205) — @L1nusB - 968 integration tests (up from ~840) covering unhappy paths across search, enrichment, CLI, pipeline, worker pool, and KuzuDB (#209) — @magyargergo
- Coverage auto-ratcheting so thresholds bump automatically on CI (#209) — @magyargergo
- Rich CI PR report with coverage bars, test counts, and threshold tracking (#209) — @magyargergo
- Modular CI workflow architecture with separate unit-test, integration-test, and orchestrator jobs (#209) — @magyargergo
- KuzuDB native addon crashes on Linux/macOS by running integration tests in isolated vitest processes with
--pool=forks(#209) — @magyargergo - Worker pool
MODULE_NOT_FOUNDcrash when script path is invalid (#209) — @magyargergo
- Added macOS to the cross-platform CI test matrix (#208) — @magyargergo
- MCP transport buffer cap: Added 10 MB
MAX_BUFFER_SIZElimit to prevent out-of-memory attacks via oversizedContent-Lengthheaders or unbounded newline-delimited input - Content-Length validation: Reject
Content-Lengthvalues exceeding the buffer cap before allocating memory - Stack overflow prevention: Replaced recursive
readNewlineMessagewith iterative loop to prevent stack overflow from consecutive empty lines - Ambiguous prefix hardening: Tightened
looksLikeContentLengthto require 14+ bytes before matching, preventing false framing detection on short input - Closed transport guard:
send()now rejects with a clear error when called afterclose(), with proper write-error propagation
- Dual-framing MCP transport (
CompatibleStdioServerTransport): Auto-detects Content-Length (Codex/OpenCode) and newline-delimited JSON (Cursor/Claude Code) framing on the first message, responds in the same format (#207) - Lazy CLI module loading: All CLI subcommands now use
createLazyAction()to defer heavy imports (tree-sitter, ONNX, KuzuDB) until invocation, significantly improvinggitnexus mcpstartup time (#207) - Type-safe lazy actions:
createLazyActionuses constrained generics to validate export names against module types at compile time - Regression test suite: 13 unit tests covering transport framing, security hardening, buffer limits, and lazy action loading
- CALLS edge sourceId alignment:
findEnclosingFunctionIdnow generates IDs with:startLinesuffix matching node creation format, fixing process detector finding 0 entry points (#194) - LRU cache zero maxSize crash: Guard
createASTCacheagainstmaxSize=0when repos have no parseable files (#144)
- Transport constructor accepts
NodeJS.ReadableStream/NodeJS.WritableStream(widened from concreteReadStream/WriteStream) processReadBuffersimplified to break on first error instead of stale-buffer retry loop
- Aligned CALLS edge sourceId with node ID format in parse worker (#194)
- Force-exit after analyze to prevent KuzuDB native cleanup hang (#192)