From 1d8f051454aed341c1dd818350f16d755acee55a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 8 Jul 2026 00:24:07 +0000 Subject: [PATCH] Sync generated provider output --- .agents/skills/impeccable/scripts/hook-lib.mjs | 6 ++++-- .agents/skills/impeccable/scripts/lib/impeccable-config.mjs | 6 ++++-- .claude/skills/impeccable/scripts/hook-lib.mjs | 6 ++++-- .claude/skills/impeccable/scripts/lib/impeccable-config.mjs | 6 ++++-- .cursor/skills/impeccable/scripts/hook-lib.mjs | 6 ++++-- .cursor/skills/impeccable/scripts/lib/impeccable-config.mjs | 6 ++++-- .gemini/skills/impeccable/scripts/hook-lib.mjs | 6 ++++-- .gemini/skills/impeccable/scripts/lib/impeccable-config.mjs | 6 ++++-- .github/skills/impeccable/scripts/hook-lib.mjs | 6 ++++-- .github/skills/impeccable/scripts/lib/impeccable-config.mjs | 6 ++++-- .kiro/skills/impeccable/scripts/hook-lib.mjs | 6 ++++-- .kiro/skills/impeccable/scripts/lib/impeccable-config.mjs | 6 ++++-- .opencode/skills/impeccable/scripts/hook-lib.mjs | 6 ++++-- .../skills/impeccable/scripts/lib/impeccable-config.mjs | 6 ++++-- .pi/skills/impeccable/scripts/hook-lib.mjs | 6 ++++-- .pi/skills/impeccable/scripts/lib/impeccable-config.mjs | 6 ++++-- .qoder/skills/impeccable/scripts/hook-lib.mjs | 6 ++++-- .qoder/skills/impeccable/scripts/lib/impeccable-config.mjs | 6 ++++-- .rovodev/skills/impeccable/scripts/hook-lib.mjs | 6 ++++-- .../skills/impeccable/scripts/lib/impeccable-config.mjs | 6 ++++-- .trae-cn/skills/impeccable/scripts/hook-lib.mjs | 6 ++++-- .../skills/impeccable/scripts/lib/impeccable-config.mjs | 6 ++++-- .trae/skills/impeccable/scripts/hook-lib.mjs | 6 ++++-- .trae/skills/impeccable/scripts/lib/impeccable-config.mjs | 6 ++++-- plugin/skills/impeccable/scripts/hook-lib.mjs | 6 ++++-- plugin/skills/impeccable/scripts/lib/impeccable-config.mjs | 6 ++++-- 26 files changed, 104 insertions(+), 52 deletions(-) diff --git a/.agents/skills/impeccable/scripts/hook-lib.mjs b/.agents/skills/impeccable/scripts/hook-lib.mjs index b649211ec..f336356bb 100644 --- a/.agents/skills/impeccable/scripts/hook-lib.mjs +++ b/.agents/skills/impeccable/scripts/hook-lib.mjs @@ -711,11 +711,13 @@ export function filterFindings(findings, _content, _ext, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.agents/skills/impeccable/scripts/lib/impeccable-config.mjs b/.agents/skills/impeccable/scripts/lib/impeccable-config.mjs index dc1c3d1c4..45c65e65a 100644 --- a/.agents/skills/impeccable/scripts/lib/impeccable-config.mjs +++ b/.agents/skills/impeccable/scripts/lib/impeccable-config.mjs @@ -459,11 +459,13 @@ export function filterDetectionFindings(findings, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.claude/skills/impeccable/scripts/hook-lib.mjs b/.claude/skills/impeccable/scripts/hook-lib.mjs index b649211ec..f336356bb 100644 --- a/.claude/skills/impeccable/scripts/hook-lib.mjs +++ b/.claude/skills/impeccable/scripts/hook-lib.mjs @@ -711,11 +711,13 @@ export function filterFindings(findings, _content, _ext, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.claude/skills/impeccable/scripts/lib/impeccable-config.mjs b/.claude/skills/impeccable/scripts/lib/impeccable-config.mjs index dc1c3d1c4..45c65e65a 100644 --- a/.claude/skills/impeccable/scripts/lib/impeccable-config.mjs +++ b/.claude/skills/impeccable/scripts/lib/impeccable-config.mjs @@ -459,11 +459,13 @@ export function filterDetectionFindings(findings, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.cursor/skills/impeccable/scripts/hook-lib.mjs b/.cursor/skills/impeccable/scripts/hook-lib.mjs index b649211ec..f336356bb 100644 --- a/.cursor/skills/impeccable/scripts/hook-lib.mjs +++ b/.cursor/skills/impeccable/scripts/hook-lib.mjs @@ -711,11 +711,13 @@ export function filterFindings(findings, _content, _ext, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.cursor/skills/impeccable/scripts/lib/impeccable-config.mjs b/.cursor/skills/impeccable/scripts/lib/impeccable-config.mjs index dc1c3d1c4..45c65e65a 100644 --- a/.cursor/skills/impeccable/scripts/lib/impeccable-config.mjs +++ b/.cursor/skills/impeccable/scripts/lib/impeccable-config.mjs @@ -459,11 +459,13 @@ export function filterDetectionFindings(findings, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.gemini/skills/impeccable/scripts/hook-lib.mjs b/.gemini/skills/impeccable/scripts/hook-lib.mjs index b649211ec..f336356bb 100644 --- a/.gemini/skills/impeccable/scripts/hook-lib.mjs +++ b/.gemini/skills/impeccable/scripts/hook-lib.mjs @@ -711,11 +711,13 @@ export function filterFindings(findings, _content, _ext, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.gemini/skills/impeccable/scripts/lib/impeccable-config.mjs b/.gemini/skills/impeccable/scripts/lib/impeccable-config.mjs index dc1c3d1c4..45c65e65a 100644 --- a/.gemini/skills/impeccable/scripts/lib/impeccable-config.mjs +++ b/.gemini/skills/impeccable/scripts/lib/impeccable-config.mjs @@ -459,11 +459,13 @@ export function filterDetectionFindings(findings, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.github/skills/impeccable/scripts/hook-lib.mjs b/.github/skills/impeccable/scripts/hook-lib.mjs index b649211ec..f336356bb 100644 --- a/.github/skills/impeccable/scripts/hook-lib.mjs +++ b/.github/skills/impeccable/scripts/hook-lib.mjs @@ -711,11 +711,13 @@ export function filterFindings(findings, _content, _ext, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.github/skills/impeccable/scripts/lib/impeccable-config.mjs b/.github/skills/impeccable/scripts/lib/impeccable-config.mjs index dc1c3d1c4..45c65e65a 100644 --- a/.github/skills/impeccable/scripts/lib/impeccable-config.mjs +++ b/.github/skills/impeccable/scripts/lib/impeccable-config.mjs @@ -459,11 +459,13 @@ export function filterDetectionFindings(findings, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.kiro/skills/impeccable/scripts/hook-lib.mjs b/.kiro/skills/impeccable/scripts/hook-lib.mjs index b649211ec..f336356bb 100644 --- a/.kiro/skills/impeccable/scripts/hook-lib.mjs +++ b/.kiro/skills/impeccable/scripts/hook-lib.mjs @@ -711,11 +711,13 @@ export function filterFindings(findings, _content, _ext, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.kiro/skills/impeccable/scripts/lib/impeccable-config.mjs b/.kiro/skills/impeccable/scripts/lib/impeccable-config.mjs index dc1c3d1c4..45c65e65a 100644 --- a/.kiro/skills/impeccable/scripts/lib/impeccable-config.mjs +++ b/.kiro/skills/impeccable/scripts/lib/impeccable-config.mjs @@ -459,11 +459,13 @@ export function filterDetectionFindings(findings, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.opencode/skills/impeccable/scripts/hook-lib.mjs b/.opencode/skills/impeccable/scripts/hook-lib.mjs index b649211ec..f336356bb 100644 --- a/.opencode/skills/impeccable/scripts/hook-lib.mjs +++ b/.opencode/skills/impeccable/scripts/hook-lib.mjs @@ -711,11 +711,13 @@ export function filterFindings(findings, _content, _ext, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.opencode/skills/impeccable/scripts/lib/impeccable-config.mjs b/.opencode/skills/impeccable/scripts/lib/impeccable-config.mjs index dc1c3d1c4..45c65e65a 100644 --- a/.opencode/skills/impeccable/scripts/lib/impeccable-config.mjs +++ b/.opencode/skills/impeccable/scripts/lib/impeccable-config.mjs @@ -459,11 +459,13 @@ export function filterDetectionFindings(findings, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.pi/skills/impeccable/scripts/hook-lib.mjs b/.pi/skills/impeccable/scripts/hook-lib.mjs index b649211ec..f336356bb 100644 --- a/.pi/skills/impeccable/scripts/hook-lib.mjs +++ b/.pi/skills/impeccable/scripts/hook-lib.mjs @@ -711,11 +711,13 @@ export function filterFindings(findings, _content, _ext, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.pi/skills/impeccable/scripts/lib/impeccable-config.mjs b/.pi/skills/impeccable/scripts/lib/impeccable-config.mjs index dc1c3d1c4..45c65e65a 100644 --- a/.pi/skills/impeccable/scripts/lib/impeccable-config.mjs +++ b/.pi/skills/impeccable/scripts/lib/impeccable-config.mjs @@ -459,11 +459,13 @@ export function filterDetectionFindings(findings, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.qoder/skills/impeccable/scripts/hook-lib.mjs b/.qoder/skills/impeccable/scripts/hook-lib.mjs index b649211ec..f336356bb 100644 --- a/.qoder/skills/impeccable/scripts/hook-lib.mjs +++ b/.qoder/skills/impeccable/scripts/hook-lib.mjs @@ -711,11 +711,13 @@ export function filterFindings(findings, _content, _ext, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.qoder/skills/impeccable/scripts/lib/impeccable-config.mjs b/.qoder/skills/impeccable/scripts/lib/impeccable-config.mjs index dc1c3d1c4..45c65e65a 100644 --- a/.qoder/skills/impeccable/scripts/lib/impeccable-config.mjs +++ b/.qoder/skills/impeccable/scripts/lib/impeccable-config.mjs @@ -459,11 +459,13 @@ export function filterDetectionFindings(findings, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.rovodev/skills/impeccable/scripts/hook-lib.mjs b/.rovodev/skills/impeccable/scripts/hook-lib.mjs index b649211ec..f336356bb 100644 --- a/.rovodev/skills/impeccable/scripts/hook-lib.mjs +++ b/.rovodev/skills/impeccable/scripts/hook-lib.mjs @@ -711,11 +711,13 @@ export function filterFindings(findings, _content, _ext, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.rovodev/skills/impeccable/scripts/lib/impeccable-config.mjs b/.rovodev/skills/impeccable/scripts/lib/impeccable-config.mjs index dc1c3d1c4..45c65e65a 100644 --- a/.rovodev/skills/impeccable/scripts/lib/impeccable-config.mjs +++ b/.rovodev/skills/impeccable/scripts/lib/impeccable-config.mjs @@ -459,11 +459,13 @@ export function filterDetectionFindings(findings, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.trae-cn/skills/impeccable/scripts/hook-lib.mjs b/.trae-cn/skills/impeccable/scripts/hook-lib.mjs index b649211ec..f336356bb 100644 --- a/.trae-cn/skills/impeccable/scripts/hook-lib.mjs +++ b/.trae-cn/skills/impeccable/scripts/hook-lib.mjs @@ -711,11 +711,13 @@ export function filterFindings(findings, _content, _ext, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.trae-cn/skills/impeccable/scripts/lib/impeccable-config.mjs b/.trae-cn/skills/impeccable/scripts/lib/impeccable-config.mjs index dc1c3d1c4..45c65e65a 100644 --- a/.trae-cn/skills/impeccable/scripts/lib/impeccable-config.mjs +++ b/.trae-cn/skills/impeccable/scripts/lib/impeccable-config.mjs @@ -459,11 +459,13 @@ export function filterDetectionFindings(findings, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.trae/skills/impeccable/scripts/hook-lib.mjs b/.trae/skills/impeccable/scripts/hook-lib.mjs index b649211ec..f336356bb 100644 --- a/.trae/skills/impeccable/scripts/hook-lib.mjs +++ b/.trae/skills/impeccable/scripts/hook-lib.mjs @@ -711,11 +711,13 @@ export function filterFindings(findings, _content, _ext, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/.trae/skills/impeccable/scripts/lib/impeccable-config.mjs b/.trae/skills/impeccable/scripts/lib/impeccable-config.mjs index dc1c3d1c4..45c65e65a 100644 --- a/.trae/skills/impeccable/scripts/lib/impeccable-config.mjs +++ b/.trae/skills/impeccable/scripts/lib/impeccable-config.mjs @@ -459,11 +459,13 @@ export function filterDetectionFindings(findings, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/plugin/skills/impeccable/scripts/hook-lib.mjs b/plugin/skills/impeccable/scripts/hook-lib.mjs index b649211ec..f336356bb 100644 --- a/plugin/skills/impeccable/scripts/hook-lib.mjs +++ b/plugin/skills/impeccable/scripts/hook-lib.mjs @@ -711,11 +711,13 @@ export function filterFindings(findings, _content, _ext, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); }); diff --git a/plugin/skills/impeccable/scripts/lib/impeccable-config.mjs b/plugin/skills/impeccable/scripts/lib/impeccable-config.mjs index dc1c3d1c4..45c65e65a 100644 --- a/plugin/skills/impeccable/scripts/lib/impeccable-config.mjs +++ b/plugin/skills/impeccable/scripts/lib/impeccable-config.mjs @@ -459,11 +459,13 @@ export function filterDetectionFindings(findings, config) { function isIgnoredFindingValue(finding, ignoreValues) { if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false; const rule = normalizeIgnoreRule(finding.antipattern); + if (!rule) return false; + // File-scoped wildcards suppress rules with no extractable value, such as side-tab. const value = extractFindingIgnoreValue(finding); - if (!rule || !value) return false; return ignoreValues.some((entry) => { + if (entry.rule !== rule) return false; const wildcardValue = entry.value === '*'; - if (entry.rule !== rule || (!wildcardValue && !ignoreValueMatches(rule, entry.value, value))) return false; + if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false; if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue; return findingMatchesScopedIgnoreFile(finding, entry.files); });