Repository navigation
ADR-053: graph tools tell the truth (per-language data-flow rules) - #95
Merged
Merged
Conversation
…uage rules Co-Authored-By: Claude <noreply@anthropic.com> [ADR-053]
get_graph_edges() returned an unresolved edge's raw target, so append, bool, ArgumentParser, os and Protocol became community members and betweenness hubs. It now returns an edge only when its target is a symbol FQN or an indexed file, and binds EXTENDS/IMPLEMENTS bare names to the in-repo type of that name (same file first, else the only one). Resolved import links survive (ADR-044). Co-Authored-By: Claude <noreply@anthropic.com> [ADR-053 src/db.py]
trace_data_flow knew only Firestore and Next.js: on this repo it found no definition for chunk_summaries and listed its writer, cache_summaries, as a consumer. Each adapter now supplies data_flow_rules(): Python (SQL CREATE/ INSERT/UPDATE/DELETE, classes, attribute and collection writes), Apps Script on the JS/TS adapter (setValue(s), appendRow, setProperty, gated on an Apps Script service in the file) and C# (types, SQL, EF Core DbSet writes). Rule hits are swept across the whole doc store, not only the ranked top-80. The Firestore/Next.js path is untouched; a golden captured from 871b55c pins its output. Both graph tools now raise when no index has been built, so the client sees isError instead of a successful refusal or a search of an empty index. Co-Authored-By: Claude <noreply@anthropic.com> [ADR-053 src/CLAUDE.md src/MCPServer.py src/adapters/base.py src/adapters/csharp_adapter.py src/adapters/python_adapter.py src/adapters/ts_adapter.py]
Co-Authored-By: Claude <noreply@anthropic.com> [ADR-053]
A rule-matched entry dropped the client-side-write tag the legacy entry carries, and an empty target_symbol made every rule match every file. Co-Authored-By: Claude <noreply@anthropic.com> [ADR-053 src/MCPServer.py]
Co-Authored-By: Claude <noreply@anthropic.com> [ADR-053]
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> [ADR-053 src/CLAUDE.md src/MCPServer.py src/adapters/__init__.py src/blas_threads.py src/call_resolver.py src/core.py src/db.py src/hybrid_retriever.py src/incremental_indexer.py src/iterative_retriever.py src/model_host.py src/redact.py src/scan_policy.py src/source.py src/summarizer.py src/tui/app.py]
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> [ADR-053 src/MCPServer.py]
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
trace_data_flowgets its per-language definition and producer rules from the adapters, with sweeps over the whole index for the hits the ranked search misses. Seedocs/adr/ADR-053-graph-tools-tell-the-truth.md.Open questions answered (@EDB, 2026-11-02, "all recommended"):
[UTILITY],[CORE LOGIC / LIB]and so on) are now printed only for TS/JS files, through a new_layer_tag. A Python or C# entry shows only its bucket. A test is added, and the pinned Firestore output is unchanged..gsscanning.indexer.toml; Gantt'srecordAudit→audit_eventsis the example).Status set to
accepted. Master (b0619f4) is merged in with no conflicts. It also merges cleanly with ADR-050's branch.Checks, run locally on CPU (Windows, Python 3.14):
pytest --co, the conformance, resolution and L5X baseline checks all pass.trace_data_flowwith no index returnsisError: true.🤖 Generated with Claude Code