?
JewelPairRecord
TypeOne graded jewel run: the subject, the proposal, the human's action, and the verdict.
The row the pair ledger stores, and what the executor (and testJewel) resolves to. proposed is the jewel's input (or null for abstention), actual is what the human submitted in shadow mode, and verdict grades one against the other. When subject or propose threw, error carries the phase and message and the run is ungraded; a grade failure softens to verdict skip. The executor never throws, so a shadow run can never break the app.
JewelPairRecord.ts
interface JewelPairRecord<I, S> { v: 1 mode: 'shadow' | 'eval' | 'grade' subject?: S proposed?: I | null reasoning?: string actual?: I verdict?: 'agree' | 'disagree' | 'skip' notes?: string error?: { phase: 'subject' | 'propose'; message: string } trace?: string[] startedAt: number durationMs: number }
Fields
mode
'shadow' | 'eval' | 'grade'
shadow: a human acted (graded). eval: no human action (ungraded). grade: a deferred grade-only run.
subject
S
What propose saw. Absent only when the projection itself threw.
proposed
I | null
The jewel's input. null is abstention. Absent when propose failed.
actual
I
The human's input. Present in shadow mode, and the ground truth grading compares against.
verdict
'agree' | 'disagree' | 'skip'
The grade. Present only when graded and propose succeeded.
error
{ phase, message }
Present iff subject() or propose() threw. A grade failure softens to verdict 'skip' instead.
trace
string[]
Transcript ids attached by propose; the transcripts live platform-side.