v1.6.12
abhigyanpatwari/GitNexusv1.6.12Sep 12, 2026by github-actions[bot]
Upgrading?
AI Summary
v1.6.12 introduces configurable index artifact storage, content retention tiers, and Objective-C support. It enhances the embedding process with resumable capabilities and refines API feedback regarding branch freshness and staleness. The release also includes numerous improvements for language parsers and performance optimizations.
Key Highlights
- Configurable index artifact storage allows repositories to be written to caller-selected absolute directories or a shared external root.
- Generation-time content retention tiers enable users to choose between full, symbol-only, or structural graph data persistence.
- Objective-C is now a supported language with a vendored grammar covering interfaces, implementations, and categories.
- Embedding jobs are now resumable, allowing `gitnexus embeddings` to fill existing indices in place without rebuilding the structural graph.
- API endpoints now expose branch and index freshness details to better track repository state.
New Features
- Configurable index artifact storage via `GITNEXUS_STORAGE_PATH` and `GITNEXUS_STORAGE_ROOT`.
- Generation-time content retention tiers via `GITNEXUS_CONTENT_RETENTION`.
- Objective-C language support via vendored `tree-sitter-objc` grammar.
- Explicit FTS opt-out via `analyze --skip-fts` and `GITNEXUS_SKIP_FTS=1`.
- Resumable embedding jobs where `gitnexus embeddings` fills existing indices in place.
- Enhanced staleness reporting returning `diverged` and `unknown` statuses instead of just `fresh`.
- API endpoints (`GET /api/repos`, `GET /api/repo`) now return indexed branch, `lastCommit`, and freshness status.
Full Release Notes
# GitNexus v1.6.12 > **The portable-index release.** Index artifacts no longer have to live inside the checkout — `GITNEXUS_STORAGE_PATH` and `GITNEXUS_STORAGE_ROOT` put them wherever an orchestrator wants them, and `GITNEXUS_CONTENT_RETENTION` decides how much source text comes along. Objective-C joins the supported languages, staleness stops calling an unresolvable index `fresh`, and long embedding jobs resume instead of restarting. 62 merged pull requests since v1.6.11. ## ✨ Highlights - 📂 **Index artifacts can live outside the checkout** — `GITNEXUS_STORAGE_PATH` writes one repository's graph, metadata, parse caches, locks and branch indexes to any absolute directory; `GITNEXUS_STORAGE_ROOT` gives many repositories one shared root with an isolated `<repo-basename>-<canonical-path-hash>/` slot each. Built for managed and short-lived workspaces where something else collects, promotes or cleans up the output. Opt-in — unset, it is still `<repo>/.gitnexus/`. (#3060) - 🗜️ **Content retention tiers** — `GITNEXUS_CONTENT_RETENTION=full|symbol|none` chooses how much source-derived text is persisted at generation time: full file and symbol text, symbol snippets only, or graph structure with no source bodies. Graph-oriented CLI, MCP and UI workflows behave the same at every tier, and each surface now says plainly when retention or a missing checkout is hiding file text rather than returning a blank. (#3060) - 🍎 **Objective-C is a supported language** — a vendored `tree-sitter-objc` grammar and a deterministic provider covering interfaces, implementations, categories, methods, properties and header classification. (#3179) - 🧭 **The index stops overstating what it knows** — a `rev-list` failure on a pruned branch-pinned clone used to collapse into `fresh`; staleness now reports `current`, `behind`, `diverged` or `unknown`. `GET /api/repos` and `GET /api/repo` expose the indexed branch, `lastCommit` and how far behind it is, and `doctor` separates vector capability from repository index state. (#3257, #3232, #3199, #3228) - ♻️ **Long embedding jobs are resumable** — `gitnexus embeddings` fills an existing index in place: every successful batch is durable, reruns skip vectors whose content hash still matches, endpoint timeouts retry under `GITNEXUS_EMBEDDING_RETRY_TIMEOUTS`, and the structural graph is not rebuilt. Sync fails closed on foreign embedding identity and vector-width drift. (#3065, #3260) - 🛡️ **Durability on the write path** — a parse-cache chunk whose durable generation could not be reset is retired instead of leaving a stale generation reachable through the coherence gate, stale file-lock reclamation is guarded, and the LadybugDB pool-adapter checkpoint race is fixed with `@ladybugdb/core` pinned to 0.18.3. (#3271, #3234, #3189) --- ## 🚀 Added - **Configurable index artifact storage** — `GITNEXUS_STORAGE_PATH` writes one repository's index artifacts (graph data, metadata, parse caches, locks, branch indexes) to a caller-selected absolute directory, and `GITNEXUS_STORAGE_ROOT` gives several repositories one shared external root with an isolated `<repo-basename>-<canonical-path-hash>/` slot each. `GITNEXUS_STORAGE_PATH` wins when both are set. Opt-in: unset, GitNexus still writes to `<repo>/.gitnexus/` (#3060) - **Generation-time content retention tiers** — `GITNEXUS_CONTENT_RETENTION=full|symbol|none` chooses how much source-derived text is persisted: full file and symbol text, symbol snippets only, or structural graph data with no source bodies. Graph-oriented CLI, MCP and UI workflows are unchanged; CLI, MCP, the HTTP API and the web UI now say so explicitly when retention or a missing checkout hides file text. Storage and retention compatibility metadata is persisted, so an index is rebuilt when those semantics change (#3060) - **Objective-C is a supported language** — vendored `tree-sitter-objc` grammar with a deterministic provider covering interfaces, implementations, categories, methods, properties and header classification (#3179) - **`analyze --skip-fts` / `GITNEXUS_SKIP_FTS=1`** — explicit FTS opt-out that skips extension loading and keyword-search indexes; the flag and the env var are one mode, so toggling the discriminator alone no longer forces a same-commit rebuild (#3205, #3263) - **`gitnexus embeddings` fills an existing index in place** — long HTTP embedding jobs are resumable: every successful batch is durable, reruns skip vectors whose content hash still matches, endpoint timeouts retry under `GITNEXUS_EMBEDDING_RETRY_TIMEOUTS`, and the structural graph is not rebuilt (#3065) - **Staleness reports `diverged` and `unknown` instead of `fresh`** — `checkStaleness` / `checkStalenessAsync` return an additive status (`current`, `behind`, `diverged`, `unknown`) so a `rev-list` failure on a pruned branch-pinned clone stops reading as an up-to-date index (#3257) - **Serve API exposes branch and index freshness** — `GET /api/repos` and `GET /api/repo` return the indexed branch, `lastCommit`, and how far behind the working tree is; `POST /api/analyze` honors `branch` (#3232, #3199) ## 🐛 Fixed - **Parse-cache chunk whose durable generation could not be reset is retired**, instead of leaving a stale generation reachable through the coherence gate (#3271) - **Stale file-lock reclamation is guarded**, closing the lock-recovery failure paths (#3234) - **LadybugDB checkpoint race in the pool adapter**, with `@ladybugdb/core` pinned to 0.18.3 (#3189) - **MCP rejects unknown tool arguments and honors `depth`** (#3267) - **Deleted files map to indexed symbol ranges** on incremental analyze (#3269) - **Metadata-only diff files are retained** by the parser (#3251); stable cache packs stay parallel (#3194) - **Embedding sync fails closed on foreign identity and vector-width drift** (#3260) - **Dart** — `@name` is anchored so a constructor initializer stops minting a second symbol (#3224) - **Zig** — callable-value references are modeled and their absence is no longer reported as `exact` (#3219); cross-file static gates resolve (#3185); `tree-sitter-zig` is vendored so `npm i -g` no longer warns on peers (#3180) - **Go** — test siblings resolve and package discovery is tighter (#3191) - **TypeScript** — `tsconfig` `paths` aliases resolve on Windows (#3203) - **Ruby** — gem requires are guarded with dependency metadata (#3096) - **COBOL** — copybook directories are preferred so `COPY EXTERNAL` does not hit vendor decoys (#3240) - **Python** — `group` detects function-local imports (#3254) - **NestJS GraphQL contracts** extract on real indexes (#3227); Spring constructor-to-bean injection edges persist to the schema (#3239) - **Derived graph flows exclude guessed call edges** (#3193), and fallback guesses are labeled while export visibility is preserved (#3190) - **`doctor` distinguishes vector capability from repository index state** (#3228) - **CI looks up fork prebuild PRs by head owner and branch** (#3236) ## ⚡ Performance - **MCP `tools/list` no longer spawns one git process per repo** — the registry is read directly (#3259) - **Scope resolution stops re-scanning the ParsedFile store once per language** (#3211) and avoids quadratic config-walk queues (#3237) - **Parse dispatch** — cache packs batch into one dispatch round, the round's memory bound is tightened, and the worker-pool override is unclamped (#3196, #3200) - **File locking probes this process's own start time once** (#3222) <details> <summary><b>📦 Chore / Dependencies</b> — 14 dependency & CI-action bumps</summary> - **Benchmark and skill-evolution harness** — evolution runs against historical PRs, bounded packed-scheduler primitives with offline replay, provider-native usage recorded at the gateway, and offline benchmarks against a scripted provider (#2785, #3206, #3207, #3220, #3235) - **Docs** — FTS closed as an optimization target with measured evidence, edit-loop numbers corrected with an FTS per-index breakdown, RepoCloud one-click deploy button (#3208, #3209, #3212) - **gitnexus** — `hono`, `ignore` ×2, `joi`, `express-rate-limit`, `@types/node` ×2 (#3164, #3165, #3214, #3215, #3231, #3233, #3265) - **gitnexus-web** — `@langchain/langgraph`, `react-i18next`, `@types/react`, `@vitejs/plugin-react`, `@testing-library/user-event` (#3243, #3244, #3245, #3246, #3247) - **CI** — `softprops/action-gh-release`, `docker/setup-qemu-action` (#3248, #3249) </details> --- ## 📥 Upgrade ```bash npm install -g gitnexus@1.6.12 ``` Or, on an existing global install: `gitnexus update`. Then re-index — this release adds Objective-C and changes how Dart, Zig, Go, TypeScript, Ruby, COBOL and Python symbols resolve, so an existing index will not carry those edges: ```bash gitnexus analyze ``` If you adopt `GITNEXUS_STORAGE_PATH`, `GITNEXUS_STORAGE_ROOT` or `GITNEXUS_CONTENT_RETENTION`, no manual step is needed: storage and retention compatibility metadata is persisted, so changing the profile rebuilds that index on the next analyze. There are **no breaking changes** relative to v1.6.11. The Node floor stays `^22.18.0 || >=24.11.0`. **Full changelog:** [`v1.6.11...v1.6.12`](https://github.com/abhigyanpatwari/GitNexus/compare/v1.6.11...v1.6.12)
Related Repositories
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
Interactive roadmaps, guides and other educational content to help developers grow in their careers.
Reverse engineer anything with agents, from app behavior down to native binaries.
The open source coding agent.
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.