{
  "project_id": "gacmai_20260716_010735",
  "assembly_prerequisites": {
    "outline_sha256": "a854a58cf5e8a628c9875f041660773202eba6d390ce93e53e0016984901dbe0",
    "accepted_batch_ranges": [[1,4],[5,8],[9,12]],
    "each_batch_must_have": ["immutable checksum", "deterministic validator pass", "evidence audit pass", "boundary continuity audit pass"],
    "assembler_must_reject": ["mutable alias", "early snapshot", "missing boundary audit", "wrong part sequence", "outline checksum mismatch"]
  },
  "full_story_gates": {
    "narration_word_range": [14400,15000],
    "exact_parts": 12,
    "exact_named_cast": 6,
    "forbidden_named_cast": 0,
    "bare_surname_hits": 0,
    "role_surname_hits": 0,
    "duplicate_audit": "zero exact sentence/paragraph/ngram/near-duplicate violations",
    "evidence_audit": "E01-E09 setup/payoff/custody/claim limits pass",
    "continuity_audit": "P8 bottom; P10-P11 public counterattack; P12 closed aftercare",
    "editorial_audio_audit": "no meta language, no dense database dump, no repetitive proof template, suitable paragraph pacing",
    "intro_contract": "intro separate from prose; 2.0 seconds silence before narration"
  },
  "downstream_lock": {
    "tts_authorized": false,
    "visual_generation_authorized": false,
    "render_authorized": false,
    "publish_authorized": false,
    "authorization_rule": "Only a canonical story package passing every full-story gate may open TTS spend."
  }
}
