Why
Upstream released v1.6.0 on 2026-08-26. It carries fixes for all three issues we reported since the last sync — each verified as an ancestor of the tag:
| Our report |
Upstream fix |
Effect |
| #1585 — Rust: a method call on a typed field resolves to a same-named method on the wrong type |
#1599 |
self.inner.run() now resolves on the field's declared type, removing invented self-recursion (a few hundred such edges in ripgrep alone) |
| #1588 — Rust: methods of a generic impl are qualified by the trait, not the implementing type |
#1596 |
methods of impl<T> Source for BufSource<T> are findable under BufSource, and call edges are no longer invented out of empty impl bodies |
| #1610 — Erlang: same-name different-arity functions collapse into one node |
#1615 |
one node per (name, arity) with module:fun/arity identity; f/1 → f/2 becomes a real call edge instead of a self-loop |
Our base is already past v1.5.0, so the actual delta is 27 commits (c6aaa20..v1.6.0). Besides the three fixes above, these are the ones in that range that affect how FM-Agent reads the graph:
- native walkers are guarded against stack overflow and deep files are deferred to wasm — previously deeply nested C/C++ killed indexing (#1581)
- a C++
.h whose only C++ construct is a plain struct Derived : Base is no longer classified as C (#1592)
- untracked files inside untracked directories are detected (#1213)
- kernel results are decoded on
indexAll retry passes, and wiped rows self-heal (#1541)
- editing
codegraph.json or a .gitignore refreshes the watcher's scope without a restart (#1590)
(The WAL growth fix and first-class union nodes are not part of this delta — the pinned base already carries them.)
Plan
Per FORK.md: merge the upstream tag into main with a merge commit — never squash, so upstream stays an ancestor — re-apply the fork layer, and check nothing was dropped against the patch table.
Fork layer to preserve, 10 files:
| File |
What |
src/extraction/index.ts |
the only functional patch: fm_agent in DEFAULT_IGNORE_DIRS |
__tests__/fm-agent-workdir-exclusion.test.ts |
its test |
install.sh, install.ps1, src/upgrade/index.ts |
REPO points at this fork |
package.json, package-lock.json |
version marker |
.github/workflows/release.yml, .github/workflows/ci.yml |
fork release pipeline |
FORK.md |
this policy |
Base moves c6aaa20 → v1.6.0. Release as v1.6.0-fmagent.1, which sorts above 1.5.0-fmagent.2.
Follow-ups
- FM-Agent's
fm-agent.toml needs [codegraph].version bumped in the same round. codegraph upgrade resolves this fork's latest release while install.sh pins an exact tag, so a stale pin leaves the two disagreeing — an upgrade moves ahead of the pin and the next install.sh puts it back.
- Re-indexing is required after upgrading: both the Rust and the Erlang identities changed.
- Open upstream and not in this release: our #1619 (Erlang arity miscounted when an argument is a comment), plus issues #1373 and #1258.
Why
Upstream released v1.6.0 on 2026-08-26. It carries fixes for all three issues we reported since the last sync — each verified as an ancestor of the tag:
self.inner.run()now resolves on the field's declared type, removing invented self-recursion (a few hundred such edges in ripgrep alone)impl<T> Source for BufSource<T>are findable underBufSource, and call edges are no longer invented out of empty impl bodies(name, arity)withmodule:fun/arityidentity;f/1 → f/2becomes a real call edge instead of a self-loopOur base is already past
v1.5.0, so the actual delta is 27 commits (c6aaa20..v1.6.0). Besides the three fixes above, these are the ones in that range that affect how FM-Agent reads the graph:.hwhose only C++ construct is a plainstruct Derived : Baseis no longer classified as C (#1592)indexAllretry passes, and wiped rows self-heal (#1541)codegraph.jsonor a.gitignorerefreshes the watcher's scope without a restart (#1590)(The WAL growth fix and first-class
unionnodes are not part of this delta — the pinned base already carries them.)Plan
Per FORK.md: merge the upstream tag into
mainwith a merge commit — never squash, so upstream stays an ancestor — re-apply the fork layer, and check nothing was dropped against the patch table.Fork layer to preserve, 10 files:
src/extraction/index.tsfm_agentinDEFAULT_IGNORE_DIRS__tests__/fm-agent-workdir-exclusion.test.tsinstall.sh,install.ps1,src/upgrade/index.tsREPOpoints at this forkpackage.json,package-lock.json.github/workflows/release.yml,.github/workflows/ci.ymlFORK.mdBase moves
c6aaa20→v1.6.0. Release asv1.6.0-fmagent.1, which sorts above1.5.0-fmagent.2.Follow-ups
fm-agent.tomlneeds[codegraph].versionbumped in the same round.codegraph upgraderesolves this fork's latest release whileinstall.shpins an exact tag, so a stale pin leaves the two disagreeing — an upgrade moves ahead of the pin and the nextinstall.shputs it back.