Releases: ardelperal/codegraph-vba
Release list
v1.7.1
[1.7.1] - 2026-07-13
Documentation
- The post-extraction VBA stub resolver's actual contract is now documented for consumers.
metadata.repointDecisioncarries one ofreponted-to-real,declined-runtime,declined-ambiguous, ordeclined-not-found— consumers detecting "missing callees" must filter onrepointDecision='declined-not-found', NOT on the rawstub=truecount (which is dominated by runtime-object noise fromDAO.*,fso.*, etc.). The original round-5 prompt'sstub_true_count < 500acceptance criterion was replaced by thedeclined-not-foundfilter. Reference:docs/vba-stub-repoint-decision.md. (#115)
Fixes
- The shared MCP daemon auto-respawns when killed while the proxy is still up. After
Stop-Process -Id <pid>(or any other death cause) the proxy's per-project daemon watchdog detects the dead daemon via itsdaemon.pidlockfile and respawns it within 30s — file edits are picked up automatically instead of needing a manualcodegraph-vba sync. The watchdog polls every 30s by default and unrefs its interval so it never keeps the event loop alive on its own. (#116)
v1.7.0
[1.7.0] - 2026-07-13
Fixes
- VBA's
unresolved_refstable now reports the syntactic shape of each unresolved reference — call sites, form-property reads and writes,DoCmd.OpenQueryarguments, and bare identifiers each get their own row kind — so a SQL filter for "missing callee" stops drowning in DAO-field and form-control noise. The legacyreferenceskind is preserved for any path the round does not reclassify, so SQL filters that key on it keep working. (#108) - VBA's post-extraction call-stub resolver now correctly declines runtime-object call stubs (
DAO.*,fso.*,ListBox.AddItem,Collection.Add,err.*,VBA.*, …) instead of pointing them at themselves; a user class or module that happens to share a runtime-object name is still linked. Stubs now carry arepointDecisionfield on their edge metadata so consumers can tell a runtime-object decline apart from a genuinely-missing callee. (#110, supersedes #109)
v1.6.3
v1.6.2
[1.6.2] - 2026-07-12
New Features
- VBA SQL table references now record whether the code reads or writes each table — derived from the SQL verb (
SELECT/FROMandJOINare reads;INSERT,UPDATE, andDELETEtargets are writes; a form'sRecordSource/RowSourcebinding is a read) — so you can ask which procedures write a table versus only read it. (#87) - VBA object variables assigned from a factory function in the same module (
Set x = CreateThing()whereCreateThingreturns a class) are now typed from that function's return type, so calls likex.DoWorkconnect to the factory's class instead of dead-ending — more complete call graphs and impact analysis for factory-style Access code. (#89) - Dysflow VBA test manifests (
tests.*.json) are now indexed: each registeredTest_*procedure is linked to its manifest, so you can ask which tests cover a changed symbol — and get the test names and tags to run — straight from the graph, without grepping the manifest files. (#91) - Dysflow VBA test sequences under
sequences/*.jsonare now indexed: eachTest_*procedure listed in a sequence'sprocedures[]is linked back to the sequence file, with the sequence'srunnerPolicy, position, and origin carried on the edge — so you can ask which sequence exercises a procedure and what runner policy applies, straight from the graph. TherunnerPolicy+proceduresshape is the only one supported today; strict-sequence (executionUnits) and slices (slices[]+ submanifests) shapes are deferred to a follow-up. (#97) - Indexing an Access/VBA project is faster on large exports: the extractor no longer re-splits the source into lines once per concern. Five independent line-by-line sweeps now share a single pre-tokenized line array and a single walker dispatches each line to its classifier, so extraction of a ~2900-line
.clsruns ~10% faster at the same accuracy as before. (#83)
Fixes
- VBA conditional-compilation expressions (
#If … Then) with mixed arithmetic and comparison, e.g.#If 2147483647 + 1 = -2147483648 Then, are now evaluated correctly. The Pratt parser previously had no binary additive level, so expressions mixing+/-with=silently failed to parse and the inactive branch was indexed. (#84)
v1.6.1
v1.6.0
[1.6.0] - 2026-07-11
Changed
- Synced with upstream
colbymchenry/codegraphv1.4.1 (107 upstream commits merged into the fork). All VBA/Access extraction — its own files, resolvers, and 9 test suites — was preserved unchanged; conflicts occurred only at the integration seams and were resolved keeping the fork's VBA behavior while adopting upstream's improvements.
Fixed
- Closed ArkTS test database handles before removing temporary directories, preventing Windows
EBUSY/EPERMteardown failures.
New Features (from upstream)
- New languages recognized: Solidity, CFML/CFScript, CUDA, Metal, Nix, Erlang, COBOL, VB.NET, Terraform, ArkTS — alongside the existing VBA/Access support.
- Edge table now has a
UNIQUEidentity index; duplicate edge rows are de-duplicated soINSERT OR IGNOREactually dedups. (upstream #1034) name_segment_vocablookup (prose-word → symbol-name) backing the prompt hook's graph-derived gate.- Unresolvable refs are tracked as
status=failedand retried bysyncwhen a changed file later adds a matching symbol. (upstream #1240) - Config
includepatterns force first-party source INTO the index even when.gitignorewould drop it (projects under a second VCS). (upstream) - MCP notifies when a newer CodeGraph release exists. (upstream #1243)
Fixes (from upstream)
- Parse worker no longer reports false timeouts under a stalled main thread; grammar WASM bytes are passed to workers as a memory load instead of a per-spawn disk read. (upstream #1231)
uninstallnow removes the CLI binaries too, not just agent configs. (upstream #1254)
Fork-specific merge notes
- Database schema re-stacked: adopted upstream's migrations v6–v8 (edge dedup,
name_segment_vocab, unresolved-ref tracking) and moved the fork'snodes.metadatamigration to v9 (idempotent), bumpingCURRENT_SCHEMA_VERSIONto 9. - Kept the fork identity (
@aroman22/codegraph-vba, pnpm, Node ≥22.5) and Windows-orientedspawnSynchandling, combined with upstream'swindowsHide.
codegraph-vba v1.5.2
[1.5.2] - 2026-07-05
Fixes
- VBA blast-radius now correctly reports test-file callers (
Test_*.bas/Test_*.cls) when the only reference to a symbol is via a type declaration (Dim x As MyEnum). The VBA extractor creates synthetic class stubs for type references in the referencing file; a new resolution pass (resolveVbaReferenceStubs) now repoints these edges to the real type node in the defining file, sogetCallersfinds test files that reference the symbol. (#78)
codegraph-vba v1.5.1
[1.5.1] - 2026-07-04
Fixes
- VBA qualified calls now gate on the same rule in both shapes: the paren form (
modUtils.Foo(...)) and the statement form (modUtils.Foo arg). The previous behavior was inconsistent — aDim db As DAO.Databasewould emit a bogusdb.OpenRecordsetfunction stub in one form and stay silent in the other — so impact analysis on a Dysflow project produced phantom calls and missed real cross-module ones. Cross-module.bas-qualified calls now resolve in both shapes, and primitive / external-typed local receivers (DAO, ADO,Variant, etc.) stay silent in both shapes. (#40)
codegraph-vba v1.5.0
[1.5.0] - 2026-07-04
New Features
-
VBA's bang (
!) references now resolve in the graph:Me!Control,Forms!FormName!Control, and the same pattern against reports and subforms link to the actual control declared in the.form.txt/.report.txt, socodegraph callersandcodegraph_exploreshow every reference to a control by name and renaming a control is safe to do against the graph. (#68) -
DoCmd.OpenReport "ReportName"andDoCmd.OpenQuery "QueryName"are now modeled as edges from the calling line to a stub node for the target — the same treatmentDoCmd.OpenFormalready had since 1.2.0 — so impact analysis andcodegraph callersfollow report and query opens without grepping each.clsby hand. (#69) -
Access form and control data-source bindings are now first-class graph edges: a form's
RecordSource(the table or saved query it loads) and a listbox/combobox'sRowSource(the rows it displays) are linked to the target query or table, socodegraph_explorefollows a form's data layer and impact analysis surfaces every form and control a query or table feeds. (#74) -
Access
TempVars— the cross-form session-state mechanism (TempVars!UserID = "x"/TempVars("UserID")) used to share values between forms without a global module — are now graph nodes keyed by name, socodegraph_explorefinds every reader and writer of a TempVar and impact analysis shows what a rename touches. (#75) -
VBA source files now ingest cleanly regardless of encoding: a leading UTF-8 BOM is stripped automatically, and Windows-1252 (the legacy default for many Access exports) falls back transparently when UTF-8 decoding fails — so indexing an Access project no longer crashes or produces mojibake node names for files saved with non-UTF-8 encodings. (#71)
Fixes
-
VBA conditional-compilation blocks (
#If Win32 Then …,#If Win64 Then …,#Const MY_FLAG = 1) are now evaluated correctly:Win32/Win64/Win16/Macresolve against the current platform,Trueis recognized as-1(the VBA convention), and module-level#Constdeclarations are honored — so the graph only indexes the branches that actually compile, instead of silently dropping or double-counting code in#If/#Elseblocks. (#76) -
A
Constdeclared inside a VBA procedure no longer leaks to module scope — the previous behavior made aConst X = 1inside aSublook like a module-level constant that any other procedure could read, producing phantom references in the graph. Procedure-local constants are now correctly scoped to theirSub/Function, so the graph only links real module-level constants. (#73)
codegraph-vba v1.4.0
[1.4.0] - 2026-07-02
New Features
- Added new diagnostic and impact analysis skills for Microsoft Access and VBA:
vba-event-tracer: Traces event declarations, raise sites, and customWithEventsevent handlers.vba-handler-backtrace: Traces form control event handlers, dynamic calls, circular references, UDT parameters, and reconstructs multiline SQL statements.vba-sql-impact: Analyzes saved query definitions (.sqlfiles), extractsRecordSourceandRowSourcelayout properties, maps SQL table/column usages, and performs table alias resolution.