| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-08-27 | 15.1 kB | |
| v1.6.10 source code.tar.gz | 2026-08-27 | 18.7 MB | |
| v1.6.10 source code.zip | 2026-08-27 | 21.6 MB | |
| Totals: 3 Items | 40.3 MB | 0 | |
GitNexus v1.6.10
The resolution-correctness release. Receiver chains are now typed from AST structure in all 14 languages, imports resolve against declared module configuration instead of path-suffix guesses, and interface dispatch understands generic instantiation — while analyze itself gained a single-writer lock, an atomic index swap and a bounded buffer pool. 396 commits since v1.6.9.
✨ Highlights
- 🧬 Receiver chains are typed from AST structure across all 14 languages, with an explicit lower bound on what the graph is willing to claim. Inline constructors, closure-valued bindings, generic-typed fields and named receivers all resolve now. (#2708, [#2744], [#2747], [#2833], [#2855])
- 📦 Imports resolve against real module configuration — tsconfig paths, Java/Kotlin declared packages, Go module paths, PHP Composer autoload maps, Python
__init__.pyre-exports — instead of guessing from path suffixes. (#2953, [#2955], [#2984], [#2987], [#2990], [#2864]) - 🍃 Spring modeling goes deep — AOP transactions, caching and security,
@Beanfactories,@Resourceand constructor injection, profiles, conditions and auto-configuration, plus a full bean candidate inventory. (#2783, [#2740], [#2678], [#2632], [#2494]) - 🛡️ Analyze got much harder to break — a single-writer lock on the index write path, atomic index swap with read-pool invalidation, a bounded buffer pool sized to the graph, the large-repo OOM cascade fixed, and schema versions derived from a DDL fingerprint instead of a hand-incremented constant. (#2658, [#2614], [#2560], [#2649], [#2798])
- 🔒 MCP hardening — a repository allowlist, fail-closed read-only mode, deterministic ordering on every capped query, and bounded output budgets, so
impactandcontextare reproducible run to run. (#2787, [#2796]) - 🧭 New surfaces — NestJS decorator routes so
api_impactstops calling live endpoints non-existent, full Codex support with hooks and a plugin marketplace, CodeBuddy and Qoder integrations, abunxlane for bun-only machines, and one-click Render deploy. (#3017, [#2369], [#2368], [#2765], [#2804])
⚠️ Breaking changes
- Node
^22.18.0 || >=24.11.0is now the supported floor; the@types/uuidstub is dropped - The non-functional
groupmatching knobs are gone —matching.bm25_threshold,matching.embedding_threshold,detect.embedding_fallbackingroup.yaml, thegitnexus group sync --skip-embeddingsflag, and the MCPgroup_syncskipEmbeddingsargument (#3020)
🚀 Added
- Spring framework modeling expanded end to end — AOP transactions, caching and security (#2783),
@Beanfactories and@Resourceinjection (#2740), profiles/conditions/auto-configuration (#2678), constructor and standard injection (#2632), bean candidate inventory (#2494), configuration-property consumers, and non-HTTP handler entry points (#2891) - Receiver chains typed from AST structure across all 14 languages, with an explicit epistemic lower bound on what the graph can claim (#2708, [#2744], [#2747])
- Java enum constant bodies modeled as first-class instances, with JLS 13.1 anonymous-class naming (#2558)
- More route surfaces indexed — Java constant-based route paths such as
@PostMapping(ApiPathConstants.X)(#2980) and JavaScript data route tables (#2972) - MCP server hardening — repository allowlist, fail-closed read-only mode, deterministic output budgets, and normalized
impact/contextaliases bunxlane so bun-only machines can run GitNexus (#2765)- Codex support — hooks, plugin marketplace and setup (#2328, [#2369]) — plus CodeBuddy and Qoder coding-agent integrations (#2368)
- Skills mirrored to
.agents/skills/when an.agents/directory exists - One-click Render deploy (#2804)
serveorigin/proxy configuration is validated and port-scoped (#2820)- Expanded TypeScript/JavaScript taint sink model (#2490)
- Wiki generation accepts explicit HTTP LLM hosts (#2491)
- Embedding request-body dimensions configurable via
GITNEXUS_EMBEDDING_REQUEST_DIMS(#2574) - Refreshed MiniMax model and endpoint configuration (#2780)
MAX_CALLABLE_VALUE_TARGETSandMAX_PROPERTY_DISPATCH_FANOUTconfigurable via env (#2725, [#2726])- Opt-in
analyze --self-commitfor AGENTS.md/CLAUDE.md churn (#2640) - Buffer pool sized to the graph before the database opens, with an adaptive size hint
- CI review agent runs as a coordinated reviewer swarm on Sonnet 5 with structured, linked reviews (#2570, [#2572]), alongside the GitNexus Engineering Tool Kit skills (#2566) and an online skill-evolution loop (#2571)
- Icebug community-engine prototype behind a gate (#2376)
🐛 Fixed
group syncstops claiming matching it never did — the advertised BM25/embedding cascade was config, help text and MCP schema with no matcher behind it; the unreadmatching.bm25_threshold,matching.embedding_threshold,detect.embedding_fallbackand--skip-embeddingssurfaces are removed (#3020)- Emitted Next.js build output is ignored during ingestion, and the inert
public/buildentry is deleted (#3018) - NestJS decorator routes are indexed so
api_impactandroute_mapstop reporting live endpoints as non-existent (#3017) - Import resolution gated by real module configuration instead of path-suffix guessing — TypeScript config (#2953, [#2956]), Java and Kotlin declared packages (#2955, [#2990]), Go module paths (#2984), PHP Composer autoload maps (#2987), Python
__init__.pyre-exports (#2864) and unaliased dotted namespace imports (#2826, [#2828]), and JavaScript module extensions (#3034) - Interface dispatch is generic-instantiation aware (#2912, [#2939]), fans out from Case 3b receivers (#2832, [#2842]) and from C# record interface calls (#2904), and resolves through generic-typed field receivers in every language (#2833, [#2855])
- Go method sets modeled exactly so interface satisfaction is decidable (#2813, [#2829]), out-of-repo package qualifiers resolve, and an undecided interface check is no longer reported as a decided negative (#2873, [#2921])
- Go pointer-receiver calls resolve, reporting the program boundary instead of hedging (#2766, [#2782])
- Java record support — graph nodes for
record_declaration, component accessors, enum and record interface heritage (#2564, [#2916], [#2935], [#2936]), plusE.CONST.method()enum-constant receiver dispatch (#2561) and JLS binary-name identities for local classes, enums, records and interfaces (#2562, [#2653]) - Rust module-qualified calls resolve against the module tree (#2730, [#2741]), items are qualified by their enclosing
modchain (#2742, [#2745]), duplicate type names stay ambiguous in range binding (#2514, [#2652]), andBox<dyn Trait>names normalize - Closure bindings are call sources in every language, and function-local values carry their own identity (#2693, [#2695], [#2699], [#2718])
- A named receiver's member never resolves lexically (#2714), platform builtins stop resolving to unrelated same-file symbols (#2549), and inline constructor receivers are typed in every spelling (#2708, [#2737])
- Python calls resolve through constructor-injected fields (#2628) and module-imported classes (#2770)
- Package directories that repeat higher in the path resolve correctly (#2881, [#2929])
checkstops reporting erased and deferred imports as initialization cycles (#2934)detect_changesno longer scales its query with the diff's hunk count (#2915, [#2930]), and CR-only line-ending diffs are ignored (#2839)groupstops reporting what could not be measured as a measurement of zero (#3012), resolves HTTP consumers through configured clients and constant route tables (#3008), and preserves manifest-only impact crossings (#2784)impactandcontextare reproducible — deterministic ordering on every capped query (#2787, [#2796]) — and Convex caller results are marked incomplete rather than empty (#3044)- Object handler identity is preserved during ingestion (#3046), nested source directories are discovered (#3043), and parse-node insertion is canonicalized
- Large-repo analyze OOM and the false worker-timeout cascade are fixed (#2649, [#2679])
- Single-writer lock on the index write path (#2658, [#2677]), atomic index swap with read-pool staleness invalidation (#2614), and reliable large incremental writeback commits (#2409, [#2425])
- Remote URLs are stripped of credentials before they are persisted (#2914, [#2928]), and every registry write gets its own tmp path (#2888, [#2920])
- Schema version derived from a DDL fingerprint instead of a hand-incremented constant (#2798, [#2808]), and the scope-resolution relation cross product is fully declared (#2792, [#2793])
- FTS reliability — binary payloads stay out of the description column and an unbuildable index is confined to its own table (#2919), FTS-indexed DML is gated before the incremental writeback (#2841, [#2854]), analyze degrades instead of aborting on index-build failure (#2548), real LOAD errors surface and broken extension files self-heal (#2374, [#2375]), and Windows missing-dependency load failures are diagnosed (#2383)
VECTORis loaded only when needed (#3045) and before the incremental writeback touches embedding rows (#2623, [#2624])- Buffer pool bounded instead of taking the native 80%-of-RAM default (#2560), scaled by the OS page-size granule ratio (#2631, [#2636]), with a COPY-safe floor and actionable diagnostics for non-4K page sizes (#2424)
Napi::ErrorSIGABRT on analyze eliminated — C++ type lookups are indexed and workers terminate only at JS-safe points (#2432, [#2436])- Native-load failures fail closed, including truncated-binary SIGBUS (#2441, [#2651]), and glibc-too-old loads are no longer misdiagnosed (#2672, [#2689])
- Index staleness reporting fixed — no false-stale status after analyze, with inline staleness in
query/context/impact/cypher(#2655, [#2668], [#2683]) - Windows path handling — the
\\?\long-path prefix no longer breaks repo path matching (#2667, [#2700]),partsnegation is honored (#2720), and missing-shadow errors letserverepo-switch recover (#2382, [#2387]) - Embeddings survive partial failures — unparseable 200 responses are retried (#2790, [#2795]), batch inserts are retry-safe (#2453), HTTP generation is resumable, resume checkpoints bind to their provider, and proxy-blocked installs self-heal (#2370, [#2372])
- Custom HTTP embedding endpoint failures are reported as themselves, not as Hugging Face download errors (#2385, [#2386])
- Exact symbol content with 0-based line storage and 1-based MCP display (#2377, [#2379], [#2380])
renamereports every edit that apply writes and reconciles its report on partial failure (#2605)- Global registry transactions serialized across processes (#2716)
- Swift indented conditional directives are preprocessed so class bodies survive parsing (#2771), and Swift member-containment pairs are declared in the
CONTAINSDDL (#2769) - JavaScript
exports.foo = function () {}CommonJS exports are indexed (#2723, [#2729]), andconst X = () => {}is no longer double-indexed as a Function plus an edgeless Const twin (#2687, [#2691]) - JVM sibling injection is proximity-bounded (#2732), and C#/Kotlin free calls are gated by instance ownership (#2563, [#2654])
- Dart extension type symbols are extracted (#2539), and declarations recover after embedded NUL bytes (#2430)
- CLI and hooks fail loudly on backend error payloads, with an MCP query hint when the server owns the DB lock (#2396, [#2397])
- Committed agent guides stop churning, with an
--index-onlynudge (#2907, [#2927]), andgitnexus-planartifacts publish on macOS without an interpreter (#2905, [#2922]) - The 300-flows cap is removed for large repositories (#2198)
🔧 Changed
- Structural relationships are held out of the JS heap by default during analyze (#2680, [#2685])
- Global ignore support —
core.excludesFile,.git/info/exclude, and a user-level global ignore file are honored (#2606) - Plugin manifests sync on every version bump (#2445), and planning output under
docs/plansis no longer tracked
⚡ Performance
- Import resolution indexed instead of scanned — every scanning resolver with a consolidated memo (#2911), a per-run workspace index for Go/C#/Dart/Ruby (#2898), and Kotlin import resolution (#2872)
- MCP server startup drops the analyze-only language-provider closure (#2802, [#2806])
- C++ qualified namespace members indexed once per pipeline run (#2788, [#2794])
- Vendored Leiden O(communities × N) copy removed, with Icebug wired to its real API (#2337, [#2692])
core.excludesFile/info/excluderesolution memoized (#2606)
📦 Chore / Dependencies — 132 dependency & CI-action bumps
- **Security overrides** — `sharp` pinned to >=0.35.0 for the libvips vulnerabilities (#2993) and `adm-zip` to >=0.6.0 for a memory-allocation vulnerability (#2992) - **gitnexus runtime (53 bumps)** — `@ladybugdb/core` through 0.18.3 (#2473, [#2634], [#2863], [#2924]), `js-yaml` 4.3.0 → 5.3.0 (#2618, [#2710], [#2831], [#3024], plus the 5.0.0 revert in [#2596]), `tsx` ×7, `@types/node` ×5, `express-rate-limit` ×3, `@modelcontextprotocol/sdk` (#2815), `node-addon-api` 8.9.0 → 8.9.2 (#2816, [#3002]), `uuid` 14.0.2 (#3025), `vitest` 4.1.11 (#3027), the Babel 8 toolchain, `hono`, `fast-uri`, `brace-expansion`, `ip-address`, `body-parser` - **gitnexus-web (43 bumps)** — `vite` ×3, `@vitejs/plugin-react` ×3, `@vercel/node` ×4, `react-i18next` ×3, `lucide-react` ×3, `@langchain/core`, `@langchain/langgraph`, `@langchain/anthropic`, `axios`, `@tailwindcss/vite`, `wait-on`, `@testing-library/jest-dom` - **CI actions (34 bumps)** — the CodeQL action group, the Docker build/login/metadata/buildx/qemu suite, `actions/setup-node` v6→v7, `actions/setup-python`, `actions/attest-build-provenance`, `release-drafter` ×3, `dorny/paths-filter` ×2, `ossf/scorecard-action`, `raven-actions/actionlint`, `softprops/action-gh-release`, plus `tar`, `mermaid` and `dompurify` - **CI hardening** — Windows shard watchdog widened with exit diagnostics (#2449), the platform-sensitive matrix sharded to fix the Windows cross-platform timeout (#2394), and CI Report no longer dies silently when the tests job fails (#2728)📥 Upgrade
:::bash
npm install -g gitnexus@1.6.10
Then re-index — this release changes how receivers, imports and interface dispatch resolve, so an existing index will not carry the new edges:
:::bash
gitnexus analyze
Full changelog: v1.6.9...v1.6.10