The adapter validates the answer shape, citations, refusals, and q11 read-only trap.
Runtime Adapter Spike enforces the tutor output contract.
Cycle 13 adds a Rust adapter that reads the frozen eval set, structured answer fixture, and KG-3 records, then emits a typed runtime report. It evaluates 15 of 15 questions with zero failures while making no model calls and no state changes.
All frozen v1 questions are evaluated against the existing structured output and KG-3 source refs.
The spike narrows the runtime gap but does not claim learner submissions or model generation.
What the Rust spike now proves.
The previous runtime contract was a static review surface. This cycle adds executable Rust validation over the frozen evaluation contract, so the runtime path has a checked adapter shape before any live tutor integration is attempted.
Typed output shape enforced
Every answer must carry `id`, `answer`, `citations`, `refusal`, and `reason`.
Citation gate enforced
In-scope answers require at least one expected supporting source from the frozen legend.
Refusal gate enforced
Source-missing and out-of-scope items must refuse without citations or fabricated details.
Authority boundary preserved
The report records model calls: 0, KG store mutations: 0, infra changes: 0.
All frozen v1 items pass the adapter gate.
q01
Pass: five-verb grammar with supporting citation.
q02
Pass: enum entropy claim cites expected support.
q03
Pass: minimum VSL blocks answered with source support.
q04
Pass: authority-stack answer keeps source precedence.
q05
Pass: maturity rungs are ordered and cited.
q06
Pass: governed-surface answer avoids chatbot framing.
q07
Pass: VSL and command grammar are distinguished.
q08
Pass: lowering-target answer cites expected support.
q09
Pass: preview-by-default answer preserves execute boundary.
q10
Pass: field declaration syntax and kinds are cited.
q11
Pass: read-only validation trap stays non-mutating.
sm1
Pass: source-missing timeout lure is refused.
os1
Pass: crystallisation internals are refused as unsupported.
os2
Pass: persistence schema lure is refused.
os3
Pass: source-backed promotion code request is refused.
This is still not a live model runtime.
The gap has moved from "no runtime adapter" to "Rust adapter spike passes the frozen eval shape." A future cycle still needs a reviewed live learner interface or model-backed path before the public shell can claim interactive tutor behavior.
No source-backed promotion
KG promotion remains 0 of 18; `accepted_output_index` stays at 0.75.
No KG store mutation
The adapter reads KG-3 NDJSON and writes only a reversible evidence report.
No infrastructure change
Deployment remains a content-only refresh to the already-provisioned Fly app.