# 0039 answer-shape transcript — RESEARCH's instrument (independent of dev's)
# generated 2026-09-12 (research's instrument, re-run by dev)  against veracium @ 1e2d399
# RE-PINNED 2026-09-18 after the second v0.26.0 schema-evidence regeneration (the record now names the tag's final commit; JSON under src/, no product code): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-17 after the v0.26.0 schema-evidence regeneration (a released-version record, not product code): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-15 after the 0041 adoption: body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-15 after 0027 v15: body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-15 after 0027 v14.1: body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-14 after 0037 v24.5: body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-14 after 0037 v24.4: body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-14 after 0027 v14: body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-14 after 0037 v24.3: body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-14 after 0037 v24.2: body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-14 after 0037 v24.1 (fail closed): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-14 after 0037 v24 (the boundary kinds): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-14 after 0037 v23.1 (wording only): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-14 after 0037 v23 / 0006 v10 (Provenance frozen; the producer stamp; no procedural triple here): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-14 after 0037 v22 (the whole-sentence rule; no procedural triple here): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-13 after 0027 v13 (the policy receipt; no policy passed here): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-13 after the v21 doc sweep (docstrings only): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-13 after 0037 v21 (the derived gloss; no procedural triple here): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-13 after 0027 v12 (graph.py's baseline order; ingest untouched): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-13 after 0037 v20 (procedural_gate's positive form; no procedural triple here): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-13 after 0037 v19 / 0038 v6.2 (ingest's capture gates, correct(), the store guard; no procedural triple here): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-13 after 0037 v18 (the describe attribution; ingest untouched): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-12 after 0006 v9 / 0037 v17 (procedures, mcp_server; ingest untouched): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-12 after the doctor's procedural tripwire (doctor.py only): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-12 after 0037 v16 (the quote gate in ingest; no procedural triple in these answers): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-12 after 0006 v8 (the default flip; `ingest_event` called directly): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-12 after 0006 v7 `require_source_id` (default-off branch in ingest): body BYTE-IDENTICAL again.
# script: proposals/0039-answer-shapes-research-instrument.py
# Real ingest_event with a scripted provider. Not a simulation of the loop.
# research's instrument as committed: ONE row moved — `R bare array of dicts` is now a
# research's instrument as committed: THREE rows moved — `P triples null`, `number` and
# REGENERATED by dev at the round-5 fold (the pin above) by re-running research's instrument as
# committed: the same seven primary rows back to `"unparseable": null`, body BYTE-IDENTICAL to the
# pre-widening transcript.
# REGENERATED by dev 2026-09-11 (the pin above) after the retry handler's sentinel fix
# (9a590d6): body BYTE-IDENTICAL to the round-5 transcript; no row moves.
# RE-PINNED 2026-09-12 after `veracium why` (no ingest change): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-12 after `veracium doctor` (no ingest change): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-12 after `remember --dry-run` (no ingest change): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-12 after the confirmation-episode id fix (no ingest change): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-12 after 0027 v11's policy lane (no ingest change): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-12 after the doctor's sources check (no ingest change): body BYTE-IDENTICAL again.

  primary answer shape     outcome                                             
  ------------------------ ----------------------------------------------------
  P valid non-empty        RETURNS {"facts": 1, "unparseable": null, "invalid": 0, "retried": 0, "recovered": 0, "resi
  P valid empty            RETURNS {"facts": 0, "unparseable": null, "invalid": 0, "retried": 0, "recovered": 0, "resi
  P missing key            RETURNS {"facts": 0, "unparseable": null, "invalid": 0, "retried": 0, "recovered": 0, "resi
  P triples string         RETURNS {"facts": 0, "unparseable": null, "invalid": 0, "retried": 0, "recovered": 0, "resi
  P triples dict           RETURNS {"facts": 0, "unparseable": null, "invalid": 0, "retried": 0, "recovered": 0, "resi
  P triples null           RETURNS {"facts": 0, "unparseable": null, "invalid": 0, "retried": 0, "recovered": 0, "resi
  P triples number         RETURNS {"facts": 0, "unparseable": null, "invalid": 0, "retried": 0, "recovered": 0, "resi
  P triples bool           RETURNS {"facts": 0, "unparseable": null, "invalid": 0, "retried": 0, "recovered": 0, "resi
  P bare array of dicts    RETURNS {"facts": 1, "unparseable": null, "invalid": 0, "retried": 0, "recovered": 0, "resi
  P bare array scalars     RETURNS {"facts": 0, "unparseable": null, "invalid": 0, "retried": 0, "recovered": 0, "resi
  P top-level number       RETURNS {"facts": 0, "unparseable": true, "invalid": 0, "retried": 0, "recovered": 0, "resi
  P top-level string       RETURNS {"facts": 0, "unparseable": true, "invalid": 0, "retried": 0, "recovered": 0, "resi
  P prose, no JSON         RETURNS {"facts": 0, "unparseable": true, "invalid": 0, "retried": 0, "recovered": 0, "resi
  P instructions string    RETURNS {"facts": 0, "unparseable": true, "invalid": 0, "retried": 0, "recovered": 0, "resi
  P mixed member types     RETURNS {"facts": 1, "unparseable": null, "invalid": 0, "retried": 0, "recovered": 0, "resi
  P empty dict members     RETURNS {"facts": 0, "unparseable": null, "invalid": 0, "retried": 0, "recovered": 0, "resi
  P nested triples         RETURNS {"facts": 0, "unparseable": null, "invalid": 0, "retried": 0, "recovered": 0, "resi

  retry answer shape       outcome                                             
  ------------------------ ----------------------------------------------------
  R valid repair           RETURNS {"facts": 1, "unparseable": null, "invalid": 1, "retried": 1, "recovered": 1, "resi
  R valid empty            RETURNS {"facts": 1, "unparseable": null, "invalid": 1, "retried": 1, "recovered": 0, "resi
  R missing key            RETURNS {"facts": 1, "unparseable": null, "invalid": 1, "retried": 1, "recovered": 0, "resi
  R triples string         RETURNS {"facts": 1, "unparseable": null, "invalid": 1, "retried": 1, "recovered": 0, "resi
  R triples null           RETURNS {"facts": 1, "unparseable": null, "invalid": 1, "retried": 1, "recovered": 0, "resi
  R bare array of dicts    RETURNS {"facts": 1, "unparseable": null, "invalid": 1, "retried": 1, "recovered": 1, "resi
  R bare array scalars     RETURNS {"facts": 1, "unparseable": null, "invalid": 1, "retried": 1, "recovered": 0, "resi
  R prose, no JSON         RETURNS {"facts": 1, "unparseable": null, "invalid": 1, "retried": 1, "recovered": 0, "resi
  R top-level number       RETURNS {"facts": 1, "unparseable": null, "invalid": 1, "retried": 1, "recovered": 0, "resi
