# 0039 answer-shape transcript — DEV's instrument (specs/evidence/0039/answer_shapes.py)
# generated 2026-09-12 against veracium @ a710180364aa2ae2070d548e5dc95141a8945f32
# Real ingest_event with a scripted provider. The pin line is asserted by tests/test_0039_answer_shapes.py
# against the tree the test runs in: src/ must be unchanged since this commit, or the transcript is regenerated.
# good rows are unchanged, which is the half a mark-everything fix would have broken.
# REGENERATED at the round-5 fold (the pin above): the seven primary rows the v17 widening had
# moved to `unparseable=True` are back to `unparseable=False`, and the body is BYTE-IDENTICAL to the
# transcript taken before that widening. The outcome now rides `extraction_unusable`, bound by its
# own tests; this instrument's frozen format does not print it.
# REGENERATED 2026-09-11 (the pin above) after the retry handler's cause rule moved to a
# sentinel + an `extracted` flag (9a590d6): body BYTE-IDENTICAL to the round-5 transcript —
# no row that existed moves; the new case (a provider returning None) is a matrix row in
# tests/test_0039_degradation_visibility.py, not a shape this frozen instrument prints.
# RE-PINNED 2026-09-12 after `veracium why` (a new read-only module and a CLI verb, no ingest
# change): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-12 after `veracium doctor` (a new read-only module and a CLI verb, no ingest
# change): body BYTE-IDENTICAL again.
# RE-PINNED 2026-09-12 after `remember --dry-run` (a new module and two CLI flags, no ingest
# change): body BYTE-IDENTICAL again.

=== PRIMARY answer shapes (the retry answer fixed to a valid empty object) ===
  valid non-empty list             -> RESULT facts=1 unparseable=False retried=0 recovered=0 residual=0 calls=['distill']
  valid empty list                 -> RESULT facts=0 unparseable=False retried=0 recovered=0 residual=0 calls=['distill']
  missing key                      -> RESULT facts=0 unparseable=False retried=0 recovered=0 residual=0 calls=['distill']
  string                           -> RESULT facts=0 unparseable=False retried=0 recovered=0 residual=0 calls=['distill']
  dictionary                       -> RESULT facts=0 unparseable=False retried=0 recovered=0 residual=0 calls=['distill']
  nested dictionary                -> RESULT facts=0 unparseable=False retried=0 recovered=0 residual=0 calls=['distill']
  null                             -> RESULT facts=0 unparseable=False retried=0 recovered=0 residual=0 calls=['distill']
  number                           -> RESULT facts=0 unparseable=False retried=0 recovered=0 residual=0 calls=['distill']
  boolean                          -> RESULT facts=0 unparseable=False retried=0 recovered=0 residual=0 calls=['distill']
  bare array of dicts              -> RESULT facts=1 unparseable=False retried=0 recovered=0 residual=0 calls=['distill']
  bare array of scalars            -> RESULT facts=0 unparseable=False retried=0 recovered=0 residual=0 calls=['distill']
  list with malformed members      -> RESULT facts=1 unparseable=False retried=0 recovered=0 residual=0 calls=['distill']
  list of empty dicts              -> RESULT facts=0 unparseable=False retried=0 recovered=0 residual=0 calls=['distill']
  non-object top-level: string     -> RESULT facts=0 unparseable=True retried=0 recovered=0 residual=0 calls=['distill']
  non-object top-level: number     -> RESULT facts=0 unparseable=True retried=0 recovered=0 residual=0 calls=['distill']
  prose                            -> RESULT facts=0 unparseable=True retried=0 recovered=0 residual=0 calls=['distill']
  instructions wrong type          -> RESULT facts=0 unparseable=True retried=0 recovered=0 residual=0 calls=['distill']
  primary call raises              -> RAISES RuntimeError: 'provider down' calls=['distill']
=== RETRY answer shapes (the primary carries ONE off-vocabulary triple to trigger the retry) ===
  raising                          -> RESULT facts=1 unparseable=False retried=1 recovered=0 residual=1 calls=['distill', 'distill-retry']
  prose                            -> RESULT facts=1 unparseable=False retried=1 recovered=0 residual=1 calls=['distill', 'distill-retry']
  bare array of dicts              -> RESULT facts=1 unparseable=False retried=1 recovered=1 residual=0 calls=['distill', 'distill-retry']
  bare array of scalars            -> RESULT facts=1 unparseable=False retried=1 recovered=0 residual=1 calls=['distill', 'distill-retry']
  triples not a list (string)      -> RESULT facts=1 unparseable=False retried=1 recovered=0 residual=1 calls=['distill', 'distill-retry']
  triples not a list (dict)        -> RESULT facts=1 unparseable=False retried=1 recovered=0 residual=1 calls=['distill', 'distill-retry']
  triples null                     -> RESULT facts=1 unparseable=False retried=1 recovered=0 residual=1 calls=['distill', 'distill-retry']
  triples number                   -> RESULT facts=1 unparseable=False retried=1 recovered=0 residual=1 calls=['distill', 'distill-retry']
  no triples key                   -> RESULT facts=1 unparseable=False retried=1 recovered=0 residual=1 calls=['distill', 'distill-retry']
  triples empty list               -> RESULT facts=1 unparseable=False retried=1 recovered=0 residual=1 calls=['distill', 'distill-retry']
  list of dicts (recovery)         -> RESULT facts=1 unparseable=False retried=1 recovered=1 residual=0 calls=['distill', 'distill-retry']
  list with malformed members      -> RESULT facts=1 unparseable=False retried=1 recovered=1 residual=0 calls=['distill', 'distill-retry']
  non-object top-level: number     -> RESULT facts=1 unparseable=False retried=1 recovered=0 residual=1 calls=['distill', 'distill-retry']
  instructions as a string         -> RESULT facts=1 unparseable=False retried=1 recovered=1 residual=0 calls=['distill', 'distill-retry']
  instructions as a list           -> RESULT facts=1 unparseable=False retried=1 recovered=1 residual=0 calls=['distill', 'distill-retry']
