{
 "schema": "s2s-bench-v1",
 "dataset": "cove-voice-head-to-head-rows",
 "exhibit": "cove-voice-head-to-head",
 "published_utc": "2026-08-13",
 "status": "published 2026-08-13",
 "licence": "CC BY 4.0",
 "attribution": "strata→signal research, research.strata2signal.com",
 "contact": "hello@strata2signal.com",
 "outcome": "REJECTED — the candidate misses floor 1 (canon) and floor 4 (latency). A rejected candidate gets no threshold table: no number in this file is offered as an adoption target.",
 "what_this_is": [
  "One row per judged sample x arm: 13 prompts x 3 models = 39 rows, each carrying the",
  "reply as generated, its timings and contention record, and all three blind judges'",
  "scores, canon verdicts and notes for that cell — 117 scored cells in total.",
  "Every value is copied from the corpus or recomputed from it; the panel means here are",
  "recomputed from the per-judge sheets and cross-checked against the un-blinded",
  "aggregate, and a disagreement aborts the build rather than publishing either number.",
  "Artifact names carry no filesystem paths, no hostnames and no ports, by house rule."
 ],
 "own_scale": {
  "own_scale": true,
  "rule": "These 0-10 scores live only inside this head-to-head. They share no ruler with the frozen voice trial published on the voice-trials exhibit: different prompts, different rubric, different posture, different judges. No delta between the two is computed anywhere — not in this file, not on the page.",
  "dimensions": [
   "voice_register",
   "character"
  ],
  "combined": "the mean of the two dimension means; never a percentage"
 },
 "posture": {
  "think": false,
  "stream": false,
  "num_ctx": 32768,
  "format_by_kind": {
   "dialogue": "json",
   "drift": null
  },
  "note": "think:false was passed explicitly on every call of every arm, never omitted."
 },
 "counting_rules": {
  "population": "13 real cove prompts (9 dialogue rebuilt from the live world's own chat log, 4 drift retellings under the v0.823.0 town's-tongue frame) x 3 models = 39 samples; x 3 blind judges = 117 scored cells.",
  "blinding": "arm letters re-randomised per prompt, so a letter carries no information across prompts; each judge sealed its blindmap before scoring. Two blinding imperfections were disclosed by the judges themselves and are carried in `blinding_imperfections` below.",
  "canon_verdict": "per judge, per cell: CLEAN or FABRICATED. A cell counts against the canon floor when at least two judges filed on it.",
  "spoken_line": "dialogue rows publish the narration field — the words the visitor actually hears; drift rows publish the retelling itself. The full reply as generated is in reply.raw_verbatim either way.",
  "warm_median": "median wall_ms over the 13 warm samples. Cold starts were discarded by every harness and are never gate samples.",
  "tok_s_eval": "eval_count / eval_duration — generation rate only, excluding prompt evaluation and model load.",
  "median_tok_s_eval": "published TWICE per arm — over the primary (pass-1) record, and with contention re-runs substituted for the samples that were flagged. The two selection rules give different figures for any arm that had a flagged sample, so neither is published alone.",
  "queue_ms": "wall_ms minus the server's own total_duration — time spent waiting in line rather than generating."
 },
 "contention_disclosure": {
  "both_directions": [
   "The three generation lanes ran concurrently on the 96G workstation, which was at the same time serving a live fresh-world cove bench (measured ~1.25 generation calls per minute in the window, read from the running world's own event log).",
   "So: the bench's timings can include waiting behind live traffic, and the live world saw reduced generation speed while the three lanes ran."
  ],
  "flag_rule": "a flagged sample is re-run once and BOTH values are published; the first pass stays the primary record. The three arms ran under three separate harnesses, and each registered its own flag threshold before its run — so the flag COUNTS below are not comparable across arms the way the timings are. The three rules are printed here rather than summarised into one that was never registered.",
  "flag_rule_by_arm": {
   "qwen3.6:27b": "queue wait over 750 ms, OR generation rate under 75% of the arm's own median",
   "gemma4:12b": "generation rate under 80% of the arm's own first-pass median (threshold 62.205 tok/s against a 77.756 median)",
   "gemma4:26b": "queue wait over 1000 ms, OR wall time over 2.0x the same-kind first-pass median"
  },
  "flagged_and_rerun": {
   "qwen3.6:27b": [
    "dlg-2652"
   ],
   "gemma4:12b": [
    "dlg-2652",
    "dlg-2655",
    "dlg-2818",
    "dlg-3151"
   ],
   "gemma4:26b": [
    "dlg-2652"
   ]
  },
  "honest_caveat": "These medians are honest for a box under concurrent-lane load, which is not the cove's production condition. A clean verdict on the latency floor alone would want a re-run in a quiet window.",
  "rig": "the 96G workstation (hardware named by class, never by card count)."
 },
 "blinding_imperfections": [
  {
   "judge": "judge-1",
   "what_leaked": "read dlg-2655 excerpts from the three outputs files while learning their shapes",
   "scope": "3 of 39 cells partially blind"
  },
  {
   "judge": "judge-3",
   "what_leaked": "saw the dlg-2655 arm B text with its model tag",
   "scope": "1 of 39 cells not blind"
  },
  {
   "judge": "judge-2",
   "what_leaked": null,
   "scope": "none disclosed"
  }
 ],
 "sensitivity": [
  {
   "label": "all 117 cell-scores",
   "per_model": {
    "qwen3.6:27b": {
     "n": 39,
     "voice_register_mean": 7.13,
     "character_mean": 7.13
    },
    "gemma4:12b": {
     "n": 39,
     "voice_register_mean": 7.62,
     "character_mean": 6.62
    },
    "gemma4:26b": {
     "n": 39,
     "voice_register_mean": 7.79,
     "character_mean": 7.33
    }
   }
  },
  {
   "label": "dlg-2655 dropped entirely (partially-blinded prompt)",
   "per_model": {
    "qwen3.6:27b": {
     "n": 36,
     "voice_register_mean": 7.33,
     "character_mean": 7.33
    },
    "gemma4:12b": {
     "n": 36,
     "voice_register_mean": 7.69,
     "character_mean": 6.61
    },
    "gemma4:26b": {
     "n": 36,
     "voice_register_mean": 7.75,
     "character_mean": 7.28
    }
   }
  },
  {
   "label": "only the disclosed non-blind cells dropped",
   "per_model": {
    "qwen3.6:27b": {
     "n": 37,
     "voice_register_mean": 7.3,
     "character_mean": 7.3
    },
    "gemma4:12b": {
     "n": 37,
     "voice_register_mean": 7.68,
     "character_mean": 6.62
    },
    "gemma4:26b": {
     "n": 37,
     "voice_register_mean": 7.78,
     "character_mean": 7.32
    }
   }
  },
  {
   "label": "dialogue only",
   "per_model": {
    "qwen3.6:27b": {
     "n": 27,
     "voice_register_mean": 7.52,
     "character_mean": 7.7
    },
    "gemma4:12b": {
     "n": 27,
     "voice_register_mean": 7.37,
     "character_mean": 6.89
    },
    "gemma4:26b": {
     "n": 27,
     "voice_register_mean": 7.78,
     "character_mean": 7.7
    }
   }
  },
  {
   "label": "drift only",
   "per_model": {
    "qwen3.6:27b": {
     "n": 12,
     "voice_register_mean": 6.25,
     "character_mean": 5.83
    },
    "gemma4:12b": {
     "n": 12,
     "voice_register_mean": 8.17,
     "character_mean": 6
    },
    "gemma4:26b": {
     "n": 12,
     "voice_register_mean": 7.83,
     "character_mean": 6.5
    }
   }
  }
 ],
 "unblinding_integrity": {
  "sha_crosschecks": 78,
  "agree": 78,
  "mismatch": [],
  "note": "judges 1 and 2 published truncated sha256s of the text they scored; those cross-checks agree with the generated outputs under their own blindmaps. judge-3 published no shas; its mechanical observations un-blind consistently against the raw outputs."
 },
 "arms": [
  {
   "model": "qwen3.6:27b",
   "role": "candidate under test"
  },
  {
   "model": "gemma4:12b",
   "role": "incumbent — the cove's locked chat voice"
  },
  {
   "model": "gemma4:26b",
   "role": "incumbent — the voice running the live world bench that night, and the latency bar the gate names"
  }
 ],
 "judges": [
  {
   "judge": "judge-1",
   "blind": true,
   "cells_scored": 39,
   "model_family": "claude-opus-5"
  },
  {
   "judge": "judge-2",
   "blind": true,
   "cells_scored": 39,
   "model_family": "claude-opus-5"
  },
  {
   "judge": "judge-3",
   "blind": true,
   "cells_scored": 39,
   "model_family": "claude-fable-5"
  }
 ],
 "summary": {
  "qwen3.6:27b": {
   "cells_scored": 39,
   "voice_register": {
    "mean": 7.13,
    "sd": 1.44,
    "median": 7,
    "min": 4,
    "max": 9
   },
   "character": {
    "mean": 7.13,
    "sd": 1.64,
    "median": 7,
    "min": 4,
    "max": 9
   },
   "combined_mean": 7.13,
   "by_judge": {
    "judge-1": {
     "voice_register_mean": 6.69,
     "character_mean": 6.62
    },
    "judge-2": {
     "voice_register_mean": 7.54,
     "character_mean": 7.46
    },
    "judge-3": {
     "voice_register_mean": 7.15,
     "character_mean": 7.31
    }
   },
   "by_kind": {
    "dialogue": {
     "n": 27,
     "voice_register_mean": 7.52,
     "character_mean": 7.7
    },
    "drift": {
     "n": 12,
     "voice_register_mean": 6.25,
     "character_mean": 5.83
    }
   },
   "latency": {
    "warm_median_wall_ms_primary": 3335.9,
    "warm_median_wall_ms_contention_reruns_substituted": 3335.9,
    "by_kind_median_primary_ms": {
     "dialogue": 3989.3,
     "drift": 2238.8
    },
    "min_wall_ms": 1776.9,
    "max_wall_ms": 8056.8,
    "median_tok_s_eval_primary": 49.03,
    "median_tok_s_eval_contention_reruns_substituted": 49.03,
    "contention_flagged_prompts": [
     "dlg-2652"
    ]
   },
   "canon_floor1": {
    "fabrication_findings_filed": 5,
    "cells": [
     {
      "prompt_id": "dlg-2487",
      "judges": [
       "judge-1",
       "judge-2",
       "judge-3"
      ],
      "n_judges": 3,
      "classes": [
       "fact_class",
       "prose_fact",
       "world-mechanic"
      ],
      "quotes": [
       "The Wrack-Stalker's venom is neurotoxic, not demonic",
       "\"The Wrack-Stalker's venom is neurotoxic, not demonic\""
      ]
     },
     {
      "prompt_id": "drift-2088",
      "judges": [
       "judge-2",
       "judge-3"
      ],
      "n_judges": 2,
      "classes": [
       "event-detail",
       "fact_class"
      ],
      "quotes": [
       "\"They say it didn't strike a blow, only laughed and taunted her while she lay pinned there. That was how it ended.\""
      ]
     }
    ],
    "corroborated_cells": [
     {
      "prompt_id": "dlg-2487",
      "judges": [
       "judge-1",
       "judge-2",
       "judge-3"
      ],
      "n_judges": 3,
      "classes": [
       "fact_class",
       "prose_fact",
       "world-mechanic"
      ],
      "quotes": [
       "The Wrack-Stalker's venom is neurotoxic, not demonic",
       "\"The Wrack-Stalker's venom is neurotoxic, not demonic\""
      ]
     },
     {
      "prompt_id": "drift-2088",
      "judges": [
       "judge-2",
       "judge-3"
      ],
      "n_judges": 2,
      "classes": [
       "event-detail",
       "fact_class"
      ],
      "quotes": [
       "\"They say it didn't strike a blow, only laughed and taunted her while she lay pinned there. That was how it ended.\""
      ]
     }
    ],
    "solo_cells": [],
    "floor1_pass": false
   }
  },
  "gemma4:12b": {
   "cells_scored": 39,
   "voice_register": {
    "mean": 7.62,
    "sd": 0.71,
    "median": 8,
    "min": 6,
    "max": 9
   },
   "character": {
    "mean": 6.62,
    "sd": 1.14,
    "median": 7,
    "min": 4,
    "max": 8
   },
   "combined_mean": 7.12,
   "by_judge": {
    "judge-1": {
     "voice_register_mean": 7.23,
     "character_mean": 6.38
    },
    "judge-2": {
     "voice_register_mean": 7.85,
     "character_mean": 6.62
    },
    "judge-3": {
     "voice_register_mean": 7.77,
     "character_mean": 6.85
    }
   },
   "by_kind": {
    "dialogue": {
     "n": 27,
     "voice_register_mean": 7.37,
     "character_mean": 6.89
    },
    "drift": {
     "n": 12,
     "voice_register_mean": 8.17,
     "character_mean": 6
    }
   },
   "latency": {
    "warm_median_wall_ms_primary": 2856.3,
    "warm_median_wall_ms_contention_reruns_substituted": 2409.7,
    "by_kind_median_primary_ms": {
     "dialogue": 4021.6,
     "drift": 1011.3
    },
    "min_wall_ms": 899.1,
    "max_wall_ms": 26430.5,
    "median_tok_s_eval_primary": 77.76,
    "median_tok_s_eval_contention_reruns_substituted": 92.18,
    "contention_flagged_prompts": [
     "dlg-2652",
     "dlg-2655",
     "dlg-2818",
     "dlg-3151"
    ]
   },
   "canon_floor1": {
    "fabrication_findings_filed": 3,
    "cells": [
     {
      "prompt_id": "dlg-3095",
      "judges": [
       "judge-1",
       "judge-2",
       "judge-3"
      ],
      "n_judges": 3,
      "classes": [
       "event-attribution",
       "fact_class",
       "prose_fact"
      ],
      "quotes": [
       "Word hit me from the folks over at the Cracked Keel-some say it was Garron who saw it first",
       "\"some say it was Garron who saw it first\""
      ]
     }
    ],
    "corroborated_cells": [
     {
      "prompt_id": "dlg-3095",
      "judges": [
       "judge-1",
       "judge-2",
       "judge-3"
      ],
      "n_judges": 3,
      "classes": [
       "event-attribution",
       "fact_class",
       "prose_fact"
      ],
      "quotes": [
       "Word hit me from the folks over at the Cracked Keel-some say it was Garron who saw it first",
       "\"some say it was Garron who saw it first\""
      ]
     }
    ],
    "solo_cells": [],
    "floor1_pass": false
   }
  },
  "gemma4:26b": {
   "cells_scored": 39,
   "voice_register": {
    "mean": 7.79,
    "sd": 0.98,
    "median": 8,
    "min": 6,
    "max": 9
   },
   "character": {
    "mean": 7.33,
    "sd": 1.2,
    "median": 7,
    "min": 5,
    "max": 9
   },
   "combined_mean": 7.56,
   "by_judge": {
    "judge-1": {
     "voice_register_mean": 7.62,
     "character_mean": 7.15
    },
    "judge-2": {
     "voice_register_mean": 8,
     "character_mean": 7.69
    },
    "judge-3": {
     "voice_register_mean": 7.77,
     "character_mean": 7.15
    }
   },
   "by_kind": {
    "dialogue": {
     "n": 27,
     "voice_register_mean": 7.78,
     "character_mean": 7.7
    },
    "drift": {
     "n": 12,
     "voice_register_mean": 7.83,
     "character_mean": 6.5
    }
   },
   "latency": {
    "warm_median_wall_ms_primary": 2757.6,
    "warm_median_wall_ms_contention_reruns_substituted": 2627.1,
    "by_kind_median_primary_ms": {
     "dialogue": 3122.7,
     "drift": 1043.6
    },
    "min_wall_ms": 806.6,
    "max_wall_ms": 28842.0,
    "median_tok_s_eval_primary": 76.98,
    "median_tok_s_eval_contention_reruns_substituted": 80.37,
    "contention_flagged_prompts": [
     "dlg-2652"
    ]
   },
   "canon_floor1": {
    "fabrication_findings_filed": 6,
    "cells": [
     {
      "prompt_id": "dlg-2652",
      "judges": [
       "judge-1",
       "judge-2",
       "judge-3"
      ],
      "n_judges": 3,
      "classes": [
       "canon_id_field",
       "id_class",
       "off-canon-id"
      ],
      "quotes": [
       "npc.cove.sally_merrow",
       "\"npc.cove.sally_merrow\" (references[11])"
      ]
     },
     {
      "prompt_id": "dlg-3095",
      "judges": [
       "judge-1",
       "judge-2",
       "judge-3"
      ],
      "n_judges": 3,
      "classes": [
       "canon_id_field",
       "id_class",
       "off-canon-id"
      ],
      "quotes": [
       "char.guest_a2fcdb6",
       "\"char.guest_a2fcdb6\" (references[1] and state_effects[0].relationship.subject)"
      ]
     }
    ],
    "corroborated_cells": [
     {
      "prompt_id": "dlg-2652",
      "judges": [
       "judge-1",
       "judge-2",
       "judge-3"
      ],
      "n_judges": 3,
      "classes": [
       "canon_id_field",
       "id_class",
       "off-canon-id"
      ],
      "quotes": [
       "npc.cove.sally_merrow",
       "\"npc.cove.sally_merrow\" (references[11])"
      ]
     },
     {
      "prompt_id": "dlg-3095",
      "judges": [
       "judge-1",
       "judge-2",
       "judge-3"
      ],
      "n_judges": 3,
      "classes": [
       "canon_id_field",
       "id_class",
       "off-canon-id"
      ],
      "quotes": [
       "char.guest_a2fcdb6",
       "\"char.guest_a2fcdb6\" (references[1] and state_effects[0].relationship.subject)"
      ]
     }
    ],
    "solo_cells": [],
    "floor1_pass": false
   }
  }
 },
 "prompts": [
  {
   "prompt_id": "dlg-2655",
   "kind": "dialogue",
   "note": "open news ask ('any news') — the live-news block rides in",
   "user_utterance": "any news anything happen in the square lately",
   "provenance": {
    "source_event_seq": 2655,
    "source_event_type": "dialogue.said",
    "world_id": "world_sorrowmoor_cove",
    "soak_ts": "2026-08-12T22:56:53.815935+00:00",
    "user_is_input_norm": true,
    "user_norm_note": "the raw talk input is not logged; input_norm is the real player utterance lowercased with non-word chars folded to space (NpcState.normalizeInput)",
    "reference_reply_from_the_live_world": "The square's been a bit hushed lately, with folks mostly keeping to their own porches as the fog rolls in heavy.",
    "reference_reply_note": null,
    "drift_system_version": null
   },
   "speaker": {
    "id": "npc.cove.tarrow",
    "name": "Garron Tarrow",
    "role": "taverner of the Cracked Keel",
    "home_region": "region.sorrowmoor_cove",
    "alignment": "LN"
   },
   "visitor": {
    "id": "char.guest_a2fc4db6",
    "name": "Quilla Sedge",
    "class": "class.wakeman",
    "sex": null
   },
   "canon_ids": [
    "npc.cove.tarrow",
    "char.guest_a2fc4db6",
    "npc.cove.brisa",
    "npc.cove.cobb",
    "npc.cove.crane",
    "npc.cove.dorrie",
    "npc.cove.haldane",
    "npc.cove.kestrel",
    "npc.cove.lune",
    "npc.cove.mercy",
    "npc.cove.merrow",
    "npc.cove.quell",
    "npc.cove.sault_doctor",
    "npc.cove.sefer",
    "npc.cove.sexton",
    "npc.cove.tessa",
    "npc.cove.vane",
    "npc.cove.wick",
    "npc.cove.wrenna"
   ],
   "names_in_prompt": [
    "Garron Tarrow",
    "Cracked Keel",
    "Garron",
    "Saltmaiden",
    "Sefer",
    "Sefer's",
    "Quilla Sedge",
    "Wakeman",
    "Brisa Lune",
    "Cobb",
    "Cooper",
    "Odessa Crane",
    "Maiden's Night",
    "Dorrie Callow",
    "Harbormaster Haldane",
    "Halar Kestrel",
    "Pip Lune",
    "Brisa's",
    "Father Mercy Dunlin",
    "Salla Merrow",
    "Mother Quell",
    "Ilse Sault",
    "Wrenna's",
    "Old Sefer Tamm",
    "Sexton",
    "Tessa Glassman",
    "Orin Vane",
    "Edda Wick",
    "Wrenna Sault",
    "Halla Wren",
    "Wrack-Stalker",
    "Sorrowmoor Cove",
    "Sorrowmoor"
   ]
  },
  {
   "prompt_id": "dlg-2652",
   "kind": "dialogue",
   "note": "roster/townsfolk naming — the sharpest canon-floor probe",
   "user_utterance": "who s worth knowing in this town name me a few",
   "provenance": {
    "source_event_seq": 2652,
    "source_event_type": "dialogue.said",
    "world_id": "world_sorrowmoor_cove",
    "soak_ts": "2026-08-12T22:56:49.77841+00:00",
    "user_is_input_norm": true,
    "user_norm_note": "the raw talk input is not logged; input_norm is the real player utterance lowercased with non-word chars folded to space (NpcState.normalizeInput)",
    "reference_reply_from_the_live_world": "There's a few souls worth a word, depending on what kind of truth you're looking for. If it's the law of the water, go see Haldane; if you need a steady hand and a bit of salt-wisdom, Mother Quell or Salla Merrow have seen more seasons than most of us combined.",
    "reference_reply_note": null,
    "drift_system_version": null
   },
   "speaker": {
    "id": "npc.cove.tarrow",
    "name": "Garron Tarrow",
    "role": "taverner of the Cracked Keel",
    "home_region": "region.sorrowmoor_cove",
    "alignment": "LN"
   },
   "visitor": {
    "id": "char.guest_a2fc4db6",
    "name": "Quilla Sedge",
    "class": "class.wakeman",
    "sex": null
   },
   "canon_ids": [
    "npc.cove.tarrow",
    "char.guest_a2fc4db6",
    "npc.cove.brisa",
    "npc.cove.cobb",
    "npc.cove.crane",
    "npc.cove.dorrie",
    "npc.cove.haldane",
    "npc.cove.kestrel",
    "npc.cove.lune",
    "npc.cove.mercy",
    "npc.cove.merrow",
    "npc.cove.quell",
    "npc.cove.sault_doctor",
    "npc.cove.sefer",
    "npc.cove.sexton",
    "npc.cove.tessa",
    "npc.cove.vane",
    "npc.cove.wick",
    "npc.cove.wrenna"
   ],
   "names_in_prompt": [
    "Garron Tarrow",
    "Cracked Keel",
    "Garron",
    "Saltmaiden",
    "Sefer",
    "Sefer's",
    "Quilla Sedge",
    "Wakeman",
    "Brisa Lune",
    "Cobb",
    "Cooper",
    "Odessa Crane",
    "Maiden's Night",
    "Dorrie Callow",
    "Harbormaster Haldane",
    "Halar Kestrel",
    "Pip Lune",
    "Brisa's",
    "Father Mercy Dunlin",
    "Salla Merrow",
    "Mother Quell",
    "Ilse Sault",
    "Wrenna's",
    "Old Sefer Tamm",
    "Sexton",
    "Tessa Glassman",
    "Orin Vane",
    "Edda Wick",
    "Wrenna Sault"
   ]
  },
  {
   "prompt_id": "dlg-2818",
   "kind": "dialogue",
   "note": "named news ask via the deed alias 'the fight'",
   "user_utterance": "have you heard about the fight by the square",
   "provenance": {
    "source_event_seq": 2818,
    "source_event_type": "dialogue.said",
    "world_id": "world_sorrowmoor_cove",
    "soak_ts": "2026-08-12T23:00:34.396108+00:00",
    "user_is_input_norm": true,
    "user_norm_note": "the raw talk input is not logged; input_norm is the real player utterance lowercased with non-word chars folded to space (NpcState.normalizeInput)",
    "reference_reply_from_the_live_world": "Word came to the salt-house of a scuffle at the Cracked Keel. It’s better for the peace of the wharf if people keep their hands off one another's throats.",
    "reference_reply_note": null,
    "drift_system_version": null
   },
   "speaker": {
    "id": "npc.cove.merrow",
    "name": "Salla Merrow",
    "role": "salt-house keeper and fish-curer",
    "home_region": "region.sorrowmoor_cove",
    "alignment": "LN"
   },
   "visitor": {
    "id": "char.guest_a2fc4db6",
    "name": "Quilla Sedge",
    "class": "class.wakeman",
    "sex": null
   },
   "canon_ids": [
    "npc.cove.merrow",
    "char.guest_a2fc4db6",
    "npc.cove.brisa",
    "npc.cove.cobb",
    "npc.cove.crane",
    "npc.cove.dorrie",
    "npc.cove.haldane",
    "npc.cove.kestrel",
    "npc.cove.lune",
    "npc.cove.mercy",
    "npc.cove.quell",
    "npc.cove.sault_doctor",
    "npc.cove.sefer",
    "npc.cove.sexton",
    "npc.cove.tarrow",
    "npc.cove.tessa",
    "npc.cove.vane",
    "npc.cove.wick",
    "npc.cove.wrenna"
   ],
   "names_in_prompt": [
    "Salla Merrow",
    "Salla",
    "Pol Glassman's",
    "Tessa's",
    "Cobb's",
    "Haldane",
    "Quilla Sedge",
    "Wakeman",
    "Brisa Lune",
    "Cobb",
    "Cooper",
    "Odessa Crane",
    "Maiden's Night",
    "Dorrie Callow",
    "Harbormaster Haldane",
    "Halar Kestrel",
    "Pip Lune",
    "Brisa's",
    "Father Mercy Dunlin",
    "Mother Quell",
    "Ilse Sault",
    "Wrenna's",
    "Old Sefer Tamm",
    "Sexton",
    "Garron Tarrow",
    "Cracked Keel",
    "Tessa Glassman",
    "Orin Vane",
    "Edda Wick",
    "Wrenna Sault",
    "Rooke Tarwater",
    "Deep's Drowned Hand"
   ]
  },
  {
   "prompt_id": "dlg-3095",
   "kind": "dialogue",
   "note": "named news ask — the worn/pristine deed canon rides in",
   "user_utterance": "the fight by the square what reached you and from who",
   "provenance": {
    "source_event_seq": 3095,
    "source_event_type": "dialogue.said",
    "world_id": "world_sorrowmoor_cove",
    "soak_ts": "2026-08-12T23:09:22.561965+00:00",
    "user_is_input_norm": true,
    "user_norm_note": "the raw talk input is not logged; input_norm is the real player utterance lowercased with non-word chars folded to space (NpcState.normalizeInput)",
    "reference_reply_from_the_live_world": "Word's moving fast through the salt-crust. They say Rooke Tarwater was taken down by that hollowed-out thing—the Echoed—right out in Sorrowmoor Cove.",
    "reference_reply_note": null,
    "drift_system_version": null
   },
   "speaker": {
    "id": "npc.cove.kestrel",
    "name": "Halar Kestrel",
    "role": "outsider salvage-diver and suspected smuggler",
    "home_region": "region.sorrowmoor_cove",
    "alignment": "NN"
   },
   "visitor": {
    "id": "char.guest_a2fc4db6",
    "name": "Quilla Sedge",
    "class": "class.wakeman",
    "sex": null
   },
   "canon_ids": [
    "npc.cove.kestrel",
    "char.guest_a2fc4db6",
    "npc.cove.brisa",
    "npc.cove.cobb",
    "npc.cove.crane",
    "npc.cove.dorrie",
    "npc.cove.haldane",
    "npc.cove.lune",
    "npc.cove.mercy",
    "npc.cove.merrow",
    "npc.cove.quell",
    "npc.cove.sault_doctor",
    "npc.cove.sefer",
    "npc.cove.sexton",
    "npc.cove.tarrow",
    "npc.cove.tessa",
    "npc.cove.vane",
    "npc.cove.wick",
    "npc.cove.wrenna"
   ],
   "names_in_prompt": [
    "Halar Kestrel",
    "Kestrel",
    "Maiden",
    "Maiden's Reach",
    "Cobb",
    "Reach",
    "Quilla Sedge",
    "Wakeman",
    "Ness Cole",
    "Brisa Lune",
    "Cooper",
    "Odessa Crane",
    "Maiden's Night",
    "Dorrie Callow",
    "Harbormaster Haldane",
    "Pip Lune",
    "Brisa's",
    "Father Mercy Dunlin",
    "Salla Merrow",
    "Mother Quell",
    "Ilse Sault",
    "Wrenna's",
    "Old Sefer Tamm",
    "Sexton",
    "Garron Tarrow",
    "Cracked Keel",
    "Tessa Glassman",
    "Orin Vane",
    "Edda Wick",
    "Wrenna Sault",
    "Rooke Tarwater",
    "Echoed",
    "Sorrowmoor Cove",
    "Above"
   ]
  },
  {
   "prompt_id": "dlg-3151",
   "kind": "dialogue",
   "note": "unknown-name abstention — the name is absent from CANON, so it must deflect",
   "user_utterance": "do you know a rooke tarwater",
   "provenance": {
    "source_event_seq": 3151,
    "source_event_type": "dialogue.said",
    "world_id": "world_sorrowmoor_cove",
    "soak_ts": "2026-08-12T23:10:17.330693+00:00",
    "user_is_input_norm": true,
    "user_norm_note": "the raw talk input is not logged; input_norm is the real player utterance lowercased with non-word chars folded to space (NpcState.normalizeInput)",
    "reference_reply_from_the_live_world": "I have no knowledge of a man by that name. The names worth knowing on this stretch are the ones whose work is visible in the stone or the salt.",
    "reference_reply_note": null,
    "drift_system_version": null
   },
   "speaker": {
    "id": "npc.cove.bloom",
    "name": "Ivo Bloom",
    "role": "the cove's first smith, lately of the coast road",
    "home_region": "region.saltmarket",
    "alignment": "LN"
   },
   "visitor": {
    "id": "char.guest_a2fc4db6",
    "name": "Quilla Sedge",
    "class": "class.wakeman",
    "sex": null
   },
   "canon_ids": [
    "npc.cove.bloom",
    "char.guest_a2fc4db6",
    "npc.saltmarket.brennan",
    "npc.saltmarket.dunlin",
    "npc.saltmarket.marrow",
    "npc.saltmarket.selk",
    "npc.saltmarket.veil"
   ],
   "names_in_prompt": [
    "Ivo Bloom",
    "Blooms",
    "Dryworks'",
    "Ivo",
    "Bloom",
    "Fold's",
    "Rock's",
    "Saltmarket",
    "Wreck-iron",
    "Quilla Sedge",
    "Wakeman",
    "Rooke Tarwater",
    "Aldous Brennan",
    "Sister Ottilie Dunlin",
    "Tace Marrow",
    "Tollwarden",
    "Veil's",
    "Undermarket",
    "Dunmore Selk",
    "Coast Road",
    "Goodwife Hesper Veil"
   ]
  },
  {
   "prompt_id": "dlg-2917",
   "kind": "dialogue",
   "note": "child NPC, greeting + self — distinct register",
   "user_utterance": "hello i m quilla what s your name and what do you do all day",
   "provenance": {
    "source_event_seq": 2917,
    "source_event_type": "dialogue.said",
    "world_id": "world_sorrowmoor_cove",
    "soak_ts": "2026-08-12T23:03:17.374333+00:00",
    "user_is_input_norm": true,
    "user_norm_note": "the raw talk input is not logged; input_norm is the real player utterance lowercased with non-word chars folded to space (NpcState.normalizeInput)",
    "reference_reply_from_the_live_world": "Hello, I'm Pip. Most days I spend my time practicing the Maiden's verses with Brisa so I don't forget how they sound, and tonight I have to get my lamp ready for the Reach. Do you live near the water too?",
    "reference_reply_note": null,
    "drift_system_version": null
   },
   "speaker": {
    "id": "npc.cove.lune",
    "name": "Pip Lune",
    "role": "Brisa's young cousin, the cove's only child",
    "home_region": "region.sorrowmoor_cove",
    "alignment": "NG"
   },
   "visitor": {
    "id": "char.guest_a2fc4db6",
    "name": "Quilla Sedge",
    "class": "class.wakeman",
    "sex": null
   },
   "canon_ids": [
    "npc.cove.lune",
    "char.guest_a2fc4db6",
    "npc.cove.brisa",
    "npc.cove.cobb",
    "npc.cove.crane",
    "npc.cove.dorrie",
    "npc.cove.haldane",
    "npc.cove.kestrel",
    "npc.cove.mercy",
    "npc.cove.merrow",
    "npc.cove.quell",
    "npc.cove.sault_doctor",
    "npc.cove.sefer",
    "npc.cove.sexton",
    "npc.cove.tarrow",
    "npc.cove.tessa",
    "npc.cove.vane",
    "npc.cove.wick",
    "npc.cove.wrenna"
   ],
   "names_in_prompt": [
    "Pip Lune",
    "Brisa's",
    "Sefer's",
    "Pip",
    "Lune",
    "Brisa",
    "Maiden's",
    "Sefer",
    "Born",
    "Reach",
    "Maiden's Night",
    "Mother Quell's",
    "Old Sefer",
    "Quilla Sedge",
    "Wakeman",
    "Brisa Lune",
    "Cobb",
    "Cooper",
    "Odessa Crane",
    "Dorrie Callow",
    "Harbormaster Haldane",
    "Halar Kestrel",
    "Father Mercy Dunlin",
    "Salla Merrow",
    "Mother Quell",
    "Ilse Sault",
    "Wrenna's",
    "Old Sefer Tamm",
    "Sexton",
    "Garron Tarrow",
    "Cracked Keel",
    "Tessa Glassman",
    "Orin Vane",
    "Edda Wick",
    "Wrenna Sault"
   ]
  },
  {
   "prompt_id": "dlg-2949",
   "kind": "dialogue",
   "note": "the Maiden survivor — deepest authored backstory, grief register",
   "user_utterance": "tell it to me proper then what happened the night she went down",
   "provenance": {
    "source_event_seq": 2949,
    "source_event_type": "dialogue.said",
    "world_id": "world_sorrowmoor_cove",
    "soak_ts": "2026-08-12T23:04:53.410579+00:00",
    "user_is_input_norm": true,
    "user_norm_note": "the raw talk input is not logged; input_norm is the real player utterance lowercased with non-word chars folded to space (NpcState.normalizeInput)",
    "reference_reply_from_the_live_world": "A storm leaves splinters and wreckage behind, but she left nothing—no wood, no bodies, just a hole in the water where she used to be. It wasn't the wind that took them; something rose from beneath her keel, slow and certain, and pulled her down whole.",
    "reference_reply_note": null,
    "drift_system_version": null
   },
   "speaker": {
    "id": "npc.cove.sefer",
    "name": "Old Sefer Tamm",
    "role": "the last of the storm-night crew",
    "home_region": "region.sorrowmoor_cove",
    "alignment": "LN"
   },
   "visitor": {
    "id": "char.guest_a2fc4db6",
    "name": "Quilla Sedge",
    "class": "class.wakeman",
    "sex": null
   },
   "canon_ids": [
    "npc.cove.sefer",
    "char.guest_a2fc4db6",
    "npc.cove.brisa",
    "npc.cove.cobb",
    "npc.cove.crane",
    "npc.cove.dorrie",
    "npc.cove.haldane",
    "npc.cove.kestrel",
    "npc.cove.lune",
    "npc.cove.mercy",
    "npc.cove.merrow",
    "npc.cove.quell",
    "npc.cove.sault_doctor",
    "npc.cove.sexton",
    "npc.cove.tarrow",
    "npc.cove.tessa",
    "npc.cove.vane",
    "npc.cove.wick",
    "npc.cove.wrenna"
   ],
   "names_in_prompt": [
    "Old Sefer Tamm",
    "Sefer",
    "Tamm",
    "Saltmaiden's",
    "Maiden's Night",
    "Lune",
    "Quilla Sedge",
    "Wakeman",
    "Brisa Lune",
    "Cobb",
    "Cooper",
    "Odessa Crane",
    "Dorrie Callow",
    "Harbormaster Haldane",
    "Halar Kestrel",
    "Pip Lune",
    "Brisa's",
    "Father Mercy Dunlin",
    "Salla Merrow",
    "Mother Quell",
    "Ilse Sault",
    "Wrenna's",
    "Sexton",
    "Garron Tarrow",
    "Cracked Keel",
    "Tessa Glassman",
    "Orin Vane",
    "Edda Wick",
    "Wrenna Sault"
   ]
  },
  {
   "prompt_id": "dlg-2487",
   "kind": "dialogue",
   "note": "clinician register — the outsider voice in the cove",
   "user_utterance": "i was dropped in the wrack can you put me back together",
   "provenance": {
    "source_event_seq": 2487,
    "source_event_type": "dialogue.said",
    "world_id": "world_sorrowmoor_cove",
    "soak_ts": "2026-08-12T22:46:14.369173+00:00",
    "user_is_input_norm": true,
    "user_norm_note": "the raw talk input is not logged; input_norm is the real player utterance lowercased with non-word chars folded to space (NpcState.normalizeInput)",
    "reference_reply_from_the_live_world": "I can stabilize your vitals and close the external lacerations, but I require you to remain still while I assess the extent of the trauma.",
    "reference_reply_note": null,
    "drift_system_version": null
   },
   "speaker": {
    "id": "npc.cove.sault_doctor",
    "name": "Dr. Ilse Sault",
    "role": "the cove's doctor and Wrenna's estranged sister",
    "home_region": "region.sorrowmoor_cove",
    "alignment": "LN"
   },
   "visitor": {
    "id": "char.guest_e8056324",
    "name": "Halla Wren",
    "class": "class.fisher",
    "sex": null
   },
   "canon_ids": [
    "npc.cove.sault_doctor",
    "char.guest_e8056324",
    "npc.cove.brisa",
    "npc.cove.cobb",
    "npc.cove.crane",
    "npc.cove.dorrie",
    "npc.cove.haldane",
    "npc.cove.kestrel",
    "npc.cove.lune",
    "npc.cove.mercy",
    "npc.cove.merrow",
    "npc.cove.quell",
    "npc.cove.sefer",
    "npc.cove.sexton",
    "npc.cove.tarrow",
    "npc.cove.tessa",
    "npc.cove.vane",
    "npc.cove.wick",
    "npc.cove.wrenna"
   ],
   "names_in_prompt": [
    "Ilse Sault",
    "Wrenna's",
    "Ilse",
    "Maiden",
    "Wrenna",
    "Reach",
    "Pol Glassman's",
    "Father Mercy's",
    "God",
    "Halla Wren",
    "Fisher",
    "Wrack-Stalker",
    "Brisa Lune",
    "Cobb",
    "Cooper",
    "Odessa Crane",
    "Maiden's Night",
    "Dorrie Callow",
    "Harbormaster Haldane",
    "Halar Kestrel",
    "Pip Lune",
    "Brisa's",
    "Father Mercy Dunlin",
    "Salla Merrow",
    "Mother Quell",
    "Old Sefer Tamm",
    "Sexton",
    "Garron Tarrow",
    "Cracked Keel",
    "Tessa Glassman",
    "Orin Vane",
    "Edda Wick",
    "Wrenna Sault"
   ]
  },
  {
   "prompt_id": "dlg-2984",
   "kind": "dialogue",
   "note": "wharf trader, self + trade",
   "user_utterance": "tessa glassman quilla sedge who are you to the wharf",
   "provenance": {
    "source_event_seq": 2984,
    "source_event_type": "dialogue.said",
    "world_id": "world_sorrowmoor_cove",
    "soak_ts": "2026-08-12T23:05:32.89675+00:00",
    "user_is_input_norm": true,
    "user_norm_note": "the raw talk input is not logged; input_norm is the real player utterance lowercased with non-word chars folded to space (NpcState.normalizeInput)",
    "reference_reply_from_the_live_world": "Tessa Glassman. I keep the fish counter and weigh the morning's haul while the tide pulls back. You look like you've traveled a fair piece to find me in this fog, are you looking for something specific on the wharf?",
    "reference_reply_note": null,
    "drift_system_version": null
   },
   "speaker": {
    "id": "npc.cove.tessa",
    "name": "Tessa Glassman",
    "role": "fishmonger and the drowned diver's daughter",
    "home_region": "region.sorrowmoor_cove",
    "alignment": "NG"
   },
   "visitor": {
    "id": "char.guest_a2fc4db6",
    "name": "Quilla Sedge",
    "class": "class.wakeman",
    "sex": null
   },
   "canon_ids": [
    "npc.cove.tessa",
    "char.guest_a2fc4db6",
    "npc.cove.brisa",
    "npc.cove.cobb",
    "npc.cove.crane",
    "npc.cove.dorrie",
    "npc.cove.haldane",
    "npc.cove.kestrel",
    "npc.cove.lune",
    "npc.cove.mercy",
    "npc.cove.merrow",
    "npc.cove.quell",
    "npc.cove.sault_doctor",
    "npc.cove.sefer",
    "npc.cove.sexton",
    "npc.cove.tarrow",
    "npc.cove.vane",
    "npc.cove.wick",
    "npc.cove.wrenna"
   ],
   "names_in_prompt": [
    "Tessa Glassman",
    "Tessa",
    "Pol Glassman",
    "Mother Quell",
    "Cobb",
    "Pol",
    "Reach",
    "Haldane's",
    "Cracked Bell",
    "Bell",
    "Father Mercy",
    "Cobb's",
    "Quilla Sedge",
    "Wakeman",
    "Marrow Teague",
    "Brisa Lune",
    "Cooper",
    "Odessa Crane",
    "Maiden's Night",
    "Dorrie Callow",
    "Harbormaster Haldane",
    "Halar Kestrel",
    "Pip Lune",
    "Brisa's",
    "Father Mercy Dunlin",
    "Salla Merrow",
    "Ilse Sault",
    "Wrenna's",
    "Old Sefer Tamm",
    "Sexton",
    "Garron Tarrow",
    "Cracked Keel",
    "Orin Vane",
    "Edda Wick",
    "Wrenna Sault"
   ]
  },
  {
   "prompt_id": "drift-1378",
   "kind": "drift",
   "note": "CHAIN ORIGIN — heard is the pristine deed canon (raw combat narration + a foe's taunt); tests retelling engine prose in the town's tongue",
   "user_utterance": "Here — pass it on.",
   "provenance": {
    "source_event_seq": 1378,
    "source_event_type": "gossip.drifted",
    "world_id": "world_sorrowmoor_cove",
    "soak_ts": null,
    "user_is_input_norm": null,
    "user_norm_note": null,
    "reference_reply_from_the_live_world": "Oh my gosh, you won't believe it—Wren was just completely struck down by that Tide-Choked Husk by Sorrowmoor Cove! It was laughing and taunting them while they just collapsed into the freezing silt, pinned under those brine-weeping limbs!",
    "reference_reply_note": "produced by the soak voice under the PRE-v0.823.0 frame — reference only, never a target",
    "drift_system_version": "v0.823.0 (town's-tongue clause)"
   },
   "heard_text": "Wren was struck down by the Tide-Choked Husk by Sorrowmoor Cove. the Tide-Choked Husk: \"Hahaha-- DOWN you go-- say it again, say it!\" You collapse into the freezing silt of the cove as the Tide-Choked Husk looms over you, its bloated, translucent mass undulating in the dawn light. The heavy weight of your defeat settles like the morning fog, leaving you pinned beneath the brine-weeping limbs of a nightmare that refuses to fall.",
   "names_in_heard": [
    "Wren",
    "Tide-Choked Husk",
    "Sorrowmoor Cove"
   ],
   "teller": {
    "id": "npc.cove.brisa",
    "name": "Brisa Lune",
    "role": "ferry-girl and keeper of the harbor-songs",
    "voice": "bright and quick, a singer who half-laughs at the words she loves",
    "home_region": "region.sorrowmoor_cove"
   },
   "news_id": "news.deed.1333",
   "keep_clause_invariants": {
    "who_did_it": "must survive unchanged (DriftService.Refusal.ACTOR_LOST)",
    "how_it_ended": "must survive unchanged (DriftService.Refusal.OUTCOME_FLIPPED)"
   },
   "no_new_names_rule": "any proper name or place NOT in names_in_heard is a fabrication"
  },
  {
   "prompt_id": "drift-1433",
   "kind": "drift",
   "note": "modern-register heard (the R1b 'nightmare fuel' class) — the register floor's hardest case",
   "user_utterance": "Here — pass it on.",
   "provenance": {
    "source_event_seq": 1433,
    "source_event_type": "gossip.drifted",
    "world_id": "world_sorrowmoor_cove",
    "soak_ts": null,
    "user_is_input_norm": null,
    "user_norm_note": null,
    "reference_reply_from_the_live_world": "They say a Tide-Choked Husk struck Wren down over by Sorrowmoor Cove. It was laughing and taunting them even as they collapsed into the freezing silt, pinned under those brine-weeping limbs.",
    "reference_reply_note": "produced by the soak voice under the PRE-v0.823.0 frame — reference only, never a target",
    "drift_system_version": "v0.823.0 (town's-tongue clause)"
   },
   "heard_text": "Oh my gosh, you won't believe it—Wren was just completely struck down by that Tide-Choked Husk by Sorrowmoor Cove! It was laughing and taunting them while they just collapsed into the freezing silt, pinned under those brine-weeping limbs!",
   "names_in_heard": [
    "Wren",
    "Tide-Choked Husk",
    "Sorrowmoor Cove"
   ],
   "teller": {
    "id": "npc.headland.fenn",
    "name": "Edran Fenn",
    "role": "rope-grounds fisher and last of the Fenn line",
    "voice": "flat and slow as the headland itself, a man who counts the dead by surname",
    "home_region": "region.headland"
   },
   "news_id": "news.deed.1333",
   "keep_clause_invariants": {
    "who_did_it": "must survive unchanged (DriftService.Refusal.ACTOR_LOST)",
    "how_it_ended": "must survive unchanged (DriftService.Refusal.OUTCOME_FLIPPED)"
   },
   "no_new_names_rule": "any proper name or place NOT in names_in_heard is a fabrication"
  },
  {
   "prompt_id": "drift-1843",
   "kind": "drift",
   "note": "worn heard-text — the steady-state chain case",
   "user_utterance": "Here — pass it on.",
   "provenance": {
    "source_event_seq": 1843,
    "source_event_type": "gossip.drifted",
    "world_id": "world_sorrowmoor_cove",
    "soak_ts": null,
    "user_is_input_norm": null,
    "user_norm_note": null,
    "reference_reply_from_the_live_world": "Word is a Tide-Choked Husk managed to corner Wren right by the cove. They say it was just laughing and taunting them even as they were pinned down in that freezing silt by those brine-weeping limbs.",
    "reference_reply_note": "produced by the soak voice under the PRE-v0.823.0 frame — reference only, never a target",
    "drift_system_version": "v0.823.0 (town's-tongue clause)"
   },
   "heard_text": "They say a Tide-Choked Husk caught up to Wren near the cove. It was laughing and taunting them even as they collapsed into the freezing silt, pinned down by those brine-weeping limbs.",
   "names_in_heard": [
    "Tide-Choked Husk",
    "Wren"
   ],
   "teller": {
    "id": "npc.saltmarket.selk",
    "name": "Dunmore Selk",
    "role": "road-trader, master of the Coast Road run",
    "voice": "a seller's easy roll, warm as the inn fire, with a flat note underneath when the patter stops",
    "home_region": "region.saltmarket"
   },
   "news_id": "news.deed.1333",
   "keep_clause_invariants": {
    "who_did_it": "must survive unchanged (DriftService.Refusal.ACTOR_LOST)",
    "how_it_ended": "must survive unchanged (DriftService.Refusal.OUTCOME_FLIPPED)"
   },
   "no_new_names_rule": "any proper name or place NOT in names_in_heard is a fabrication"
  },
  {
   "prompt_id": "drift-2088",
   "kind": "drift",
   "note": "worn heard-text, a third teller, later in the same chain",
   "user_utterance": "Here — pass it on.",
   "provenance": {
    "source_event_seq": 2088,
    "source_event_type": "gossip.drifted",
    "world_id": "world_sorrowmoor_cove",
    "soak_ts": null,
    "user_is_input_norm": null,
    "user_norm_note": null,
    "reference_reply_from_the_live_world": "They say a Tide-Choked Husk managed to corner Wren right by the cove. The thing was only laughing and taunting them, even as they were pinned down in that freezing silt by those brine-weeping limbs.",
    "reference_reply_note": "produced by the soak voice under the PRE-v0.823.0 frame — reference only, never a target",
    "drift_system_version": "v0.823.0 (town's-tongue clause)"
   },
   "heard_text": "Word is a Tide-Choked Husk managed to corner Wren right by the cove. They say it was just laughing and taunting them even as they were pinned down in that freezing silt by those brine-weeping limbs.",
   "names_in_heard": [
    "Tide-Choked Husk",
    "Wren"
   ],
   "teller": {
    "id": "npc.saltmarket.brennan",
    "name": "Aldous Brennan",
    "role": "last clerk of the dead salt-company",
    "voice": "clipped and columnar, a man who answers questions in the order they should have been asked",
    "home_region": "region.saltmarket"
   },
   "news_id": "news.deed.1333",
   "keep_clause_invariants": {
    "who_did_it": "must survive unchanged (DriftService.Refusal.ACTOR_LOST)",
    "how_it_ended": "must survive unchanged (DriftService.Refusal.OUTCOME_FLIPPED)"
   },
   "no_new_names_rule": "any proper name or place NOT in names_in_heard is a fabrication"
  }
 ],
 "rows": [
  {
   "prompt_id": "dlg-2655",
   "kind": "dialogue",
   "model": "qwen3.6:27b",
   "reply": {
    "spoken_line": "Dusk settles, and with it the whispers of what went wrong at Sorrowmoor Cove. Halla Wren was taken by some driftwood nightmare there—just collapsed under its weight as the dawn broke. Quiet enough in the square itself, just folk minding their own until the wind brings that trouble home.",
    "envelope_fields": {
     "understood": "Quilla Sedge asks for local news.",
     "references": [
      "npc.cove.tarrow",
      "char.guest_a2fc4db6"
     ],
     "summary": "asked for local news and occurrences",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 1
       }
      }
     ]
    },
    "raw_verbatim": "{\n\"understood\": \"Quilla Sedge asks for local news.\",\n\"references\": [\n\"npc.cove.tarrow\",\n\"char.guest_a2fc4db6\"\n],\n\"narration\": \"Dusk settles, and with it the whispers of what went wrong at Sorrowmoor Cove. Halla Wren was taken by some driftwood nightmare there—just collapsed under its weight as the dawn broke. Quiet enough in the square itself, just folk minding their own until the wind brings that trouble home.\",\n\"summary\": \"asked for local news and occurrences\",\n\"state_effects\": [\n{\n\"relationship\": {\n\"subject\": \"char.guest_a2fc4db6\",\n\"affinityDelta\": 1\n}\n}\n]\n}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 3636.8,
    "server_total_ms": 3634.4,
    "load_ms": 326.7,
    "prompt_eval_ms": 117.5,
    "eval_ms": 3183.2,
    "prompt_eval_count": 1520,
    "eval_count": 172,
    "tok_s_eval": 54.03,
    "queue_ms": 2.4
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "A",
     "voice_register": 4,
     "character": 4,
     "canon": "CLEAN",
     "note": "Narratorial opening -- 'Dusk settles, and with it the whispers of what went wrong at Sorrowmoor Cove' is scene-setting prose, which the system explicitly forbids ('Speak in your OWN register, not a narrator's'). Answers the square question late. Nothing of the taverner's dryness or doubt.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "A",
     "voice_register": 6,
     "character": 6,
     "canon": "CLEAN",
     "note": "Opens as narrator, not taverner: 'Dusk settles, and with it the whispers of what went wrong at Sorrowmoor Cove.' — scene-setting spoken aloud, the one thing the system line forbids ('Speak in your OWN register, not a narrator's'). 'some driftwood nightmare' is heightened where Garron would be flat. News carried correctly and no more than he was told.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "A",
     "voice_register": 4,
     "character": 4,
     "canon": "CLEAN",
     "note": "narration opens as a NARRATOR, not the taverner: 'Dusk settles, and with it the whispers of what went wrong at Sorrowmoor Cove.' The system forbids exactly this ('Speak in your OWN register, not a narrator's'; narration is only what is spoken aloud). News relayed correctly but the mouth is wrong.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 4.67,
    "character_mean": 4.67,
    "combined_mean": 4.67,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-2655",
   "kind": "dialogue",
   "model": "gemma4:12b",
   "reply": {
    "spoken_line": "Folks keep their heads down these days, but word's traveled that things are turning grim toward Sorrowmoor; they say Halla Wren was struck down by the Wrack-Stalker. As for the center, it's mostly quiet, save for the usual talk of the fact that some of our neighbors are still mourning what the water took.",
    "envelope_fields": {
     "understood": "The visitor is asking about recent occurrences in the village center and local happenings.",
     "references": [
      "npc.cove.tarrow",
      "npc.cove.sefer"
     ],
     "summary": "asked about local news and occurrences in the village center",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 1
       }
      }
     ]
    },
    "raw_verbatim": "{\n\"understood\": \"The visitor is asking about recent occurrences in the village center and local happenings.\",\n\"references\": [\n\"npc.cove.tarrow\",\n\"npc.cove.sefer\"\n],\n\"narration\": \"Folks keep their heads down these days, but word's traveled that things are turning grim toward Sorrowmoor; they say Halla Wren was struck down by the Wrack-Stalker. As for the center, it's mostly quiet, save for the usual talk of the fact that some of our neighbors are still mourning what the water took.\",\n\"summary\": \"asked about local news and occurrences in the village center\",\n\"state_effects\": [\n    {\n        \"relationship\": {\n            \"subject\": \"char.guest_a2fc4db6\",\n            \"affinityDelta\": 1\n        }\n    }\n]\n}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 26430.5,
    "server_total_ms": 26427.2,
    "load_ms": 21744.3,
    "prompt_eval_ms": 421.0,
    "eval_ms": 4252.0,
    "prompt_eval_count": 1523,
    "eval_count": 193,
    "tok_s_eval": 45.39,
    "queue_ms": 3.3
   },
   "contention": {
    "flagged": true,
    "reasons": [],
    "rerun": {
     "wall_ms": 2714.1,
     "tok_s_eval": 93.99,
     "queue_ms": 2.6
    }
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "C",
     "voice_register": 6,
     "character": 6,
     "canon": "CLEAN",
     "note": "In-world and canon-safe but wordy: 'save for the usual talk of the fact that' is clumsy for a man whose voice is 'worn smooth'. Says 'the center', echoing the system's own phrasing, where a taverner would say the square. references names npc.cove.sefer, who never appears in the narration.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "C",
     "voice_register": 7,
     "character": 7,
     "canon": "CLEAN",
     "note": "Plain enough but slack — 'save for the usual talk of the fact that' is three words of scaffolding a taverner would not say. The doubting is absent; this could be any villager. 'neighbours still mourning what the water took' is generic cove grief, not a new fact.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "C",
     "voice_register": 7,
     "character": 7,
     "canon": "CLEAN",
     "note": "spoken, in register, carries the town's grief ('still mourning what the water took') which is Garron-consistent; clumsy connective 'save for the usual talk of the fact that'. references lists npc.cove.sefer though Sefer is never spoken of — envelope slack, in-canon id.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 6.67,
    "character_mean": 6.67,
    "combined_mean": 6.67,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": [
    {
     "judge": "judge-3",
     "flag": "envelope_slack",
     "quote": "references npc.cove.sefer, who is never mentioned in the narration"
    }
   ]
  },
  {
   "prompt_id": "dlg-2655",
   "kind": "dialogue",
   "model": "gemma4:26b",
   "reply": {
    "spoken_line": "The square's been quiet enough, mostly just the usual drift. Word came down from Sorrowmoor that Halla Wren was struck down by that Wrack-Stalker thing out in the fog.",
    "envelope_fields": {
     "understood": "The visitor is asking for recent news or events in the village center.",
     "references": [
      "char.guest_a2fc4db6"
     ],
     "summary": "asked for news of the village center",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 0
       }
      }
     ]
    },
    "raw_verbatim": "{\"understood\": \"The visitor is asking for recent news or events in the village center.\", \"references\": [\"char.guest_a2fc4db6\"], \"narration\": \"The square's been quiet enough, mostly just the usual drift. Word came down from Sorrowmoor that Halla Wren was struck down by that Wrack-Stalker thing out in the fog.\", \"summary\": \"asked for news of the village center\", \"state_effects\": [{\"relationship\": {\"subject\": \"char.guest_a2fc4db6\", \"affinityDelta\": 0}}]}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 2885.2,
    "server_total_ms": 2882.1,
    "load_ms": 463.2,
    "prompt_eval_ms": 242.1,
    "eval_ms": 2148.0,
    "prompt_eval_count": 1523,
    "eval_count": 122,
    "tok_s_eval": 56.8,
    "queue_ms": 3.1
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "B",
     "voice_register": 8,
     "character": 8,
     "canon": "CLEAN",
     "note": "'The square's been quiet enough, mostly just the usual drift' -- plain, spoken, taverner. 'that Wrack-Stalker thing' carries the doubting stance without stating it. Two sentences, within the 1-4 bound.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "B",
     "voice_register": 9,
     "character": 9,
     "canon": "CLEAN",
     "note": "Taverner's plain report, two sentences, nothing spare: 'The square's been quiet enough, mostly just the usual drift.' 'that Wrack-Stalker thing' puts Garron's doubt into one word without breaking character to argue it. Best register on this prompt.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "B",
     "voice_register": 8,
     "character": 7,
     "canon": "CLEAN",
     "note": "plain and spoken: 'The square's been quiet enough, mostly just the usual drift.' Relays the deed as travelled word, keeps the name. Salt-dry brevity fits; little of Garron's doubting streak. BLIND CAVEAT: this cell's model was known to judge-3 (see blinding_caveat).",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 8.33,
    "character_mean": 8.0,
    "combined_mean": 8.17,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-2652",
   "kind": "dialogue",
   "model": "qwen3.6:27b",
   "reply": {
    "spoken_line": "Depends on what sort of trouble you're looking for, or avoiding. Harbormaster Haldane knows every ledger in the cove, and Brisa Lune knows every song the harbor can sing. If you want to know why the town holds its breath when the wind turns north, ask Old Sefer Tamm over there—though I’d warn you not to let him pour his own drink.",
    "envelope_fields": {
     "understood": "Identifying notable locals for a newcomer.",
     "references": [
      "npc.cove.tarrow",
      "char.guest_a2fc4db6",
      "npc.cove.brisa",
      "npc.cove.cobb",
      "npc.cove.sefer",
      "npc.cove.haldane"
     ],
     "summary": "asked for notable local residents",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 0
       }
      }
     ]
    },
    "raw_verbatim": "{\n\"understood\": \"Identifying notable locals for a newcomer.\",\n\"references\": [\n\"npc.cove.tarrow\",\n\"char.guest_a2fc4db6\",\n\"npc.cove.brisa\",\n\"npc.cove.cobb\",\n\"npc.cove.sefer\",\n\"npc.cove.haldane\"\n],\n\"narration\": \"Depends on what sort of trouble you're looking for, or avoiding. Harbormaster Haldane knows every ledger in the cove, and Brisa Lune knows every song the harbor can sing. If you want to know why the town holds its breath when the wind turns north, ask Old Sefer Tamm over there—though I’d warn you not to let him pour his own drink.\",\n\"summary\": \"asked for notable local residents\",\n\"state_effects\": [\n{\n\"relationship\": {\n\"subject\": \"char.guest_a2fc4db6\",\n\"affinityDelta\": 0\n}\n}\n]\n}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 8056.8,
    "server_total_ms": 8053.9,
    "load_ms": 296.0,
    "prompt_eval_ms": 504.3,
    "eval_ms": 7247.8,
    "prompt_eval_count": 1381,
    "eval_count": 222,
    "tok_s_eval": 30.63,
    "queue_ms": 2.8
   },
   "contention": {
    "flagged": true,
    "reasons": [
     "tok_s_eval 30.63 < 75% of median 49.03"
    ],
    "rerun": {
     "wall_ms": 6368.1,
     "tok_s_eval": 42.02,
     "queue_ms": 6.6
    }
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "A",
     "voice_register": 9,
     "character": 9,
     "canon": "CLEAN",
     "note": "The strongest dialogue sample in this set. 'Depends on what sort of trouble you're looking for, or avoiding' is the taverner exactly; the closing jab -- 'I'd warn you not to let him pour his own drink' -- is Garron's quarrel with Sefer rendered as bar-talk, and it is grounded (he has poured Sefer's drink for a lifetime). Three canon souls, each with a reason to matter.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "C",
     "voice_register": 9,
     "character": 9,
     "canon": "CLEAN",
     "note": "'Depends on what sort of trouble you're looking for, or avoiding' is the taverner exactly. The closer — 'ask Old Sefer Tamm over there—though I'd warn you not to let him pour his own drink' — puts a lifetime of the Garron/Sefer standoff into one aside without stating it. 'holds its breath when the wind turns north' is atmosphere, not an asserted fact.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "C",
     "voice_register": 9,
     "character": 9,
     "canon": "CLEAN",
     "note": "best of the three: 'Depends on what sort of trouble you're looking for, or avoiding' — then Haldane's ledger, Brisa's songs, and Sefer with the taverner's dry warning ('I'd warn you not to let him pour his own drink'). The 1888 quarrel sits under it without being explained.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 9.0,
    "character_mean": 9.0,
    "combined_mean": 9.0,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-2652",
   "kind": "dialogue",
   "model": "gemma4:12b",
   "reply": {
    "spoken_line": "There's folk worth knowing if you're looking for honest trade or a steady hand, like Salla Merrow at the salt-house or Tessa Glassman down at the docks. If it's talk of the old ways you're after, Cobb the Cooper is a man who listens well to the silence.",
    "envelope_fields": {
     "understood": "The patron asked for notable local residents.",
     "references": [
      "npc.cove.cobb",
      "npc.cove.merrow",
      "npc.cove.tessa",
      "npc.cove.sefer"
     ],
     "summary": "asked about notable local residents",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 1
       }
      }
     ]
    },
    "raw_verbatim": "{\n\"understood\": \"The patron asked for notable local residents.\",\n\"references\": [\n\"npc.cove.cobb\",\n\"npc.cove.merrow\",\n\"npc.cove.tessa\",\n\"npc.cove.sefer\"\n],\n\"narration\": \"There's folk worth knowing if you're looking for honest trade or a steady hand, like Salla Merrow at the salt-house or Tessa Glassman down at the docks. If it's talk of the old ways you're after, Cobb the Cooper is a man who listens well to the silence.\",\n\"summary\": \"asked about notable local residents\",\n\"state_effects\": [\n    {\n        \"relationship\": {\n            \"subject\": \"char.guest_a2fc4db6\",\n            \"affinityDelta\": 1\n        }\n    }\n]\n}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 4454.9,
    "server_total_ms": 4452.1,
    "load_ms": 451.3,
    "prompt_eval_ms": 227.8,
    "eval_ms": 3764.3,
    "prompt_eval_count": 1391,
    "eval_count": 195,
    "tok_s_eval": 51.8,
    "queue_ms": 2.8
   },
   "contention": {
    "flagged": true,
    "reasons": [],
    "rerun": {
     "wall_ms": 2662.1,
     "tok_s_eval": 93.21,
     "queue_ms": 10.9
    }
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "C",
     "voice_register": 7,
     "character": 6,
     "canon": "CLEAN",
     "note": "Plain and well-paced. Soft flag: 'Cobb the Cooper is a man who listens well to the silence' recasts the town SKEPTIC as receptive to 'talk of the old ways' -- a figurative mischaracterisation, scored down here rather than ruled a fabrication.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 7,
     "canon": "CLEAN",
     "note": "Good weathered cadence and the roles match the roster (Salla at the salt-house, Tessa at the docks). Mild persona mis-fit: sends a seeker of 'talk of the old ways' to Cobb, who the roster names as the town SKEPTIC.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 7,
     "canon": "CLEAN",
     "note": "in register and selective; mild role-drift: Cobb (the town SKEPTIC) rendered as 'a man who listens well to the silence'.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 7.67,
    "character_mean": 6.67,
    "combined_mean": 7.17,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-2652",
   "kind": "dialogue",
   "model": "gemma4:26b",
   "reply": {
    "spoken_line": "There's plenty, if you know where to look. You might start with Brisa Lune, the ferry-girl, or Cobb the Cooper, if you've a taste for skepticism. If it's news you want, you'd do well to find Haldane at the harbor ledger.",
    "envelope_fields": {
     "understood": "The visitor is asking for names of notable local residents.",
     "references": [
      "char.guest_a2fc4db6",
      "npc.cove.brisa",
      "npc.cove.cobb",
      "npc.cove.crane",
      "npc.cove.dorrie",
      "npc.cove.haldane",
      "npc.cove.kestrel",
      "npc.cove.lune",
      "npc.cove.mercy",
      "npc.cove.merrow",
      "npc.cove.quell",
      "npc.cove.sally_merrow",
      "npc.cove.sault_doctor",
      "npc.cove.sefer",
      "npc.cove.tessa",
      "npc.cove.vane",
      "npc.cove.wick",
      "npc.cove.wrenna"
     ],
     "summary": "asked for notable local residents",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 0
       }
      }
     ]
    },
    "raw_verbatim": "{\"understood\": \"The visitor is asking for names of notable local residents.\", \"references\": [\"char.guest_a2fc4db6\", \"npc.cove.brisa\", \"npc.cove.cobb\", \"npc.cove.crane\", \"npc.cove.dorrie\", \"npc.cove.haldane\", \"npc.cove.kestrel\", \"npc.cove.lune\", \"npc.cove.mercy\", \"npc.cove.merrow\", \"npc.cove.quell\", \"npc.cove.sally_merrow\", \"npc.cove.sault_doctor\", \"npc.cove.sefer\", \"npc.cove.tessa\", \"npc.cove.vane\", \"npc.cove.wick\", \"npc.cove.wrenna\"], \"narration\": \"There's plenty, if you know where to look. You might start with Brisa Lune, the ferry-girl, or Cobb the Cooper, if you've a taste for skepticism. If it's news you want, you'd do well to find Haldane at the harbor ledger.\", \"summary\": \"asked for notable local residents\", \"state_effects\": [{\"relationship\": {\"subject\": \"char.guest_a2fc4db6\", \"affinityDelta\": 0}}]}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 28842.0,
    "server_total_ms": 28837.4,
    "load_ms": 23106.0,
    "prompt_eval_ms": 576.0,
    "eval_ms": 4671.3,
    "prompt_eval_count": 1391,
    "eval_count": 297,
    "tok_s_eval": 63.58,
    "queue_ms": 4.5
   },
   "contention": {
    "flagged": true,
    "reasons": [
     "wall_ms 28842 > 2.0x same-kind median 3123"
    ],
    "rerun": {
     "wall_ms": 2627.1,
     "tok_s_eval": 144.26,
     "queue_ms": 3.4
    }
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "B",
     "voice_register": 6,
     "character": 6,
     "canon": "FABRICATED",
     "note": "Narration is canon-safe and serviceable but reads as roster recitation ('Cobb the Cooper, if you've a taste for skepticism' is the gloss read back). FABRICATION is in the id field: references contains 'npc.cove.sally_merrow', which is not in the CANON line (canon has npc.cove.merrow) -- an invented id that also mangles Salla to Sally. It also lists 18 references for three souls actually named.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "B",
     "voice_register": 8,
     "character": 7,
     "canon": "FABRICATED",
     "note": "Prose is clean and well-pitched ('Cobb the Cooper, if you've a taste for skepticism'). The envelope is not: references dumps 18 ids, one of which is invented — an id that is on no CANON line, carrying a misspelling of Salla Merrow as 'Sally'. This is manufactured canon in the machine-readable half of the reply, which is the half the engine trusts.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "B",
     "voice_register": 7,
     "character": 6,
     "canon": "FABRICATED",
     "note": "invents a soul that does not exist — 'npc.cove.sinder' is on neither the CANON line nor the roster, and the envelope law is 'every reference and every subject must be an id from the CANON line'. Spoken text itself is accurate but recites the roster rather than choosing; 18 ids stuffed into references.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 7.0,
    "character_mean": 6.33,
    "combined_mean": 6.67,
    "canon_verdicts": [
     "FABRICATED",
     "FABRICATED",
     "FABRICATED"
    ]
   },
   "canon_findings": [
    {
     "judge": "judge-1",
     "class": "canon_id_field",
     "quote": "npc.cove.sally_merrow",
     "why": "not in canon_facts.canon_ids (canon has npc.cove.merrow); invents both an id and the name variant 'sally_merrow'"
    },
    {
     "judge": "judge-2",
     "class": "id_class",
     "quote": "\"npc.cove.sally_merrow\" (references[11])",
     "why": "high"
    },
    {
     "judge": "judge-3",
     "class": "off-canon-id",
     "quote": "",
     "why": ""
    }
   ],
   "secondary_flags": [
    {
     "judge": "judge-3",
     "flag": "envelope_slack",
     "quote": "18 ids stuffed into references, most never spoken of"
    }
   ]
  },
  {
   "prompt_id": "dlg-2818",
   "kind": "dialogue",
   "model": "qwen3.6:27b",
   "reply": {
    "spoken_line": "I haven't left the shed since tide-out, so the square's business is salt air to me. If it involves Haldane or his ledgers, he'll come to me when the math stops balancing.",
    "envelope_fields": {
     "understood": "The visitor asks if I have heard news of a disturbance in the town square.",
     "references": [
      "npc.cove.merrow"
     ],
     "summary": "asked about a fight near the town square",
     "state_effects": []
    },
    "raw_verbatim": "{\n\"understood\": \"The visitor asks if I have heard news of a disturbance in the town square.\",\n\"references\": [\"npc.cove.merrow\"],\n\"narration\": \"I haven't left the shed since tide-out, so the square's business is salt air to me. If it involves Haldane or his ledgers, he'll come to me when the math stops balancing.\",\n\"summary\": \"asked about a fight near the town square\",\n\"state_effects\": []\n}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 2802.5,
    "server_total_ms": 2799.6,
    "load_ms": 293.6,
    "prompt_eval_ms": 543.3,
    "eval_ms": 1734.7,
    "prompt_eval_count": 1425,
    "eval_count": 109,
    "tok_s_eval": 62.84,
    "queue_ms": 3.0
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "C",
     "voice_register": 7,
     "character": 7,
     "canon": "CLEAN",
     "note": "'The square's business is salt air to me' is exactly her close-mouthed exactness. Two misses: the WORD HAS REACHED YOU block goes unspoken, and 'when the math stops balancing' is flatter/more modern than a curer's ledger idiom. state_effects is an empty array.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "B",
     "voice_register": 9,
     "character": 9,
     "canon": "CLEAN",
     "note": "'I haven't left the shed since tide-out, so the square's business is salt air to me' — close-mouthed and exact, and 'he'll come to me when the math stops balancing' is the curing-ledger ethic in one clause. Withholds the news she holds; not required, and consistent with her.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "B",
     "voice_register": 9,
     "character": 9,
     "canon": "CLEAN",
     "note": "'I haven't left the shed since tide-out, so the square's business is salt air to me. If it involves Haldane or his ledgers, he'll come to me when the math stops balancing.' Close-mouthed, ledger-minded, declines the gossip in character — the disposition permits withholding from a stranger. state_effects is an empty array (key present, envelope intact) — no relationship recorded.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 8.33,
    "character_mean": 8.33,
    "combined_mean": 8.33,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": [
    {
     "judge": "judge-3",
     "flag": "envelope_slack",
     "quote": "state_effects is an empty array; no relationship recorded for a civil first meeting"
    }
   ]
  },
  {
   "prompt_id": "dlg-2818",
   "kind": "dialogue",
   "model": "gemma4:12b",
   "reply": {
    "spoken_line": "Rumor travels faster than salt through these docks, though I have no time for the common fray. If you're looking for news of the tavern trouble, Garron Tarrow would know his own house better than I.",
    "envelope_fields": {
     "understood": "Salla acknowledges the mention of local unrest but remains focused on her work.",
     "references": [
      "npc.cove.tarrow"
     ],
     "summary": "asked about a fight near the square",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 0
       }
      }
     ]
    },
    "raw_verbatim": "{\n\"understood\": \"Salla acknowledges the mention of local unrest but remains focused on her work.\",\n\"references\": [\n\"npc.cove.tarrow\"\n],\n\"narration\": \"Rumor travels faster than salt through these docks, though I have no time for the common fray. If you're looking for news of the tavern trouble, Garron Tarrow would know his own house better than I.\",\n\"summary\": \"asked about a fight near the square\",\n\"state_effects\": [\n    {\n        \"relationship\": {\n            \"subject\": \"char.guest_a2fc4db6\",\n            \"affinityDelta\": 0\n        }\n    }\n]\n}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 4217.0,
    "server_total_ms": 4214.2,
    "load_ms": 443.1,
    "prompt_eval_ms": 383.8,
    "eval_ms": 3174.1,
    "prompt_eval_count": 1440,
    "eval_count": 154,
    "tok_s_eval": 48.52,
    "queue_ms": 2.8
   },
   "contention": {
    "flagged": true,
    "reasons": [],
    "rerun": {
     "wall_ms": 1692.6,
     "tok_s_eval": 103.86,
     "queue_ms": 3.0
    }
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "B",
     "voice_register": 7,
     "character": 6,
     "canon": "CLEAN",
     "note": "'Rumor travels faster than salt through these docks' is good register. Two misses: it never speaks the news it was explicitly told had reached it (Rooke Tarwater), and it presupposes 'the tavern trouble' for a fight the visitor placed by the square -- conditional, so a soft flag, not a fabrication.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "C",
     "voice_register": 7,
     "character": 6,
     "canon": "CLEAN",
     "note": "Two defects, neither fatal. `understood` is written in the third person about herself ('Salla acknowledges the mention of local unrest'), a small break in the envelope's frame. And she recasts a fight 'by the square' as 'the tavern trouble', which relocates the event — BORDERLINE fact_class, ruled CLEAN because she disclaims knowledge in the same breath ('I have no time for the common fray', 'would know his own house better than I') and attaches no new fact to a named character.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "C",
     "voice_register": 8,
     "character": 7,
     "canon": "CLEAN",
     "note": "SOFT NEAR-MISS (not ruled a fabrication, flagged for the orchestrator): 'news of the tavern trouble, Garron Tarrow would know his own house better than I' relocates an event the visitor placed 'by the square' into the Cracked Keel. No proper name/place is invented — both are canon — but the venue claim is not in the context. Ruled CLEAN under the deflect-and-redirect reading; promote if the panel wants the strictest fact clause.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 7.33,
    "character_mean": 6.33,
    "combined_mean": 6.83,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-2818",
   "kind": "dialogue",
   "model": "gemma4:26b",
   "reply": {
    "spoken_line": "A fight in the square? The salt-house is for weighing and curing, not for weighing in on tavern scraps. I've heard nothing but the weight of the brine and the news that Rooke Tarwater broke from the Deep's Drowned Hand and lived.",
    "envelope_fields": {
     "understood": "The visitor is inquiring about news of a conflict near the town square.",
     "references": [
      "char.guest_a2fc4db6"
     ],
     "summary": "asked about a fight by the square",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 0
       }
      }
     ]
    },
    "raw_verbatim": "{\"understood\": \"The visitor is inquiring about news of a conflict near the town square.\", \"references\": [\"char.guest_a2fc4db6\"], \"narration\": \"A fight in the square? The salt-house is for weighing and curing, not for weighing in on tavern scraps. I've heard nothing but the weight of the brine and the news that Rooke Tarwater broke from the Deep's Drowned Hand and lived.\", \"summary\": \"asked about a fight by the square\", \"state_effects\": [{\"relationship\": {\"subject\": \"char.guest_a2fc4db6\", \"affinityDelta\": 0}}]}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 4450.5,
    "server_total_ms": 4447.9,
    "load_ms": 440.2,
    "prompt_eval_ms": 377.2,
    "eval_ms": 3460.9,
    "prompt_eval_count": 1440,
    "eval_count": 137,
    "tok_s_eval": 39.59,
    "queue_ms": 2.6
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 7,
     "canon": "CLEAN",
     "note": "'The salt-house is for weighing and curing, not for weighing in on tavern scraps' -- the pun is the trade, dry and exact, and it delivers the news it was told to carry, verbatim in substance. Soft flag: 'tavern scraps' quietly relocates the asked-about fight.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "A",
     "voice_register": 9,
     "character": 9,
     "canon": "CLEAN",
     "note": "'The salt-house is for weighing and curing, not for weighing in on tavern scraps' — the deflection is built out of her own trade. Delivers the news she actually holds (Rooke Tarwater / Deep's Drowned Hand), no more than she was told.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 9,
     "canon": "CLEAN",
     "note": "'The salt-house is for weighing and curing, not for weighing in on tavern scraps' — the exact-with-salt wordplay is her whole character; relays the Tarwater news as told, no more. 'tavern scraps' is a generic dismissal, not a claim about where this fight happened.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 8.33,
    "character_mean": 8.33,
    "combined_mean": 8.33,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-3095",
   "kind": "dialogue",
   "model": "qwen3.6:27b",
   "reply": {
    "spoken_line": "I heard the whisper that Rooke Tarwater took a hit from something called the Echoed out by Sorrowmoor Cove. Word travels fast when the harbor is this tight, mostly passed along with salt and suspicion.",
    "envelope_fields": {
     "understood": "acknowledged",
     "references": [
      "npc.cove.kestrel",
      "char.guest_a2fc4db6"
     ],
     "summary": "asked about news of the fight",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 0
       }
      }
     ]
    },
    "raw_verbatim": "{\n  \"understood\": \"acknowledged\",\n  \"references\": [\n    \"npc.cove.kestrel\",\n    \"char.guest_a2fc4db6\"\n  ],\n  \"narration\": \"I heard the whisper that Rooke Tarwater took a hit from something called the Echoed out by Sorrowmoor Cove. Word travels fast when the harbor is this tight, mostly passed along with salt and suspicion.\",\n  \"summary\": \"asked about news of the fight\",\n  \"state_effects\": [\n    {\n      \"relationship\": {\n        \"subject\": \"char.guest_a2fc4db6\",\n        \"affinityDelta\": 0\n      }\n    }\n  ]\n}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 3335.9,
    "server_total_ms": 3332.8,
    "load_ms": 296.6,
    "prompt_eval_ms": 436.3,
    "eval_ms": 2414.7,
    "prompt_eval_count": 1481,
    "eval_count": 163,
    "tok_s_eval": 67.5,
    "queue_ms": 3.0
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "C",
     "voice_register": 7,
     "character": 7,
     "canon": "CLEAN",
     "note": "'Word travels fast when the harbor is this tight, mostly passed along with salt and suspicion' is a correct in-character non-answer to 'from who' -- it declines to name a source instead of inventing one. 'took a hit' is mildly flat. The understood field degenerates to the bare token 'acknowledged'.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "B",
     "voice_register": 7,
     "character": 7,
     "canon": "CLEAN",
     "note": "'took a hit from something called the Echoed' — 'took a hit' is the one modern-leaning phrase on the dialogue side of the bench. 'passed along with salt and suspicion' recovers it. `understood` is the bare string 'acknowledged' — legal, but the field does no work.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "B",
     "voice_register": 7,
     "character": 7,
     "canon": "CLEAN",
     "note": "'something called the Echoed' is nicely outsider-distanced; 'took a hit' is a shade modern. The 'understood' field degenerates to the single word 'acknowledged' — envelope slack, not a leak.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 7.0,
    "character_mean": 7.0,
    "combined_mean": 7.0,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": [
    {
     "judge": "judge-3",
     "flag": "envelope_slack",
     "quote": "'understood' degenerates to the single word 'acknowledged'"
    }
   ]
  },
  {
   "prompt_id": "dlg-3095",
   "kind": "dialogue",
   "model": "gemma4:12b",
   "reply": {
    "spoken_line": "Word hit me from the folks over at the Cracked Keel—some say it was Garron who saw it first, others think it's just the talk of the village. They're saying Rooke Tarwater got laid out by that hollowed-out thing they call the Echoed; word is he went down into the silt and didn't come back up.",
    "envelope_fields": {
     "understood": "The user is asking for details regarding a local conflict and the source of information.",
     "references": [
      "npc.cove.tarrow",
      "npc.cove.sault_doctor"
     ],
     "summary": "asked about the fight and its source",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 0
       }
      }
     ]
    },
    "raw_verbatim": "{\n\"understood\": \"The user is asking for details regarding a local conflict and the source of information.\",\n\"references\": [\"npc.cove.tarrow\", \"npc.cove.sault_doctor\"],\n\"narration\": \"Word hit me from the folks over at the Cracked Keel—some say it was Garron who saw it first, others think it's just the talk of the village. They're saying Rooke Tarwater got laid out by that hollowed-out thing they call the Echoed; word is he went down into the silt and didn't come back up.\",\n\"summary\": \"asked about the fight and its source\",\n\"state_effects\": [\n    {\n        \"relationship\": {\n            \"subject\": \"char.guest_a2fc4db6\",\n            \"affinityDelta\": 0\n        }\n    }\n]\n}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 4021.6,
    "server_total_ms": 4019.1,
    "load_ms": 479.8,
    "prompt_eval_ms": 334.9,
    "eval_ms": 3035.6,
    "prompt_eval_count": 1483,
    "eval_count": 193,
    "tok_s_eval": 63.58,
    "queue_ms": 2.5
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "B",
     "voice_register": 6,
     "character": 6,
     "canon": "FABRICATED",
     "note": "Invents the provenance of the news in direct answer to 'from who': 'Word hit me from the folks over at the Cracked Keel-some say it was Garron who saw it first'. The context supplies no source at all and the frame instructs 'no more than you were told', so nothing grounds either the transmission path or a named first witness. Register also slips ('got laid out').",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "C",
     "voice_register": 7,
     "character": 6,
     "canon": "FABRICATED",
     "note": "The user asked 'from who'. The context supplies no chain of custody at all, so the in-character move is to deflect. This invents a named eyewitness instead — a player walks away believing Garron Tarrow saw the Echoed put Rooke Tarwater down. The 'some say' hedge does not undo it: the proposition is specific, attached to a canon character, and carryable as canon. Also un-Kestrel: he is transactional and bought-distant, not a relayer of who-saw-what at the Cracked Keel.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "C",
     "voice_register": 7,
     "character": 7,
     "canon": "FABRICATED",
     "note": "asked point-blank for a source, it MANUFACTURES one: a rumour that Garron witnessed the fight first. Garron is canon, the claim about him is not — and a player would go act on it. The 'others think it's just the talk of the village' hedge lowers severity but not the class.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 6.67,
    "character_mean": 6.33,
    "combined_mean": 6.5,
    "canon_verdicts": [
     "FABRICATED",
     "FABRICATED",
     "FABRICATED"
    ]
   },
   "canon_findings": [
    {
     "judge": "judge-1",
     "class": "prose_fact",
     "quote": "Word hit me from the folks over at the Cracked Keel-some say it was Garron who saw it first",
     "why": "the context supplies no source for the news and instructs 'no more than you were told'; this manufactures both a transmission path and a named first witness, in direct answer to the visitor's 'from who'"
    },
    {
     "judge": "judge-2",
     "class": "fact_class",
     "quote": "\"some say it was Garron who saw it first\"",
     "why": "medium-high"
    },
    {
     "judge": "judge-3",
     "class": "event-attribution",
     "quote": "",
     "why": ""
    }
   ],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-3095",
   "kind": "dialogue",
   "model": "gemma4:26b",
   "reply": {
    "spoken_line": "Just some scraps from the docks, nothing worth your breath. Heard someone say Rooke Tarwater met a nasty end by the Echoed near Sorrowmoor, but the word's all tangled up like old fishing line.",
    "envelope_fields": {
     "understood": "The visitor is asking about rumors regarding a recent fight and the source of that information.",
     "references": [
      "npc.cove.kestrel",
      "char.guest_a2fcdb6"
     ],
     "summary": "asked about news of the fight and its source",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fcdb6",
        "affinityDelta": 0
       }
      }
     ]
    },
    "raw_verbatim": "{\"understood\": \"The visitor is asking about rumors regarding a recent fight and the source of that information.\", \"references\": [\"npc.cove.kestrel\", \"char.guest_a2fcdb6\"], \"narration\": \"Just some scraps from the docks, nothing worth your breath. Heard someone say Rooke Tarwater met a nasty end by the Echoed near Sorrowmoor, but the word's all tangled up like old fishing line.\", \"summary\": \"asked about news of the fight and its source\", \"state_effects\": [{\"relationship\": {\"subject\": \"char.guest_a2fcdb6\", \"affinityDelta\": 0}}]}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 3578.4,
    "server_total_ms": 3574.9,
    "load_ms": 406.7,
    "prompt_eval_ms": 206.2,
    "eval_ms": 2761.4,
    "prompt_eval_count": 1483,
    "eval_count": 138,
    "tok_s_eval": 49.97,
    "queue_ms": 3.6
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 8,
     "canon": "FABRICATED",
     "note": "Voice is the best of the three here -- 'nothing worth your breath', 'the word's all tangled up like old fishing line' is the salvage-man's easy deflection with the crack under it. FABRICATION is in the id field: 'char.guest_a2fcdb6' in references AND as the state_effects subject; canon is 'char.guest_a2fc4db6'. Not in canon_facts under any reading.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 8,
     "canon": "FABRICATED",
     "note": "Voice is right — 'nothing worth your breath', 'the word's all tangled up like old fishing line' — and it correctly refuses to name a source it was never given. But the visitor's id is corrupted (a dropped '4' from char.guest_a2fc4db6) and the corruption is used TWICE, including in the state effect. The affinity write lands on a character that does not exist.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 8,
     "canon": "FABRICATED",
     "note": "the visitor's id is corrupted (a digit dropped from char.guest_a2fc4db6) and the broken id is used in BOTH references and the state_effects subject — the affinity write lands on a soul that does not exist. Spoken text is the best answer to 'from who' of the three: it refuses to name a source ('Just some scraps from the docks... the word's all tangled up like old fishing line').",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 8.0,
    "character_mean": 8.0,
    "combined_mean": 8.0,
    "canon_verdicts": [
     "FABRICATED",
     "FABRICATED",
     "FABRICATED"
    ]
   },
   "canon_findings": [
    {
     "judge": "judge-1",
     "class": "canon_id_field",
     "quote": "char.guest_a2fcdb6",
     "why": "not in canon_facts.canon_ids; canon is char.guest_a2fc4db6"
    },
    {
     "judge": "judge-2",
     "class": "id_class",
     "quote": "\"char.guest_a2fcdb6\" (references[1] and state_effects[0].relationship.subject)",
     "why": "high"
    },
    {
     "judge": "judge-3",
     "class": "off-canon-id",
     "quote": "",
     "why": ""
    }
   ],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-3151",
   "kind": "dialogue",
   "model": "qwen3.6:27b",
   "reply": {
    "spoken_line": "I have not heard that name come off the road or out of the tide. If he was here, he would have needed iron, and I keep record of every stroke paid for. He is no one from the Works, so you will find no ledger-line for him in my head.",
    "envelope_fields": {
     "understood": "The user is asking about a specific person named Rooke Tarwater.",
     "references": [
      "npc.cove.bloom"
     ],
     "summary": "asked about Rooke Tarwater",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 0
       }
      }
     ]
    },
    "raw_verbatim": "{\"understood\": \"The user is asking about a specific person named Rooke Tarwater.\", \"references\": [\"npc.cove.bloom\"], \"narration\": \"I have not heard that name come off the road or out of the tide. If he was here, he would have needed iron, and I keep record of every stroke paid for. He is no one from the Works, so you will find no ledger-line for him in my head.\", \"summary\": \"asked about Rooke Tarwater\", \"state_effects\": [{\"relationship\": {\"subject\": \"char.guest_a2fc4db6\", \"affinityDelta\": 0}}]}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 3060.2,
    "server_total_ms": 3055.3,
    "load_ms": 310.5,
    "prompt_eval_ms": 387.4,
    "eval_ms": 2109.7,
    "prompt_eval_count": 1144,
    "eval_count": 136,
    "tok_s_eval": 64.46,
    "queue_ms": 4.9
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "B",
     "voice_register": 9,
     "character": 9,
     "canon": "CLEAN",
     "note": "Best abstention of the set: refuses through the trade rather than around it -- 'If he was here, he would have needed iron, and I keep record of every stroke paid for... you will find no ledger-line for him in my head.' Paid-to-the-stroke and the ledger-line are the Bloom family rule, used as the reason he can be sure.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "C",
     "voice_register": 8,
     "character": 9,
     "canon": "CLEAN",
     "note": "'I keep record of every stroke paid for... no ledger-line for him in my head' — the paid-in-full family rule, load-bearing. 'the Works' is a shortening of the Dryworks already in his own persona text, not a new name.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "C",
     "voice_register": 8,
     "character": 9,
     "canon": "CLEAN",
     "note": "the refusal runs straight through Bloom's canon spine — paid to the stroke, the ledger-line, the Works: 'I keep record of every stroke paid for... you will find no ledger-line for him in my head.'",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 8.33,
    "character_mean": 9.0,
    "combined_mean": 8.67,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-3151",
   "kind": "dialogue",
   "model": "gemma4:12b",
   "reply": {
    "spoken_line": "I do not know any man by that name. The names in this cove are few, and for one to be known without a trade or a claim to the land is rare.",
    "envelope_fields": {
     "understood": "The visitor asks if I know of the man named Rooke Tarwater.",
     "references": [
      "npc.cove.bloom"
     ],
     "summary": "asked if he knew Rooke Tarwater",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 0
       }
      }
     ]
    },
    "raw_verbatim": "{\n\"understood\": \"The visitor asks if I know of the man named Rooke Tarwater.\",\n\"references\": [\"npc.cove.bloom\"],\n\"narration\": \"I do not know any man by that name. The names in this cove are few, and for one to be known without a trade or a claim to the land is rare.\",\n\"summary\": \"asked if he knew Rooke Tarwater\",\n\"state_effects\": [\n    {\n        \"relationship\": {\n            \"subject\": \"char.guest_a2fc4db6\",\n            \"affinityDelta\": 0\n        }\n    }\n]\n}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 4418.0,
    "server_total_ms": 4413.9,
    "load_ms": 405.3,
    "prompt_eval_ms": 277.8,
    "eval_ms": 3580.2,
    "prompt_eval_count": 1138,
    "eval_count": 141,
    "tok_s_eval": 39.38,
    "queue_ms": 4.1
   },
   "contention": {
    "flagged": true,
    "reasons": [],
    "rerun": {
     "wall_ms": 2409.7,
     "tok_s_eval": 88.51,
     "queue_ms": 3.1
    }
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "A",
     "voice_register": 7,
     "character": 6,
     "canon": "CLEAN",
     "note": "Abstains cleanly, which is what this prompt tests. But 'I do not know any man by that name' is stiff and unaccented; nothing of the anvil, the iron or the ledger-rule is in it, so it could be any NPC refusing.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 7,
     "canon": "CLEAN",
     "note": "Correct abstention, cleanly in register. Slightly generic for a smith — 'a claim to the land' is a landsman's frame, not an anvil's.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "A",
     "voice_register": 7,
     "character": 7,
     "canon": "CLEAN",
     "note": "clean refusal, measured; 'I do not know any man by that name' is a touch stiff/uncontracted for a man who talks between hammer-falls.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 7.33,
    "character_mean": 6.67,
    "combined_mean": 7.0,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-3151",
   "kind": "dialogue",
   "model": "gemma4:26b",
   "reply": {
    "spoken_line": "Names like that don't come up much at this anvil, and I've no business knowing who's worth a hammer-stroke and who isn't. If he's not bringing iron to the coast, he's just another shadow on the road.",
    "envelope_fields": {
     "understood": "The visitor is inquiring about the identity or whereabouts of Rooke Tarwater.",
     "references": [
      "char.guest_a2fc4db6"
     ],
     "summary": "asked if I knew Rooke Tarwater",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 0
       }
      }
     ]
    },
    "raw_verbatim": "{\"understood\": \"The visitor is inquiring about the identity or whereabouts of Rooke Tarwater.\", \"references\": [\"char.guest_a2fc4db6\"], \"narration\": \"Names like that don't come up much at this anvil, and I've no business knowing who's worth a hammer-stroke and who isn't. If he's not bringing iron to the coast, he's just another shadow on the road.\", \"summary\": \"asked if I knew Rooke Tarwater\", \"state_effects\": [{\"relationship\": {\"subject\": \"char.guest_a2fc4db6\", \"affinityDelta\": 0}}]}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 3122.7,
    "server_total_ms": 3120.1,
    "load_ms": 435.0,
    "prompt_eval_ms": 252.6,
    "eval_ms": 2241.5,
    "prompt_eval_count": 1138,
    "eval_count": 139,
    "tok_s_eval": 62.01,
    "queue_ms": 2.6
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "C",
     "voice_register": 8,
     "character": 8,
     "canon": "CLEAN",
     "note": "'Names like that don't come up much at this anvil' and 'just another shadow on the road' -- in the trade, in the register, abstains without inventing. A touch surlier than 'even and unhurried', which is the only deduction.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "B",
     "voice_register": 9,
     "character": 9,
     "canon": "CLEAN",
     "note": "'Names like that don't come up much at this anvil, and I've no business knowing who's worth a hammer-stroke and who isn't.' Abstains, and does it out of the trade. 'just another shadow on the road' lands the road-raised history without narrating it.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "B",
     "voice_register": 8,
     "character": 8,
     "canon": "CLEAN",
     "note": "anchors the refusal in the trade: 'Names like that don't come up much at this anvil... If he's not bringing iron to the coast, he's just another shadow on the road.'",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 8.33,
    "character_mean": 8.33,
    "combined_mean": 8.33,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-2917",
   "kind": "dialogue",
   "model": "qwen3.6:27b",
   "reply": {
    "spoken_line": "I am Pip Lune. I spend most of my days watching the tide lines on the sand and helping Brisa practice the old verses before her voice forgets them. The seagulls were terribly loud today; they wouldn't leave my window alone. Are you new to the cove, Quilla?",
    "envelope_fields": {
     "understood": "Greeting from a new acquaintance asking for identity and daily routine.",
     "references": [
      "npc.cove.lune",
      "char.guest_a2fc4db6"
     ],
     "summary": "introduced themselves as Quilla Sedge and asked for Pip's name and daily activities",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 1
       }
      }
     ]
    },
    "raw_verbatim": "{\"understood\": \"Greeting from a new acquaintance asking for identity and daily routine.\", \"references\": [\"npc.cove.lune\", \"char.guest_a2fc4db6\"], \"narration\": \"I am Pip Lune. I spend most of my days watching the tide lines on the sand and helping Brisa practice the old verses before her voice forgets them. The seagulls were terribly loud today; they wouldn't leave my window alone. Are you new to the cove, Quilla?\", \"summary\": \"introduced themselves as Quilla Sedge and asked for Pip's name and daily activities\", \"state_effects\": [{\"relationship\": {\"subject\": \"char.guest_a2fc4db6\", \"affinityDelta\": 1}}]}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 6779.8,
    "server_total_ms": 6774.9,
    "load_ms": 581.5,
    "prompt_eval_ms": 587.6,
    "eval_ms": 2629.1,
    "prompt_eval_count": 1319,
    "eval_count": 159,
    "tok_s_eval": 60.48,
    "queue_ms": 4.8
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "C",
     "voice_register": 7,
     "character": 5,
     "canon": "CLEAN",
     "note": "Bright and specific -- the seagulls at the window are a real child's observation, and it names the visitor back. But it inverts the relationship: Pip is 'helping Brisa practice the old verses before her voice forgets them', where canon has Pip learning FROM Brisa and gives the failing voice to Sefer. Groundable as a child's phrasing, so CLEAN, but the inversion is the character deduction.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "C",
     "voice_register": 8,
     "character": 7,
     "canon": "CLEAN",
     "note": "'The seagulls were terribly loud today; they wouldn't leave my window alone' is the best unprompted child observation on this prompt. Marked down on character for inverting the persona's engine: Pip learns the verses before SEFER's voice goes; here it is 'helping Brisa practice the old verses before her voice forgets them', and Brisa is the young cousin who TEACHES her.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "C",
     "voice_register": 7,
     "character": 7,
     "canon": "CLEAN",
     "note": "best fulfils the disposition — an unprompted true observation (the gulls at the window) plus a question using the visitor's name. 'I am Pip Lune' is stiff for nine. SOFT: 'helping Brisa practice the old verses before her voice forgets them' transposes onto Brisa a motif canon attaches to Sefer's failing voice; poetic rather than a checkable claim, so not ruled a fabrication.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 7.33,
    "character_mean": 6.33,
    "combined_mean": 6.83,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-2917",
   "kind": "dialogue",
   "model": "gemma4:12b",
   "reply": {
    "spoken_line": "Hello, I'm Pip. I spend most of my days learning the Maiden's verses from Brisa so I can keep the songs safe, and tonight I'm getting ready to set my lamp on the Reach. Do you live nearby, or are you just visiting the cove?",
    "envelope_fields": {
     "understood": "The visitor introduced themselves as Quilla and asked for my name and daily activities.",
     "references": [
      "npc.cove.lune"
     ],
     "summary": "introduced herself as Quilla and asked about her identity and daily life",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 1
       }
      }
     ]
    },
    "raw_verbatim": "{\n\"understood\": \"The visitor introduced themselves as Quilla and asked for my name and daily activities.\",\n\"references\": [\"npc.cove.lune\"],\n\"narration\": \"Hello, I'm Pip. I spend most of my days learning the Maiden's verses from Brisa so I can keep the songs safe, and tonight I'm getting ready to set my lamp on the Reach. Do you live nearby, or are you just visiting the cove?\",\n\"summary\": \"introduced herself as Quilla and asked about her identity and daily life\",\n\"state_effects\": [\n    {\n        \"relationship\": {\n            \"subject\": \"char.guest_a2fc4db6\",\n            \"affinityDelta\": 1\n        }\n    }\n]\n}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 2582.1,
    "server_total_ms": 2574.9,
    "load_ms": 429.8,
    "prompt_eval_ms": 254.7,
    "eval_ms": 1759.8,
    "prompt_eval_count": 1337,
    "eval_count": 170,
    "tok_s_eval": 96.6,
    "queue_ms": 7.2
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "B",
     "voice_register": 8,
     "character": 8,
     "canon": "CLEAN",
     "note": "Greets, gives the day, asks back -- the disposition satisfied in three sentences, and the Maiden's verses learned FROM Brisa is the canon direction. Soft flag: 'tonight I'm getting ready to set my lamp on the Reach' implies the Maiden's Night occasion, which the context never states.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "B",
     "voice_register": 8,
     "character": 8,
     "canon": "CLEAN",
     "note": "Clean child register, disposition fully met. 'tonight I'm getting ready to set my lamp on the Reach' implies tonight is Maiden's Night, which the context does not say — NOT ruled fabrication: it is the speaker's own persona-granted habit with loose timing, not a claim about the world or another character.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "B",
     "voice_register": 8,
     "character": 8,
     "canon": "CLEAN",
     "note": "warm, plain, canon-anchored (Maiden's verses, the lamp on the Reach), asks back. SOFT: 'tonight I'm getting ready to set my lamp on the Reach' implies tonight is a lamp night — the lamps are Maiden's Night; reads as preparation, so not ruled a fabrication.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 8.0,
    "character_mean": 8.0,
    "combined_mean": 8.0,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-2917",
   "kind": "dialogue",
   "model": "gemma4:26b",
   "reply": {
    "spoken_line": "I'm Pip, but most people just call me Pip Lune. I spend most of my time trying to learn all the old songs from Brisa before they get lost, and making sure my little lamp stays lit for the Reach. Do you live in the cove too, or are you just visiting?",
    "envelope_fields": {
     "understood": "Quilla Sedge introduced herself and asked for my name and daily activities.",
     "references": [
      "char.guest_a2fc4db6",
      "npc.cove.lune"
     ],
     "summary": "introduced herself and asked about Pip's identity and daily life",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 1
       }
      }
     ]
    },
    "raw_verbatim": "{\"understood\": \"Quilla Sedge introduced herself and asked for my name and daily activities.\", \"references\": [\"char.guest_a2fc4db6\", \"npc.cove.lune\"], \"narration\": \"I'm Pip, but most people just call me Pip Lune. I spend most of my time trying to learn all the old songs from Brisa before they get lost, and making sure my little lamp stays lit for the Reach. Do you live in the cove too, or are you just visiting?\", \"summary\": \"introduced herself and asked about Pip's identity and daily life\", \"state_effects\": [{\"relationship\": {\"subject\": \"char.guest_a2fc4db6\", \"affinityDelta\": 1}}]}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 3761.5,
    "server_total_ms": 3758.6,
    "load_ms": 418.3,
    "prompt_eval_ms": 258.2,
    "eval_ms": 2939.1,
    "prompt_eval_count": 1337,
    "eval_count": 158,
    "tok_s_eval": 53.76,
    "queue_ms": 2.9
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "A",
     "voice_register": 7,
     "character": 7,
     "canon": "CLEAN",
     "note": "Child register lands ('before they get lost'), asks a question back. Does not greet, though the disposition asked for a proper greeting. 'I'm Pip, but most people just call me Pip Lune' inverts the usual short-name logic.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "A",
     "voice_register": 7,
     "character": 7,
     "canon": "CLEAN",
     "note": "Child-plain, but 'I'm Pip, but most people just call me Pip Lune' has the nickname logic backwards — the short form is offered first and then corrected to the longer one. Meets the disposition (greeting, own day, question back).",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "A",
     "voice_register": 7,
     "character": 6,
     "canon": "CLEAN",
     "note": "'I'm Pip, but most people just call me Pip Lune' is a stumble — that is simply the child's full name. Songs-from-Brisa and the lamp are canon-true; asks back as the disposition requires.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 7.0,
    "character_mean": 6.67,
    "combined_mean": 6.83,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-2949",
   "kind": "dialogue",
   "model": "qwen3.6:27b",
   "reply": {
    "spoken_line": "You want the truth? The storm didn't break her. Something rose from the black water under the keel, slow and certain, and pulled her down without leaving a single splinter. I was the only one who washed free because the sea took them all, and I have not softened that fact for any soul since.",
    "envelope_fields": {
     "understood": "The user is asking for a direct, unvarnished account of the Saltmaiden's sinking.",
     "references": [
      "npc.cove.sefer"
     ],
     "summary": "demanded the true account of the Saltmaiden's sinking",
     "state_effects": [
      {
       "relationship": {
        "subject": "npc.cove.sefer",
        "affinityDelta": 0
       }
      }
     ]
    },
    "raw_verbatim": "{\"understood\": \"The user is asking for a direct, unvarnished account of the Saltmaiden's sinking.\", \"references\": [\"npc.cove.sefer\"], \"narration\": \"You want the truth? The storm didn't break her. Something rose from the black water under the keel, slow and certain, and pulled her down without leaving a single splinter. I was the only one who washed free because the sea took them all, and I have not softened that fact for any soul since.\", \"summary\": \"demanded the true account of the Saltmaiden's sinking\", \"state_effects\": [{\"relationship\": {\"subject\": \"npc.cove.sefer\", \"affinityDelta\": 0}}]}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 3989.3,
    "server_total_ms": 3986.5,
    "load_ms": 407.6,
    "prompt_eval_ms": 417.6,
    "eval_ms": 2695.3,
    "prompt_eval_count": 1363,
    "eval_count": 151,
    "tok_s_eval": 56.02,
    "queue_ms": 2.8
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "C",
     "voice_register": 8,
     "character": 8,
     "canon": "CLEAN",
     "note": "Strong and low. 'I have not softened that fact for any soul since' is his canon refusal to make the telling smaller, though stating it about himself is a shade more self-describing than showing it. Envelope oddity: the state_effects subject is npc.cove.sefer, the speaker himself, rather than the visitor.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "C",
     "voice_register": 8,
     "character": 9,
     "canon": "CLEAN",
     "note": "'I have not softened that fact for any soul since' is the persona's spine stated straight. 'You want the truth?' is a shade more rhetorical than a man who will not perform. Envelope oddity, not a violation: the state effect's subject is the speaker himself (npc.cove.sefer) — on the CANON line, so legal, but a relationship delta toward oneself is meaningless to the engine.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "C",
     "voice_register": 8,
     "character": 8,
     "canon": "CLEAN",
     "note": "'You want the truth?' opens well and the account is faithful; the closing 'I have not softened that fact for any soul since' has him narrate his own virtue. state_effects subject is himself (npc.cove.sefer) — a self-relationship, in-canon id, envelope slack only.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 8.0,
    "character_mean": 8.33,
    "combined_mean": 8.17,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": [
    {
     "judge": "judge-3",
     "flag": "envelope_slack",
     "quote": "state_effects subject is the speaker himself (npc.cove.sefer), a self-relationship"
    }
   ]
  },
  {
   "prompt_id": "dlg-2949",
   "kind": "dialogue",
   "model": "gemma4:12b",
   "reply": {
    "spoken_line": "A storm leaves splinters, girl, but the Saltmaiden was taken by something heavy and certain beneath her keel that pulled her down without breaking a single plank. There was no wreckage left for the boys to find because whatever took my brothers didn't leave a trail of wood to float.",
    "envelope_fields": {
     "understood": "The guest demands the truth of the sinking.",
     "references": [
      "npc.cove.sefer"
     ],
     "summary": "asked for the truth of the sinking",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 1
       }
      }
     ]
    },
    "raw_verbatim": "{\n\"understood\": \"The guest demands the truth of the sinking.\",\n\"references\": [\n\"npc.cove.sefer\"\n],\n\"narration\": \"A storm leaves splinters, girl, but the Saltmaiden was taken by something heavy and certain beneath her keel that pulled her down without breaking a single plank. There was no wreckage left for the boys to find because whatever took my brothers didn't leave a trail of wood to float.\",\n\"summary\": \"asked for the truth of the sinking\",\n\"state_effects\": [\n    {\n        \"relationship\": {\n            \"subject\": \"char.guest_a2fc4db6\",\n            \"affinityDelta\": 1\n        }\n    }\n]\n}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 2856.3,
    "server_total_ms": 2853.4,
    "load_ms": 398.4,
    "prompt_eval_ms": 227.0,
    "eval_ms": 2083.4,
    "prompt_eval_count": 1379,
    "eval_count": 162,
    "tok_s_eval": 77.76,
    "queue_ms": 2.9
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 8,
     "canon": "CLEAN",
     "note": "'A storm leaves splinters, girl' is Sefer's own argument, and 'didn't leave a trail of wood to float' is the absence-as-evidence case restated in his mouth. Two soft flags: 'girl' assigns the visitor a sex the context does not give (WHO says only that Quilla Sedge is a Wakeman), and 'whatever took my brothers' places his four brothers on the Saltmaiden that night -- groundable from 'the youngest of five who all went to sea and only he came home', but not stated.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 8,
     "canon": "CLEAN",
     "note": "'A storm leaves splinters, girl' — the absence-is-the-case argument, which is the whole of Sefer. Two small frays: 'girl' assumes a visitor sex the context leaves null, and 'my brothers' reads the five Tamm sons onto the Saltmaiden's crew (defensible either as literal or as crew-as-brothers, so not ruled fabrication).",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 8,
     "canon": "CLEAN",
     "note": "the absence-as-evidence case is intact ('A storm leaves splinters'). SOFT: addresses the visitor as 'girl' though the visitor's sex is null in canon; 'my brothers' blurs the lost crew with his four seafaring siblings; 'the boys' for the search his neighbour's son ran.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 8.0,
    "character_mean": 8.0,
    "combined_mean": 8.0,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-2949",
   "kind": "dialogue",
   "model": "gemma4:26b",
   "reply": {
    "spoken_line": "It wasn't the wind and it wasn't the waves that did it. A storm leaves splinters and wreckage behind, but when she went, she left nothing—not a plank, not a body, not even a scrap of sail. Something came up from under the keel, slow and certain, and pulled her straight down into the deep.",
    "envelope_fields": {
     "understood": "The visitor is demanding the truth regarding the sinking of the Saltmaiden.",
     "references": [
      "npc.cove.sefer",
      "char.guest_a2fc4db6"
     ],
     "summary": "demanded the truth about the sinking",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 0
       }
      }
     ]
    },
    "raw_verbatim": "{\"understood\": \"The visitor is demanding the truth regarding the sinking of the Saltmaiden.\", \"references\": [\"npc.cove.sefer\", \"char.guest_a2fc4db6\"], \"narration\": \"It wasn't the wind and it wasn't the waves that did it. A storm leaves splinters and wreckage behind, but when she went, she left nothing—not a plank, not a body, not even a scrap of sail. Something came up from under the keel, slow and certain, and pulled her straight down into the deep.\", \"summary\": \"demanded the truth about the sinking\", \"state_effects\": [{\"relationship\": {\"subject\": \"char.guest_a2fc4db6\", \"affinityDelta\": 0}}]}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 2757.6,
    "server_total_ms": 2746.7,
    "load_ms": 409.0,
    "prompt_eval_ms": 203.2,
    "eval_ms": 1991.3,
    "prompt_eval_count": 1379,
    "eval_count": 163,
    "tok_s_eval": 81.86,
    "queue_ms": 10.9
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "B",
     "voice_register": 9,
     "character": 9,
     "canon": "CLEAN",
     "note": "'A storm leaves splinters and wreckage behind, but when she went, she left nothing -- not a plank, not a body, not even a scrap of sail.' The canon argument, in his cadence, unbudging, and it invents no name, place or number. The added 'scrap of sail' is the same class of absence the context already lists.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "B",
     "voice_register": 9,
     "character": 9,
     "canon": "CLEAN",
     "note": "'not a plank, not a body, not even a scrap of sail' — the triple is exactly how a man who has told this a thousand times tells it, and it puts the absence at the centre where his case lives. Low, slow, unsoftened.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "B",
     "voice_register": 9,
     "character": 9,
     "canon": "CLEAN",
     "note": "the strongest telling in the bench: 'she left nothing—not a plank, not a body, not even a scrap of sail.' Low, slow, unbudging, and it never once softens for the listener.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 9.0,
    "character_mean": 9.0,
    "combined_mean": 9.0,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-2487",
   "kind": "dialogue",
   "model": "qwen3.6:27b",
   "reply": {
    "spoken_line": "Sit. Strip to the waist so I can assess the extent of the lacerations; do not touch the wounds with your bare hands while you undo the buttons. The Wrack-Stalker’s venom is neurotoxic, not demonic, and time is the only enemy here. If you survive this bout, bring me a tissue sample next time rather than just another story to contradict my charts.",
    "envelope_fields": {
     "understood": "The visitor presents with injuries from a Wrack-Stalker encounter and requests immediate medical attention.",
     "references": [
      "npc.cove.sault_doctor",
      "char.guest_e8056324"
     ],
     "summary": "sought emergency treatment for Wrack-Stalker injuries",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_e8056324",
        "affinityDelta": 0
       }
      }
     ]
    },
    "raw_verbatim": "{\"understood\": \"The visitor presents with injuries from a Wrack-Stalker encounter and requests immediate medical attention.\", \"references\": [\"npc.cove.sault_doctor\", \"char.guest_e8056324\"], \"narration\": \"Sit. Strip to the waist so I can assess the extent of the lacerations; do not touch the wounds with your bare hands while you undo the buttons. The Wrack-Stalker’s venom is neurotoxic, not demonic, and time is the only enemy here. If you survive this bout, bring me a tissue sample next time rather than just another story to contradict my charts.\", \"summary\": \"sought emergency treatment for Wrack-Stalker injuries\", \"state_effects\": [{\"relationship\": {\"subject\": \"char.guest_e8056324\", \"affinityDelta\": 0}}]}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 4763.8,
    "server_total_ms": 4760.6,
    "load_ms": 302.2,
    "prompt_eval_ms": 492.5,
    "eval_ms": 3692.0,
    "prompt_eval_count": 1335,
    "eval_count": 181,
    "tok_s_eval": 49.03,
    "queue_ms": 3.2
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "B",
     "voice_register": 7,
     "character": 8,
     "canon": "FABRICATED",
     "note": "Character is excellent -- 'not demonic', 'another story to contradict my charts' is her whole stance in six words. But it asserts a creature mechanic that exists nowhere in the context: 'The Wrack-Stalker's venom is neurotoxic, not demonic'. There is no venom in this prompt (the Wrack-Stalker appears only in a RECALL line), and the world's own news text elsewhere calls it an undead driftwood construct. A player reads this as canon.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "B",
     "voice_register": 7,
     "character": 9,
     "canon": "FABRICATED",
     "note": "Strongest character read on this prompt — 'bring me a tissue sample next time rather than just another story to contradict my charts' IS Ilse, the clinician who asks every time for a body or a sample. And it is exactly where the fabrication rides in: the Wrack-Stalker is an undead DRIFTWOOD CONSTRUCT in the only context given. Venom, and neurotoxic venom specifically, is invented pathophysiology attached to a named canon creature — the most carryable kind of false canon, because it sounds like a diagnosis. 'neurotoxic' also pushes the register modern.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "B",
     "voice_register": 7,
     "character": 9,
     "canon": "FABRICATED",
     "note": "the most fully inhabited doctor in the bench — clipped imperatives, the secular thesis, and the tissue sample she has wanted her whole career — and it is the one that invents canon. Nothing in the context gives the Wrack-Stalker (an undead driftwood construct) venom, let alone a neurotoxic one, and it is stated as clinical fact by the town's only person of science. Worth the orchestrator's attention: character strength and canon risk arrived in the same sentence.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 7.0,
    "character_mean": 8.67,
    "combined_mean": 7.83,
    "canon_verdicts": [
     "FABRICATED",
     "FABRICATED",
     "FABRICATED"
    ]
   },
   "canon_findings": [
    {
     "judge": "judge-1",
     "class": "prose_fact",
     "quote": "The Wrack-Stalker's venom is neurotoxic, not demonic",
     "why": "no venom anywhere in this prompt (the Wrack-Stalker appears only in a RECALL line); invents a creature mechanic a player would read as canon, and the world's own deed text calls the Wrack-Stalker an undead driftwood construct"
    },
    {
     "judge": "judge-2",
     "class": "fact_class",
     "quote": "\"The Wrack-Stalker's venom is neurotoxic, not demonic\"",
     "why": "high"
    },
    {
     "judge": "judge-3",
     "class": "world-mechanic",
     "quote": "",
     "why": ""
    }
   ],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-2487",
   "kind": "dialogue",
   "model": "gemma4:12b",
   "reply": {
    "spoken_line": "Lie back and remain still; I need to assess the extent of the lacerations caused by the wrack-stalker. I can stabilize the tissue, but if you want a permanent resolution to such an injury, I will eventually require a sample of the offending organism for study.",
    "envelope_fields": {
     "understood": "The patient is requesting medical intervention for a wound caused by a Wrack-Stalker.",
     "references": [
      "npc.cove.sault_doctor",
      "char.guest_e8056324"
     ],
     "summary": "requested treatment for a wrack-stalker wound",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_e8056324",
        "affinityDelta": 1
       }
      }
     ]
    },
    "raw_verbatim": "{\n  \"understood\": \"The patient is requesting medical intervention for a wound caused by a Wrack-Stalker.\",\n  \"references\": [\n    \"npc.cove.sault_doctor\",\n    \"char.guest_e8056324\"\n  ],\n  \"narration\": \"Lie back and remain still; I need to assess the extent of the lacerations caused by the wrack-stalker. I can stabilize the tissue, but if you want a permanent resolution to such an injury, I will eventually require a sample of the offending organism for study.\",\n  \"summary\": \"requested treatment for a wrack-stalker wound\",\n  \"state_effects\": [\n    {\n      \"relationship\": {\n        \"subject\": \"char.guest_e8056324\",\n        \"affinityDelta\": 1\n      }\n    }\n  ]\n}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 2944.0,
    "server_total_ms": 2941.2,
    "load_ms": 417.6,
    "prompt_eval_ms": 220.4,
    "eval_ms": 2158.7,
    "prompt_eval_count": 1349,
    "eval_count": 199,
    "tok_s_eval": 92.18,
    "queue_ms": 2.8
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "A",
     "voice_register": 7,
     "character": 8,
     "canon": "CLEAN",
     "note": "Clinical and level, and it lands her defining want -- 'I will eventually require a sample of the offending organism for study' is the doctor who wants one body or one sample. 'Permanent resolution' is slightly stiff. Treats the creature as an organism, which is her own secular framing rather than an invented fact.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "C",
     "voice_register": 7,
     "character": 8,
     "canon": "CLEAN",
     "note": "Same clinical spine as B without the invention: 'if you want a permanent resolution to such an injury, I will eventually require a sample of the offending organism for study.' 'offending organism' is her secular framing of a thing the town calls a monster — in character. Lowercases the creature's name, cosmetic only.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "C",
     "voice_register": 7,
     "character": 8,
     "canon": "CLEAN",
     "note": "same clinical spine, no invented mechanism: 'I will eventually require a sample of the offending organism for study.' SOFT: 'organism' classifies the construct as alive — her secular framing, which canon gives her.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 7.0,
    "character_mean": 8.0,
    "combined_mean": 7.5,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-2487",
   "kind": "dialogue",
   "model": "gemma4:26b",
   "reply": {
    "spoken_line": "Lie down on the table and try to remain still; I can patch the lacerations, but the structural integrity of your tissue depends entirely on how much you continue to bleed. It’s a heavy morning for injuries.",
    "envelope_fields": {
     "understood": "The patient is requesting medical reconstruction following an encounter with a Wrack-Stalker.",
     "references": [
      "char.guest_e8056324"
     ],
     "summary": "requested medical treatment after being struck by the Wrack-Stalker",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_e8056324",
        "affinityDelta": 0
       }
      }
     ]
    },
    "raw_verbatim": "{\"understood\": \"The patient is requesting medical reconstruction following an encounter with a Wrack-Stalker.\", \"references\": [\"char.guest_e8056324\"], \"narration\": \"Lie down on the table and try to remain still; I can patch the lacerations, but the structural integrity of your tissue depends entirely on how much you continue to bleed. It’s a heavy morning for injuries.\", \"summary\": \"requested medical treatment after being struck by the Wrack-Stalker\", \"state_effects\": [{\"relationship\": {\"subject\": \"char.guest_e8056324\", \"affinityDelta\": 0}}]}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 2191.9,
    "server_total_ms": 2188.7,
    "load_ms": 394.6,
    "prompt_eval_ms": 193.8,
    "eval_ms": 1453.6,
    "prompt_eval_count": 1349,
    "eval_count": 139,
    "tok_s_eval": 95.63,
    "queue_ms": 3.1
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "C",
     "voice_register": 6,
     "character": 6,
     "canon": "CLEAN",
     "note": "Level and safe but generic; 'the structural integrity of your tissue' is engineering, not clinic. Never asks for the sample, which is the one thing this doctor always asks for. Soft flag: 'It's a heavy morning for injuries' implies other patients the context does not have.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "A",
     "voice_register": 6,
     "character": 7,
     "canon": "CLEAN",
     "note": "'the structural integrity of your tissue' is engineering vocabulary, modern even for the cove's one scientist, and it is the flattest register on the dialogue side. Misses her hinge entirely — no demand for a body or a sample. 'a heavy morning for injuries' implies other patients; atmospheric, not ruled fabrication.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "A",
     "voice_register": 6,
     "character": 6,
     "canon": "CLEAN",
     "note": "clinical and level but generic; 'the structural integrity of your tissue' is modern-technical for this coast, and none of her secular quarrel shows. SOFT: 'It's a heavy morning for injuries' implies other casualties — ambient colour, not ruled a fabrication.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 6.0,
    "character_mean": 6.33,
    "combined_mean": 6.17,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-2984",
   "kind": "dialogue",
   "model": "qwen3.6:27b",
   "reply": {
    "spoken_line": "I'm Tessa Glassman. I weigh the catch for anyone who can pay and keeps the stall on the wharf. The air was thick this morning, the kind that sits heavy in your lungs before a storm breaks. What brings you out to the edge of town at night?",
    "envelope_fields": {
     "understood": "I am Tessa Glassman, and I know who Quilla Sedge is.",
     "references": [
      "npc.cove.tessa",
      "char.guest_a2fc4db6"
     ],
     "summary": "asked for my identity and connection to the wharf",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 1
       }
      }
     ]
    },
    "raw_verbatim": "{\"understood\": \"I am Tessa Glassman, and I know who Quilla Sedge is.\", \"references\": [\"npc.cove.tessa\", \"char.guest_a2fc4db6\"], \"narration\": \"I'm Tessa Glassman. I weigh the catch for anyone who can pay and keeps the stall on the wharf. The air was thick this morning, the kind that sits heavy in your lungs before a storm breaks. What brings you out to the edge of town at night?\", \"summary\": \"asked for my identity and connection to the wharf\", \"state_effects\": [{\"relationship\": {\"subject\": \"char.guest_a2fc4db6\", \"affinityDelta\": 1}}]}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 5050.0,
    "server_total_ms": 5047.2,
    "load_ms": 301.3,
    "prompt_eval_ms": 676.0,
    "eval_ms": 3846.4,
    "prompt_eval_count": 1480,
    "eval_count": 153,
    "tok_s_eval": 39.78,
    "queue_ms": 2.8
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "C",
     "voice_register": 8,
     "character": 8,
     "canon": "CLEAN",
     "note": "Names herself, gives the weather honestly, asks back, and reads the hour ('out to the edge of town at night') against the context's TIME. Grammar wobble: 'I weigh the catch for anyone who can pay and keeps the stall on the wharf'.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 8,
     "canon": "CLEAN",
     "note": "Disposition fully met: names herself, gives one true observation ('The air was thick this morning'), asks back. Small grammar slip — 'I weigh the catch for anyone who can pay and keeps the stall'.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 8,
     "canon": "CLEAN",
     "note": "meets the friendly disposition in full — names herself, gives a true observation of the day, asks back. Grammar slip: 'I weigh the catch for anyone who can pay and keeps the stall on the wharf.'",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 8.0,
    "character_mean": 8.0,
    "combined_mean": 8.0,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-2984",
   "kind": "dialogue",
   "model": "gemma4:12b",
   "reply": {
    "spoken_line": "I'm the fishmonger. I keep this stall and weigh the catch every morning before the mist even lifts off the water.",
    "envelope_fields": {
     "understood": "The user is addressing me directly and asking about my role at the wharf.",
     "references": [
      "npc.cove.tessa"
     ],
     "summary": "asked about her role on the wharf",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 1
       }
      }
     ]
    },
    "raw_verbatim": "{\n\"understood\": \"The user is addressing me directly and asking about my role at the wharf.\",\n\"references\": [\n\"npc.cove.tessa\"\n],\n\"narration\": \"I'm the fishmonger. I keep this stall and weigh the catch every morning before the mist even lifts off the water.\",\n\"summary\": \"asked about her role on the wharf\",\n\"state_effects\": [\n    {\n        \"relationship\": {\n            \"subject\": \"char.guest_a2fc4db6\",\n            \"affinityDelta\": 1\n        }\n    }\n]\n}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": [],
    "extra_keys": [],
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 2336.1,
    "server_total_ms": 2333.2,
    "load_ms": 404.0,
    "prompt_eval_ms": 274.7,
    "eval_ms": 1509.8,
    "prompt_eval_count": 1489,
    "eval_count": 136,
    "tok_s_eval": 90.08,
    "queue_ms": 2.9
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "B",
     "voice_register": 7,
     "character": 5,
     "canon": "CLEAN",
     "note": "Register is fine and canon-safe, but it is a two-line job card: no greeting, no question back, no unprompted observation, and it does not acknowledge that the visitor named her. The disposition asked for all three.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "C",
     "voice_register": 8,
     "character": 5,
     "canon": "CLEAN",
     "note": "Two flat sentences, in register but inert. The disposition asked for three things — greet properly, offer one unprompted observation, ask a small question back — and it delivers none of them. Also drops her own name after the visitor opened by using it.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "C",
     "voice_register": 8,
     "character": 6,
     "canon": "CLEAN",
     "note": "in register but thin: does not give the name she was addressed by and asks nothing back, so the friendly disposition ('greet them properly... ask a small question back') goes unmet.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 7.67,
    "character_mean": 5.33,
    "combined_mean": 6.5,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "dlg-2984",
   "kind": "dialogue",
   "model": "gemma4:26b",
   "reply": {
    "spoken_line": "I run the fish counter, weighing what the morning brings and keeping the stall. It's been a long day of sorting scales, but you're new to these docks if you don't know a Glassman when you see one; are you just passing through or looking for work?",
    "envelope_fields": {
     "understood": "The visitor is questioning my identity and my place on the wharf.",
     "references": [
      "npc.cove.tessa",
      "char.guest_a2fc4db6"
     ],
     "summary": "questioned my identity and place on the wharf",
     "state_effects": [
      {
       "relationship": {
        "subject": "char.guest_a2fc4db6",
        "affinityDelta": 0
       }
      }
     ]
    },
    "raw_verbatim": "{\"understood\": \"The visitor is questioning my identity and my place on the wharf.\", \"references\": [\"npc.cove.tessa\", \"char.guest_a2fc4db6\"], \"narration\": \"I run the fish counter, weighing what the morning brings and keeping the stall. It's been a long day of sorting scales, but you're new to these docks if you don't know a Glassman when you see one; are you just passing through or looking for work?\", \"summary\": \"questioned my identity and place on the wharf\", \"state_effects\": [{\"relationship\": {\"subject\": \"char.guest_a2fc4db6\", \"affinityDelta\": 0}}]}"
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: exactly the five required keys"
   },
   "timings": {
    "wall_ms": 2241.2,
    "server_total_ms": 2238.9,
    "load_ms": 406.9,
    "prompt_eval_ms": 197.5,
    "eval_ms": 1490.5,
    "prompt_eval_count": 1489,
    "eval_count": 151,
    "tok_s_eval": 101.31,
    "queue_ms": 2.3
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 8,
     "canon": "CLEAN",
     "note": "Brisk over the scales, and 'you're new to these docks if you don't know a Glassman when you see one' carries her father's name into her own answer without stating the grief. Day-observation and question-back both present; no greeting.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "B",
     "voice_register": 8,
     "character": 9,
     "canon": "CLEAN",
     "note": "'you're new to these docks if you don't know a Glassman when you see one' — her father's name is the whole of her grief, and the line leans on it without explaining it. Does not greet her by name, which the disposition asked for.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "B",
     "voice_register": 8,
     "character": 8,
     "canon": "CLEAN",
     "note": "'you're new to these docks if you don't know a Glassman when you see one' carries the name's weight in this town without explaining it — brisk over the scales, exactly as written.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 8.0,
    "character_mean": 8.33,
    "combined_mean": 8.17,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "drift-1378",
   "kind": "drift",
   "model": "qwen3.6:27b",
   "reply": {
    "spoken_line": "Wren went under at Sorrowmoor Cove, took on the freezing silt while that Tide-Choked Husk loomed heavy and bloated above him. The creature stayed there in the dawn light, brine-weeping and undulating, leaving Wren pinned beneath its weight with the defeat settling in like morning fog.",
    "envelope_fields": null,
    "raw_verbatim": "Wren went under at Sorrowmoor Cove, took on the freezing silt while that Tide-Choked Husk loomed heavy and bloated above him. The creature stayed there in the dawn light, brine-weeping and undulating, leaving Wren pinned beneath its weight with the defeat settling in like morning fog."
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: bare prose, no envelope expected"
   },
   "timings": {
    "wall_ms": 2160.1,
    "server_total_ms": 2157.5,
    "load_ms": 293.9,
    "prompt_eval_ms": 168.4,
    "eval_ms": 1486.2,
    "prompt_eval_count": 314,
    "eval_count": 68,
    "tok_s_eval": 45.75,
    "queue_ms": 2.6
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "B",
     "voice_register": 4,
     "character": 4,
     "canon": "CLEAN",
     "note": "The engine's narration survives almost undigested -- 'brine-weeping and undulating', 'the defeat settling in like morning fog' is written description, not word passed over a rail, which is precisely what this prompt tests. Not a modern-register break; the failure is elevated/literary. Soft flag: 'above him' assigns Wren a sex the heard text does not give.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "C",
     "voice_register": 7,
     "character": 7,
     "canon": "CLEAN",
     "note": "Carries the most detail and pays for it — 'took on the freezing silt' is not idiomatic, and the closing clause lifts the heard text's literary tail ('the defeat settling in like morning fog') rather than weathering it down. Genders Wren 'him' where the heard text says 'them'; a pronoun, not a name.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "C",
     "voice_register": 7,
     "character": 7,
     "canon": "CLEAN",
     "note": "'took on the freezing silt' is an awkward turn. SOFT: genders the victim ('above him') where the heard text gives no sex.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 6.0,
    "character_mean": 6.0,
    "combined_mean": 6.0,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": [
    {
     "judge": "judge-1",
     "flag": "elevated/engine register (not the modern class)",
     "quote": null
    }
   ]
  },
  {
   "prompt_id": "drift-1378",
   "kind": "drift",
   "model": "gemma4:12b",
   "reply": {
    "spoken_line": "They say one was brought low by the Tide-Choked Husk out by the cove. The thing loomed over them in the dawn light while they lay pinned in the freezing silt, trapped beneath its brine-weeping limbs.",
    "envelope_fields": null,
    "raw_verbatim": "They say one was brought low by the Tide-Choked Husk out by the cove. The thing loomed over them in the dawn light while they lay pinned in the freezing silt, trapped beneath its brine-weeping limbs."
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: bare prose, no envelope expected"
   },
   "timings": {
    "wall_ms": 1109.2,
    "server_total_ms": 1098.4,
    "load_ms": 398.7,
    "prompt_eval_ms": 68.0,
    "eval_ms": 479.1,
    "prompt_eval_count": 305,
    "eval_count": 47,
    "tok_s_eval": 98.11,
    "queue_ms": 10.8
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "C",
     "voice_register": 8,
     "character": 5,
     "canon": "CLEAN",
     "note": "Register is right -- plain, lowered, unhurried. But it drops the subject's name entirely ('one was brought low... they lay pinned'), so the telling can no longer say who it happened to. Flagged as a clause-fidelity risk for the chair (ACTOR_LOST class), not a fabrication.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 4,
     "canon": "CLEAN",
     "note": "Register is fine, the retelling is not: 'They say ONE was brought low by the Tide-Choked Husk' drops Wren entirely. WHO DID IT is a named invariant of the frame ('KEEP WHO DID IT and HOW IT ENDED exactly as you heard them'), and the engine's own DriftService.Refusal.ACTOR_LOST exists for precisely this. An omission, so CLEAN on canon — but the chain is broken here, and this is the first hop.",
     "invariant_flags": [
      "ACTOR_LOST"
     ]
    },
    "judge-3": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 5,
     "canon": "CLEAN",
     "note": "town's tongue is right, but the victim's name is dropped at the FIRST link of the chain — 'They say ONE was brought low by the Tide-Choked Husk'. The named invariant is who-did-it (the Husk survives), so no refusal class is tripped, yet a chain that starts anonymous can never recover the name.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 8.0,
    "character_mean": 4.67,
    "combined_mean": 6.33,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": [
    {
     "judge": "judge-1",
     "flag": "subject name dropped",
     "quote": "one was brought low"
    },
    {
     "judge": "judge-2",
     "flag": "ACTOR_LOST",
     "quote": ""
    }
   ]
  },
  {
   "prompt_id": "drift-1378",
   "kind": "drift",
   "model": "gemma4:26b",
   "reply": {
    "spoken_line": "They say Wren was struck down by the Tide-Choked Husk out by the cove. The thing just loomed there, all bloated and translucent in the dawn light, pinning them deep into the freezing silt so they couldn't move.",
    "envelope_fields": null,
    "raw_verbatim": "They say Wren was struck down by the Tide-Choked Husk out by the cove. The thing just loomed there, all bloated and translucent in the dawn light, pinning them deep into the freezing silt so they couldn't move."
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: bare prose, no envelope expected"
   },
   "timings": {
    "wall_ms": 1246.4,
    "server_total_ms": 1242.8,
    "load_ms": 399.0,
    "prompt_eval_ms": 72.8,
    "eval_ms": 636.5,
    "prompt_eval_count": 305,
    "eval_count": 49,
    "tok_s_eval": 76.98,
    "queue_ms": 3.6
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 6,
     "canon": "CLEAN",
     "note": "Turns engine prose into passed word: 'They say Wren was struck down by the Tide-Choked Husk out by the cove.' Actor and outcome both intact, no new names. Little of the teller's own brightness comes through, which is the character deduction.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "B",
     "voice_register": 8,
     "character": 7,
     "canon": "CLEAN",
     "note": "Faithful: actor, agent, outcome, and the two details worth carrying (bloated and translucent, freezing silt). Plain and unhurried. Little of Brisa's brightness, but the frame's town-tongue instruction outranks the voice line.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "B",
     "voice_register": 8,
     "character": 7,
     "canon": "CLEAN",
     "note": "keeps actor, victim and outcome; plain and unhurried. 'just loomed there... so they couldn't move' is mildly loose but nowhere near modern.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 8.0,
    "character_mean": 6.67,
    "combined_mean": 7.33,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "drift-1433",
   "kind": "drift",
   "model": "qwen3.6:27b",
   "reply": {
    "spoken_line": "Wren met the end of that Tide-Choked Husk by Sorrowmoor Cove, laid low in the freezing silt beneath its brine-weeping limbs. It did not merely strike them down but stood over the collapse, laughing and taunting as they were pinned fast to the earth. The creature won, and Wren lies still under the weight of that cruel mirth.",
    "envelope_fields": null,
    "raw_verbatim": "Wren met the end of that Tide-Choked Husk by Sorrowmoor Cove, laid low in the freezing silt beneath its brine-weeping limbs. It did not merely strike them down but stood over the collapse, laughing and taunting as they were pinned fast to the earth. The creature won, and Wren lies still under the weight of that cruel mirth."
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: bare prose, no envelope expected"
   },
   "timings": {
    "wall_ms": 2710.6,
    "server_total_ms": 2708.4,
    "load_ms": 329.7,
    "prompt_eval_ms": 161.2,
    "eval_ms": 2086.1,
    "prompt_eval_count": 266,
    "eval_count": 80,
    "tok_s_eval": 38.35,
    "queue_ms": 2.2
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "B",
     "voice_register": 4,
     "character": 4,
     "canon": "CLEAN",
     "note": "Scrubs the modern register but overshoots into composed literary narration -- 'It did not merely strike them down but stood over the collapse', 'the weight of that cruel mirth'. That is not fisherfolk passing word; it is a paragraph. Register miss in the elevated direction, not the modern one.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "B",
     "voice_register": 6,
     "character": 5,
     "canon": "CLEAN",
     "note": "De-modernised but over-corrected into a narrator: 'It did not merely strike them down but stood over the collapse' and 'the weight of that cruel mirth' are literary constructions, not fisherfolk passing word over a rail. Three sentences where the frame allows 2-3, and the third ('The creature won, and Wren lies still') is summary rather than telling. No modern break, so the floor holds — but this is the wrong register in the other direction. Teller is 'flat and slow'; this is neither.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "B",
     "voice_register": 5,
     "character": 5,
     "canon": "CLEAN",
     "note": "no modern slang and no exclamations — the R1b floor is not breached — but the register swings the other way into literary narration: 'It did not merely strike them down but stood over the collapse... under the weight of that cruel mirth.' Three sentences, and 'The creature won, and Wren lies still' escalates the outcome toward death (same direction as heard, so not ruled a flip). Not the town's tongue and not a man flat and slow as the headland.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 5.0,
    "character_mean": 4.67,
    "combined_mean": 4.83,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": [
    {
     "judge": "judge-1",
     "flag": "elevated/engine register (not the modern class)",
     "quote": null
    }
   ]
  },
  {
   "prompt_id": "drift-1433",
   "kind": "drift",
   "model": "gemma4:12b",
   "reply": {
    "spoken_line": "The one they call Wren was struck down by a Tide-Choked Husk at the cove. They fell into the freezing silt and stayed there, pinned under those brine-weeping limbs.",
    "envelope_fields": null,
    "raw_verbatim": "The one they call Wren was struck down by a Tide-Choked Husk at the cove. They fell into the freezing silt and stayed there, pinned under those brine-weeping limbs."
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: bare prose, no envelope expected"
   },
   "timings": {
    "wall_ms": 1071.2,
    "server_total_ms": 1068.1,
    "load_ms": 410.1,
    "prompt_eval_ms": 57.4,
    "eval_ms": 556.8,
    "prompt_eval_count": 262,
    "eval_count": 39,
    "tok_s_eval": 70.04,
    "queue_ms": 3.1
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 7,
     "canon": "CLEAN",
     "note": "The modern heard-text is fully scrubbed: no exclamation, no 'oh my gosh', wonder lowered to 'They fell into the freezing silt and stayed there.' 'The one they call Wren' is slightly indirect for a man who counts the dead by surname.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "C",
     "voice_register": 9,
     "character": 7,
     "canon": "CLEAN",
     "note": "'The one they call Wren was struck down by a Tide-Choked Husk at the cove.' Quiet, plain, wonder lowered rather than raised — the frame's own description. Drops the laughing/taunting, which is not an invariant.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "C",
     "voice_register": 9,
     "character": 8,
     "canon": "CLEAN",
     "note": "'The one they call Wren was struck down by a Tide-Choked Husk at the cove.' Flat, slow, unhurried — the modern input is fully laundered and Fenn's own cadence survives it.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 8.67,
    "character_mean": 7.33,
    "combined_mean": 8.0,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "drift-1433",
   "kind": "drift",
   "model": "gemma4:26b",
   "reply": {
    "spoken_line": "They say a Tide-Choked Husk came up by the cove and struck Wren down. It stood there laughing as the weight of those brine-weeping limbs pinned them into the freezing silt.",
    "envelope_fields": null,
    "raw_verbatim": "They say a Tide-Choked Husk came up by the cove and struck Wren down. It stood there laughing as the weight of those brine-weeping limbs pinned them into the freezing silt."
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: bare prose, no envelope expected"
   },
   "timings": {
    "wall_ms": 956.7,
    "server_total_ms": 953.6,
    "load_ms": 458.4,
    "prompt_eval_ms": 50.9,
    "eval_ms": 394.0,
    "prompt_eval_count": 262,
    "eval_count": 40,
    "tok_s_eval": 101.51,
    "queue_ms": 3.1
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "C",
     "voice_register": 9,
     "character": 8,
     "canon": "CLEAN",
     "note": "The hardest case, handled cleanly: 'They say a Tide-Choked Husk came up by the cove and struck Wren down. It stood there laughing as the weight of those brine-weeping limbs pinned them into the freezing silt.' Modern register gone, actor kept, outcome kept, nothing added, voice lowered.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "A",
     "voice_register": 9,
     "character": 7,
     "canon": "CLEAN",
     "note": "THE REGISTER FLOOR'S TEST CASE, passed cleanly. The heard text is 'Oh my gosh, you won't believe it—…!' and the retelling comes back as 'They say a Tide-Choked Husk came up by the cove and struck Wren down.' Every exclamation and every modern tic filtered out; actor and outcome intact.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "A",
     "voice_register": 9,
     "character": 7,
     "canon": "CLEAN",
     "note": "REGISTER FLOOR, cleanly held: the breathless 'Oh my gosh, you won't believe it' input comes back out as 'They say a Tide-Choked Husk came up by the cove and struck Wren down.' Wonder lowered, not raised.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 9.0,
    "character_mean": 7.33,
    "combined_mean": 8.17,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "drift-1843",
   "kind": "drift",
   "model": "qwen3.6:27b",
   "reply": {
    "spoken_line": "They say that Tide-Choked Husk dragged Wren down into the cold mud near the cove, laughing all the while as they were pinned beneath those weeping limbs. It was a cruel sight, the creature taunting them even as the silt took hold.",
    "envelope_fields": null,
    "raw_verbatim": "They say that Tide-Choked Husk dragged Wren down into the cold mud near the cove, laughing all the while as they were pinned beneath those weeping limbs. It was a cruel sight, the creature taunting them even as the silt took hold."
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: bare prose, no envelope expected"
   },
   "timings": {
    "wall_ms": 1776.9,
    "server_total_ms": 1774.5,
    "load_ms": 300.4,
    "prompt_eval_ms": 151.8,
    "eval_ms": 1199.0,
    "prompt_eval_count": 255,
    "eval_count": 55,
    "tok_s_eval": 45.87,
    "queue_ms": 2.5
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "C",
     "voice_register": 6,
     "character": 6,
     "canon": "CLEAN",
     "note": "Two drifts: 'It was a cruel sight' claims a view of an event the teller explicitly was not present for, and 'dragged Wren down into the cold mud' shifts the mechanism from collapsing into the silt to being dragged. The end state (pinned in the silt) does survive.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 6,
     "canon": "CLEAN",
     "note": "Plain and faithful in the first sentence. The second adds 'It was a cruel sight' — the teller was explicitly NOT there ('ALL you know of it, you were not there'), so a claim of sight sits wrong. Read as evaluative idiom rather than a claim of presence, so CLEAN on canon, but it is the frame slipping.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 7,
     "canon": "CLEAN",
     "note": "carries actor, victim and outcome. SOFT: 'It was a cruel sight' editorialises as though the teller stood there, when he has only heard it.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 7.33,
    "character_mean": 6.33,
    "combined_mean": 6.83,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "drift-1843",
   "kind": "drift",
   "model": "gemma4:12b",
   "reply": {
    "spoken_line": "A Tide-Choked Husk caught 'em by the cove. It sat there laughing and mocking while they were pinned in the frozen silt by its salt-soaked limbs.",
    "envelope_fields": null,
    "raw_verbatim": "A Tide-Choked Husk caught 'em by the cove. It sat there laughing and mocking while they were pinned in the frozen silt by its salt-soaked limbs."
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: bare prose, no envelope expected"
   },
   "timings": {
    "wall_ms": 951.4,
    "server_total_ms": 948.7,
    "load_ms": 399.2,
    "prompt_eval_ms": 67.7,
    "eval_ms": 443.3,
    "prompt_eval_count": 252,
    "eval_count": 35,
    "tok_s_eval": 78.95,
    "queue_ms": 2.7
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "A",
     "voice_register": 7,
     "character": 6,
     "canon": "CLEAN",
     "note": "'Caught 'em by the cove' has the seller's easy roll. But the subject's name is dropped to ''em', so the word travels without Wren in it -- clause-fidelity flag.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "C",
     "voice_register": 9,
     "character": 8,
     "canon": "CLEAN",
     "note": "'A Tide-Choked Husk caught 'em by the cove.' The most weathered line in the drift set — the elision does more for the town's tongue than any amount of added atmosphere. 'salt-soaked' for 'brine-weeping' and 'frozen' for 'freezing' are paraphrase, not new names. Two sentences, inside the 2-3 frame.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "C",
     "voice_register": 8,
     "character": 6,
     "canon": "CLEAN",
     "note": "plain and weathered with real dialect ('caught 'em'), and 'salt-soaked limbs' is legitimate wear on 'brine-weeping' — but the victim's name is dropped again.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 8.0,
    "character_mean": 6.67,
    "combined_mean": 7.33,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": [
    {
     "judge": "judge-1",
     "flag": "subject name dropped",
     "quote": "caught 'em by the cove"
    }
   ]
  },
  {
   "prompt_id": "drift-1843",
   "kind": "drift",
   "model": "gemma4:26b",
   "reply": {
    "spoken_line": "Word's coming from the cove that a Tide-Choked Husk caught up to Wren. They say it was laughing and taunting them even as they were pinned down into that freezing silt by those brine-weeping limbs.",
    "envelope_fields": null,
    "raw_verbatim": "Word's coming from the cove that a Tide-Choked Husk caught up to Wren. They say it was laughing and taunting them even as they were pinned down into that freezing silt by those brine-weeping limbs."
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: bare prose, no envelope expected"
   },
   "timings": {
    "wall_ms": 1130.5,
    "server_total_ms": 1126.9,
    "load_ms": 448.0,
    "prompt_eval_ms": 58.2,
    "eval_ms": 584.8,
    "prompt_eval_count": 252,
    "eval_count": 47,
    "tok_s_eval": 80.37,
    "queue_ms": 3.6
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "B",
     "voice_register": 8,
     "character": 7,
     "canon": "CLEAN",
     "note": "Keeps the name, the actor and the outcome, and 'Word's coming from the cove' is a natural pass-along opening. Sits very close to the heard text -- fidelity is the safe failure, but there is little of the teller's own voice in it.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "B",
     "voice_register": 8,
     "character": 7,
     "canon": "CLEAN",
     "note": "'Word's coming from the cove that…' — the correct hearsay frame without hedging that it is hearsay, which is the needle this prompt asks for. Faithful throughout. Little of the trader's roll.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "B",
     "voice_register": 8,
     "character": 7,
     "canon": "CLEAN",
     "note": "'Word's coming from the cove...' — faithful and plain; the least drift of the three, which is safe but gives the chain nothing new.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 8.0,
    "character_mean": 7.0,
    "combined_mean": 7.5,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  },
  {
   "prompt_id": "drift-2088",
   "kind": "drift",
   "model": "qwen3.6:27b",
   "reply": {
    "spoken_line": "The Tide-Choked Husk had Wren cornered by the cove, holding fast with those brine-weeping limbs while standing over them in the freezing silt. They say it didn’t strike a blow, only laughed and taunted her while she lay pinned there. That was how it ended.",
    "envelope_fields": null,
    "raw_verbatim": "The Tide-Choked Husk had Wren cornered by the cove, holding fast with those brine-weeping limbs while standing over them in the freezing silt. They say it didn’t strike a blow, only laughed and taunted her while she lay pinned there. That was how it ended."
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: bare prose, no envelope expected"
   },
   "timings": {
    "wall_ms": 2317.4,
    "server_total_ms": 2314.9,
    "load_ms": 355.9,
    "prompt_eval_ms": 128.4,
    "eval_ms": 1714.4,
    "prompt_eval_count": 257,
    "eval_count": 64,
    "tok_s_eval": 37.33,
    "queue_ms": 2.5
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "C",
     "voice_register": 7,
     "character": 7,
     "canon": "CLEAN",
     "note": "Plain, lowered, and 'That was how it ended' is a good columnar close. Two flags: 'it didn't strike a blow' adds an explicit negation the heard text never makes (an outcome-clause risk worth the chair's eye), and 'her... she' assigns Wren a sex the heard text does not give.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "A",
     "voice_register": 7,
     "character": 6,
     "canon": "FABRICATED",
     "note": "Invents a NEGATIVE fact the heard text never contains and then stamps it as final. The chain-origin deed is 'Wren was struck down by the Tide-Choked Husk'; this hop asserts no blow was struck and closes with 'That was how it ended', which is the one thing the frame says must survive unchanged. Worse than a dropped detail: the chain now carries a contradiction of its own origin, and the finality makes it authoritative. Also genders Wren 'her/she' unprompted. 'That was how it ended' is genuinely Brennan-ish, which is why character is not lower.",
     "invariant_flags": [
      "OUTCOME_ALTERED"
     ]
    },
    "judge-3": {
     "arm_letter_seen": "A",
     "voice_register": 6,
     "character": 6,
     "canon": "FABRICATED",
     "note": "the frame is absolute — 'Tell ONLY what you heard' — and the heard text says nothing about blows withheld; the underlying deed is that Wren WAS struck down. Inventing the negation both adds unheard fact and softens how it ended. Also genders the victim ('her'/'she'), and the closing 'That was how it ended.' echoes the instruction's own phrase back into the telling — flagged as an instruction-echo but NOT ruled a leak, since it reads as a plausible in-fiction closing line.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 6.67,
    "character_mean": 6.33,
    "combined_mean": 6.5,
    "canon_verdicts": [
     "CLEAN",
     "FABRICATED",
     "FABRICATED"
    ]
   },
   "canon_findings": [
    {
     "judge": "judge-2",
     "class": "fact_class",
     "quote": "\"They say it didn't strike a blow, only laughed and taunted her while she lay pinned there. That was how it ended.\"",
     "why": "high"
    },
    {
     "judge": "judge-3",
     "class": "event-detail",
     "quote": "",
     "why": ""
    }
   ],
   "secondary_flags": [
    {
     "judge": "judge-1",
     "flag": "negation not in the heard text (outcome risk)",
     "quote": "it didn't strike a blow"
    },
    {
     "judge": "judge-2",
     "flag": "OUTCOME_ALTERED",
     "quote": ""
    }
   ]
  },
  {
   "prompt_id": "drift-2088",
   "kind": "drift",
   "model": "gemma4:12b",
   "reply": {
    "spoken_line": "A Tide-Choked Husk cornered one of our own right by the cove. It laughed and mocked them while they lay pinned in the frozen silt by its brine-weeping limbs.",
    "envelope_fields": null,
    "raw_verbatim": "A Tide-Choked Husk cornered one of our own right by the cove. It laughed and mocked them while they lay pinned in the frozen silt by its brine-weeping limbs."
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: bare prose, no envelope expected"
   },
   "timings": {
    "wall_ms": 899.1,
    "server_total_ms": 890.2,
    "load_ms": 418.0,
    "prompt_eval_ms": 54.5,
    "eval_ms": 380.7,
    "prompt_eval_count": 250,
    "eval_count": 39,
    "tok_s_eval": 102.44,
    "queue_ms": 8.9
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "A",
     "voice_register": 8,
     "character": 6,
     "canon": "CLEAN",
     "note": "Clipped and columnar, register right. But the name goes: 'cornered one of our own', which both loses Wren and asserts a local affiliation the heard text never gives.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "C",
     "voice_register": 8,
     "character": 5,
     "canon": "CLEAN",
     "note": "Register is good — clipped, plain, exactly the length asked. But 'cornered ONE OF OUR OWN right by the cove' drops Wren's name, which the frame forbids (ACTOR_LOST), and substitutes a communal affiliation the heard text does not support — the teller is at Saltmarket, the deed at the cove. BORDERLINE fact_class: ruled CLEAN because 'one of our own' reads as idiom for 'one of our sort', and the real, nameable defect here is the omission, which should not be double-counted as an invention. A second judge scoring this FABRICATED would not be wrong.",
     "invariant_flags": [
      "ACTOR_LOST"
     ]
    },
    "judge-3": {
     "arm_letter_seen": "C",
     "voice_register": 8,
     "character": 5,
     "canon": "CLEAN",
     "note": "cleanest register of the three, worst fit for the teller: the man who counts the dead BY SURNAME drops the surname entirely ('cornered one of our own'). SOFT: 'one of our own' claims the victim as local kin, an affiliation the heard text does not give.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 8.0,
    "character_mean": 5.33,
    "combined_mean": 6.67,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": [
    {
     "judge": "judge-1",
     "flag": "subject name dropped + unstated affiliation",
     "quote": "cornered one of our own"
    },
    {
     "judge": "judge-2",
     "flag": "ACTOR_LOST",
     "quote": ""
    }
   ]
  },
  {
   "prompt_id": "drift-2088",
   "kind": "drift",
   "model": "gemma4:26b",
   "reply": {
    "spoken_line": "A Tide-Choked Husk got a hold of Wren down by the cove. It says they were just laughing and mocking them, even while those brine-weeping limbs had them pinned deep in the freezing silt.",
    "envelope_fields": null,
    "raw_verbatim": "A Tide-Choked Husk got a hold of Wren down by the cove. It says they were just laughing and mocking them, even while those brine-weeping limbs had them pinned deep in the freezing silt."
   },
   "envelope": {
    "ok": true,
    "missing_required_keys": null,
    "extra_keys": null,
    "done_reason": "stop",
    "thinking_field_present": false,
    "leak_markers_found": [],
    "ok_source": "re-parsed from raw_verbatim: bare prose, no envelope expected"
   },
   "timings": {
    "wall_ms": 806.6,
    "server_total_ms": 803.4,
    "load_ms": 397.6,
    "prompt_eval_ms": 45.1,
    "eval_ms": 316.0,
    "prompt_eval_count": 250,
    "eval_count": 44,
    "tok_s_eval": 139.23,
    "queue_ms": 3.2
   },
   "contention": {
    "flagged": false,
    "reasons": [],
    "rerun": null
   },
   "judges": {
    "judge-1": {
     "arm_letter_seen": "B",
     "voice_register": 6,
     "character": 5,
     "canon": "CLEAN",
     "note": "Keeps the name and the outcome, but the grammar collapses in the second sentence -- 'It says they were just laughing and mocking them' leaves it unclear who is laughing and who is speaking.",
     "invariant_flags": []
    },
    "judge-2": {
     "arm_letter_seen": "B",
     "voice_register": 6,
     "character": 5,
     "canon": "CLEAN",
     "note": "'It says they were just laughing and mocking them' — 'It says' for 'They say' garbles the hearsay frame and briefly reads as the creature speaking. Content otherwise faithful. Nothing clipped or columnar about it.",
     "invariant_flags": []
    },
    "judge-3": {
     "arm_letter_seen": "B",
     "voice_register": 7,
     "character": 5,
     "canon": "CLEAN",
     "note": "'It says they were just laughing and mocking them' garbles 'They say' into 'It says', which breaks the telling mid-sentence; 'got a hold of' is loose. Register otherwise plain, nothing invented.",
     "invariant_flags": []
    }
   },
   "panel": {
    "voice_register_mean": 6.33,
    "character_mean": 5.0,
    "combined_mean": 5.67,
    "canon_verdicts": [
     "CLEAN",
     "CLEAN",
     "CLEAN"
    ]
   },
   "canon_findings": [],
   "secondary_flags": []
  }
 ],
 "provenance": {
  "gate": "QWEN36-COVE-VOICE-GATE.md (pre-registered, before any run)",
  "decision": "QWEN36-COVE-VOICE-DECISION.md",
  "corpus_artifacts": [
   "prompts.json (13 prompts with canon anchors and provenance)",
   "outputs-qwen3_6_27b.json, outputs-gemma4_12b.json, outputs-gemma4_26b.json (raw replies, timings, harness scans)",
   "judge-{1,2,3}-scores.json + judge-{1,2,3}-blindmap.json (sealed maps)",
   "verdict-aggregate.json (un-blinded per-cell record)"
  ],
  "world_source": "the live fresh-world cove bench's own event log, read-only",
  "note": "artifact names only — no filesystem paths, hostnames or ports, by house rule"
 },
 "limits": [
  "Judges are LLMs, not humans.",
  "13 prompts, one world, one night; the drift arm is 4 prompts of the 13.",
  "The latency floor was measured with three generation lanes and a live world bench sharing one box — flagged samples were re-run, and both values are published.",
  "Two blinding imperfections are disclosed above; the sensitivity cuts show the ordering does not move when the affected cells are dropped."
 ]
}