# AIE-002 Lab — Structured Output Validation Harness

Implement `evaluate(case)` in `starter.py`. Return exactly eight fields: `terminal_state`, `parse_result`, `schema_conformance`, `domain_invariant_result`, `promotion_decision`, `failure_class`, `retryability`, and `compatibility_result`.

The application contract is a synthetic ticket classifier. Schema v1 requires `category`, `priority`, `requires_human`, and `evidence_ids`, rejects unknown properties, and permits priority `low|medium|high`. Schema v2 adds optional nullable `due_at` and narrows priority to `medium|high`. Categories are `billing|technical|account`. `evidence_ids` must be strings.

Domain rules: every evidence ID must occur in `allowed_evidence_ids`; and `priority=high` requires `requires_human=true`.

Processing order matters: classify terminal state first, then parse, then schema, then domain invariants. Do not manufacture missing fields, reinterpret refusal as data, or inherit v1 validation into v2.

Run `python run_checks.py` to verify the eight fixtures are well-formed. Your implementation should produce typed failures and bounded retryability rather than generic success/failure booleans.
