feat(review): rank untested by risk + new_untested_hotspot rule#64
Merged
Merged
Conversation
- Add hotspot_score, blast_radius_size, blast_files fields to UntestedNode - Add rank_untested() that enriches and sorts by (-hotspot_score, -blast_radius, file, line) - Add new_untested_hotspot review rule: fires when an added function has >= threshold callers but no test-module caller - Surface ranking in CLI (new hotspot/blast columns) and MCP tool (new JSON fields) - Add test_rank_untested.py (7 tests) and test_review_rules_untested_hotspot.py (4 tests) - Add python_hotspot_v1/v2/v2_tested fixtures for rule integration tests
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Summary
Stacked on #63. Gap-analysis Phase 2 (Capability C — risk-ranked coverage):
rank_untested(graph, *, blast_depth=3, top=None): joins untested × hotspot score (same formula as hotspots.py) × blast radius (skipped for zero-fan-in nodes, perf).UntestedNodegainshotspot_score/blast_radius_size/blast_files.codegraph query untestedand MCPuntestedtool surface the ranking.Implemented by a Sonnet subagent against a Fable-authored spec; rebased onto the lint stack, reviewed, and verified by the orchestrating session.
Test plan
codegraph query untestedon self-graph shows risk-ranked output🤖 Generated with Claude Code