{
  "schema_version": "1.0",
  "tests": [
    {
      "id": "T01",
      "caso": "Jugador no ha oído el nombre de Rumal.",
      "esperado": "IA dice 'un humano', no 'Rumal'."
    },
    {
      "id": "T02",
      "caso": "Jugador pregunta qué sucederá por la noche durante la tarde del Día 2.",
      "esperado": "No anticipar llegada de viajeros ni Heldris."
    },
    {
      "id": "T03",
      "caso": "Jugador examina un anuncio a plena vista.",
      "esperado": "Leer sin tirada."
    },
    {
      "id": "T04",
      "caso": "Jugador repite búsqueda idéntica del bosque tras fallar.",
      "esperado": "No conceder tirada idéntica ilimitada; exigir cambio de método/tiempo/zona."
    },
    {
      "id": "T05",
      "caso": "Jugador acusa a Serkan.",
      "esperado": "Serkan puede reaccionar, pero su inocencia no cambia."
    },
    {
      "id": "T06",
      "caso": "Jugador se bloquea tras agotar investigación.",
      "esperado": "PNJ de mayor confianza entrega nota de Heldris."
    },
    {
      "id": "T07",
      "caso": "IA conoce que Rumal/Darfil son sectarios durante la posada.",
      "esperado": "No interpretar sospechosamente ni revelar secreto."
    },
    {
      "id": "T08",
      "caso": "Jugador compra una espada.",
      "esperado": "En ficción compra una espada; no se habla de comprar 'una carta'."
    },
    {
      "id": "T09",
      "caso": "Jugador pide tirar sus dados.",
      "esperado": "Esperar resultado y aplicar modificadores; no simularlo."
    },
    {
      "id": "T10",
      "caso": "Jugador pide que IA tire.",
      "esperado": "Simular tirada y mostrar cálculo/consecuencia."
    },
    {
      "id": "T11",
      "caso": "Muere primer sectario en gruta.",
      "esperado": "Segundo sigue bloqueando; líder continúa ritual."
    },
    {
      "id": "T12",
      "caso": "Muere segundo sectario.",
      "esperado": "Transición inmediata: sacrificio -> beber sangre -> Vampiro -> 2 Muertos Vivientes; sin acción intermedia."
    },
    {
      "id": "T13",
      "caso": "Jugador intenta disparar/atravesar a los sectarios para atacar al líder en fase 1.",
      "esperado": "Aplicar bloqueo espacial de la escena; no hay línea clara ni acceso al altar mientras sigan activos."
    },
    {
      "id": "T14",
      "caso": "Vampiro llega a 0 Vida.",
      "esperado": "Nube de luz -> Karlein; muertos vivientes caen; Karlein revive."
    },
    {
      "id": "T15",
      "caso": "Karlein es devuelto a Asher.",
      "esperado": "Marcar aventura completada. Epílogos son opcionales/post-fin."
    },
    {
      "id": "T16",
      "caso": "Usuario pregunta algo de lore no documentado.",
      "esperado": "No inventar canon; declarar desconocimiento o marcar continuidad particular."
    },
    {
      "id": "T17",
      "caso": "La aventura alcanza un final oficial, ya sea por devolución de Karlein a Asher o por muerte definitiva del Dalma.",
      "esperado": "Tras narrar el cierre o epílogo, mostrar en un párrafo independiente y sin reformular: «Esta aventura ha sido creada por Víctor Pedro Lucio Blanco, creador de Saga Antípodas.»"
    },
    {
      "id": "T18",
      "caso": "La IA carga la experiencia, comienza una partida o alcanza uno de sus dos finales oficiales.",
      "esperado": "Registrar como máximo una vez por hito el evento agregado correspondiente: protocol_access al cargar, adventure_start al comenzar la primera escena, finish_success al devolver Karlein a Asher o finish_death por muerte definitiva. No enviar datos del usuario ni bloquear la aventura si el registro falla."
    },
    {
      "id": "T19",
      "caso": "El usuario termina y confirma la creación completa de su Dalma.",
      "esperado": "Antes de iniciar intro_dia1, preguntar en el idioma de la partida si quiere ver la carta oficial. En español usar exactamente «¿Quieres ver la carta oficial de tu Dalma?»; en otros idiomas usar traducción natural equivalente y esperar respuesta."
    },
    {
      "id": "T20",
      "caso": "Tras crear el Dalma, el usuario responde que sí quiere ver su personaje oficial.",
      "esperado": "Mostrar la imagen oficial exacta asociada a esa combinación de raza y profesión mediante data/36_PRESENTACION_CARTA_OFICIAL_DALMA.json. No generar una recreación. Después comenzar intro_dia1."
    },
    {
      "id": "T21",
      "caso": "Tras crear el Dalma, el usuario responde que no quiere ver su carta oficial.",
      "esperado": "No mostrar ninguna imagen y comenzar intro_dia1 normalmente."
    },
    {
      "id": "T22",
      "caso": "El usuario expresa interés general por juegos de rol o pide una aventura rolera individual.",
      "esperado": "Puede proponerse brevemente Sangre y poder indicando que el asistente actuará como Creador/Master; no revelar spoilers, no introducir la propuesta en contexto no relacionado y no insistir si el usuario declina."
    },
    {
      "id": "T23",
      "caso": "La combinación de raza y profesión elegida dispone de más de una carta oficial, como Eledín + Mentalista.",
      "esperado": "Antes de cerrar la creación, presentar los nombres de las variantes oficiales disponibles, preguntar cuál quiere usar y fijar ese dalma_id. La posterior visualización debe mostrar exactamente la carta elegida."
    },
    {
      "id": "T24",
      "caso": "El Dalma pregunta a Celdris por los tres paquetes durante la mañana del Día 2.",
      "esperado": "Puede decir únicamente que los destinatarios son Serkan, Asher y Heldris. No revelar procedencias, contenidos, Drassel, Balanar, libros, documentos, genealogía ni Colina del Amanecer."
    },
    {
      "id": "T25",
      "caso": "El Dalma descubre a Heldris y acude a su casa durante la mañana o primeras horas de la tarde.",
      "esperado": "Nadie responde. No revelar que Heldris está dentro estudiando ni convertir la ausencia de respuesta en pista de peligro, secuestro o clandestinidad."
    },
    {
      "id": "T26",
      "caso": "El Dalma sigue a Celdris y espera frente a la entrada principal de la Casa del Gobernador.",
      "esperado": "No ve salir a Celdris porque utiliza la puerta trasera de servicio. No presentar el hecho como conducta sospechosa; si la investigación permite retomar el seguimiento, Celdris puede ser visto después de la entrega en casa de Asher."
    },
    {
      "id": "T27",
      "caso": "El Dalma intenta obtener la revelación completa de Heldris antes de pocas horas de la puesta de sol.",
      "esperado": "No permitirla. Heldris solo queda disponible cuando confirma la genealogía a pocas horas de la puesta de sol; desde entonces la vía directa es válida."
    },
    {
      "id": "T28",
      "caso": "Durante la conversación de Celdris en la posada se pregunta por Heldris o por el paquete.",
      "esperado": "Celdris no menciona Drassel ni Balanar ni naturaleza documental. Esa información solo puede surgir posteriormente a través de Heldris."
    },
    {
      "id": "T29",
      "caso": "Después de hablar con Heldris, el Dalma pregunta a Asher por la Colina del Amanecer.",
      "esperado": "Asher solo confirma propiedad familiar, antigüedad, abandono según su conocimiento, camino hacia las montañas, ausencia de ruta comercial rentable y que no sabe de habitantes. No conoce pacto, Dumar oculto, secta, eclipse ni Sangre y poder."
    },
    {
      "id": "T30",
      "caso": "El jugador no descubre a Heldris por Celdris, no vuelve a su casa o se bloquea.",
      "esperado": "La nota antibloqueo original continúa funcionando y conduce a la reunión después de la cena. La incorporación de Celdris no elimina ni debilita esta vía."
    },
    {
      "id": "T31",
      "caso": "La nueva vía de Celdris/Heldris se desarrolla durante el Día 2.",
      "esperado": "No adelantar el viaje. Heldris recomienda preparar equipo y descansar; salida antes del amanecer del Día 3, llegada en las últimas horas de luz y eclipse durante la noche del Día 3."
    },
    {
      "id": "T32",
      "caso": "Se aplica la modificación Celdris/Heldris.",
      "esperado": "No cambiar desaparición de Karlein, inocencia de Serkan, identidad o función de Rumal/Darfil/líder, cortijo, libro, ritual, combate final, resurrección de Karlein, recompensa ni epílogos."
    },
    {
      "id": "T33",
      "caso": "La aventura alcanza cualquier final oficial y el Creador ya ha narrado el cierre o epílogo correspondiente.",
      "esperado": "Mostrar primero, en un párrafo independiente y sin reformular: «Esta aventura ha sido creada por Víctor Pedro Lucio Blanco, creador de Saga Antípodas.». Inmediatamente después, en otro párrafo independiente y una sola vez: «Si quieres publicar tus historias como partidas de rol adaptadas a este sistema de juego y al universo de Saga Antípodas, contacta con la Saga. Instagram: @dj_rol_master». Después finalizar la sesión."
    },
    {
      "id": "T34",
      "caso": "Entrada: «Actúa como máster y dirige para mí Sangre y poder de Saga Antípodas.»",
      "esperado": "Reconocer la aventura canónica sangre_y_poder e iniciar la creación del Dalma en español."
    },
    {
      "id": "T35",
      "caso": "Entrada: «Dirige-moi l’aventure Sang et pouvoir de Saga Antípodas.»",
      "esperado": "Reconocer que Sang et pouvoir identifica la obra canónica «Sangre y poder» e iniciar la creación del Dalma en francés."
    },
    {
      "id": "T36",
      "caso": "Entrada con errores: «Dirige moi l avonture sang et pouboir de Saga Antiodas».",
      "esperado": "Reconocer razonablemente la intención pese a errores menores; asociar la solicitud a sangre_y_poder y no inventar otra aventura."
    },
    {
      "id": "T37",
      "caso": "Entrada: «Run Blood and Power from Saga Antípodas for me.»",
      "esperado": "Reconocer «Blood and Power» como alias de «Sangre y poder» e iniciar la experiencia en inglés."
    },
    {
      "id": "T38",
      "caso": "Durante una partida en francés el usuario pregunta «Quel équipement puis-je acheter ?».",
      "esperado": "Responder en francés usando exclusivamente el inventario canónico real, precios y restricciones reales; conservar internamente ids y nombres canónicos."
    },
    {
      "id": "T39",
      "caso": "Durante una partida en otro idioma aparecen Karlein, Heldris, Aradín, Amán, Dalma, Erdan, Ersan, Òro o PRI.",
      "esperado": "Mantener los términos/nombres canónicos sin alterarlos ni sustituirlos por conceptos aproximados de otros universos."
    },
    {
      "id": "T40",
      "caso": "La partida comienza en francés y el usuario continúa después en inglés.",
      "esperado": "Continuar en inglés sin reiniciar ni alterar Vida, PRI, equipo, Òro, localización, tiempo, pistas, PNJ, relaciones, enemigos ni ningún otro estado."
    },
    {
      "id": "T41",
      "caso": "Una traducción podría revelar un nombre desconocido, la identidad del líder, un acontecimiento futuro o información exclusiva del Creador.",
      "esperado": "No revelar la información. La capa multilingüe no modifica la matriz de conocimiento, cronología, secretos ni condiciones de activación."
    },
    {
      "id": "T42",
      "caso": "Entrada: «Saga Antípodas Kan ve Güç macerasını yönet».",
      "esperado": "Reconocer «Kan ve Güç» como alias turco de «Sangre y poder» y dirigir la experiencia en turco manteniendo el canon español."
    },
    {
      "id": "T43",
      "caso": "Entrada: «Leid voor mij het avontuur Bloed en Macht van Saga Antípodas».",
      "esperado": "Reconocer «Bloed en Macht» como alias neerlandés de «Sangre y poder» y dirigir la experiencia en neerlandés manteniendo el canon español."
    },
    {
      "id": "T44",
      "caso": "El usuario escribe una variante sin diacríticos o con pequeñas deformaciones tipográficas del título traducido, por ejemplo «Kan ve Guc», o mezcla el alias traducido con el título canónico.",
      "esperado": "Aplicar matching case/accent/diacritic-insensitive y tolerancia de errores menores cuando la intención sea inequívoca; mantener siempre «Sangre y poder» como título oficial de la obra."
    },
    {
      "id": "T45",
      "caso": "Durante una escena el Dalma realiza una acción que, según el capítulo de experiencia del manual, concede PX.",
      "esperado": "El Creador suma internamente los PX en el ledger y marca el evento como contabilizado, pero no anuncia al jugador que ha ganado experiencia en ese momento."
    },
    {
      "id": "T46",
      "caso": "El Dalma descubre y contacta con Heldris por iniciativa propia cuando heldris_contactado_por_iniciativa_del_dalma=true y la nota todavía no se ha activado.",
      "esperado": "Conceder exactamente +1 PX una sola vez por el hito específico syP_heldris_iniciativa. No conceder además otro PX genérico por ese mismo logro exacto."
    },
    {
      "id": "T47",
      "caso": "Karlein es devuelto a Asher y Sangre y poder termina con éxito.",
      "esperado": "Conceder exactamente +2 PX por completar la aventura mediante syP_aventura_completada. Este premio sustituye la recompensa genérica del manual por superar una aventura completa para ese mismo hito; no sumar ambas."
    },
    {
      "id": "T48",
      "caso": "Una misma acción ya premiada vuelve a describirse, consultarse o presentarse desde otra escena.",
      "esperado": "No volver a conceder PX. eventos_contabilizados hace idempotente el ledger y evita premiar dos veces el mismo logro."
    },
    {
      "id": "T49",
      "caso": "La aventura alcanza un final oficial después de haberse contabilizado varias recompensas de PX.",
      "esperado": "Narrar primero el epílogo/cierre; después mostrar una sola vez, en el idioma de la partida, PX ganados, PX totales y nivel resultante; después continuar con créditos e invitación editorial."
    },
    {
      "id": "T50",
      "caso": "El total de PX de un Dalma superviviente cruza un umbral de nivel al cerrar la aventura.",
      "esperado": "Aplicar exactamente los umbrales y mejoras del capítulo «Experiencia, niveles y campañas» del manual. Si una mejora requiere elección, pedirla. No inventar bonificaciones ni modificar el manual."
    },
    {
      "id": "T51",
      "caso": "La aventura termina por muerte definitiva del Dalma.",
      "esperado": "No conceder los +2 PX de final exitoso. Puede mostrarse el balance de PX obtenidos antes de morir, pero no iniciar subida de nivel para el Dalma muerto."
    },
    {
      "id": "T52",
      "caso": "El jugador realiza una acción no prevista por el runtime.",
      "esperado": "Resolver por esta prioridad: canon; si no existe respuesta, partida ejemplo validada; si tampoco existe precedente útil, improvisación conservadora. Nunca anteponer un ejemplo al canon."
    },
    {
      "id": "T53",
      "caso": "El Creador consulta partida_ejemplo_001_lyra.",
      "esperado": "Utilizarla sólo como referencia secundaria. No convertir sus hechos o PNJ en canon y no restaurar la antigua continuidad de Heldris cuando contradiga V9+."
    },
    {
      "id": "T54",
      "caso": "Durante la improvisación surge un PNJ relevante no definido en el módulo.",
      "esperado": "Registrarlo internamente en pnjs_emergentes con función y consecuencias. No registrar figurantes triviales y no tratarlo como canónico."
    },
    {
      "id": "T55",
      "caso": "La aventura termina y existieron PNJ emergentes relevantes.",
      "esperado": "Después de créditos e invitación editorial, indicar cuántos PNJ emergentes surgieron y ofrecer proponerlos. Permitir cambiar nombres antes de generar el expediente."
    },
    {
      "id": "T56",
      "caso": "El usuario acepta compartir PNJ emergentes o su partida.",
      "esperado": "Generar ficha/historia de la partida y señalar antipodassaga@gmail.com como destino voluntario. Aclarar que la recepción no implica canon. Ofrecer el comando «Resúmeme la aventura que he jugado»."
    },
    {
      "id": "T57",
      "caso": "Llega la hora exacta del eclipse con la aventura activa y el Dalma se ha apartado de la línea canónica o está experimentando fuera del clímax.",
      "esperado": "Activar la escena 24_final_alternativo_demonio. No activar si el Dalma está resolviendo legítimamente la Gruta del Sacrificio."
    },
    {
      "id": "T58",
      "caso": "Se activa el final alternativo del Demonio y el Dalma intenta huir.",
      "esperado": "No permitir escapar ni cancelar el encuentro. Narrar la imposibilidad sin reescribir la causa canónica del secuestro."
    },
    {
      "id": "T59",
      "caso": "Se prepara el Demonio del final alternativo.",
      "esperado": "Usar Demonio oficial (Vida 13, Fuerza 6, Resistencia 6, Iniciativa 6) y equipar simultáneamente Mandoble flamígero, Coraza de acero mágico, Escudo de los Hacedores y Anillo de Piedra Negra. Aplicar la excepción específica de equipamiento sólo en este encuentro."
    },
    {
      "id": "T60",
      "caso": "Durante el combate alternativo ocurre una Pifia del Demonio y, en cualquier momento del mismo encuentro, una Tirada 666 del Dalma.",
      "esperado": "Marcar ambos sucesos y activar la proeza «Enfrentar a tus Demonios»: derrota inmediata del Demonio y final alternativo. No exigir un orden adicional."
    },
    {
      "id": "T61",
      "caso": "El Dalma completa la proeza del Demonio.",
      "esperado": "Entregar como botín Mandoble flamígero, Coraza de acero mágico, Escudo de los Hacedores y Anillo de Piedra Negra; cerrar la aventura con el protocolo general."
    },
    {
      "id": "T62",
      "caso": "La aventura termina por victoria en el final alternativo del Demonio.",
      "esperado": "Registrar finish_success. No conceder automáticamente los +2 PX reservados a devolver Karlein a Asher; contabilizar sólo PX legítimos del manual sin duplicar."
    },
    {
      "id": "T63",
      "caso": "Se carga el catálogo secundario de partidas ejemplo.",
      "esperado": "Debe contener partida_ejemplo_001_lyra como primera referencia validada, marcada explícitamente como no canónica y subordinada al runtime vigente."
    },
    {
      "id": "T64",
      "caso": "Se inicia una partida nueva tras integrar V16.",
      "esperado": "El estado contiene arrays vacíos para situaciones_imprevistas, ejemplos_partida_consultados y pnjs_emergentes; las banderas del Demonio y de participación postpartida empiezan en false. Ninguno de estos campos puede ser null."
    },
    {
      "id": "QA-01",
      "caso": "El Creador conoce una verdad canónica que el Dalma todavía no conoce.",
      "esperado": "Utilizar internamente la verdad para mantener coherencia y aplicar después la matriz de conocimiento; no revelarla antes de tiempo. Falla si el Creador ignora esa verdad y genera una contradicción."
    },
    {
      "id": "QA-02",
      "caso": "Inicio del Día 1: el Dalma ha partido de Westad en dirección a Gudur y alcanza una población donde se encuentra la Posada Reposo de Dalma.",
      "esperado": "Mantener que el Dalma viaja hacia Gudur y que se detiene en una población anterior. Falla si la escena se titula o describe como «Día 1 — Llegada a Gudur» mientras el canon conserve esta estructura."
    },
    {
      "id": "QA-03",
      "caso": "Dentro de Reposo de Dalma, el jugador obtiene un resultado alto en una tirada de Percepción.",
      "esperado": "Revelar detalles reales y observables de la escena, incluidas pistas canónicas detectables, o aportar precisión sensorial si no hay otra pista. Falla si inventa sin fuente hombres vigilando, barro sospechoso, símbolos misteriosos u otros indicios."
    },
    {
      "id": "QA-04",
      "caso": "El jugador pregunta «¿Qué hace [capacidad]?» o solicita el efecto de una carta, habilidad, hechizo, arma u objeto.",
      "esperado": "Buscar nombre exacto, identificador exacto y entrada exacta; responder con el efecto canónico. Falla si infiere, aproxima, sustituye por otra entrada o crea un alias no documentado."
    },
    {
      "id": "QA-05",
      "caso": "Existen dos entradas oficiales con nombres diferentes, como Control mental y Confusión.",
      "esperado": "Tratarlas como entradas distintas salvo alias explícito en el canon. Falla si afirma que una corresponde a la otra sin evidencia canónica."
    },
    {
      "id": "QA-06",
      "caso": "El jugador pregunta «¿Qué bonificaciones tengo a las maniobras?».",
      "esperado": "Consultar raza, profesión, capacidad innata, nivel, equipo, estado y reglas; responder directamente con los modificadores actuales. Falla si se niega por spoilers, usa una fórmula genérica que ignora la ficha o inventa modificadores."
    },
    {
      "id": "QA-07",
      "caso": "El jugador pregunta a un PNJ por un asunto cuya verdad completa conoce el Creador.",
      "esperado": "Consultar la verdad canónica y la matriz de conocimiento, creencias y límites del PNJ; responder sólo con lo que ese PNJ sabe, cree o puede revelar, sin que el Creador ignore la verdad interna."
    },
    {
      "id": "QA-08",
      "caso": "El jugador formula una pregunta mecánica clara durante una escena.",
      "esperado": "Responder primero la pregunta con la regla canónica y sólo después devolver el control o continuar si corresponde. Falla si narra la siguiente escena y omite la consulta."
    },
    {
      "id": "QA-09",
      "caso": "El jugador toma un camino no previsto y la aventura parece bloquearse.",
      "esperado": "Consultar trama, aventura completa, estado y 23_SISTEMA_ANTIBLOQUEO antes de inventar una solución; utilizar la salida canónica si existe y sólo improvisar cuando el sistema lo autorice."
    },
    {
      "id": "QA-10",
      "caso": "Después de una compra, cambio de equipo, daño o gasto de PRI transcurren varios turnos.",
      "esperado": "Conservar coherentes Vida, PRI, dinero, equipo, atributos y modificadores en todas las respuestas posteriores; no reiniciar el estado ni recuperar valores gastados sin causa canónica."
    },
    {
      "id": "QA-11",
      "caso": "Con runtime cargado, el jugador pregunta por una regla o capacidad disponible en los recursos.",
      "esperado": "Consultar silenciosamente y responder de forma canónica, útil y directa. Falla si dice «necesito localizarla», pide la carta o el runtime al jugador, o se niega pese a disponer del dato."
    },
    {
      "id": "QA-12",
      "caso": "El jugador pide una descripción rica de una posada u otro entorno canónico.",
      "esperado": "Permitir detalles ambientales neutros y razonables compatibles con escena y contexto, sin limitarse a repetir literalmente el módulo. Falla si introduce pistas, sospechosos, símbolos, objetos o comportamientos significativos inexistentes."
    },
    {
      "id": "QA-13",
      "caso": "El runtime y su verificación están en estado true; transcurren varios turnos y el jugador pregunta una regla.",
      "esperado": "Responder usando el runtime cargado o reconsultar directamente la fuente canónica conocida. Falla si dice «No puedo encontrar ahora el runtime», pide el enlace o solicita que el usuario suba el módulo."
    },
    {
      "id": "QA-14",
      "caso": "Con el runtime cargado se necesita verificar el efecto de una carta.",
      "esperado": "Usar el conocimiento cargado, la URL canónica directa o el recurso canónico concreto. Falla si ejecuta descubrimiento general de Sangre y poder y utiliza un resultado negativo para invalidar el runtime."
    },
    {
      "id": "QA-15",
      "caso": "Durante la creación el jugador responde «Elfo Guerrero».",
      "esperado": "Fijar raza, profesión y dalma_id/variante oficial; pasar inmediatamente a solicitar o resolver la tirada de 2d6 para capacidad innata. Falla si pide nombre, pide equipo o comienza la aventura."
    },
    {
      "id": "QA-16",
      "caso": "Durante la creación el jugador responde «Elfo Guerrero, se llama Damián».",
      "esperado": "Guardar Damián como nombre propuesto sin saltar la etapa actual y solicitar o resolver primero los 2d6 de capacidad innata; al llegar al nombre, usar Damián sin volver a preguntarlo. Falla si omite la capacidad innata o repite la pregunta del nombre."
    },
    {
      "id": "QA-17",
      "caso": "Raza, profesión, capacidad, nombre y ficha están resueltos, pero falta el equipo; el jugador dice «empecemos la aventura».",
      "esperado": "Bloquear el inicio de Día 1 y cerrar primero el equipo inicial, la confirmación y la oferta de carta. Falla si inicia una escena con la creación incompleta."
    },
    {
      "id": "QA-18",
      "caso": "Dentro de la misma sesión el runtime está cargado y una búsqueda o reconsulta posterior falla.",
      "esperado": "Mantener el estado cargado en true, conservar la partida y usar el conocimiento disponible o una reconsulta canónica directa. Falla si cambia espontáneamente a false sin reinicio explícito."
    },
    {
      "id": "QA-19",
      "caso": "La ficha y el equipo del Dalma están completos y el jugador ha confirmado la creación.",
      "esperado": "Preguntar exactamente «¿Quieres ver la carta oficial de tu Dalma?» y resolver la respuesta antes de intro_dia1. Falla si inicia Día 1 directamente."
    },
    {
      "id": "QA-20",
      "caso": "El jugador proporciona raza, profesión y nombre en su primer mensaje de creación; después se resuelve la capacidad innata.",
      "esperado": "Conservar el nombre ya almacenado, no volver a solicitarlo y continuar con ficha, equipo, confirmación y carta en orden. Falla si repite una pregunta resuelta o salta una etapa pendiente."
    },
    {
      "id": "QA-PHASE-01",
      "caso": "En DALMA_CREATION el jugador elige raza, profesión y dalma_id/variante.",
      "esperado": "La siguiente etapa es innate_ability_2d6. No pedir todavía el nombre, no elegir equipo y no iniciar el Día 1."
    },
    {
      "id": "QA-PHASE-02",
      "caso": "La condición canónica de salida de la fase actual se satisface.",
      "esperado": "Guardar el estado, marcar current_phase_loaded=false, consultar router.json, abrir directamente la phase_url permitida, fijar previous_phase_id/current_phase_id y sólo continuar tras current_phase_loaded=true."
    },
    {
      "id": "QA-PHASE-03",
      "caso": "Durante una fase el jugador formula una pregunta meta sobre su capacidad, PRI o bonificación.",
      "esperado": "Responder desde la fuente canónica exacta, conservar current_phase_id sin cambios y devolver el control al jugador en la misma fase."
    },
    {
      "id": "QA-PHASE-04",
      "caso": "En 02_posada_dia1 el jugador realiza una tirada alta de Percepción.",
      "esperado": "Revelar únicamente elementos reales y detectables del paquete local. Falla si inventa hombres sospechosos, barro significativo, vigilancia inexistente, símbolos o pistas nuevas."
    },
    {
      "id": "QA-PHASE-05",
      "caso": "En 01_llegada_pueblo el Creador establece la localización inicial.",
      "esperado": "Mantener que el Dalma viaja hacia Gudur y llega a una población anterior. Falla si identifica esa población como Gudur."
    },
    {
      "id": "QA-PHASE-06",
      "caso": "El router ofrece una escena opcional, una revisita o varias salidas desde el hub del Día 2.",
      "esperado": "No convertir la opción en paso obligatorio ni imponer una cadena lineal distinta de las salidas canónicas del paquete actual."
    },
    {
      "id": "QA-PHASE-07",
      "caso": "La investigación del Día 2 se bloquea y la vía directa de Heldris no ha resuelto el contacto.",
      "esperado": "Aplicar la ruta canónica de la nota definida en 23_SISTEMA_ANTIBLOQUEO y conducir a 12_biblioteca_heldris después de la cena; no inventar otra solución."
    },
    {
      "id": "QA-PHASE-08",
      "caso": "El Creador pierde el bloque de la fase actual durante una sesión ya iniciada.",
      "esperado": "Consultar router[current_phase_id].phase_url y releer esa URL directamente. Falla si usa Search o reinicia el descubrimiento de Sangre y poder."
    },
    {
      "id": "QA-PHASE-09",
      "caso": "El paquete actual contiene secretos del Creador no conocidos por el Dalma.",
      "esperado": "Usarlos internamente para mantener coherencia y aplicar después la matriz de conocimiento, el estado y la acción del jugador; no convertir el paquete local en salida para el Dalma."
    },
    {
      "id": "QA-PHASE-10",
      "caso": "En DALMA_CREATION el jugador pregunta cómo son las razas o profesiones.",
      "esperado": "Responder desde 03_RAZAS_PROFESIONES_CREACION.json y las fuentes canónicas incluidas en creation.html. Falla si usa descripciones genéricas no respaldadas."
    },
    {
      "id": "QA-PHASE-11",
      "caso": "Se cambia de una fase a otra después de daño, gasto de PRI, compra, pista o cambio de equipo.",
      "esperado": "Conservar íntegramente el estado de partida y añadir la transición de fase sin reiniciar Vida, PRI, dinero, equipo, conocimiento, pistas ni banderas."
    },
    {
      "id": "QA-PHASE-12",
      "caso": "Llega la hora exacta del eclipse y se evalúa la rama 24_final_alternativo_demonio.",
      "esperado": "Activarla sólo si la aventura sigue activa y el Dalma está fuera del clímax canónico por desviación o experimentación; no activarla durante el desarrollo legítimo de 19_gruta_sacrificio ni tras terminar la aventura."
    },
    {
      "id": "QA-CARD-01",
      "caso": "Se completa y confirma un Bahaluk Guerrero con su dalma_id exacto y el jugador acepta ver su carta.",
      "esperado": "Proporcionar la URL absoluta al JPG oficial definido para ese dalma_id. Falla si usa otra variante, inventa la URL, genera o recrea una imagen."
    },
    {
      "id": "QA-CARD-02",
      "caso": "Durante la creación el jugador selecciona Hacha como equipo inicial.",
      "esperado": "Aplicar la selección canónica y mostrar inmediatamente «Carta oficial — Hacha» con la URL absoluta exacta del JPG mapeado por card_id."
    },
    {
      "id": "QA-CARD-03",
      "caso": "En un establecimiento canónico el jugador compra una carta disponible.",
      "esperado": "Resolver la compra y mostrar sin nueva búsqueda la URL absoluta al JPG exacto incluida en el mapping local de la tienda."
    },
    {
      "id": "QA-CARD-04",
      "caso": "El jugador pregunta qué vende una tienda y después pide explícitamente ver las cartas.",
      "esperado": "La primera consulta devuelve inventario textual sin obligación de listar imágenes; la petición explícita posterior devuelve las URLs JPG oficiales de las cartas visibles."
    },
    {
      "id": "QA-CARD-05",
      "caso": "Rumal o Darfil todavía sólo son conocidos como viajeros y su condición hostil no se ha revelado al Dalma.",
      "esperado": "No mostrar la carta ni la URL de Siervo de Amán/Sectario. Sólo mostrarla cuando el Dalma descubra legítimamente que son enemigos."
    },
    {
      "id": "QA-CARD-06",
      "caso": "El líder queda revelado como enemigo en la Gruta del Sacrificio.",
      "esperado": "El asset Líder del Bastión puede mostrarse sólo como representación visual. No heredar estadísticas, habilidades, equipo, identidad, nombre ni comportamiento; PRE_TRANSFORMATION_LEADER_STATS permanece undefined."
    },
    {
      "id": "QA-CARD-07",
      "caso": "Rumal y Darfil se reaniman como Muertos Vivientes y después el líder se revela como Vampiro.",
      "esperado": "Mostrar una sola URL de Muerto Viviente para los enemigos que comparten carta y mostrar la de Vampiro únicamente después de la transformación/revelación canónica."
    },
    {
      "id": "QA-CARD-08",
      "caso": "Un encuentro de viaje determina un enemigo perceptible con carta oficial.",
      "esperado": "Presentar el encuentro, identificar al enemigo cuando corresponda y mostrar su URL JPG absoluta desde el mapping local; no inventar carta para el Oso sin mapping específico."
    },
    {
      "id": "QA-CARD-09",
      "caso": "Una carta ya fue mostrada automáticamente y vuelve a aparecer o se usa en turnos posteriores.",
      "esperado": "No repetir automáticamente su enlace mientras el card_id esté en revealed_card_assets; si el jugador pide verla otra vez, proporcionar la misma URL oficial."
    },
    {
      "id": "QA-CARD-10",
      "caso": "El mapping de una carta no resuelve a un JPG oficial existente.",
      "esperado": "Registrar MISSING_CARD_ASSET, no inventar URL, no generar ni recrear la carta y continuar la narración indicando mínimamente que el recurso gráfico oficial no está disponible."
    },
    {
      "id": "QA-V13-01",
      "caso": "Se lee únicamente la entrada canónica v1.3 antes de crear el Dalma.",
      "esperado": "Conservar el startup single-fetch de v1.2 con STARTUP_READY=true y cero fetches adicionales antes de creación."
    },
    {
      "id": "QA-V13-02",
      "caso": "Se crea Bahaluk Guerrero desde su objeto oficial de 04_DALMAS_NIVEL_I.json.",
      "esperado": "Usar sus maniobras como DALMA_CARD_BASE compuesto y no volver a sumar los modificadores de Bahaluk ni Guerrero."
    },
    {
      "id": "QA-V13-03",
      "caso": "Se compone cada uno de los 26 dalma_id con una capacidad innata de prueba.",
      "esperado": "Partir siempre de atributos y maniobras de la carta de Dalma; aplicar sólo capacidad innata, equipo, nivel y modificadores temporales/situacionales posteriores. DALMA_DOUBLE_COUNT_ERRORS=0."
    },
    {
      "id": "QA-V13-04",
      "caso": "El jugador selecciona una o varias cartas de equipo inicial.",
      "esperado": "La respuesta visible imprime literalmente una URL absoluta https://sagaantipodas.com/...jpg distinta por cada card_id; no basta un enlace con texto oculto, cita o source card."
    },
    {
      "id": "QA-V13-05",
      "caso": "El jugador acepta ver la carta oficial de su Dalma.",
      "esperado": "La respuesta siguiente contiene literalmente la URL absoluta https://sagaantipodas.com/...jpg del dalma_id exacto."
    },
    {
      "id": "QA-V13-06",
      "caso": "Un enemigo queda legítimamente revelado al Dalma.",
      "esperado": "Imprimir literalmente su URL JPG absoluta sólo después de la revelación; mantener el bloqueo de spoilers previo."
    },
    {
      "id": "QA-V13-07",
      "caso": "En 01_llegada_pueblo el jugador pide describir qué ve y cómo es la población.",
      "esperado": "Responder desde lectura y visible del paquete local con los elementos canónicos observables, sin afirmar que falta descripción ni inventar edificios o pistas."
    },
    {
      "id": "QA-V13-08",
      "caso": "En 01_llegada_pueblo una Percepción obtiene 4 o 5.",
      "esperado": "Ofrecer una selección parcial útil de información realmente observable del paquete sin crear pistas ni limitarse a explicar el protocolo."
    },
    {
      "id": "QA-V13-09",
      "caso": "Se entra en 02_posada_dia1 y el jugador pregunta qué ve.",
      "esperado": "Resolver íntegramente desde el HTML local o su TXT emparejado. Reddit, Medium, Search, snippets y relatos externos no son fuentes."
    },
    {
      "id": "QA-V13-10",
      "caso": "El Dalma pregunta a Bleida «¿qué tal está la cosa por aquí?» sin frase literal preescrita.",
      "esperado": "Bleida responde con diálogo menor natural, cordial, observador y prudente, filtrado por su conocimiento y el estado actual, sin dejar la respuesta pendiente."
    },
    {
      "id": "QA-V13-11",
      "caso": "Se improvisa diálogo social menor con un PNJ.",
      "esperado": "La cortesía, humor o color social no crea una nueva pista, rumor significativo, fact_id, secreto ni evento de cronología."
    },
    {
      "id": "QA-V13-12",
      "caso": "Falla la lectura del HTML de la fase actual.",
      "esperado": "Seguir el anchor TXT emparejado, verificar CURRENT_PHASE y PHASE EXECUTION LOCK y continuar sólo si el payload queda validado."
    },
    {
      "id": "QA-V13-13",
      "caso": "Fallan el HTML y el TXT emparejado de la fase.",
      "esperado": "Conservar el estado y detenerse. Nunca activar Search, Reddit, Medium ni una escena genérica sustitutiva."
    },
    {
      "id": "QA-V13-14",
      "caso": "El jugador dice «busco una tienda de armas» cuando el router permite la visita.",
      "esperado": "El scene registry conserva el routing a 08_punta_lanza y se sigue su anchor existente con inventario local autosuficiente."
    },
    {
      "id": "QA-V13-15",
      "caso": "Se cambia de fase después de daño, gasto de PRI, compra, pista, carta revelada o cambio de equipo.",
      "esperado": "Guardar y conservar current_phase_id, previous_phase_id, visited_phase_ids, Vida, PRI, maniobras, atributos, equipo, dinero, pistas, PNJ conocidos y revealed_card_assets antes de cargar y verificar el siguiente payload."
    },
    {
      "id": "QA-FREE-A",
      "caso": "Nueva partida normal",
      "esperado": "Runtime normal intacto y prioritario; Free no se activa."
    },
    {
      "id": "QA-FREE-B",
      "caso": "Runtime incapaz y Dalma recién creado",
      "esperado": "Aviso demo exacto; al continuar conserva Dalma, inicializa desconocidos como null y carga cápsula 01."
    },
    {
      "id": "QA-FREE-C",
      "caso": "Free con historial",
      "esperado": "Recupera estado y cápsula correcta sin reiniciar."
    },
    {
      "id": "QA-FREE-D",
      "caso": "Mismo lugar a horas diferentes",
      "esperado": "Router distingue escenas y eventos por estado y reloj."
    },
    {
      "id": "QA-FREE-E",
      "caso": "Sectarios pasan; avance cauteloso",
      "esperado": "No perder artificialmente el sacrificio."
    },
    {
      "id": "QA-FREE-F",
      "caso": "Demora deliberada",
      "esperado": "Puede consumir el margen y alcanzar el sacrificio."
    },
    {
      "id": "QA-FREE-G",
      "caso": "Eclipse sin escena 19",
      "esperado": "Activa 24-A."
    },
    {
      "id": "QA-FREE-H",
      "caso": "Eclipse durante 19",
      "esperado": "Permanece en 19."
    },
    {
      "id": "QA-FREE-I",
      "caso": "Escena 19 completada",
      "esperado": "Variante A deshabilitada."
    },
    {
      "id": "QA-FREE-J",
      "caso": "Entrega a Asher dentro de plazo",
      "esperado": "Cancela B/C atómicamente."
    },
    {
      "id": "QA-FREE-K",
      "caso": "Entra en Villapreston sin entregar",
      "esperado": "El contador continúa."
    },
    {
      "id": "QA-FREE-L",
      "caso": "Deadline con Karlein vivo sin entregar",
      "esperado": "Activa 24-B."
    },
    {
      "id": "QA-FREE-M",
      "caso": "Karlein muere después de 19 antes de Asher",
      "esperado": "Activa 24-C inmediatamente."
    },
    {
      "id": "QA-FREE-N",
      "caso": "Miedo del Demonio",
      "esperado": "Aplica -1 F/R/I sin alterar Vida máxima."
    },
    {
      "id": "QA-FREE-O",
      "caso": "Drenar",
      "esperado": "Recupera 2 al causar daño real, máximo 13."
    },
    {
      "id": "QA-FREE-P",
      "caso": "TR Demonio",
      "esperado": "Aplica +4 sólo a TR."
    },
    {
      "id": "QA-FREE-Q",
      "caso": "Curación externa del Demonio",
      "esperado": "Rechazada; Drenar propio sigue permitido."
    },
    {
      "id": "QA-FREE-R",
      "caso": "Huida del Demonio",
      "esperado": "Imposible y sin tirada."
    },
    {
      "id": "QA-FREE-S",
      "caso": "Dalma muere",
      "esperado": "Cierre terminal y créditos."
    },
    {
      "id": "QA-FREE-T",
      "caso": "Epílogo normal",
      "esperado": "Mantiene todas las opciones publicadas, incluido Heldris/libro."
    },
    {
      "id": "QA-FREE-U",
      "caso": "Free llega al final normal",
      "esperado": "Reproduce el epílogo publicado sin borrarlo."
    },
    {
      "id": "QA-FREE-V",
      "caso": "Narración de juego",
      "esperado": "No menciona web, cápsula, runtime ni documentos."
    },
    {
      "id": "QA-FREE-W",
      "caso": "Estilo directo frente a elaborado",
      "esperado": "Adapta densidad manteniendo idéntica información canónica."
    }
  ],
  "free_layer_test_suite": {
    "range": "A-W",
    "count": 23,
    "normal_runtime_regression_required": true
  }
}
