From 57907f0d1e5904c77938b7c18c4727257c48025d Mon Sep 17 00:00:00 2001 From: Mandel Olaiya Date: Sun, 26 Apr 2026 12:54:40 +0200 Subject: [PATCH] CI: ignore legacy CTA audit mismatches when allowed --- scripts/multilingual_audit_ci.py | 44 +++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/scripts/multilingual_audit_ci.py b/scripts/multilingual_audit_ci.py index e5bda67..46afc08 100755 --- a/scripts/multilingual_audit_ci.py +++ b/scripts/multilingual_audit_ci.py @@ -41,6 +41,45 @@ def print_summary(payload: dict) -> tuple[int, int]: return total_block, total_warn +def _cta_issue_is_allowed_now(locale: str, issue: dict) -> bool: + if issue.get("issue_type") != "cta_language_mismatch": + return False + if issue.get("severity") != "block": + return False + + try: + from mandelblog_content_guard.validators.rules.cta import validate_cta + except Exception: + return False + + bad_value = issue.get("bad_value") or "" + field_paths = issue.get("field_paths") or [] + if not field_paths: + return False + + for field_path in field_paths: + if validate_cta(locale, field_path, bad_value): + return False + return True + + +def effective_block_count(payload: dict) -> tuple[int, int]: + """Return (effective_block, ignored_block) after applying allowlists.""" + ignored = 0 + block = 0 + issues = payload.get("issues") or {} + for locale, data in locale_rows(payload): + locale_issues = issues.get(locale) or [] + for issue in locale_issues: + if issue.get("severity") != "block": + continue + if _cta_issue_is_allowed_now(locale, issue): + ignored += int(issue.get("count") or 1) + continue + block += int(issue.get("count") or 1) + return block, ignored + + def print_regressions(current: dict, previous: dict) -> None: prev_summary = {locale: data for locale, data in locale_rows(previous)} regressions = [] @@ -80,6 +119,9 @@ def main() -> int: if error_status: return error_status total_block, total_warn = print_summary(current) + effective_block, ignored_block = effective_block_count(current) + if ignored_block: + print(f"IGNORED: {ignored_block} block issue(s) now allowed by current rules") if args.previous_json: prev_path = Path(args.previous_json) @@ -88,7 +130,7 @@ def main() -> int: else: print("REGRESSIONS: previous artifact not found") - if total_block > 0: + if effective_block > 0: return 2 if total_warn > 0: return 1