docs(spike): SCIP overlay go/no-go for call graph (TAP-4096)#198
Merged
Conversation
Decision-support spike (not an ADR) evaluating an optional compiler-grade SCIP overlay that ingests an existing index.scip to upgrade ambiguous CALLS edges, with the deterministic AST/tree-sitter index as source of truth + fallback. Measured on the live tapps_mcp package (6,470 edges, 6,403 in-repo gaps): the 0.99 in-repo gap rate collapses to a ~58% SCIP-addressable ceiling (method calls) once builtins are excluded, and lower still after typed-receiver externals drop out. Verdict: NO-GO for now (no consumer emits index.scip; the staleness window is a new fabricate-an-edge liability; cheaper in-repo receiver typing is unspent) with a concrete GO trip-wire and a thin follow-up story outline. Holds ADR-0017 rejection / ADR-0026 deferral. Doc only, no code change. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
What
Decision-support spike (not an ADR) for TAP-4096: evaluate an optional compiler-grade SCIP overlay that ingests an existing
index.scipwhen present to upgrade ambiguous CALLS edges, with the deterministic AST/tree-sitter index remaining source of truth + fallback. Doc only — no overlay implementation.Verdict: NO-GO for now (hold ADR-0017 rejection / ADR-0026 deferral)
Measured live on the
tapps_mcppackage viabuild_call_graph_index(6,470 edges, 6,403 in-repo gaps, 0.99 in-repo gap rate). Honest bucketing of the 10,241unresolved_static_callgaps:x.y()The headline 0.99 rate overstates the win ~3×: the classifier's
expr_rootheuristic counts builtins/local-method calls as in-repo. Genuine SCIP-addressable ceiling ≈58%, realistic in-repo gain ≈20-35% after typed-receiver externals drop out.Why NO-GO: (1) win is real but modest; (2) no consumer emits
index.sciptoday, so the "near-zero marginal cost" premise has no live input; (3) a stale.scipcan draw a wrong edge — the ADR-0004 fabricate-an-edge failure mode; (4) cheaper deterministic in-repo receiver typing (ADR-0026receiver_untyped/ TAP-4540 lineage) captures a chunk of the same edges with no external toolchain. Includes a concrete GO trip-wire + thin S1-S4 follow-up outline if a consumer starts shippingindex.scip.Where it would plug in (verified anchors)
call_graph.py:306-311(full-build_finalize_index) +call_graph.py:322-366(incrementalupdate_call_graph_index, byte-equivalence invariant)call_graph_fingerprint.py:149-159compute_index_fingerprint(fold.sciphash for staleness)INDEX_VERSION5 → 6 bump;call_graph_cache.py:351-386migration pathTest
Docs-only, no Python touched. Markdown well-formed, all internal file/ADR refs verified to exist; ADR-0017/0026 line anchors confirmed. No docs index lists spikes (repo convention), so no index change.
🤖 Generated with Claude Code