{
  "schema": "auroflow/agent-skill-recipes/v1",
  "status": "offline_fixtures_not_executed",
  "execute_as_is": false,
  "instructions": [
    "Todos los identificadores, revisiones y nombres con fixture son ficticios; no enviarlos al servicio.",
    "Sustituir por IDs nuevos persistidos y recursos propios observados; verificar derechos de referencias antes de usar approved=true.",
    "Las llamadas aquí son argumentos MCP reales, no recibos ni promesas de coste o disponibilidad.",
    "El planner no genera ni reserva IDs; no proseguir con execution_ready=false.",
    "Consultar disponibilidad, presupuestos de diálogo, propiedad, quote y compile antes de cualquier generación autorizada.",
    "Para nuevas producciones elegir engine=codex-luna-medium (gpt-6-luna/medium), único agente externo ofrecido; Antigravity está pausado y sus recibos históricos no cambian.",
    "engine=local sólo corresponde a preparación local explícita; no cambiar motores al recuperar el mismo ID. Flow/Nano Banana y la revisión local de audio conservan sus gates.",
    "cold_start_complete_film contiene placeholders <…> no enviables: vincularlos a IDs nuevos persistidos, IDs propios y revisiones observadas; validar el objeto vinculado antes de enviarlo."
  ],
  "human_audiovisual_approval": false,
  "discovery_scope_note": "Empezar por agent_start y una receta principal. Los catálogos condicionales se consultan sólo cuando una operación los necesita; no ejecutar toda la lista antes de planificar.",
  "discovery_calls": [
    {
      "name": "auroflow_agent_start",
      "arguments": {}
    },
    {
      "name": "auroflow_capabilities",
      "arguments": {
        "area": "film_studio"
      }
    },
    {
      "name": "auroflow_account",
      "arguments": {}
    }
  ],
  "conditional_discovery_calls": [
    {
      "name": "auroflow_capabilities",
      "arguments": {
        "area": "workflows"
      }
    },
    {
      "name": "auroflow_status",
      "arguments": {}
    },
    {
      "name": "auroflow_capabilities",
      "arguments": {}
    },
    {
      "name": "auroflow_credits",
      "arguments": {}
    },
    {
      "name": "auroflow_queue",
      "arguments": {}
    },
    {
      "name": "auroflow_capabilities",
      "arguments": {
        "area": "image_engines"
      }
    }
  ],
  "cases": [
    {
      "id": "short24",
      "intent": "Corto narrativo24s horizontal.",
      "calls": [
        {
          "name": "auroflow_plan_workflow",
          "arguments": {
            "request": {
              "id": "workflow-fixture-short24",
              "production_type": "film",
              "aspect": "16:9",
              "target_duration_seconds": 24,
              "cost_max": 0
            }
          }
        },
        {
          "name": "auroflow_plan_film",
          "arguments": {
            "request": {
              "id": "film-fixture-short-001",
              "production_type": "film",
              "summary": "Ejemplo narrativo original: una bibliotecaria ordena un libro y abre una nueva sección. Crear una historia sencilla de tres acciones, sin marcas ni hechos externos.",
              "shots": 3,
              "aspect": "16:9",
              "language": "Español de España",
              "style": "Cámara fija, luz natural cálida, misma mesa y libro azul en las tres tomas.",
              "engine": "codex-luna-medium",
              "auto_render": false,
              "cost_max": 0
            }
          }
        }
      ]
    },
    {
      "id": "tiktok15",
      "intent": "Ad15s vertical; observar preset vivo antes de preparar.",
      "calls": [
        {
          "name": "auroflow_plan_workflow",
          "arguments": {
            "request": {
              "id": "workflow-fixture-tiktok15",
              "production_type": "spot",
              "aspect": "9:16",
              "target_duration_seconds": 15,
              "cost_max": 0,
              "ad_preset": "tiktok-in-feed"
            }
          }
        },
        {
          "name": "auroflow_plan_film",
          "arguments": {
            "request": {
              "id": "film-fixture-tiktok-001",
              "production_type": "spot",
              "source_url": "https://auroflow.club/",
              "objective": "Explicar una utilidad verificable de la web para preparar vídeos.",
              "audience": "Pequeños comercios",
              "call_to_action": "Conoce Auro.",
              "ad_preset": "tiktok-in-feed",
              "target_duration_seconds": 15,
              "aspect": "9:16",
              "engine": "codex-luna-medium",
              "auto_render": false,
              "cost_max": 0
            }
          }
        }
      ]
    },
    {
      "id": "documentary24",
      "intent": "Sólo plantilla factual24s; requiere registro de fuentes sustituido y contrastado.",
      "calls": [
        {
          "name": "auroflow_plan_workflow",
          "arguments": {
            "request": {
              "id": "workflow-fixture-documentary24",
              "production_type": "documentary",
              "aspect": "16:9",
              "target_duration_seconds": 24,
              "cost_max": 0
            }
          }
        },
        {
          "name": "auroflow_plan_film",
          "arguments": {
            "request": {
              "id": "film-fixture-documentary-001",
              "production_type": "film",
              "summary": "BORRADOR DE EJEMPLO: explicación didáctica sobre un proceso que debe respaldarse con el registro factual del encargo. No generar hasta sustituir este texto por hechos verificados y atribuciones. Identificar visuales como Recreación IA.",
              "shots": 3,
              "aspect": "16:9",
              "language": "Español de España",
              "style": "Recreación IA didáctica, presentador original, cámara fija.",
              "engine": "codex-luna-medium",
              "auto_render": false,
              "cost_max": 0
            }
          }
        }
      ]
    },
    {
      "id": "episode40",
      "intent": "Episodio40s con biblioteca propia; IDs aquí inexistentes.",
      "calls": [
        {
          "name": "auroflow_plan_workflow",
          "arguments": {
            "request": {
              "id": "workflow-fixture-episode40",
              "production_type": "series_episode",
              "aspect": "16:9",
              "target_duration_seconds": 40,
              "cost_max": 0,
              "continuity": {
                "character_id": "11111111-1111-4111-8111-111111111111",
                "voice_id": "22222222-2222-4222-8222-222222222222"
              }
            }
          }
        }
      ]
    },
    {
      "id": "reference15",
      "intent": "Dos tomas Ingredients con personaje/voz, fondo y objeto; no mezcla Frames.",
      "calls": [
        {
          "name": "auroflow_plan_workflow",
          "arguments": {
            "request": {
              "id": "workflow-fixture-reference15",
              "production_type": "ingredients",
              "aspect": "9:16",
              "target_duration_seconds": 15,
              "cost_max": 0,
              "continuity": {
                "character_id": "11111111-1111-4111-8111-111111111111",
                "voice_id": "22222222-2222-4222-8222-222222222222",
                "environment_upload_id": "img_00000000000000000000000000000000",
                "product_upload_id": "img_33333333333333333333333333333333"
              }
            }
          }
        }
      ],
      "shot_request_fixture": {
        "id": "api-fixture-reference-001",
        "prompt": "Cámara fija a la altura de los ojos. Mantener el encuadre, taller, iluminación y libro azul de las referencias. El personaje observa el libro sin moverlo. Una sola acción; sin texto añadido ni música.",
        "operation": "generate",
        "mode": "ingredients",
        "model": "Veo 3.1 - Lite [Lower Priority]",
        "aspect": "9:16",
        "duration_seconds": 8,
        "resolution": "720p",
        "audio": "native",
        "outputs": 1,
        "cost_max": 0,
        "agent_profile": {
          "mode": "disabled"
        },
        "ingredients": [
          {
            "upload_id": "img_00000000000000000000000000000000",
            "role": "environment",
            "approved": true
          },
          {
            "upload_id": "img_33333333333333333333333333333333",
            "role": "asset",
            "approved": true
          }
        ],
        "characters": [
          {
            "flow_character_id": "11111111-1111-4111-8111-111111111111",
            "display_name": "PERSONAJE_FIXTURE_NO_EXISTE",
            "role": "character",
            "approved": true
          }
        ],
        "voices": [
          {
            "speaker": "PERSONAJE_FIXTURE_NO_EXISTE",
            "description": "Mantener la voz vinculada observada; este UUID es sólo fixture.",
            "flow_voice_id": "22222222-2222-4222-8222-222222222222",
            "display_name": "VOZ_FIXTURE_NO_EXISTE",
            "binding": "character",
            "character_id": "11111111-1111-4111-8111-111111111111",
            "approved": true
          }
        ],
        "dialogues": [
          {
            "speaker": "PERSONAJE_FIXTURE_NO_EXISTE",
            "text": "Conoce Auro.",
            "language": "es-ES",
            "delivery": "Natural y tranquila, misma voz y perspectiva.",
            "start_seconds": 0.5,
            "end_seconds": 7
          }
        ]
      },
      "validation_order": [
        "auroflow_quote",
        "auroflow_compile"
      ],
      "optional_diagnostic": "auroflow_preflight",
      "submit_once_only_after_live_zero_gates": {
        "name": "auroflow_generate_zero",
        "arguments": {
          "request": {
            "id": "api-fixture-reference-001",
            "prompt": "Cámara fija a la altura de los ojos. Mantener el encuadre, taller, iluminación y libro azul de las referencias. El personaje observa el libro sin moverlo. Una sola acción; sin texto añadido ni música.",
            "operation": "generate",
            "mode": "ingredients",
            "model": "Veo 3.1 - Lite [Lower Priority]",
            "aspect": "9:16",
            "duration_seconds": 8,
            "resolution": "720p",
            "audio": "native",
            "outputs": 1,
            "cost_max": 0,
            "agent_profile": {
              "mode": "disabled"
            },
            "ingredients": [
              {
                "upload_id": "img_00000000000000000000000000000000",
                "role": "environment",
                "approved": true
              },
              {
                "upload_id": "img_33333333333333333333333333333333",
                "role": "asset",
                "approved": true
              }
            ],
            "characters": [
              {
                "flow_character_id": "11111111-1111-4111-8111-111111111111",
                "display_name": "PERSONAJE_FIXTURE_NO_EXISTE",
                "role": "character",
                "approved": true
              }
            ],
            "voices": [
              {
                "speaker": "PERSONAJE_FIXTURE_NO_EXISTE",
                "description": "Mantener la voz vinculada observada; este UUID es sólo fixture.",
                "flow_voice_id": "22222222-2222-4222-8222-222222222222",
                "display_name": "VOZ_FIXTURE_NO_EXISTE",
                "binding": "character",
                "character_id": "11111111-1111-4111-8111-111111111111",
                "approved": true
              }
            ],
            "dialogues": [
              {
                "speaker": "PERSONAJE_FIXTURE_NO_EXISTE",
                "text": "Conoce Auro.",
                "language": "es-ES",
                "delivery": "Natural y tranquila, misma voz y perspectiva.",
                "start_seconds": 0.5,
                "end_seconds": 7
              }
            ]
          }
        }
      },
      "sequence_calls_after_both_owned_jobs_complete": [
        {
          "name": "auroflow_compile_sequence",
          "arguments": {
            "request": {
              "id": "seq-fixture-tiktok-001",
              "title": "EJEMPLO NO EJECUTADO — montaje15s",
              "assembly": "local",
              "aspect": "9:16",
              "cost_max": 0,
              "clips": [
                {
                  "job_id": "api-fixture-reference-001",
                  "variant": 1,
                  "trim_in": 0,
                  "trim_out": 7.5
                },
                {
                  "job_id": "api-fixture-reference-002",
                  "variant": 1,
                  "trim_in": 0,
                  "trim_out": 7.5
                }
              ],
              "audio": {
                "mode": "native_scene"
              },
              "finishing": {
                "audio_normalize": true,
                "target_lufs": -16,
                "true_peak_db": -2,
                "edge_fade_ms": 25,
                "seam_smoothing_ms": 0,
                "video_fade_ms": 120
              },
              "speech_ranges": [
                {
                  "start_seconds": 0,
                  "end_seconds": 15
                }
              ]
            }
          }
        },
        {
          "name": "auroflow_create_sequence",
          "arguments": {
            "request": {
              "id": "seq-fixture-tiktok-001",
              "title": "EJEMPLO NO EJECUTADO — montaje15s",
              "assembly": "local",
              "aspect": "9:16",
              "cost_max": 0,
              "clips": [
                {
                  "job_id": "api-fixture-reference-001",
                  "variant": 1,
                  "trim_in": 0,
                  "trim_out": 7.5
                },
                {
                  "job_id": "api-fixture-reference-002",
                  "variant": 1,
                  "trim_in": 0,
                  "trim_out": 7.5
                }
              ],
              "audio": {
                "mode": "native_scene"
              },
              "finishing": {
                "audio_normalize": true,
                "target_lufs": -16,
                "true_peak_db": -2,
                "edge_fade_ms": 25,
                "seam_smoothing_ms": 0,
                "video_fade_ms": 120
              },
              "speech_ranges": [
                {
                  "start_seconds": 0,
                  "end_seconds": 15
                }
              ]
            }
          }
        }
      ]
    },
    {
      "id": "arbitrary25",
      "intent": "Plan25s exactos a24fps; revisar budgets/trims devueltos sin acelerar voz.",
      "calls": [
        {
          "name": "auroflow_plan_workflow",
          "arguments": {
            "request": {
              "id": "workflow-fixture-arbitrary25",
              "production_type": "film",
              "aspect": "16:9",
              "target_duration_seconds": 25,
              "cost_max": 0
            }
          }
        }
      ]
    },
    {
      "id": "blocked1200",
      "intent": "Planificar20min no habilita máster: observar blockers y no generar.",
      "calls": [
        {
          "name": "auroflow_plan_workflow",
          "arguments": {
            "request": {
              "id": "workflow-fixture-blocked1200",
              "production_type": "documentary",
              "aspect": "16:9",
              "target_duration_seconds": 1200,
              "cost_max": 0
            }
          }
        }
      ],
      "expected_execution_ready": false
    }
  ],
  "render_after_observed_draft": {
    "name": "auroflow_render_film_zero",
    "arguments": {
      "film_id": "film-fixture-short-001",
      "request": {
        "revision": 1,
        "cost_max": 0,
        "cast_mode": "library",
        "character_id": "11111111-1111-4111-8111-111111111111"
      }
    }
  },
  "recover_uncertain_film": {
    "name": "auroflow_resume_film",
    "arguments": {
      "film_id": "film-fixture-short-001",
      "request": {
        "revision": 1,
        "cost_max": 0
      }
    }
  },
  "recover_uncertain_shot": {
    "name": "auroflow_recover",
    "arguments": {
      "id": "api-fixture-reference-001",
      "cost_max": 0
    }
  },
  "review_completed_sequence_only": {
    "name": "auroflow_review_film_audio",
    "arguments": {
      "request": {
        "id": "review-fixture-tiktok-001",
        "sequence_id": "seq-fixture-tiktok-001",
        "cost_max": 0
      }
    }
  },
  "bible_template": {
    "title": "TÍTULO_DEL_ENCARGO",
    "aspect": "9:16",
    "character": {
      "character_id": null,
      "display_name": null,
      "portrait_sha256": null,
      "wardrobe": []
    },
    "voice": {
      "voice_id": null,
      "display_name": null,
      "preset": null,
      "performance": null,
      "requested_accent": null,
      "regional_accent_verified": false
    },
    "scene": {
      "camera": null,
      "framing": null,
      "lighting": null,
      "background": null,
      "props": []
    },
    "episodes": [],
    "human_audiovisual_approval": false
  },
  "image_creation_recipes": {
    "status": "offline_fixtures_not_executed_not_a_readiness_claim",
    "instructions": [
      "Elegir una única alternativa después de leer el catálogo; no ejecutar las dos llamadas alias/default como dos intentos.",
      "Omitir engine conserva Flow Nano Banana y sus huellas históricas; el explícito flow-nano-banana es compatible.",
      "El único agente externo ofrecido para imágenes es Codex Luna medio: la petición de imagen usa engine=codex-native-image, no el ID codex-luna-medium del director; Flow/Nano Banana sigue disponible.",
      "Codex nativo es opcional: requiere ready=true observado, autenticación ChatGPT y cuota ordinaria verificadas por el servidor; sin compras, claves API ni fallback de pago.",
      "El engine del guion no es el engine de imagen; no añadir image_engine o image_provider a plan_film.",
      "Respuesta incierta: leer o recuperar la misma operación lib; no enviar otro ID ni cambiar el alias para reintentar."
    ],
    "discovery_call": {
      "name": "auroflow_capabilities",
      "arguments": {
        "area": "image_engines"
      }
    },
    "flow_default_compatible_alias": {
      "name": "auroflow_create_image",
      "arguments": {
        "request": {
          "id": "lib-fixture-image-default-001",
          "display_name": "REFERENCIA_FIXTURE_NO_EXISTE",
          "prompt": "Ilustración original de un pequeño libro azul sobre una mesa de madera, luz cálida, sin texto ni marcas. Una sola referencia visual, sin personas reales.",
          "approved": true,
          "cost_max": 0
        }
      }
    },
    "flow_explicit_equivalent_alternative_do_not_call_both": {
      "name": "auroflow_create_image",
      "arguments": {
        "request": {
          "id": "lib-fixture-image-default-001",
          "display_name": "REFERENCIA_FIXTURE_NO_EXISTE",
          "prompt": "Ilustración original de un pequeño libro azul sobre una mesa de madera, luz cálida, sin texto ni marcas. Una sola referencia visual, sin personas reales.",
          "approved": true,
          "cost_max": 0,
          "engine": "flow-nano-banana"
        }
      }
    },
    "codex_optional_only_after_observed_ready": {
      "name": "auroflow_create_image",
      "arguments": {
        "request": {
          "id": "lib-fixture-image-codex-001",
          "display_name": "REFERENCIA_FIXTURE_NO_EXISTE",
          "prompt": "Ilustración original de un pequeño libro azul sobre una mesa de madera, luz cálida, sin texto ni marcas. Una sola referencia visual, sin personas reales.",
          "approved": true,
          "cost_max": 0,
          "engine": "codex-native-image"
        }
      }
    },
    "read_same_codex_operation": {
      "name": "auroflow_get",
      "arguments": {
        "id": "lib-fixture-image-codex-001"
      }
    },
    "recover_same_codex_operation_if_uncertain": {
      "name": "auroflow_recover",
      "arguments": {
        "id": "lib-fixture-image-codex-001",
        "cost_max": 0
      }
    },
    "owned_resource_fields_to_read_after_completion": [
      "response.operation.state",
      "response.operation.resource.upload_id",
      "response.operation.resource.image_url",
      "response.operation.resource.sha256",
      "response.operation.resource.size_bytes",
      "response.operation.resource.width",
      "response.operation.resource.height",
      "response.operation.resource.engine",
      "response.operation.resource.model",
      "response.operation.resource.agent_model",
      "response.operation.resource.image_model_observed",
      "response.operation.resource.billing",
      "response.operation.resource.additional_credit_spend",
      "response.operation.cost"
    ],
    "field_scope_note": "Los campos engine/agent_model/billing son específicos de la ruta Codex; un campo observado ausente o null no se rellena con un modelo supuesto. La imagen es upload, no Character ni voz.",
    "image_model_observed_may_be_null": true,
    "create_character_only_after_own_image_and_voice_observed": {
      "name": "auroflow_create_character",
      "arguments": {
        "request": {
          "id": "lib-fixture-character-from-image-001",
          "display_name": "PERSONAJE_FIXTURE_NO_EXISTE",
          "image_upload_id": "img_00000000000000000000000000000000",
          "voice_id": "22222222-2222-4222-8222-222222222222",
          "info": "Resolver upload propio completado y voz propia observada antes de enviar; estos identificadores son fixtures.",
          "approved": true,
          "cost_max": 0
        }
      }
    },
    "human_audiovisual_approval": false,
    "live_execution_verified": false
  },
  "cold_start_complete_film": {
    "status": "non_sendable_template_offline_contract_checked_not_live_evidence",
    "execute_as_is": false,
    "purpose": "Película horizontal de 24 s, tres fuentes de 8 s, desde resumen. No presupone contexto de chat ni recursos existentes.",
    "bindings": {
      "<PERSISTED_WORKFLOW_ID>": "ID workflow-… nuevo y guardado antes de planificar; el planner no lo reserva.",
      "<NEW_FILM_ID>": "ID film-… nuevo y petición canónica persistidos antes del primer POST; conservarlo en todas las lecturas y recuperaciones.",
      "<DRAFT_REVISION>": "Entero response.project.revision leído cuando draft_ready, inmediatamente antes de guardar.",
      "<SAVED_REVISION>": "Entero response.project.revision devuelto por guardar y confirmado antes de renderizar; no reutilizar DRAFT_REVISION.",
      "<OBSERVED_SEQUENCE_ID>": "response.project.sequence_id del mismo film completado, confirmado por auroflow_get.",
      "<NEW_REVIEW_ID>": "ID review-… nuevo para esa entrega/SHA, persistido antes de solicitar la revisión."
    },
    "preconditions": [
      "Encargo de producir esta pieza autorizado; ninguna plantilla añade autorización.",
      "Cuenta propia verificada, motor Codex listo/cuota ordinaria; quotes y preflight de las generaciones exactamente 0.",
      "Los campos visuales y la voz propuestos se revisan antes del render; el estilo no garantiza continuidad."
    ],
    "steps": [
      {
        "tool": "auroflow_agent_start",
        "arguments": {},
        "then": "Leer response.start, no confundir límites estáticos con controles vivos."
      },
      {
        "tool": "auroflow_capabilities",
        "arguments": {
          "area": "film_studio"
        },
        "then": "Comprobar motor, tipos y límites observados."
      },
      {
        "tool": "auroflow_account",
        "arguments": {},
        "then": "Usar la cuenta propia; revisar estado, créditos y cola antes de generación."
      },
      {
        "tool": "auroflow_plan_workflow",
        "arguments": {
          "request": {
            "id": "<PERSISTED_WORKFLOW_ID>",
            "production_type": "film",
            "aspect": "16:9",
            "target_duration_seconds": 24,
            "cost_max": 0
          }
        },
        "then": "Exigir execution_ready; conservar el plan. planned_* no son jobs observados."
      },
      {
        "tool": "auroflow_plan_film",
        "arguments": {
          "request": {
            "id": "<NEW_FILM_ID>",
            "summary": "Una bibliotecaria original invita al lector a elegir su próxima historia. Una biblioteca tranquila y un libro azul cerrado que no se mueve.",
            "production_type": "film",
            "engine": "codex-luna-medium",
            "shots": 3,
            "aspect": "16:9",
            "style": "Cine realista, luz cálida, paleta azul y crema, cámara fija.",
            "language": "Español de España",
            "dialogue_literals": [
              "Toda historia empieza con una pregunta.",
              "A veces, la respuesta estaba esperando cerca.",
              "Elige tu próxima historia. Yo te acompaño."
            ],
            "auto_render": false,
            "cast_mode": "auto",
            "cost_max": 0
          }
        },
        "then": "Un solo POST de creación; leer response.project.id y state. Un timeout se reconcilia por el ID persistido."
      },
      {
        "tool": "auroflow_get",
        "arguments": {
          "view": "next",
          "id": "<NEW_FILM_ID>"
        },
        "then": "Esperar según polling hasta draft_ready; resolver requires_input sin inventar datos."
      },
      {
        "tool": "auroflow_get",
        "arguments": {
          "id": "<NEW_FILM_ID>"
        },
        "then": "Leer guion, fuente y recibos completos; tomar DRAFT_REVISION. Contrastar los literales."
      },
      {
        "tool": "auroflow_save_film_script",
        "arguments": {
          "film_id": "<NEW_FILM_ID>",
          "request": {
            "revision": "<DRAFT_REVISION>",
            "cost_max": 0,
            "script": {
              "title": "La página que faltaba",
              "synopsis": "Una bibliotecaria invita al lector a elegir su próxima historia.",
              "character": "Bibliotecaria adulta original, cabello corto castaño, camisa azul y gafas redondas.",
              "continuity": "Misma bibliotecaria y voz, biblioteca tranquila, luz cálida, cámara fija y libro azul cerrado e inmóvil sobre la mesa.",
              "shots": [
                {
                  "title": "La búsqueda",
                  "visual": "La bibliotecaria mira el libro azul cerrado sobre la mesa y después a cámara, sin moverlo.",
                  "dialogue": "Toda historia empieza con una pregunta.",
                  "sound": "Ambiente suave de biblioteca, sin música."
                },
                {
                  "title": "La pista",
                  "visual": "La misma bibliotecaria señala suavemente el libro azul cerrado sobre la mesa, sin moverlo.",
                  "dialogue": "A veces, la respuesta estaba esperando cerca.",
                  "sound": "Mismo ambiente suave, sin música."
                },
                {
                  "title": "La invitación",
                  "visual": "La bibliotecaria sonríe a cámara, con las manos quietas y el libro azul cerrado en el mismo lugar.",
                  "dialogue": "Elige tu próxima historia. Yo te acompaño.",
                  "sound": "Mismo ambiente suave, sin música."
                }
              ]
            }
          }
        },
        "then": "Enviar el guion COMPLETO una vez; releer y guardar SAVED_REVISION."
      },
      {
        "tool": "auroflow_get",
        "arguments": {
          "view": "next",
          "id": "<NEW_FILM_ID>"
        },
        "then": "Confirmar revisión/estado/intención. next_operation no autoriza renderizar."
      },
      {
        "tool": "auroflow_render_film_zero",
        "arguments": {
          "film_id": "<NEW_FILM_ID>",
          "request": {
            "revision": "<SAVED_REVISION>",
            "cost_max": 0,
            "cast_mode": "auto"
          }
        },
        "then": "Un solo POST de render dentro del encargo; el servidor crea imagen, voz y Character y valida cada fuente. No repetir por timeout."
      },
      {
        "tool": "auroflow_get",
        "arguments": {
          "view": "next",
          "id": "<NEW_FILM_ID>"
        },
        "then": "Consultar el mismo film y sus jobs; máximo de espera por ciclo de polling. Si hay error, diagnosticar y recuperar explícitamente el mismo ID/revisión."
      },
      {
        "tool": "auroflow_get",
        "arguments": {
          "id": "<NEW_FILM_ID>"
        },
        "then": "Exigir completed y tres jobs completos; guardar sequence_id, variantes, revisiones, SHA y recibos."
      },
      {
        "tool": "auroflow_get",
        "arguments": {
          "id": "<OBSERVED_SEQUENCE_ID>"
        },
        "then": "Comprobar entrega de 24 s y reproducirla con audio. Las capas opcionales se editan aparte y requieren revisar el SHA final."
      },
      {
        "tool": "auroflow_review_film_audio",
        "arguments": {
          "request": {
            "id": "<NEW_REVIEW_ID>",
            "sequence_id": "<OBSERVED_SEQUENCE_ID>",
            "cost_max": 0
          }
        },
        "then": "Solicitar una revisión ciega sin expected_dialogue; no equivale a aprobación humana."
      },
      {
        "tool": "auroflow_get",
        "arguments": {
          "id": "<NEW_REVIEW_ID>"
        },
        "then": "Consultar hasta estado final; contrastar transcripción después con los literales, conservar inconclusive y límites de voz/acento."
      }
    ],
    "library_alternative": {
      "replace_auto_not_add_second_render": true,
      "read": {
        "tool": "auroflow_capabilities",
        "arguments": {
          "area": "native_references"
        }
      },
      "selection": "Elegir un Character propio observado y su voz vinculada; no usar UUIDs de fixtures. Guardar nombre e IDs exactos. Si el pedido ya fija un personaje, no sustituirlo por auto.",
      "before_plan": "Sustituir cast_mode por library y añadir character_id propio observado; voice_id sólo si coincide con la voz ligada. Mantener esa elección al renderizar.",
      "if_selected_after_draft": "Identificar al Character observado en character y revisar los visual incompatibles para conservar su apariencia guardada; no repetir el nombre en pronombres o tomas de recurso compatibles. Guardar el guion completo preservando literalmente dialogue, continuity y demás campos compatibles; usar la revisión nueva. Si la acción no es compatible, resolverlo antes de renderizar.",
      "error": "film_cast_script_review_required conserva el borrador: revisar campos visuales, guardar objeto completo y releer. No crear otro film ni otra voz."
    },
    "optional_layers": "Después del montaje, leer la skill auroflow-graphics-layers sólo si se piden títulos o infografías; usar jobs/sequence propios observados y conservar el montaje base. No generar tomas para cambiar un título.",
    "error_policy": {
      "timeout": "Leer los mismos IDs; no repetir POST ni crear otros.",
      "revision_conflict": "Releer y contrastar estado; no copiar una revisión arbitraria.",
      "attention": "Resolver causa observada y persistir un único auroflow_resume_film con revisión actual y cost_max:0; luego consultar. Sin refresh_script para una mera reconciliación.",
      "sequence": "Si sólo requiere recovery, auroflow_recover con sequence_id observado y cost_max:0; nunca volver a crearla por un timeout.",
      "cost": "Ante precio no cero o gate bloqueado, detener esa generación sin fallback de pago."
    },
    "review_limits": [
      "Este JSON es una plantilla de contrato, no prueba de generación ni gratuidad viva.",
      "completed significa resultado técnico; ASR/transcripción no certifica acento, timbre, continuidad visual ni aprobación humana.",
      "Ver y escuchar toda la entrega final, registrar defectos y el alcance efectivamente revisado."
    ]
  }
}
