This release closes out a long line of work that has accumulated since v13.0.3. The headline is the V12 graph schema and the query predicates it unlocks, but a lot has landed across languages, queries, and natural-language search. Here is the full picture.
The V12 graph adds a resolved_via: query predicate. Every Calls edge records
how it was resolved, and you can now filter on that directly:
# Only calls recovered through the binding plane (e.g. C function pointers)
sqry query "resolved_via:binding_plane"
# Combine with a relation predicate
sqry query "callers:my_read resolved_via:binding_plane lang:c"
Valid values are direct, type_match, and binding_plane. The latter two
recover indirect / function-pointer calls that exact resolution alone would
miss, so you can separate precise edges from heuristic ones.
A companion framework: predicate filters nodes by detected web framework. The
predicate and its evaluation are wired through every surface; framework-route
extraction is rolling out, so coverage grows as the route extractors land.
Both predicates work in the planner text grammar (sqry plan-query and the MCP
sqry_query tool) and as framework / resolved_via filter parameters on the
relation_query, direct_callers, direct_callees, and semantic_search MCP
tools.
returns:<Type> no longer matches signature text — it resolves against real
TypeOf{Return} edges in the graph for Rust, Java, Python, TypeScript, and Go:
sqry query "kind:function returns:Result"
Property nodes with qualified names (the same treatment now applies to C
and Haskell record/struct fields).drivers/net subset.sqry impact / sqry explain and the MCP dependency_impact
tool return a structured AmbiguousSymbol error that lists every candidate
instead of guessing.sqry ask: natural-language queries run through an on-device ONNX
classifier. The model is fetched via a gated, SHA256-verified auto-download
with strict integrity checking on by default; point sqry at a different model
with --model-dir.find_duplicates payload caps: each duplicate group is capped to 10
members by default. Pass max_members_per_group to change it (0 disables
the cap), and read the new total_members / members_truncated fields to
detect truncation. This keeps responses within MCP payload budgets on very
large repositories..sqry-workspace registry or a VS Code .code-workspace sqry.workspace
block to query multiple source roots as one logical workspace. There is no
implicit “cross-repo by default” behavior.A Homebrew tap auto-publishes on every release, and Windows / macOS artifacts are validated on native-platform smoke gates before public promotion.
The C indirect-call and Go field-edge work changed in-format graph semantics.
Existing snapshots keep loading, but the new edges, Property nodes, and
resolved_via provenance only appear after a rebuild. Run sqry index --force
once after upgrading to pick up the V12 graph shape.