Skip to content

fix(meta_analyzer): store None-end fallback key so static findings are not dropped#94

Open
Shrotriya-lalit wants to merge 1 commit into
NVIDIA:mainfrom
Shrotriya-lalit:fix/issue-67-apply-filter-end-line
Open

fix(meta_analyzer): store None-end fallback key so static findings are not dropped#94
Shrotriya-lalit wants to merge 1 commit into
NVIDIA:mainfrom
Shrotriya-lalit:fix/issue-67-apply-filter-end-line

Conversation

@Shrotriya-lalit

Copy link
Copy Markdown

Problem

LLMMetaAnalyzer.apply_filter() stored LLM-confirmed findings keyed by:

(file, rule_id, start_line, end_line)

Static analyzers almost never populate end_line — it defaults to None.
The LLM, however, fills in end_line for every finding it confirms.

This key mismatch meant every static finding with end_line=None was silently
dropped after LLM enrichment, even when the LLM had correctly confirmed it.
In practice, the meta-analyzer produced zero filtered findings for entire files.

Root Cause

# Before fix — only exact key stored:
confirmed_granular[(file, rule_id, int(start), int(end))] = enrichment
# Static finding has end_line=None → no match → finding dropped

Fix

When storing a granular LLM confirmation with an explicit end_line, also store
a fallback key with end_line=None via setdefault:

confirmed_granular[(file, rule_id, int(start), exact_end)] = enrichment
confirmed_granular.setdefault(
    (file, rule_id, int(start), None), enrichment
)

setdefault is used so that if the LLM also reports a finding at the same
start_line with end_line=None, its enrichment takes precedence. Lookup order
is unchanged: exact key → start-only key → coarse key.

Tests

  • test_static_end_line_none_confirmed_when_llm_returns_end_line — reproduces the bug exactly
  • test_static_end_line_none_multiple_same_rule — multiple findings same rule, different start lines
  • test_end_line_used_when_provided — regression: exact end_line match still works

Closes #67

Checklist

  • make lint passes
  • Tests added for new behaviour (including bug reproduction test)
  • DCO sign-off on commit (git commit -s)

…e not dropped

apply_filter stored LLM confirmations keyed by (file, rule_id, start, end_line).
Static analyzers almost never record end_line (it defaults to None), while the
LLM fills it in for every finding it confirms.  This key mismatch caused every
static finding with end_line=None to be silently dropped when the LLM returned
an explicit end_line, effectively discarding all static results after LLM
enrichment.

Fix: when storing a granular LLM confirmation with an explicit end_line N, also
store a fallback key with end_line=None via setdefault so that a static finding
at the same (file, rule_id, start_line) with end_line=None still matches.

Closes NVIDIA#67

Signed-off-by: Lalit Shrotriya <shrotriya.lalit@outlook.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(meta-analyzer): LLM-confirmed findings dropped when model returns end_line

1 participant