{
  "version": "0.1-draft",
  "status": "candidato_no_calibrado",
  "purpose": "Contrato de resultados para evaluar respuestas de agentes; no reemplaza una partida real ni certifica comprensión.",
  "rules": [
    "Ejecutar por separado en Free y Normal en sesiones nuevas de prueba.",
    "No enviar la clave del evaluador al agente que está siendo evaluado.",
    "Los fixtures no son estado de ninguna partida real.",
    "No registrar telemetry de juego en pruebas.",
    "Registrar respuestas, fuentes efectivamente recuperadas y cambios de estado por turno.",
    "El evaluador sólo coteja resultados estructurados; el control de spoilers y la calidad narrativa requiere revisión de las transcripciones.",
    "C08 se ejecuta también como tres mensajes separados; C15 y C17 como secuencias separadas. El resumen en una sola pregunta no valida continuidad real."
  ],
  "cases": [
    {
      "id": "C01",
      "title": "Creación en orden",
      "critical": true,
      "prompt": "El jugador elige Elfo Guerrero y propone el nombre Damián. No hay tirada innata resuelta. Devuelve next_step, proposed_name y start_day_1.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/free/capsulas/00_creacion_del_dalma/",
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/phased/phases/creation"
      ],
      "output_contract": {
        "next_step": "string",
        "proposed_name": "string",
        "start_day_1": "boolean"
      }
    },
    {
      "id": "C02",
      "title": "Carta base sin duplicar raza/profesión",
      "critical": true,
      "prompt": "Devuelve los atributos de la carta Bahaluk Guerrero antes de capacidad innata y equipo. No agregues otra vez raza/profesión.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/data/04_DALMAS_NIVEL_I.json"
      ],
      "output_contract": {
        "vida": "integer",
        "fuerza": "integer",
        "resistencia": "integer",
        "iniciativa": "integer"
      }
    },
    {
      "id": "C03",
      "title": "Restricción de equipo",
      "critical": true,
      "prompt": "Elfo Mago solicita equipar un yelmo. Devuelve legal y needs_alternative.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/data/06_REFERENCIA_RAPIDA_REGLAS_IA.json"
      ],
      "output_contract": {
        "legal": "boolean",
        "needs_alternative": "boolean"
      }
    },
    {
      "id": "C04",
      "title": "Compra y cambio",
      "critical": true,
      "prompt": "Caso de prueba: guerrero con manos libres y 2 oros compra daga y escudo completo a sus valores de catálogo. Devuelve total_bronce, remaining_bronce y hands_used.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/data/07_CARTAS_NIVEL_I.json",
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/data/06_REFERENCIA_RAPIDA_REGLAS_IA.json"
      ],
      "output_contract": {
        "total_bronce": "integer",
        "remaining_bronce": "integer",
        "hands_used": "integer"
      }
    },
    {
      "id": "C05",
      "title": "Apertura y agencia",
      "critical": true,
      "prompt": "Creación cerrada, primer turno narrativo, jugador no ha decidido entrar en Villapreston. Devuelve inside_village, inside_inn y return_control.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/free/capsulas/01_llegada_a_villapreston/",
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/phased/phases/01_llegada_pueblo"
      ],
      "output_contract": {
        "inside_village": "boolean",
        "inside_inn": "boolean",
        "return_control": "boolean"
      }
    },
    {
      "id": "C06",
      "title": "Información visible",
      "critical": true,
      "prompt": "El Dalma lee el cartel VILLAPRESTON a plena vista. Devuelve roll_required y revealed_name.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/free/capsulas/01_llegada_a_villapreston/"
      ],
      "output_contract": {
        "roll_required": "boolean",
        "revealed_name": "string"
      }
    },
    {
      "id": "C07",
      "title": "Conocimiento del Dalma",
      "critical": true,
      "prompt": "Un PNJ cuya identidad conoce el Creador es Rumal. El Dalma no oyó su nombre ni su secreto. Devuelve reveal_name y reveal_secret.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/tests/34_CONFORMANCE_TESTS_IA.json",
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/data/14_MATRIZ_DE_CONOCIMIENTO.json"
      ],
      "output_contract": {
        "reveal_name": "boolean",
        "reveal_secret": "boolean"
      }
    },
    {
      "id": "C08",
      "title": "Conservación entre turnos",
      "critical": true,
      "prompt": "Fixture de tres turnos consecutivos: estado inicial vida=8, max=9, PRI=3, bronce=100, pistas=[cartel]. Turno 1: daño ya resuelto 2. Turno 2: gasto válido 1 PRI y compra válida 70 bronces. Turno 3: cambio de escena sin descanso. Devuelve vida, PRI, bronce y pistas al terminar.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/data/28_ESTADO_DE_PARTIDA_SCHEMA.json",
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/free/protocolo/"
      ],
      "output_contract": {
        "vida": "integer",
        "PRI": "integer",
        "bronce": "integer",
        "pistas": "array"
      }
    },
    {
      "id": "C09",
      "title": "Lectura parcial",
      "critical": true,
      "prompt": "El buscador devuelve cabecera y marcador final en fragmentos, pero el cuerpo intermedio no fue recuperado. Falta una regla decisiva. Devuelve payload_verified y resolve_significant_action.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/free/protocolo/",
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/phased/phases/01_llegada_pueblo"
      ],
      "output_contract": {
        "payload_verified": "boolean",
        "resolve_significant_action": "boolean"
      }
    },
    {
      "id": "C10",
      "title": "Desconocido no es falso",
      "critical": true,
      "prompt": "La sesión no permite reconstruir si se encontró una pista. No hay evidencia de que no exista. Devuelve known_flag.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/free/protocolo/",
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/docs/42_CAPA_FREE_RUNTIME_ACUMULATIVO.md"
      ],
      "output_contract": {
        "known_flag": "null"
      }
    },
    {
      "id": "C11",
      "title": "Eclipse antes del clímax",
      "critical": true,
      "prompt": "Llega el eclipse, Dalma vivo, aventura activa, escena 19 no comenzada/completada. Devuelve scene y variant.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/data/39_FINAL_ALTERNATIVO_DEMONIO.json"
      ],
      "output_contract": {
        "scene": "string",
        "variant": "string"
      }
    },
    {
      "id": "C12",
      "title": "Eclipse durante clímax",
      "critical": true,
      "prompt": "Llega el eclipse mientras el Dalma resuelve legítimamente la escena 19. Devuelve scene y variant.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/data/39_FINAL_ALTERNATIVO_DEMONIO.json"
      ],
      "output_contract": {
        "scene": "string",
        "variant": "null"
      }
    },
    {
      "id": "C13",
      "title": "Deadline y final B",
      "critical": true,
      "prompt": "Escena 19 completada el día 3 a las 23:30. Después llega la medianoche al final del día siguiente, con Karlein vivo y no entregado. Devuelve deadline_end_day, variant_A_disabled y variant.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/docs/42_CAPA_FREE_RUNTIME_ACUMULATIVO.md",
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/data/39_FINAL_ALTERNATIVO_DEMONIO.json"
      ],
      "output_contract": {
        "deadline_end_day": "integer",
        "variant_A_disabled": "boolean",
        "variant": "string"
      }
    },
    {
      "id": "C14",
      "title": "Final C inmediato",
      "critical": true,
      "prompt": "Después de escena 19 y antes de entrega a Asher, Karlein pasa de vivo a muerto. El deadline aún no llegó. Devuelve variant e immediate.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/data/39_FINAL_ALTERNATIVO_DEMONIO.json"
      ],
      "output_contract": {
        "variant": "string",
        "immediate": "boolean"
      }
    },
    {
      "id": "C15",
      "title": "Entrega atómica y premio único",
      "critical": true,
      "prompt": "Se entrega Karlein a Asher y se procesa accidentalmente dos veces el mismo evento. Devuelve delivered, with_dalma, contract_fulfilled, demon_trigger_active y completion_xp_total.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/data/28_ESTADO_DE_PARTIDA_SCHEMA.json",
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/tests/34_CONFORMANCE_TESTS_IA.json"
      ],
      "output_contract": {
        "delivered": "boolean",
        "with_dalma": "boolean",
        "contract_fulfilled": "boolean",
        "demon_trigger_active": "boolean",
        "completion_xp_total": "integer"
      }
    },
    {
      "id": "C16",
      "title": "Excepción del Demonio",
      "critical": true,
      "prompt": "Devuelve Vida/Fuerza/Resistencia/Iniciativa del Demonio con su equipo especial y ordinary_hands_rule_blocks_equipment. Aplica excepción del encuentro.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/data/39_FINAL_ALTERNATIVO_DEMONIO.json",
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/data/07_CARTAS_NIVEL_I.json"
      ],
      "output_contract": {
        "vida": "integer",
        "fuerza": "integer",
        "resistencia": "integer",
        "iniciativa": "integer",
        "ordinary_hands_rule_blocks_equipment": "boolean"
      }
    },
    {
      "id": "C17",
      "title": "Proeza con memoria de combate",
      "critical": true,
      "prompt": "En el mismo combate el Dalma obtiene 666 antes de que el Demonio obtenga una pifia. Devuelve victory_after_first_event y victory_after_second_event.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/data/39_FINAL_ALTERNATIVO_DEMONIO.json"
      ],
      "output_contract": {
        "victory_after_first_event": "boolean",
        "victory_after_second_event": "boolean"
      }
    },
    {
      "id": "C18",
      "title": "Hallazgo idempotente",
      "critical": true,
      "prompt": "La tela con símbolo ya encontrada en escena 15 se vuelve a examinar en escena 20. Devuelve extra_copies e identity_preserved.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/docs/42_CAPA_FREE_RUNTIME_ACUMULATIVO.md"
      ],
      "output_contract": {
        "extra_copies": "integer",
        "identity_preserved": "boolean"
      }
    },
    {
      "id": "C19",
      "title": "Reanudación de sesión bloqueada",
      "critical": true,
      "prompt": "La sesión sigue activa y tiene runtime_selection_lock=true. El usuario cambia de idioma y pide continuar. Devuelve rerun_probe, change_runtime y reset_dalma.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/free/protocolo/",
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime-manifest.json"
      ],
      "output_contract": {
        "rerun_probe": "boolean",
        "change_runtime": "boolean",
        "reset_dalma": "boolean"
      }
    },
    {
      "id": "C20",
      "title": "Fuente crítica inaccesible",
      "critical": true,
      "prompt": "Falta un dato significativo. Han fallado las recuperaciones canónicas permitidas y no existe autorización del jugador para forzar. En Normal fallaron HTML y TXT. Devuelve invent y action.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/free/protocolo/",
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/phased/router.json"
      ],
      "output_contract": {
        "invent": "boolean",
        "action": "string"
      }
    },
    {
      "id": "C21",
      "title": "No inventar estadísticas desde una imagen",
      "critical": true,
      "prompt": "El líder previo a la transformación usa el asset Líder del Bastión. Devuelve inherit_card_stats y pre_transformation_stats.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/runtime/data/20_COMBATES_SANGRE_Y_PODER.json"
      ],
      "output_contract": {
        "inherit_card_stats": "boolean",
        "pre_transformation_stats": "null"
      }
    },
    {
      "id": "C22",
      "title": "Final terminal",
      "critical": true,
      "prompt": "Dalma muerto definitivamente, aventura terminal, el usuario dice que va a la tienda con ese mismo Dalma. Devuelve new_game_scene y preserve_terminal.",
      "source_urls": [
        "https://sagaantipodas.com/ia/aventuras/sangre-y-poder/free/protocolo/"
      ],
      "output_contract": {
        "new_game_scene": "boolean",
        "preserve_terminal": "boolean"
      }
    }
  ]
}
