Added
- Transitive impact:
impact <symbol> --depth N(and adepthargument on the MCP tool) walks callers and callees breadth-first up to 5 hops. Edge rows carry ahopsfield, traversal is cycle-safe, and each direction caps at 500 edges with a self-describingkind: "truncated"marker row instead of silent loss. (#8) - Agent navigation tools:
neighbors <path>/ MCPfile_neighborsreturn a file’s structural neighborhood (symbols, import links, call-connected files with edge counts);searchaccepts a path filter (--path/ MCPpath) to scope results to a directory; areposMCP tool reports the default database’s freshness and discovers indexed repositories under caller-supplied roots. (#6) - MCP
contexttool acceptsformat: "json" | "markdown", so agents can pull the Brigade-ready markdown pack directly over MCP. (#4) statsnow reportssynced_at,tool_version, and per-language file counts. (#6)Dockerfileand.dockerignorefor a containerizedgraphtrail-mcp, anAGENTS.mdfor coding agents, and arust-version = "1.85"MSRV pin. (#7)
Changed
- Call resolution is qualifier- and import-aware (schema v2): member and scoped calls (
a.save(),Type::new(),module.func()) resolve through the enclosing container or the importing file’s imports, including relative Python modules and Rust crate paths, instead of fanning out to same-named symbols. Calls into stdlib or third-party modules no longer produce edges. On a ~4.6k-symbol repo this removed two-thirds of the edges (all false positives) while leaving files and symbols identical. Rebuild existing indexes withgraphtrail sync <repo> --force. (#5) - Ambiguous cross-file fallback resolution is deterministically ordered, so repeated syncs produce identical edge sets. (#4)
- A no-op incremental sync now updates the
synced_atmeta key, making index freshness distinguishable from staleness. (#4) - Query commands (
search,callers,callees,impact,context,stats) open the database read-only; onlyinitandsyncopen it writable. (#4) - Context packs render one location contract everywhere: symbols as
file:start-end, edges assource file:line -> target file. (#4)
Fixed
- The MCP server returns proper JSON-RPC errors (
-32700parse,-32600invalid request,-32602invalid params, including non-stringrepo/dbselectors that previously fell back to the default database silently) and clamps limits before SQLite integer binding. (#4)