Ender evaluator contracts are split across dataclasses, strict JSON Schema, and two prompt stacks

Observed 2026-09-09 from source inspection of ender-inference’s current evaluation worktree: the active semantic evaluator does not use Pydantic. Internal contracts are frozen dataclasses plus manual invariants; provider boundaries use strict JSON Schemas. The GPT-5.5 batch path uses short intent instructions and dynamically appends selected per-evaluation rubrics, while training/labelers/judge.py is a separate legacy aggregate freight judge. Treating those two prompt stacks as one can produce incorrect audit claims. A useful future boundary is one canonical strict schema (Pydantic v2 or generated JSON Schema), while keeping deterministic tool/schema validation separate from semantic action correctness.