diff --git a/evaluation/scoring-regressions.json b/evaluation/scoring-regressions.json
index 82663f684..7fe30610d 100644
--- a/evaluation/scoring-regressions.json
+++ b/evaluation/scoring-regressions.json
@@ -21777,6 +21777,264 @@
"expected_metrics": {
"stable_unique_record_count": 0
}
-}
+},
+ {
+ "id": "forbidden-term-longer-label-is-not-error",
+ "category": "format-normalization",
+ "root_cause": "forbidden_phrase_substring_collision",
+ "failure_mode": "false-negative",
+ "case": {
+ "url": "https://example.test/news",
+ "task_kind": "body",
+ "required_facts": [
+ {
+ "alternatives": [
+ "Latest news"
+ ]
+ }
+ ],
+ "forbidden_any": [
+ "Not Found"
+ ],
+ "acceptance_contract": {
+ "version": 1,
+ "schema": "named_link",
+ "minimum_records": 1,
+ "hosts": [
+ "example.test"
+ ],
+ "entry_path": "/story/[^/]+"
+ }
+ },
+ "artifact": "Latest news\n[Story](https://example.test/story/one)\n[Page Not FoundExtra](https://example.test/column)",
+ "ok": true,
+ "expected_task_pass": true,
+ "expected_metrics": {
+ "forbidden_hits": []
+ }
+ },
+ {
+ "id": "forbidden-term-complete-phrase-still-fails",
+ "category": "format-normalization",
+ "root_cause": "forbidden_phrase_substring_collision",
+ "failure_mode": "false-positive",
+ "case": {
+ "url": "https://example.test/news",
+ "task_kind": "body",
+ "required_facts": [
+ {
+ "alternatives": [
+ "Latest news"
+ ]
+ }
+ ],
+ "forbidden_any": [
+ "Not Found"
+ ],
+ "acceptance_contract": {
+ "version": 1,
+ "schema": "named_link",
+ "minimum_records": 1,
+ "hosts": [
+ "example.test"
+ ],
+ "entry_path": "/story/[^/]+"
+ }
+ },
+ "artifact": "Latest news\n[Story](https://example.test/story/one)\nPage Not Found.",
+ "ok": true,
+ "expected_task_pass": false,
+ "expected_metrics": {
+ "forbidden_hits": [
+ "Not Found"
+ ]
+ }
+ },
+ {
+ "id": "forbidden-term-prefixed-word-is-not-error",
+ "category": "format-normalization",
+ "root_cause": "forbidden_phrase_substring_collision",
+ "failure_mode": "false-negative",
+ "case": {
+ "url": "https://example.test/news",
+ "task_kind": "body",
+ "required_facts": [
+ {
+ "alternatives": [
+ "Latest news"
+ ]
+ }
+ ],
+ "forbidden_any": [
+ "Not Found"
+ ],
+ "acceptance_contract": {
+ "version": 1,
+ "schema": "named_link",
+ "minimum_records": 1,
+ "hosts": [
+ "example.test"
+ ],
+ "entry_path": "/story/[^/]+"
+ }
+ },
+ "artifact": "Latest news\n[Story](https://example.test/story/one)\nLatestNot Found",
+ "ok": true,
+ "expected_task_pass": true,
+ "expected_metrics": {
+ "forbidden_hits": []
+ }
+ },
+ {
+ "id": "named-caption-owned-by-link",
+ "category": "structured-extraction",
+ "root_cause": "scoped_markdown_caption_ownership",
+ "failure_mode": "false-negative",
+ "case": {
+ "url": "https://example.test/shows",
+ "task_kind": "body",
+ "acceptance_contract": {
+ "version": 1,
+ "schema": "named_link",
+ "minimum_records": 1,
+ "hosts": [
+ "example.test"
+ ],
+ "entry_path": "/series/[^/]+",
+ "name_validation": "nonempty",
+ "entry_scope": {
+ "html_selector": "main a:has(p)",
+ "markdown_label_pattern": "(?s)
\\s*(?P