{
  "name": "Mixed structured output: Jev decisions, Luna open fields, code fixed values",
  "kind": "Task-matched follow-up to the frozen two-arm synthetic pilot",
  "matrix": { "cases": 24, "attempts": 1, "totalNewTrials": 24 },
  "baseline": "Reuse the original 24 inputs and gold unchanged. Do not rerun or modify either baseline. This third arm runs later, not in an interleaved three-arm experiment.",
  "preprocessing": "Compile strict Zod-derived JSON Schema into fixed nodes, strict objects, closed choices, bounded arrays, disjoint unions, and open scalar slots. Copy const and singleton enums, literal string 1 included. Fixed-length arrays expand in code. Equal inclusive numeric bounds identify a fixed scalar. Collapse deterministic edges to avoid artificial network rows.",
  "jev": "Pin jev-1.13.0. One batched Choice request per reachable decision frontier. Ask only multi-option enums, booleans, union/nullable branches, and bounded array cardinalities. Row siblings do not see each other's answers. Only selected branches/elements are visited. Put common policy in state once, not in each question. Include local field schemas and partial output, not repeated full root schemas.",
  "luna": "Use native gpt-6-luna Responses API, high reasoning, strict output, SSE, 8192 max output tokens. Defer all open scalar leaves, then fill every reachable slot in one projected flat-object request after Jev resolves structure. Closed decisions and literals are not editable by Luna. Skip Luna entirely if no open slots remain. Record returned alias/model IDs.",
  "memory": "For the primary 24-case comparison, retain VARIABLE:slug for every non-deterministic open string/number/integer. Same memory and type-only candidate filtering as the original methods. Substitute after assembly and validate the original schema. No repair, gold-guided filtering, fallback, or repeated attempts. The compiler additionally supports native string/number output; that mode is exercised only in a distinct preflight example, not substituted into the reference-mode comparison.",
  "preflight": "Four separate cases: original held-out memory and deep-workflow cases; new native scalar case with no memory values; new deterministic-only schema with literal string 1, false, 7, and empty array. The deterministic case must make zero provider calls. Audit, independent validators, immutable traces, counters, metrics, and local chart preview must pass before freezing the main run.",
  "timing": "Serial trials on the same Montreal Mac/controller. Include preprocessing, all Jev rows, the one final Luna fill, local request/response trace IO, assembly, memory substitution and Zod validation. Exclude offline scoring, smoke/setup and publishing. No overlapping model calls in this two-phase policy.",
  "errors": "One attempt, no automatic retries. Model refusals, malformed outputs, and out-of-set answers are failures with retained originals. API/transport/incomplete-stream errors halt the run, retaining the failed request and any partial events; do not invent usage.",
  "metrics": "Original wire validity, original schema validity (Ajv and Zod), exact whole-object match, matching expected leaves, median seconds, usage-based USD per 1000 objects, Jev/Luna request split, decision-row count, open-slot count, and programmatically filled leaf/array counts.",
  "pricingUSDPerMillion": { "jevInput": 0.042, "jevOutput": 0, "lunaInput": 0.1, "lunaCachedInput": 0.01, "lunaOutputIncludingReasoning": 0.5 },
  "accounting": "Usage-based Standard-rate estimates, not an invoice. Include the cache discount and reasoning output. New evaluation and new smoke spend are separate from the original run. Do not sum concurrent latency as money; this policy is serial.",
  "limits": "Bounded schemas only; no recursive refs, arbitrary overlapping unions, optional missing keys, dynamic keys or unbounded arrays. Programmatic skips are schema-derived, never based on request words or gold labels.",
  "interpretation": "Compare accuracy/cost/speed as a small demonstration. This follow-up changes routing, context packing and deterministic-edge collapsing together; it cannot isolate routing alone or establish a general quality gap. Later timing/provider load and cache state can differ. Do not optimize on target outcomes.",
  "publication": "Gate the added arm on its own passed audit. Keep original traces, baseline summaries, protocol and frozen hashes unchanged. Add mixed-specific protocol, audit, frozen hashes, source and trace artifacts to the existing page. Archive the original two-arm page before editing."
}
