@oddessentials/odd-ai-reviewers 1.7.3 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/agents/ai_semantic_review.d.ts.map +1 -1
  2. package/dist/agents/ai_semantic_review.js +4 -1
  3. package/dist/agents/ai_semantic_review.js.map +1 -1
  4. package/dist/agents/control_flow/safe-source-detector.d.ts +48 -0
  5. package/dist/agents/control_flow/safe-source-detector.d.ts.map +1 -0
  6. package/dist/agents/control_flow/safe-source-detector.js +424 -0
  7. package/dist/agents/control_flow/safe-source-detector.js.map +1 -0
  8. package/dist/agents/control_flow/safe-source-patterns.d.ts +61 -0
  9. package/dist/agents/control_flow/safe-source-patterns.d.ts.map +1 -0
  10. package/dist/agents/control_flow/safe-source-patterns.js +137 -0
  11. package/dist/agents/control_flow/safe-source-patterns.js.map +1 -0
  12. package/dist/agents/control_flow/scope-stack.d.ts +113 -0
  13. package/dist/agents/control_flow/scope-stack.d.ts.map +1 -0
  14. package/dist/agents/control_flow/scope-stack.js +320 -0
  15. package/dist/agents/control_flow/scope-stack.js.map +1 -0
  16. package/dist/agents/control_flow/vulnerability-detector.d.ts +13 -0
  17. package/dist/agents/control_flow/vulnerability-detector.d.ts.map +1 -1
  18. package/dist/agents/control_flow/vulnerability-detector.js +252 -35
  19. package/dist/agents/control_flow/vulnerability-detector.js.map +1 -1
  20. package/dist/agents/opencode.d.ts.map +1 -1
  21. package/dist/agents/opencode.js +4 -1
  22. package/dist/agents/opencode.js.map +1 -1
  23. package/dist/agents/pr_agent.d.ts.map +1 -1
  24. package/dist/agents/pr_agent.js +5 -2
  25. package/dist/agents/pr_agent.js.map +1 -1
  26. package/dist/agents/security.d.ts.map +1 -1
  27. package/dist/agents/security.js +1 -0
  28. package/dist/agents/security.js.map +1 -1
  29. package/dist/agents/types.d.ts +6 -0
  30. package/dist/agents/types.d.ts.map +1 -1
  31. package/dist/benchmark/adapter.d.ts +39 -0
  32. package/dist/benchmark/adapter.d.ts.map +1 -0
  33. package/dist/benchmark/adapter.js +217 -0
  34. package/dist/benchmark/adapter.js.map +1 -0
  35. package/dist/benchmark/scoring.d.ts +100 -0
  36. package/dist/benchmark/scoring.d.ts.map +1 -0
  37. package/dist/benchmark/scoring.js +195 -0
  38. package/dist/benchmark/scoring.js.map +1 -0
  39. package/dist/context-loader.d.ts +80 -0
  40. package/dist/context-loader.d.ts.map +1 -0
  41. package/dist/context-loader.js +202 -0
  42. package/dist/context-loader.js.map +1 -0
  43. package/dist/main.d.ts.map +1 -1
  44. package/dist/main.js +131 -4
  45. package/dist/main.js.map +1 -1
  46. package/dist/phases/index.d.ts +1 -1
  47. package/dist/phases/index.d.ts.map +1 -1
  48. package/dist/phases/index.js +1 -1
  49. package/dist/phases/index.js.map +1 -1
  50. package/dist/phases/report.d.ts +8 -1
  51. package/dist/phases/report.d.ts.map +1 -1
  52. package/dist/phases/report.js +27 -5
  53. package/dist/phases/report.js.map +1 -1
  54. package/dist/preflight.d.ts.map +1 -1
  55. package/dist/preflight.js +8 -3
  56. package/dist/preflight.js.map +1 -1
  57. package/dist/report/ado.d.ts +2 -0
  58. package/dist/report/ado.d.ts.map +1 -1
  59. package/dist/report/ado.js +9 -23
  60. package/dist/report/ado.js.map +1 -1
  61. package/dist/report/finding-validator.d.ts +104 -0
  62. package/dist/report/finding-validator.d.ts.map +1 -0
  63. package/dist/report/finding-validator.js +273 -0
  64. package/dist/report/finding-validator.js.map +1 -0
  65. package/dist/report/github.d.ts +2 -0
  66. package/dist/report/github.d.ts.map +1 -1
  67. package/dist/report/github.js +9 -23
  68. package/dist/report/github.js.map +1 -1
  69. package/dist/trust.d.ts +6 -0
  70. package/dist/trust.d.ts.map +1 -1
  71. package/dist/trust.js +2 -0
  72. package/dist/trust.js.map +1 -1
  73. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"ado.d.ts","sourceRoot":"","sources":["../../src/report/ado.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAuB3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAS3C,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EAEvB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sCAAsC;IACtC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,gDAAgD;IAChD,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzC,4DAA4D;IAC5D,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC3E;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,OAAO,EAAE,EACnB,eAAe,EAAE,OAAO,EAAE,EAC1B,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,YAAY,CAAC,CA8FvB"}
1
+ {"version":3,"file":"ado.d.ts","sourceRoot":"","sources":["../../src/report/ado.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAuB3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQ3C,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EAEvB,MAAM,oBAAoB,CAAC;AAG5B,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sCAAsC;IACtC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,gDAAgD;IAChD,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzC,4DAA4D;IAC5D,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uEAAuE;IACvE,yBAAyB,CAAC,EAAE,OAAO,EAAE,CAAC;CACvC;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC3E;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,OAAO,EAAE,EACnB,eAAe,EAAE,OAAO,EAAE,EAC1B,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,YAAY,CAAC,CA0EvB"}
@@ -5,9 +5,9 @@
5
5
  */
6
6
  import { deduplicateFindings, sortFindings, generateSummaryMarkdown, renderPartialFindingsSection, countBySeverity, extractFingerprintMarkers, getDedupeKey, buildProximityMap, isDuplicateByProximity, identifyStaleComments, updateProximityMap, } from './formats.js';
7
7
  import { buildCommentToMarkersMap, shouldResolveComment, getPartiallyResolvedMarkers, hasMalformedMarkers, applyPartialResolutionVisual, emitResolutionLog, emitMalformedMarkerWarning, } from './resolution.js';
8
- import { canonicalizeDiffFiles } from '../diff.js';
9
8
  import { delay, INLINE_COMMENT_DELAY_MS, formatInlineComment, formatGroupedInlineComment, groupAdjacentFindings, } from './base.js';
10
- import { buildLineResolver, normalizeFindingsForDiff, computeDriftSignal, computeInlineDriftSignal, generateDriftMarkdown, shouldSuppressInlineComments, } from './line-resolver.js';
9
+ import { generateDriftMarkdown, shouldSuppressInlineComments, } from './line-resolver.js';
10
+ import { normalizeAndValidateFindings } from './finding-validator.js';
11
11
  /**
12
12
  * Start a commit status in 'pending' state
13
13
  * Call this at the beginning of the review to show users the review is running
@@ -52,23 +52,10 @@ export async function reportToADO(findings, partialFindings, context, config, di
52
52
  summary: true,
53
53
  thread_status: 'active',
54
54
  };
55
- // CANONICAL ENTRYPOINT: Ensure all diff paths are normalized FIRST
56
- // This must happen before buildLineResolver, deleted set, or rename maps
57
- const canonicalFiles = canonicalizeDiffFiles(diffFiles);
58
- // Build line resolver and normalize findings from canonical files
59
- const lineResolver = buildLineResolver(canonicalFiles);
60
- const normalizationResult = normalizeFindingsForDiff(findings, lineResolver);
61
- if (normalizationResult.stats.dropped > 0 || normalizationResult.stats.normalized > 0) {
62
- console.log(`[ado] Line validation: ${normalizationResult.stats.valid} valid, ` +
63
- `${normalizationResult.stats.normalized} normalized, ${normalizationResult.stats.dropped} dropped`);
64
- }
65
- // Compute drift signal for visibility in PR thread summary
66
- const driftSignal = computeDriftSignal(normalizationResult.stats, normalizationResult.invalidDetails);
67
- // Compute inline-specific drift signal for gate decisions.
68
- // Uses only line-bearing findings as denominator to avoid dilution by file-level findings.
69
- const inlineDriftSignal = computeInlineDriftSignal(normalizationResult.stats, normalizationResult.invalidDetails);
70
- // Process normalized findings
71
- const deduplicated = deduplicateFindings(normalizationResult.findings);
55
+ // Normalize findings against diff and run Stage 2 validation
56
+ const { validatedFindings, canonicalFiles, driftSignal, inlineDriftSignal, normalizationStats, invalidDetails, } = normalizeAndValidateFindings(findings, diffFiles, 'ado');
57
+ // Process validated findings
58
+ const deduplicated = deduplicateFindings(validatedFindings);
72
59
  const sorted = sortFindings(deduplicated);
73
60
  const counts = countBySeverity(sorted);
74
61
  try {
@@ -93,11 +80,10 @@ export async function reportToADO(findings, partialFindings, context, config, di
93
80
  statusId,
94
81
  threadId,
95
82
  skippedDuplicates,
96
- validationStats: normalizationResult.stats,
97
- invalidLineDetails: normalizationResult.invalidDetails.length > 0
98
- ? normalizationResult.invalidDetails
99
- : undefined,
83
+ validationStats: normalizationStats,
84
+ invalidLineDetails: invalidDetails.length > 0 ? invalidDetails : undefined,
100
85
  inlineCommentsGated: shouldSuppressInlineComments(inlineDriftSignal, config.gating.drift_gate),
86
+ postNormalizationFindings: sorted,
101
87
  };
102
88
  }
103
89
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"ado.js","sourceRoot":"","sources":["../../src/report/ado.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ado.js","sourceRoot":"","sources":["../../src/report/ado.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Finding Validator Module
3
+ *
4
+ * Post-processing validation for findings before they are posted to platforms.
5
+ * Implements FR-011 (line validation), FR-012 (classification), FR-013 (self-contradiction),
6
+ * and FR-014 (validation summary).
7
+ */
8
+ import type { Finding } from '../agents/types.js';
9
+ import type { DiffFile } from '../diff.js';
10
+ import { type ValidationStats, type InvalidLineDetail, type DriftSignal } from './line-resolver.js';
11
+ export type FindingClassification = 'inline' | 'file-level' | 'global' | 'cross-file';
12
+ export interface FindingValidationResult {
13
+ finding: Finding;
14
+ classification: FindingClassification;
15
+ valid: boolean;
16
+ filterReason?: string;
17
+ filterType?: 'invalid_line' | 'self_contradicting';
18
+ }
19
+ export interface FindingValidationSummary {
20
+ validFindings: Finding[];
21
+ filtered: FindingValidationResult[];
22
+ stats: {
23
+ total: number;
24
+ valid: number;
25
+ filteredByLine: number;
26
+ filteredBySelfContradiction: number;
27
+ byClassification: Record<FindingClassification, number>;
28
+ };
29
+ }
30
+ /**
31
+ * Interface for validating line numbers against diff content.
32
+ * Compatible with the LineResolver from line-resolver.ts but simplified
33
+ * to the minimal interface needed for finding validation.
34
+ */
35
+ interface FindingLineResolver {
36
+ validateLine(file: string, line: number | undefined, options?: {
37
+ suggestNearest?: boolean;
38
+ }): {
39
+ valid: boolean;
40
+ };
41
+ }
42
+ /**
43
+ * Stage 1: Semantic-only validation (no lineResolver needed).
44
+ *
45
+ * Performs ONLY normalization-independent checks:
46
+ * - Classification (inline / file-level / global / cross-file)
47
+ * - Self-contradiction detection (info severity + dismissive language + no suggestion)
48
+ * - NO line validation, NO path validation against diff
49
+ *
50
+ * Used in processFindings() BEFORE platform reporters run normalizeFindingsForDiff().
51
+ * This ensures renamed-file and stale-line findings survive to be salvaged by normalization.
52
+ *
53
+ * @param findings - Array of findings to validate
54
+ * @returns Validation summary with valid findings, filtered findings, and stats
55
+ */
56
+ export declare function validateFindingsSemantics(findings: Finding[]): FindingValidationSummary;
57
+ /**
58
+ * Stage 2: Diff-bound validation (for use AFTER normalizeFindingsForDiff()).
59
+ *
60
+ * Performs line validation against normalized diff positions and path validation.
61
+ * Runs only after normalization has had a chance to remap renamed paths and snap stale lines.
62
+ *
63
+ * @param findings - Array of findings (already normalized by normalizeFindingsForDiff)
64
+ * @param lineResolver - Resolver for validating line numbers against diff
65
+ * @param diffFiles - Array of file paths present in the diff
66
+ * @returns Validation summary with valid findings, filtered findings, and stats
67
+ */
68
+ export declare function validateNormalizedFindings(findings: Finding[], lineResolver: FindingLineResolver, diffFiles?: string[]): FindingValidationSummary;
69
+ /**
70
+ * Full normalization + validation pipeline shared by platform reporters.
71
+ *
72
+ * Canonicalizes diff files, normalizes findings against the diff, runs Stage 2
73
+ * validation, and computes drift signals. Both github.ts and ado.ts delegate
74
+ * to this function to avoid duplicating the pipeline.
75
+ */
76
+ export interface NormalizationPipelineResult {
77
+ validatedFindings: Finding[];
78
+ canonicalFiles: DiffFile[];
79
+ driftSignal: DriftSignal;
80
+ inlineDriftSignal: DriftSignal;
81
+ normalizationStats: ValidationStats;
82
+ invalidDetails: InvalidLineDetail[];
83
+ }
84
+ export declare function normalizeAndValidateFindings(findings: Finding[], diffFiles: DiffFile[], platform: string): NormalizationPipelineResult;
85
+ /**
86
+ * Validate and classify findings, filtering out invalid lines and self-contradicting findings.
87
+ *
88
+ * Three-pass validation:
89
+ * 1. Classify each finding (inline, file-level, global, cross-file)
90
+ * 2. Validate line numbers for inline findings
91
+ * 3. Detect self-contradicting findings (info + dismissive + no suggestion)
92
+ *
93
+ * @deprecated Use validateFindingsSemantics() in processFindings and
94
+ * validateNormalizedFindings() in platform reporters after normalization.
95
+ * Kept for backward compatibility (benchmark adapter).
96
+ *
97
+ * @param findings - Array of findings to validate
98
+ * @param lineResolver - Resolver for validating line numbers against diff
99
+ * @param diffFiles - Array of file paths present in the diff
100
+ * @returns Validation summary with valid findings, filtered findings, and stats
101
+ */
102
+ export declare function validateFindings(findings: Finding[], lineResolver: FindingLineResolver, diffFiles?: string[]): FindingValidationSummary;
103
+ export {};
104
+ //# sourceMappingURL=finding-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-validator.d.ts","sourceRoot":"","sources":["../../src/report/finding-validator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEtF,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,qBAAqB,CAAC;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,cAAc,GAAG,oBAAoB,CAAC;CACpD;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,OAAO,EAAE,CAAC;IACzB,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,2BAA2B,EAAE,MAAM,CAAC;QACpC,gBAAgB,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;KACzD,CAAC;CACH;AAED;;;;GAIG;AACH,UAAU,mBAAmB;IAC3B,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GACrC;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CACvB;AAyCD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,wBAAwB,CA4EvF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,OAAO,EAAE,EACnB,YAAY,EAAE,mBAAmB,EACjC,SAAS,CAAC,EAAE,MAAM,EAAE,GACnB,wBAAwB,CA8F1B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,2BAA2B;IAC1C,iBAAiB,EAAE,OAAO,EAAE,CAAC;IAC7B,cAAc,EAAE,QAAQ,EAAE,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,EAAE,WAAW,CAAC;IAC/B,kBAAkB,EAAE,eAAe,CAAC;IACpC,cAAc,EAAE,iBAAiB,EAAE,CAAC;CACrC;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,QAAQ,EAAE,EACrB,QAAQ,EAAE,MAAM,GACf,2BAA2B,CA6C7B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,OAAO,EAAE,EACnB,YAAY,EAAE,mBAAmB,EACjC,SAAS,CAAC,EAAE,MAAM,EAAE,GACnB,wBAAwB,CAE1B"}
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Finding Validator Module
3
+ *
4
+ * Post-processing validation for findings before they are posted to platforms.
5
+ * Implements FR-011 (line validation), FR-012 (classification), FR-013 (self-contradiction),
6
+ * and FR-014 (validation summary).
7
+ */
8
+ import { canonicalizeDiffFiles } from '../diff.js';
9
+ import { buildLineResolver, normalizeFindingsForDiff, computeDriftSignal, computeInlineDriftSignal, } from './line-resolver.js';
10
+ /**
11
+ * Patterns that indicate a finding is self-dismissing.
12
+ * When combined with info severity and no actionable suggestion,
13
+ * the finding is likely a false positive.
14
+ */
15
+ const DISMISSIVE_PATTERNS = [
16
+ /\bno action required\b/i,
17
+ /\bacceptable as[- ]is\b/i,
18
+ /\bnot blocking\b/i,
19
+ /\bno change needed\b/i,
20
+ /\bcan be ignored\b/i,
21
+ ];
22
+ /**
23
+ * Check if a suggestion is actionable (contains concrete guidance beyond dismissive language).
24
+ */
25
+ function hasActionableSuggestion(suggestion) {
26
+ if (!suggestion || suggestion.trim().length === 0) {
27
+ return false;
28
+ }
29
+ const trimmed = suggestion.trim();
30
+ const dismissiveFragments = DISMISSIVE_PATTERNS.map((pattern) => pattern.exec(trimmed)?.[0] ?? '').filter((fragment) => fragment.length > 0);
31
+ if (dismissiveFragments.length === 0) {
32
+ return true;
33
+ }
34
+ const residual = dismissiveFragments
35
+ .reduce((remaining, fragment) => remaining.replace(fragment, ' '), trimmed)
36
+ .replace(/[.,;:()-]/g, ' ')
37
+ .replace(/\s+/g, ' ')
38
+ .trim();
39
+ return residual.length > 0;
40
+ }
41
+ /**
42
+ * Stage 1: Semantic-only validation (no lineResolver needed).
43
+ *
44
+ * Performs ONLY normalization-independent checks:
45
+ * - Classification (inline / file-level / global / cross-file)
46
+ * - Self-contradiction detection (info severity + dismissive language + no suggestion)
47
+ * - NO line validation, NO path validation against diff
48
+ *
49
+ * Used in processFindings() BEFORE platform reporters run normalizeFindingsForDiff().
50
+ * This ensures renamed-file and stale-line findings survive to be salvaged by normalization.
51
+ *
52
+ * @param findings - Array of findings to validate
53
+ * @returns Validation summary with valid findings, filtered findings, and stats
54
+ */
55
+ export function validateFindingsSemantics(findings) {
56
+ const results = [];
57
+ const stats = {
58
+ total: findings.length,
59
+ valid: 0,
60
+ filteredByLine: 0,
61
+ filteredBySelfContradiction: 0,
62
+ byClassification: {
63
+ inline: 0,
64
+ 'file-level': 0,
65
+ global: 0,
66
+ 'cross-file': 0,
67
+ },
68
+ };
69
+ // Pass 1: Classify each finding (no diff file set — classification is best-effort)
70
+ for (const finding of findings) {
71
+ let classification;
72
+ if (!finding.file) {
73
+ classification = 'global';
74
+ }
75
+ else if (finding.line === undefined) {
76
+ classification = 'file-level';
77
+ }
78
+ else {
79
+ classification = 'inline';
80
+ }
81
+ stats.byClassification[classification]++;
82
+ results.push({
83
+ finding,
84
+ classification,
85
+ valid: true,
86
+ });
87
+ }
88
+ // Pass 2 (line validation): SKIPPED — deferred to Stage 2 after normalization
89
+ // Pass 3: Self-contradiction detection
90
+ for (const result of results) {
91
+ if (!result.valid)
92
+ continue;
93
+ // Only filter info severity - NEVER filter warning/error
94
+ if (result.finding.severity !== 'info')
95
+ continue;
96
+ const matchedPattern = DISMISSIVE_PATTERNS.find((p) => p.test(result.finding.message));
97
+ if (!matchedPattern)
98
+ continue;
99
+ if (hasActionableSuggestion(result.finding.suggestion))
100
+ continue;
101
+ // All 3 conditions met: info + dismissive + no actionable suggestion
102
+ result.valid = false;
103
+ result.filterReason = `Self-contradicting: info severity with dismissive language (${matchedPattern.source})`;
104
+ result.filterType = 'self_contradicting';
105
+ stats.filteredBySelfContradiction++;
106
+ console.log('[router] [finding-validator] [filtered:semantic]', {
107
+ file: result.finding.file,
108
+ line: result.finding.line,
109
+ reason: result.filterReason,
110
+ });
111
+ }
112
+ // Build final arrays
113
+ const validFindings = [];
114
+ const filtered = [];
115
+ for (const result of results) {
116
+ if (result.valid) {
117
+ validFindings.push(result.finding);
118
+ stats.valid++;
119
+ }
120
+ else {
121
+ filtered.push(result);
122
+ }
123
+ }
124
+ return { validFindings, filtered, stats };
125
+ }
126
+ /**
127
+ * Stage 2: Diff-bound validation (for use AFTER normalizeFindingsForDiff()).
128
+ *
129
+ * Performs line validation against normalized diff positions and path validation.
130
+ * Runs only after normalization has had a chance to remap renamed paths and snap stale lines.
131
+ *
132
+ * @param findings - Array of findings (already normalized by normalizeFindingsForDiff)
133
+ * @param lineResolver - Resolver for validating line numbers against diff
134
+ * @param diffFiles - Array of file paths present in the diff
135
+ * @returns Validation summary with valid findings, filtered findings, and stats
136
+ */
137
+ export function validateNormalizedFindings(findings, lineResolver, diffFiles) {
138
+ const diffFileSet = new Set(diffFiles ?? []);
139
+ const results = [];
140
+ const stats = {
141
+ total: findings.length,
142
+ valid: 0,
143
+ filteredByLine: 0,
144
+ filteredBySelfContradiction: 0,
145
+ byClassification: {
146
+ inline: 0,
147
+ 'file-level': 0,
148
+ global: 0,
149
+ 'cross-file': 0,
150
+ },
151
+ };
152
+ // Pass 1: Classify each finding
153
+ for (const finding of findings) {
154
+ let classification;
155
+ if (!finding.file) {
156
+ classification = 'global';
157
+ }
158
+ else if (diffFileSet.size > 0 && !diffFileSet.has(finding.file)) {
159
+ classification = 'cross-file';
160
+ console.log(`[router] [finding-validator] cross-file finding for ${finding.file}`);
161
+ }
162
+ else if (finding.line === undefined) {
163
+ classification = 'file-level';
164
+ }
165
+ else {
166
+ classification = 'inline';
167
+ }
168
+ stats.byClassification[classification]++;
169
+ results.push({
170
+ finding,
171
+ classification,
172
+ valid: true,
173
+ });
174
+ }
175
+ // Pass 2: Line validation (inline findings only)
176
+ for (const result of results) {
177
+ if (result.classification === 'inline' && result.finding.line !== undefined) {
178
+ const validation = lineResolver.validateLine(result.finding.file, result.finding.line);
179
+ if (!validation.valid) {
180
+ result.valid = false;
181
+ result.filterReason = `Line ${result.finding.line} not in diff range for ${result.finding.file}`;
182
+ result.filterType = 'invalid_line';
183
+ stats.filteredByLine++;
184
+ console.log('[router] [finding-validator] [filtered:unplaceable]', {
185
+ file: result.finding.file,
186
+ line: result.finding.line,
187
+ reason: result.filterReason,
188
+ });
189
+ }
190
+ }
191
+ }
192
+ // Pass 3: Self-contradiction detection (all findings that passed Pass 2)
193
+ for (const result of results) {
194
+ if (!result.valid)
195
+ continue;
196
+ if (result.finding.severity !== 'info')
197
+ continue;
198
+ const matchedPattern = DISMISSIVE_PATTERNS.find((p) => p.test(result.finding.message));
199
+ if (!matchedPattern)
200
+ continue;
201
+ if (hasActionableSuggestion(result.finding.suggestion))
202
+ continue;
203
+ result.valid = false;
204
+ result.filterReason = `Self-contradicting: info severity with dismissive language (${matchedPattern.source})`;
205
+ result.filterType = 'self_contradicting';
206
+ stats.filteredBySelfContradiction++;
207
+ console.log('[router] [finding-validator] [filtered:semantic]', {
208
+ file: result.finding.file,
209
+ line: result.finding.line,
210
+ reason: result.filterReason,
211
+ });
212
+ }
213
+ // Build final arrays
214
+ const validFindings = [];
215
+ const filtered = [];
216
+ for (const result of results) {
217
+ if (result.valid) {
218
+ validFindings.push(result.finding);
219
+ stats.valid++;
220
+ }
221
+ else {
222
+ filtered.push(result);
223
+ }
224
+ }
225
+ return { validFindings, filtered, stats };
226
+ }
227
+ export function normalizeAndValidateFindings(findings, diffFiles, platform) {
228
+ const canonicalFiles = canonicalizeDiffFiles(diffFiles);
229
+ const lineResolver = buildLineResolver(canonicalFiles);
230
+ const normalizationResult = normalizeFindingsForDiff(findings, lineResolver);
231
+ if (normalizationResult.stats.dropped > 0 || normalizationResult.stats.normalized > 0) {
232
+ console.log(`[${platform}] Line validation: ${normalizationResult.stats.valid} valid, ` +
233
+ `${normalizationResult.stats.normalized} normalized, ${normalizationResult.stats.dropped} dropped`);
234
+ }
235
+ const diffFilePaths = canonicalFiles.map((f) => f.path);
236
+ const stage2Result = validateNormalizedFindings(normalizationResult.findings, lineResolver, diffFilePaths);
237
+ if (stage2Result.filtered.length > 0) {
238
+ console.log(`[${platform}] Stage 2 validation: ${stage2Result.stats.valid} valid, ` +
239
+ `${stage2Result.stats.filteredByLine} filtered by line, ` +
240
+ `${stage2Result.stats.filteredBySelfContradiction} self-contradicting`);
241
+ }
242
+ const driftSignal = computeDriftSignal(normalizationResult.stats, normalizationResult.invalidDetails);
243
+ const inlineDriftSignal = computeInlineDriftSignal(normalizationResult.stats, normalizationResult.invalidDetails);
244
+ return {
245
+ validatedFindings: stage2Result.validFindings,
246
+ canonicalFiles,
247
+ driftSignal,
248
+ inlineDriftSignal,
249
+ normalizationStats: normalizationResult.stats,
250
+ invalidDetails: normalizationResult.invalidDetails,
251
+ };
252
+ }
253
+ /**
254
+ * Validate and classify findings, filtering out invalid lines and self-contradicting findings.
255
+ *
256
+ * Three-pass validation:
257
+ * 1. Classify each finding (inline, file-level, global, cross-file)
258
+ * 2. Validate line numbers for inline findings
259
+ * 3. Detect self-contradicting findings (info + dismissive + no suggestion)
260
+ *
261
+ * @deprecated Use validateFindingsSemantics() in processFindings and
262
+ * validateNormalizedFindings() in platform reporters after normalization.
263
+ * Kept for backward compatibility (benchmark adapter).
264
+ *
265
+ * @param findings - Array of findings to validate
266
+ * @param lineResolver - Resolver for validating line numbers against diff
267
+ * @param diffFiles - Array of file paths present in the diff
268
+ * @returns Validation summary with valid findings, filtered findings, and stats
269
+ */
270
+ export function validateFindings(findings, lineResolver, diffFiles) {
271
+ return validateNormalizedFindings(findings, lineResolver, diffFiles);
272
+ }
273
+ //# sourceMappingURL=finding-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-validator.js","sourceRoot":"","sources":["../../src/report/finding-validator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,wBAAwB,GAIzB,MAAM,oBAAoB,CAAC;AAqC5B;;;;GAIG;AACH,MAAM,mBAAmB,GAAa;IACpC,yBAAyB;IACzB,0BAA0B;IAC1B,mBAAmB;IACnB,uBAAuB;IACvB,qBAAqB;CACtB,CAAC;AAEF;;GAEG;AACH,SAAS,uBAAuB,CAAC,UAA8B;IAC7D,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAClC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,GAAG,CACjD,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAC9C,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE5C,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,mBAAmB;SACjC,MAAM,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC;SAC1E,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;SAC1B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;IAEV,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAmB;IAC3D,MAAM,OAAO,GAA8B,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG;QACZ,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,KAAK,EAAE,CAAC;QACR,cAAc,EAAE,CAAC;QACjB,2BAA2B,EAAE,CAAC;QAC9B,gBAAgB,EAAE;YAChB,MAAM,EAAE,CAAC;YACT,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,CAAC;YACT,YAAY,EAAE,CAAC;SACyB;KAC3C,CAAC;IAEF,mFAAmF;IACnF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,cAAqC,CAAC;QAE1C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,cAAc,GAAG,QAAQ,CAAC;QAC5B,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACtC,cAAc,GAAG,YAAY,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,cAAc,GAAG,QAAQ,CAAC;QAC5B,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,CAAC;QAEzC,OAAO,CAAC,IAAI,CAAC;YACX,OAAO;YACP,cAAc;YACd,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAE9E,uCAAuC;IACvC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,SAAS;QAE5B,yDAAyD;QACzD,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,MAAM;YAAE,SAAS;QAEjD,MAAM,cAAc,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,cAAc;YAAE,SAAS;QAE9B,IAAI,uBAAuB,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;YAAE,SAAS;QAEjE,qEAAqE;QACrE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,MAAM,CAAC,YAAY,GAAG,+DAA+D,cAAc,CAAC,MAAM,GAAG,CAAC;QAC9G,MAAM,CAAC,UAAU,GAAG,oBAAoB,CAAC;QACzC,KAAK,CAAC,2BAA2B,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,kDAAkD,EAAE;YAC9D,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;YACzB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;YACzB,MAAM,EAAE,MAAM,CAAC,YAAY;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;IACrB,MAAM,aAAa,GAAc,EAAE,CAAC;IACpC,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAE/C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC5C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,0BAA0B,CACxC,QAAmB,EACnB,YAAiC,EACjC,SAAoB;IAEpB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,OAAO,GAA8B,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG;QACZ,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,KAAK,EAAE,CAAC;QACR,cAAc,EAAE,CAAC;QACjB,2BAA2B,EAAE,CAAC;QAC9B,gBAAgB,EAAE;YAChB,MAAM,EAAE,CAAC;YACT,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,CAAC;YACT,YAAY,EAAE,CAAC;SACyB;KAC3C,CAAC;IAEF,gCAAgC;IAChC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,cAAqC,CAAC;QAE1C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,cAAc,GAAG,QAAQ,CAAC;QAC5B,CAAC;aAAM,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAClE,cAAc,GAAG,YAAY,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,uDAAuD,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACrF,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACtC,cAAc,GAAG,YAAY,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,cAAc,GAAG,QAAQ,CAAC;QAC5B,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,CAAC;QAEzC,OAAO,CAAC,IAAI,CAAC;YACX,OAAO;YACP,cAAc;YACd,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;IACL,CAAC;IAED,iDAAiD;IACjD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,cAAc,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5E,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACvF,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;gBACrB,MAAM,CAAC,YAAY,GAAG,QAAQ,MAAM,CAAC,OAAO,CAAC,IAAI,0BAA0B,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjG,MAAM,CAAC,UAAU,GAAG,cAAc,CAAC;gBACnC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,qDAAqD,EAAE;oBACjE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;oBACzB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;oBACzB,MAAM,EAAE,MAAM,CAAC,YAAY;iBAC5B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,SAAS;QAE5B,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,MAAM;YAAE,SAAS;QAEjD,MAAM,cAAc,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,cAAc;YAAE,SAAS;QAE9B,IAAI,uBAAuB,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;YAAE,SAAS;QAEjE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,MAAM,CAAC,YAAY,GAAG,+DAA+D,cAAc,CAAC,MAAM,GAAG,CAAC;QAC9G,MAAM,CAAC,UAAU,GAAG,oBAAoB,CAAC;QACzC,KAAK,CAAC,2BAA2B,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,kDAAkD,EAAE;YAC9D,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;YACzB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;YACzB,MAAM,EAAE,MAAM,CAAC,YAAY;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;IACrB,MAAM,aAAa,GAAc,EAAE,CAAC;IACpC,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAE/C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC5C,CAAC;AAkBD,MAAM,UAAU,4BAA4B,CAC1C,QAAmB,EACnB,SAAqB,EACrB,QAAgB;IAEhB,MAAM,cAAc,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACvD,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAE7E,IAAI,mBAAmB,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QACtF,OAAO,CAAC,GAAG,CACT,IAAI,QAAQ,sBAAsB,mBAAmB,CAAC,KAAK,CAAC,KAAK,UAAU;YACzE,GAAG,mBAAmB,CAAC,KAAK,CAAC,UAAU,gBAAgB,mBAAmB,CAAC,KAAK,CAAC,OAAO,UAAU,CACrG,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,0BAA0B,CAC7C,mBAAmB,CAAC,QAAQ,EAC5B,YAAY,EACZ,aAAa,CACd,CAAC;IAEF,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CACT,IAAI,QAAQ,yBAAyB,YAAY,CAAC,KAAK,CAAC,KAAK,UAAU;YACrE,GAAG,YAAY,CAAC,KAAK,CAAC,cAAc,qBAAqB;YACzD,GAAG,YAAY,CAAC,KAAK,CAAC,2BAA2B,qBAAqB,CACzE,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,kBAAkB,CACpC,mBAAmB,CAAC,KAAK,EACzB,mBAAmB,CAAC,cAAc,CACnC,CAAC;IAEF,MAAM,iBAAiB,GAAG,wBAAwB,CAChD,mBAAmB,CAAC,KAAK,EACzB,mBAAmB,CAAC,cAAc,CACnC,CAAC;IAEF,OAAO;QACL,iBAAiB,EAAE,YAAY,CAAC,aAAa;QAC7C,cAAc;QACd,WAAW;QACX,iBAAiB;QACjB,kBAAkB,EAAE,mBAAmB,CAAC,KAAK;QAC7C,cAAc,EAAE,mBAAmB,CAAC,cAAc;KACnD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAmB,EACnB,YAAiC,EACjC,SAAoB;IAEpB,OAAO,0BAA0B,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;AACvE,CAAC"}
@@ -31,6 +31,8 @@ export interface ReportResult {
31
31
  invalidLineDetails?: InvalidLineDetail[];
32
32
  /** Whether inline comments were suppressed by drift gate */
33
33
  inlineCommentsGated?: boolean;
34
+ /** Post-normalization validated findings for gating (after Stage 2) */
35
+ postNormalizationFindings?: Finding[];
34
36
  }
35
37
  /**
36
38
  * Start a check run in 'in_progress' state
@@ -1 +1 @@
1
- {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/report/github.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAyB3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAU3C,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EAEvB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sDAAsD;IACtD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sCAAsC;IACtC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,gDAAgD;IAChD,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzC,4DAA4D;IAC5D,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAkB3E;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE;IACN,UAAU,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,OAAO,EAAE,EACnB,eAAe,EAAE,OAAO,EAAE,EAC1B,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,YAAY,CAAC,CAuIvB"}
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/report/github.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAyB3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAS3C,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EAEvB,MAAM,oBAAoB,CAAC;AAG5B,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sDAAsD;IACtD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sCAAsC;IACtC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,gDAAgD;IAChD,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzC,4DAA4D;IAC5D,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uEAAuE;IACvE,yBAAyB,CAAC,EAAE,OAAO,EAAE,CAAC;CACvC;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAkB3E;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE;IACN,UAAU,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,OAAO,EAAE,EACnB,eAAe,EAAE,OAAO,EAAE,EAC1B,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,YAAY,CAAC,CAmHvB"}
@@ -6,9 +6,9 @@
6
6
  import { Octokit } from '@octokit/rest';
7
7
  import { deduplicateFindings, sortFindings, generateSummaryMarkdown, renderPartialFindingsSection, toGitHubAnnotation, countBySeverity, extractFingerprintMarkers, getDedupeKey, buildProximityMap, isDuplicateByProximity, identifyStaleComments, updateProximityMap, } from './formats.js';
8
8
  import { buildCommentToMarkersMap, shouldResolveComment, getPartiallyResolvedMarkers, hasMalformedMarkers, applyPartialResolutionVisual, stripOwnFingerprintMarkers, emitResolutionLog, emitMalformedMarkerWarning, } from './resolution.js';
9
- import { canonicalizeDiffFiles } from '../diff.js';
10
9
  import { delay, INLINE_COMMENT_DELAY_MS, formatInlineComment, formatGroupedInlineComment, groupAdjacentFindings, } from './base.js';
11
- import { buildLineResolver, normalizeFindingsForDiff, computeDriftSignal, computeInlineDriftSignal, generateDriftMarkdown, shouldSuppressInlineComments, } from './line-resolver.js';
10
+ import { generateDriftMarkdown, shouldSuppressInlineComments, } from './line-resolver.js';
11
+ import { normalizeAndValidateFindings } from './finding-validator.js';
12
12
  /**
13
13
  * Start a check run in 'in_progress' state
14
14
  * Call this at the beginning of the review to show users the review is running
@@ -71,23 +71,10 @@ export async function reportToGitHub(findings, partialFindings, context, config,
71
71
  max_inline_comments: 20,
72
72
  summary: true,
73
73
  };
74
- // CANONICAL ENTRYPOINT: Ensure all diff paths are normalized FIRST
75
- // This must happen before buildLineResolver, deleted set, or rename maps
76
- const canonicalFiles = canonicalizeDiffFiles(diffFiles);
77
- // Build line resolver and normalize findings from canonical files
78
- const lineResolver = buildLineResolver(canonicalFiles);
79
- const normalizationResult = normalizeFindingsForDiff(findings, lineResolver);
80
- if (normalizationResult.stats.dropped > 0 || normalizationResult.stats.normalized > 0) {
81
- console.log(`[github] Line validation: ${normalizationResult.stats.valid} valid, ` +
82
- `${normalizationResult.stats.normalized} normalized, ${normalizationResult.stats.dropped} dropped`);
83
- }
84
- // Compute drift signal for visibility in check summary
85
- const driftSignal = computeDriftSignal(normalizationResult.stats, normalizationResult.invalidDetails);
86
- // Compute inline-specific drift signal for gate decisions.
87
- // Uses only line-bearing findings as denominator to avoid dilution by file-level findings.
88
- const inlineDriftSignal = computeInlineDriftSignal(normalizationResult.stats, normalizationResult.invalidDetails);
89
- // Process normalized findings
90
- const deduplicated = deduplicateFindings(normalizationResult.findings);
74
+ // Normalize findings against diff and run Stage 2 validation
75
+ const { validatedFindings, canonicalFiles, driftSignal, inlineDriftSignal, normalizationStats, invalidDetails, } = normalizeAndValidateFindings(findings, diffFiles, 'github');
76
+ // Process validated findings
77
+ const deduplicated = deduplicateFindings(validatedFindings);
91
78
  const sorted = sortFindings(deduplicated);
92
79
  const counts = countBySeverity(sorted);
93
80
  try {
@@ -116,11 +103,10 @@ export async function reportToGitHub(findings, partialFindings, context, config,
116
103
  commentId,
117
104
  skippedDuplicates,
118
105
  checkRunCompleted,
119
- validationStats: normalizationResult.stats,
120
- invalidLineDetails: normalizationResult.invalidDetails.length > 0
121
- ? normalizationResult.invalidDetails
122
- : undefined,
106
+ validationStats: normalizationStats,
107
+ invalidLineDetails: invalidDetails.length > 0 ? invalidDetails : undefined,
123
108
  inlineCommentsGated: shouldSuppressInlineComments(inlineDriftSignal, config.gating.drift_gate),
109
+ postNormalizationFindings: sorted,
124
110
  };
125
111
  }
126
112
  catch (error) {