# Verifier negative-test harness

| id | verifier | expect | actual | match | reason |
|----|----------|--------|--------|-------|--------|
| neg_json_01 | json_repair | FAIL | FAIL | ✅ | no JSON object/array in output |
| neg_json_02 | json_repair | FAIL | FAIL | ✅ | JSON syntax invalid: parse error: expected " |
| neg_json_03 | json_repair | PASS | PASS | ✅ | strict JSON object |
| neg_json_04 | json_repair | FAIL | FAIL | ✅ | JSON syntax invalid: parse error: bad value char: ] |
| neg_json_05 | json_repair | PASS | PASS | ✅ | strict JSON array |
| neg_triz_01 | ariz | PASS | PASS | ✅ | TC+PC both filled, ≥8 chars each |
| neg_triz_02 | ariz | FAIL | FAIL | ✅ | technical_contradiction is empty or placeholder |
| neg_triz_03 | ariz | FAIL | FAIL | ✅ | missing physical_contradiction key |
| neg_triz_04 | ariz | FAIL | FAIL | ✅ | no JSON object |
| neg_claim_01 | claim_extractor | PASS | PASS | ✅ | array with ≥1 claim items |
| neg_claim_02 | claim_extractor | FAIL | FAIL | ✅ | no JSON array |
| neg_claim_03 | claim_extractor | FAIL | FAIL | ✅ | fewer than 1 items |
| neg_code_01 | code_skeleton | PASS | PASS | ✅ | def + return present (normalized) |
| neg_code_02 | code_skeleton | PASS | PASS | ✅ | def + return present (normalized) |
| neg_code_03 | code_skeleton | FAIL | FAIL | ✅ | no def Header |
| neg_code_04 | code_skeleton | FAIL | FAIL | ✅ | no def Header |
| neg_code_05 | code_skeleton | PASS | PASS | ✅ | def + return present (normalized) |
| neg_code_recover_01 | code_skeleton | PASS | PASS | ✅ | def + return present (normalized) |
| neg_code_recover_02 | code_skeleton | PASS | PASS | ✅ | def + return present (normalized) |
| neg_code_recover_03 | code_skeleton | PASS | PASS | ✅ | def + return present (normalized) |

Match: **20/20**
