mirror of
https://github.com/abhigyanpatwari/GitNexus.git
synced 2026-09-22 00:31:17 +00:00
32 KiB
32 KiB
Changelog
All notable changes to GitNexus will be documented in this file.
[Unreleased]
[1.6.3] - 2026-04-24
Added
- Cross-repo impact analysis —
@repoMCP routing plus group resources let impact queries span multiple indexed repositories in a group (#794, #984) - Python scope-based call resolution — registry-primary flip, performance, and generalization work from RFC #909 Ring 3 (#980)
- C# scope-resolution migration — C# now runs on the registry-primary path alongside Python (#934, #1019)
- RFC #909 Ring 1 & Ring 2 scope-resolution infrastructure — the shared foundation for language-agnostic scope resolution:
- Scope-resolution types and constants,
LanguageProviderhook extension (#910, #911, #949, #950) ScopeTree+PositionIndex+makeScopeId(#912, #961)DefIndex/ModuleScopeIndex/QualifiedNameIndex(#913, #958)MethodDispatchIndexmaterialized view overHeritageMap(#914, #960)resolveTypeRefstrict single-return type resolver (#916, #959)- SCC-aware finalize with bounded fixpoint (#915, #962)
ClassRegistry/MethodRegistry/FieldRegistry+ 7-step lookup (#917, #963)- Shadow-mode diff + aggregate, parity harness + static dashboard (#918, #923, #951, #972)
ScopeExtractordriver with 5-pass CaptureMatch → ParsedFile (#919, #965)ScopeExtractorwired into parse-worker + processor (#920, #969)finalize-orchestratormaterializesScopeResolutionIndexes(#921, #970)- Per-language
resolveImportTargetadapter (#922, #971) REGISTRY_PRIMARY_<LANG>per-language flag reader (#924, #968)emit-referencesdrainsReferenceIndexto graph edges (#925, #973)
- Scope-resolution types and constants,
gitnexus analyze --name <alias>with duplicate-name guard in the repo registry (#955)gitnexus remove <target>unindexes a registered repo by name or path (#664, #1003)- Auto-infer registry name from
git remote.origin.urlwhen--nameis omitted (#981) - Sibling-clone drift detection — indexed repos are fingerprinted by remote URL so duplicate registrations are caught before graph divergence (#982)
- Configurable large-file skip threshold — the walker's 512 KB default is now overridable via
GITNEXUS_MAX_FILE_SIZE(KB) orgitnexus analyze --max-file-size <kb>. Values are clamped to the 32 MB tree-sitter ceiling, invalid inputs fall back to the default with a one-time warning, and the CLI banner reports the effective post-clamp threshold when an override is active (#991, #1044, #1045) GITNEXUS_INDEX_TEST_DIRSopt-in for__tests__/__mocks__traversal (#771, #1046)analyzeembedding preservation — existing embeddings are preserved by default,--forceregenerates them,--drop-embeddingsopts out entirely (CLI + HTTP API) (#1055)- Structural embedding chunking with data-driven
CHUNKING_RULESdispatch, replacing the flat line-based split (#987) - PHP HTTP consumer detection for the extractor catalogue (#993)
- Per-phase search timing instrumentation across the query pipeline (#953)
- MCP disambiguation ranking —
context/impactcandidates are ranked and exposekind/file_pathhints (#888) - Docker images for UI + CLI/server shipped via
docker-composewith cosign signing (#967), RC image builds (#978), and GHCR → Docker Hub mirroring (#1029)
Fixed
- Go CALLS edges for receiver methods — worker source IDs now align with the main pipeline, restoring receiver-method call edges (#1043)
- Node 22 DEP0151 warning from
tree-sitter-c-sharpimport silenced (#1013, #1049) - FTS index bootstrap tries a local
LOADbeforeINSTALLso offline/air-gapped runs no longer fail on network errors (#726) - FTS ensure failures are no longer cached and are invalidated on pool teardown (#1006)
groupImpactlocal-impact errors now bubble to the caller instead of being swallowed (#1004, #1007)- Friendly error when a group name is not found, with regression test for #903 (#989)
bm25results return FTS-matched symbols instead of an arbitraryLIMIT 3slice (#806)- Embedding AST traversal switched from recursion to iterative DFS, fixing stack overflow on deeply nested files (#990)
- React component path detection runs before lowercasing, so mixed-case
.jsx/.tsxfiles are recognised (#260) detect-changesENOBUFS by settingmaxBufferongit/rgexecFileSyncinvocations (#957)detect-changesin direct CLI — command was wired to MCP only; now exposed on the CLI as well (#892)- CLI gitnexus markers —
<!-- gitnexus:* -->is only matched at section position, no longer inside code/prose (#1041, #1042) opencode.jsonsetup preserves existing comments and config during install (#998)- Sequential parser logging — skipped languages are now logged instead of silently dropped (#1021)
cli-e2efixture isolation from the shared mini-repo, plus stabilisedrel-csv-splitstream teardown on Windows viaexpect.poll(#954, #1052)- Docker — RC build guarded against empty
vtag,inputs.tagused to detectworkflow_callcontext, web builder stage now copiesgitnexus/package.json, base image switched from alpine to debian (#983, #996, #997, #1014) - CI — reusable
docker.ymlnow inherits secrets fromrelease-candidate.yml(#1054)
Changed
setupconfig I/O unified onmergeJsoncFileacross all writers (#1031)- Docker CI gains a retry wrapper for
build-pushwith visibility and hardened shell
Chore / Dependencies
- Dependency bumps:
graphology0.25.4 → 0.26.0 (#1001),uuid13 → 14 (#1000),@huggingface/transformers(#1035),@types/node(#1002),@types/uuid(#1016),vitest4.1.4 → 4.1.5 (#1017),@vitest/coverage-v8(#1018) - gitnexus-web dependency bumps:
vite5.4.21 → 6.4.2 → 7.3.2 → 8.0.10 +vitest4 (#1061, #1062, #1063),lucide-react0.562.0 → 1.11.0 with local GitHub SVG fallback (#1038),@langchain/anthropic1.3.10 → 1.3.27 (#1039),@babel/types(#1037) - gitnexus-shared dependency bumps:
typescript(#1034) - GitHub Actions bumps:
actions/setup-node6.3.0 → 6.4.0 (#1033) - Documentation: repo-wide
DoD.mdDefinition of Done (#1032), gRPC microservices group guide (#906, #994),group add/group removeREADME fixes (#1020), CLI docs include--skip-git(#750), README Discord link updated
[1.6.2] - 2026-04-18
Added
- Docker support — containerized ingestion and MCP serving for reproducible runs on CI and container platforms (#848)
- Language-agnostic heritage extractor — config+factory pattern for class-heritage extraction (EXTENDS / IMPLEMENTS), completing the extractor refactor alongside method/field/call/variable (#890)
- Language-agnostic call extractor — config+factory pattern that collapses ~225 lines of inline parse-worker logic into declarative per-language configs (#877)
- Language-agnostic variable extractor — structured metadata for
Const/Static/Variablenodes via config+factory pattern (#878) - AST-aware embedding chunking — offset-based splitting preserves symbol boundaries, improving semantic search precision on large files (#889)
- HTTP consumer detection for jQuery and axios object-form —
$.ajax/$.get/$.postandaxios({ url, method })now recognized as HTTP call sites (#887)
Fixed
- Python external dotted imports — avoid spurious same-file matches when an import path like
foo.bar.bazrefers to a third-party module (#899) - Worker warnings no longer terminate ingestion — non-fatal parser warnings keep the pipeline running instead of aborting the run (#900, #261)
- Global-install upgrade
ENOTEMPTY— devendoredtree-sitter-protoinstall lifecycle + preinstall cleanup sonpm i -g gitnexus@latestsucceeds on top of an older install (#843, #846) env.cacheDirnow defaults to a user-writable location, unblocking ingestion on systems where the install directory is read-only (#845)- Content-hash staleness detection for embeddings — zero-node rebuilds no longer skip vector-index creation, fixing semantic search after selective re-analysis (#831)
tree-sitter-c-sharpversion pin — locked to 0.23.1 to avoid a breaking change in a transitive prerelease (#834)release-drafterv7 CI — replaced the removeddisable-releaserflag withdry-runso release-note drafts still worknpm arboristcrash fromtree-sitter-dart— switched the dependency URL format sonpm installno longer crashes on clean installs- Service-group
ManifestExtractor—config.linksnow wires the manifest extractor properly, restoring cross-link discovery that had silently dropped to zero
Changed
- SemanticModel wired as a first-class resolution input (SM-20) —
call-processor,resolution-context,type-env, andheritage-mapnow consulttable.model.*directly; 37 internal call sites migrated off the SymbolTable wrapper (#885) - Per-strategy
ImportSemanticshooks —named/wildcard-transitive/wildcard-leaf/namespacestrategies split into composable hooks, replacing the monolithic conditional (Strategies 1–4 of #886) - Class extraction configs moved to
configs/subdirectory — per-language class configs now co-locate with the other extractor configs, completing the extractor layer's directory convention (#879) - CLI AI-context trimmed — duplicated CLAUDE.md block removed from the shipped context, reducing token usage in LLM-consuming workflows (#904)
- LLM context files optimized — AI-consumed documentation tuned for accuracy and token efficiency (#857)
- Workflow concurrency standardized — all CI workflows adopt the consistent concurrency key pattern documented in CONTRIBUTING.md; release-note labeling automated (#837)
- E2E status-ready timeout raised — 45s accommodates parallel-worker startup variance on CI (#908)
Chore / Dependencies
- tree-sitter 0.25 upgrade readiness — daily Dependabot monitor for the upcoming major-version bump (#847)
- Dependency bumps:
glob11.1.0 → 13.0.6 (#867),commander12.1.0 → 14.0.3 (#868),@huggingface/transformers(#869),@modelcontextprotocol/sdk(#866),lru-cache11.2.7 → 11.3.5 (#870),mnemonist0.39.8 → 0.40.3 (#871),@ladybugdb/core(#873) - gitnexus-web dependency bumps:
mermaid11.12.2 → 11.14.0 (#860),tailwindcss(#861),jsdom29.0.0 → 29.0.2 (#863),wait-on8.0.5 → 9.0.5 (#859),@vitest/coverage-v8(#864) - GitHub Actions bumps:
actions/checkout4.3.1 → 6.0.2 (#842),actions/upload-artifact4.6.2 → 7.0.1 (#838),actions/setup-node4.4.0 → 6.3.0 (#841),actions/cache5.0.4 → 5.0.5 (#840),actions/github-script7.0.1 → 9.0.0 (#850),dorny/paths-filter3.0.2 → 4.0.1 (#839),amannn/action-semantic-pull-request6.1.1 (#853),release-drafter/release-drafter6.0.0 → 7.2.0 (#852),marocchino/sticky-pull-request-comment3.0.4 (#851),softprops/action-gh-release2.5.0 → 3.0.0 (#849)
[1.6.1] - 2026-04-13
Added
- Service group extractor expansion — manifest extractor and broader extractor coverage (2/4 of #606 split) (#796)
- Dart call patterns for
await, cascade, lambda, and widget-tree contexts (#801)
Fixed
- Stack overflow and memory exhaustion on large repository analysis (#814)
tree-sitter-dartinstall crash — switched from git URL to npm tarball (#811)- Generic TypeScript awaited function calls missing from the call graph (#804)
- Runtime dependency on
file:../gitnexus-sharedremoved from the published package (#803) - Ruby
singleton_classcontext preserved during sequential parsing (#774)
Changed
- DAG-based ingestion pipeline architecture — pipeline phases now declare typed dependencies and run via a topologically sorted DAG; container-node logic extracted to
LanguageProvider. Includes hardened lifecycle (try/finally cleanup, error wrapping, cycle reporting), tightenedParseOutput.exportedTypeMapimmutability, and corrected phase dependencies (#809)
[1.6.0] - 2026-04-12
Added
- SemanticModel architecture refactor (SM-8 through SM-19) — extracted registries into
model/module with ISP-compliant interfaces: TypeRegistry, MethodRegistry, FieldRegistry, RegistrationTable, ResolutionContext (#786)- HeritageMap built from accumulated
ExtractedHeritage[]for MRO-aware resolution (#739) lookupMethodByOwnerWithMROusing HeritageMap for cross-class method dispatch (#740)- MRO fast path before D2 fuzzy widening in call resolution (#741)
- BindingAccumulator for cross-file return type propagation (#743, #763)
- Restructured
resolveUncachedreplacinglookupFuzzydata source for all tiers (#764) - Deleted
lookupFuzzy,lookupFuzzyCallable,globalIndex,callableIndex— replaced with structured lookups (#769) - Deleted
resolveCallTargetgod-method — replaced with thin dispatcher delegating toresolveMemberCall(#744),resolveStaticCall(#754),resolveFreeCall(#756) (#770)
- HeritageMap built from accumulated
- Service group infrastructure — service boundary detection, contract extractors, sync pipeline, CLI/MCP tools, monorepo fixture; bridge.lbug storage and contract matching expansion (#795)
- C# interface-to-interface heritage capture (#789)
- Vue SFC support with destructured call result tracking (#604)
- Java method reference resolution —
obj::methodas call sites (#622) - C/C++ MethodExtractor config with pure virtual detection (#617)
- MethodExtractor configs for Python, PHP, Swift, Dart, Rust, Ruby (#624)
- METHOD_IMPLEMENTS edges with overload disambiguation and MethodExtractor unification (#642)
- Same-arity overload disambiguation via type-hash suffix (#658)
GITNEXUS_HOMEenv var to customize global directory (#746)- Verbose analyze output prints skipped large file paths (#745)
- Class name lookup index for O(1) qualified lookups (#707, #716)
lookupMethodByOwnerindex for O(1) cross-class chain resolution (#665)- Fuzzy lookup counters for performance visibility (#708)
Fixed
- Stack overflow on large PHP files — iterative AST traversal (#783)
- Large repository graph loading failure (#732)
- Windows multi-repo switching — false 404 errors and stale repo context (#633)
detect_changesdiff mapping — map diff hunks to symbol line ranges (#779)- HTTP client vs Express route detection and Spring interface attribution (#780)
- VECTOR extension not loaded during DB init for semantic search (#782)
- tree-sitter-swift postinstall patch for macOS ARM64 (#788)
- tree-sitter-c peer dependency conflict pinned (#723)
- Constructor indexing in methodByOwner (#694, #753)
- Named binding processor —
lookupExactreplaced withlookupExactAll(#755) .gitnexusignorenegation patterns now respected (#654)- MCP setup prefers global gitnexus binary over npx (#653)
- CORS rejection returns clean error instead of 500 (#646)
- Array.push stack overflow — replaced spread with loop (#650)
- MCP stdout silencing prevents embedder/pool-adapter conflicts (#645)
- Web heartbeat — graceful reconnection replaces aggressive disconnect (#643)
- Web repo scoping — backend calls scoped to active repo (#644)
- OpenCode config path and FTS extension load order (#781)
- OnboardingGuide dev-mode serve command corrected (#725)
- Security issues and critical bugs from code review (#709)
Changed
- Replaced class-type fuzzy lookups with structured indices in type-env (#733, #734, #736)
- Extracted
CLASS_LIKE_TYPESconstant (#693)
[1.5.3] - 2026-04-01
Added
- TypeScript/JavaScript MethodExtractor config (#588)
Fixed
- Wiki Azure OpenAI compat and HTML viewer script injection (#618)
[1.5.2] - 2026-04-01
Fixed
gitnexus-sharedmodule not found —gitnexus-sharedwas afile:workspace dependency never published to npm, causingERR_MODULE_NOT_FOUNDwhen installinggitnexusglobally. The build now bundles shared code intodist/_shared/and rewrites imports to relative paths (#613)- v1.5.1 publish regression — npm's
preparelifecycle rantscafterprepack, overwriting the rewritten imports before packing; both scripts now run the full build so the final tarball is always correct
[1.5.1] - 2026-04-01 [YANKED]
Fixed
- Incomplete fix for
gitnexus-sharedbundling —preparescript overwrote rewritten imports during publish
[1.5.0] - 2026-04-01
Added
- Repo landing screen — when the backend detects indexed repositories, the web UI now shows a landing page with selectable repo cards (name, stats, indexed date) instead of auto-loading the first repo; users can also analyze new repos directly from the landing screen (#607)
- Unified web & CLI ingestion pipeline — complete architectural migration of the web app from a self-contained WASM browser app to a thin client backed by the CLI server; new
gitnexus-sharedpackage for cross-package type unification (#536)- New server endpoints:
/api/heartbeat(SSE liveness),/api/info,/api/repos,/api/file,/api/grep,/api/analyze(SSE progress),/api/embed,/api/mcp(MCP-over-StreamableHTTP) - Onboarding flow: auto-detect server → connect → repo landing or analyze
- Header repo dropdown: switch, re-analyze, or delete repos
- New server endpoints:
- Azure OpenAI support for wiki command — fixed broken Azure auth (
api-keyheader),api-versionURL parameter, reasoning model handling (max_completion_tokens, notemperature), content filter error messages; added interactive setup wizard,--api-versionand--reasoning-modelCLI flags (#562) - Java method references & interface dispatch —
obj::methodtreated as call sites, overload selection via typed variable args (not just literals), interface dispatch emits additional CALLS edges to implementing classes (#540) - MethodExtractor abstraction — structured method metadata extraction (isAbstract, isFinal, annotations, visibility, parameter types) with config-driven factory pattern (#576)
- Java and Kotlin configs with overload-safe
methodInfoCachekeyed byname:line - C# config with
sealed,params/out/ref/optional parameters,[Attribute]syntax,internalvisibility (#582)
- Java and Kotlin configs with overload-safe
--skip-agents-mdCLI flag — opt out of overwriting GitNexus-managed sections in AGENTS.md and CLAUDE.md duringgitnexus analyze(#517)- Prettier — monorepo-wide code formatter with lint-staged + Husky pre-commit hook,
.prettierrcconfig, Tailwind CSS v4 plugin,endOfLine: "lf"+.gitattributesfor Windows consistency (#563) - ESLint v9 — flat config with
unused-importsauto-removal,@typescript-eslintrules, React hooks rules, CIlintjob (#564)
Fixed
- OpenCode MCP configuration — corrected README MCP setup for OpenCode which requires
commandas an array containing both executable and arguments (#363) - litellm security — excluded vulnerable versions 1.82.7 and 1.82.8 in eval harness
pyproject.toml(#580)
Changed
- Reduced explicit
anytypes — 128no-explicit-anywarnings eliminated (689 → 561, 19% reduction) acrossNodePropertiesindex signature, ~80SyntaxNodesubstitutions, typed worker protocol, and graphology community detection (#566)
Docs
- Added
gitnexus-sharedbuild step to web UI quick start instructions (#585) - Added enterprise offering section to README (#579)
[1.4.10] - 2026-03-27
Fixed
- MCP server install via npx — resolve tree-sitter peer dependency conflicts that broke
npx -y gitnexus@latest mcp(#537, #538)- Downgrade tree-sitter from ^0.25.0 to ^0.21.1 (only npm version where all 14 parsers agree)
- Align all parser versions to their highest ^0.21.x-compatible releases
- Remove tree-sitter override (only applies to root packages, ignored by npx)
- Pin tree-sitter-dart to correct ABI-14-compatible commit
- Exact pins for tree-sitter-c (0.23.2), tree-sitter-python (0.23.4), tree-sitter-rust (0.23.1) where next patch requires ^0.22.x
[1.4.9] - 2026-03-26
Added
- COBOL language support — standalone regex processor for fixed-format and free-format COBOL, JCL, COPY/REPLACING with pseudotext (#498)
- 95% language feature coverage: CALL USING, EXEC SQL/CICS/DLI, DECLARATIVES, SET, INSPECT, INITIALIZE, STRING/UNSTRING, SORT/MERGE with INPUT/OUTPUT PROCEDURE, GO TO DEPENDING ON, MOVE CORRESPONDING, nested programs with per-program scoping
- 90+ review findings resolved across 20 review cycles with 241 tests (180 unit + 61 integration)
- Benchmarked: CardDemo 12,349 nodes / 9,773 edges in 7.4s; ACAS 14,017 nodes / 15,659 edges in 9.3s
- Dart language support — tree-sitter grammar, type extractors, import/call resolution, Flutter/Riverpod framework detection (#204)
- Field type extraction — Phase 8 & 9: per-language field extractors with generic table-driven factory + TypeScript hand-written extractor, return-type binding in call-processor (#494)
- 14 language configs (TS/JS, Python, Go, Rust, C/C++, C#, Java, Kotlin, PHP, Ruby, Swift, Dart)
FieldVisibilityunion type,extractNameshook for Ruby multi-attribute- 46 field extraction tests across 5 languages
- ORM dataflow detection for Prisma and Supabase (#511)
- Expo Router file-based route detection (#503)
- PHP response shape extraction for
json_encodepatterns (#502) - Next.js middleware.ts linked to routes at project level (#504)
- Filter panel — additional node types (#519)
Changed
- BUILT_IN_NAMES split into per-language provider fields (#523)
- tree-sitter upgraded to 0.25.0 with all grammar packages (#516)
- Impact tool — batched chunking and entry-point grouping for enrichment (#507)
Fixed
- COBOL CRLF — all
split('\n')calls use/\r?\n/for Windows compatibility - COBOL nested programs — all graph edges (CALL, CANCEL, CICS, ENTRY, SQL, SEARCH) use
owningModuleId()for correct attribution - COBOL callAccum — multi-line CALL USING with verb boundary detection, Area A paragraph guard, EXEC entry flush, division/END PROGRAM flush
- Dart language gaps closed (#524)
- Shape check false positives — quoted keys, DOM leaks, errorKeys (#501)
- Python alias gaps resolved (#505)
- Cypher write-detection regex false positive fixed (#507)
- CI — shape-check-regression test moved to lbug-db project (#518)
[1.4.8] - 2026-03-23
Added
- Type resolution Milestone D — Phases 10–13 consolidated into a single milestone with full integration test coverage across 11 languages (#387)
- Phase A/B/C: overload disambiguation via argument literal types, constructor-visible virtual dispatch via
constructorTypeMap,parameterTypesextraction inextractMethodSignature - Phase 14 enhancements: single-pass seeding, Tarjan's SCC for cyclic resolution, cross-file return types
- Optional parameter arity resolution
- Per-language cross-file binding tests and resolver fixes
- Store all overloads in
fileIndexinstead of last-write-wins
- Phase A/B/C: overload disambiguation via argument literal types, constructor-visible virtual dispatch via
- Cross-file binding propagation for multiple languages
- HTTP embedding backend for self-hosted/remote endpoints with dynamic dimensions, batch guards, and dimension mismatch handling (#395)
- Markdown file indexing — headings and cross-links as graph nodes (#399)
- MiniMax provider support (#224)
- Codex MCP and skills support with CLI setup flow and e2e tests
- HelpPanel UI — built-in help for the web interface (#465)
- Section node type registered in
NODE_TABLESandNODE_SCHEMA_QUERIES(#401) - Community and Process node properties documented in cypher tool description (#411)
- Server-mode hydration regression tests
- Pre-commit hooks via husky for typecheck + unit tests
Fixed
- Python import alias resolution —
import X as Ynow routes module aliases directly tomoduleAliasMapin import processor (#417, #461) - Python module-qualified calls resolved via
moduleAliasMap(#337) - Python module-qualified constructor calls (Issue #337)
- Heritage/MRO edges now calculate confidence per resolution tier (#412)
- LadybugDB lock — retry on DB lock with session-safe cleanup (#325)
- CORS — allow private/LAN network origins (#390)
- Analyze without git — allow indexing folders without a
.gitdirectory (#384) - Web: LadybugDB —
getAllRows,loadServerGraph, BM25, highlight clearing (#474) - Server-mode hydration — await server connect hydration flow (#398, #404)
- Embedding dimensions — validate on every vector, not just the first; hard-throw on mismatch
- Timeout detection — always-on dim validation, test hardening
- ONNX CUDA — prevent uncatchable native crash when CUDA libs present but ORT lacks CUDA provider; clarify linux/x64-only
- CLI — run codex mcp add via shell on Windows; write tool output to stdout via fd 1
- Stale progress, cross-platform prepare, DEV log fixes
- Import resolution API simplified per PR #409 review findings (P0–P3)
- Auto-labeling — switched from clustering to z-score method; multi-dim aware Mahalanobis threshold
- PR/issue filtering — fixed prop cutoff issue
- Sequential enrichment queries + stale data detection
- package-lock.json synced with
onnxruntime-node ^1.24.0
Changed
- Unified language dispatch with compile-time exhaustive tables
- Prepare script simplified — removed
scripts/prepare.cjs - Switched from .githooks to husky for pre-commit hooks
@claudeworkflow restricted to maintainers and above viaauthor_associationcheck
Performance
- O(1) per-chunk synthesis guard using
boolean[]instead of Set sizeBeforeoptimization in type resolution- Token truncation improvements
Chore
- Strengthened Python module-import tests, un-skipped match/case, added perf guard
- Added positive and negative tests for all 4 bug fixes
- E2e tests for stale detection, sequential enrichment, stability (#396)
- Integration tests for Milestone D across all 11 languages
gitnexus-stable-opsadded to community integrations.env.exampleadded for embedding backend configuration
[1.4.7] - 2026-03-19
Added
- Phase 8 field/property type resolution — ACCESSES edges with
declaredTypefor field reads/writes (#354) - Phase 9 return-type variable binding — call-result variable binding across 11 languages (#379)
extractPendingAssignmentin per-language type extractors captureslet x = getUser()patterns- Unified fixpoint loop resolves variable types from function return types after initial walk
- Field access on call-result variables:
user.nameresolvesnamevia return type's class definition - Method-call-result chaining:
user.getProfile().bioresolves through intermediate return types - 22 new test fixtures covering call-result and method-chain binding across all supported languages
- Integration tests added for all 10 language resolver suites
- ACCESSES edge type with read/write field access tracking (#372)
- Python
enumerate()for-loop support with nested tuple patterns (#356) - MCP tool/resource descriptions updated to reflect Phase 9 ACCESSES edge semantics and
declaredTypeproperty
Fixed
- mcp: server crashes under parallel tool calls (#326, #349)
- parsing: undefined error on languages missing from call routers (#364)
- web: add missing Kotlin entries to
Record<SupportedLanguages>maps - rust:
awaitexpression unwrapping inextractPendingAssignmentfor async call-result binding - tests: update property edge and write access expectations across multiple language tests
- docs: corrected stale "single-pass" claims in type-resolution-system.md to reflect walk+fixpoint architecture
Changed
- Upgrade
@ladybugdb/coreto 0.15.2 and remove segfault workarounds (#374) - type-resolution-roadmap.md overhauled — completed phases condensed to summaries, Phases 10–14 added with full engineering specs
[1.4.6] - 2026-03-18
Added
- Phase 7 type resolution — return-aware loop inference for call-expression iterables (#341)
ReturnTypeLookupinterface withlookupReturnType/lookupRawReturnTypesplitForLoopExtractorContextcontext object replacing positional(node, env)signature- Call-expression iterable resolution across 8 languages (TS/JS, Java, Kotlin, C#, Go, Rust, Python, PHP)
- PHP
$this->propertyforeach via@varclass property scan (Strategy C) - PHP
function_call_expressionandmember_call_expressionforeach paths extractElementTypeFromStringas canonical raw-string container unwrapper inshared.tsextractReturnTypeNamededuplicated fromcall-processor.tsintoshared.ts(137 lines removed)SKIP_SUBTREE_TYPESperformance optimization with documentedtemplate_stringexclusionpendingCallResultsinfrastructure (dormant — Phase 9 work)
Fixed
- impact: return structured error + partial results instead of crashing (#345)
- impact: add
HAS_METHODandOVERRIDEStoVALID_RELATION_TYPES(#350) - cli: write tool output to stdout via fd 1 instead of stderr (#346)
- postinstall: add permission fix for CLI and hook scripts (#348)
- workflow: use prefixed temporary branch name for fork PRs to prevent overwriting real branches
- test: add
--repoto CLI e2e tool tests for multi-repo environment - php: add
declaration_listtype guard onfindClassPropertyElementTypefallback - docs: correct
pendingCallResultsdescription in roadmap and system docs
Chore
- Add
.worktrees/to.gitignore
[1.4.5] - 2026-03-17
Added
- Ruby language support for CLI and web (#111)
- TypeEnvironment API with constructor inference, self/this/super resolution (#274)
- Return type inference with doc-comment parsing (JSDoc, PHPDoc, YARD) and per-language type extractors (#284)
- Phase 4 type resolution — nullable unwrapping, for-loop typing, assignment chain propagation (#310)
- Phase 5 type resolution — chained calls, pattern matching, class-as-receiver (#315)
- Phase 6 type resolution — for-loop Tier 1c, pattern matching, container descriptors, 10-language coverage (#318)
- Container descriptor table for generic type argument resolution (Map keys vs values)
- Method-aware for-loop extractors with integration tests for all languages
- Recursive pattern binding (C#
ispatterns, Kotlinwhen/issmart casts) - Class field declaration unwrapping for C#/Java
- PHP
$this->propertyforeach member access - C++ pointer dereference range-for
- Java
this.data.values()field access patterns - Position-indexed when/is bindings for branch-local narrowing
- Type resolution system documentation with architecture guide and roadmap
.gitignoreand.gitnexusignoresupport during file discovery (#231)- Codex MCP configuration documentation in README (#236)
skipGraphPhasespipeline option to skip MRO/community/process phases for faster test runshookTimeout: 120000in vitest config for CI beforeAll hooks
Changed
- Migrated from KuzuDB to LadybugDB v0.15 (#275)
- Dynamically discover and install agent skills in CLI (#270)
Performance
- Worker pool threshold — skip worker creation for small repos (<15 files or <512KB total)
- AST walk pruning via
SKIP_SUBTREE_TYPESfor leaf-only nodes (string, comment, number literals) - Pre-computed
interestingNodeTypesset — single Set.has() replaces 3 checks per AST node fastStripNullable— skip full nullable parsing for simple identifiers (90%+ case)- Replace
.children?.find()with manual for loops inextractFunctionNameto eliminate array allocations
Fixed
- Same-directory Python import resolution (#328)
- Ruby method-level call resolution, HAS_METHOD edges, and dispatch table (#278)
- C++ fixture file casing for case-sensitive CI
- Template string incorrectly included in AST pruning set (contains interpolated expressions)