09
Cómo se compone, sin reinterpretar
Se declara la pieza y su dato; el contrato valida el carrusel entero y, si una regla falla, no entrega nada: devuelve los códigos con su mensaje en español, por ejemplo sphere-count-exceeded, chart-source-required o pizarra-run-exceeded. Una regla que depende de una decisión abierta devuelve pending-decision.
{
"contract": "efeonce.manzanitas-register",
"version": "0.3.0",
"register": "marketing-con-manzanitas",
"channel": "carousel",
"topicLine": "engine",
"slides": [
{ "piece": "cover-pizarra", "swipe": true,
"voice": { "question": "¿Qué revisa una IA antes de recomendarte?", "answer": "5 cosas" } },
{ "piece": "step-pizarra", "swipe": true,
"voice": { "question": "¿Qué no puede cambiar?", "answer": "Preservar" } },
{ "piece": "interior-escena", "swipe": true, "photo": { "register": "cine", "lightId": "sesion-1" },
"voice": { "question": "¿Qué prueba lo que dices?", "answer": "Evidencia" } },
{ "piece": "chart-ranking", "swipe": true,
"voice": { "question": "¿Cuánto más nombran al líder?", "answer": "4 veces" },
"chart": { "rows": [{ "label": "Líder de la categoría", "value": 46, "role": "leader" },
{ "label": "Tu marca", "value": 12, "role": "you" }],
"source": "[FUENTE, AÑO]", "illustrative": true } },
{ "piece": "back-cover-a", "slogan": true, "conversions": 1,
"voice": { "question": "¿Te nombra la IA?", "answer": "Pregúntale",
"sub": "En los comentarios: cuéntanos si te nombró." } }
]
}
pnpm manzanitas:resolve -- --input carrusel.json --out manifest.json
import { manzanitasRegister } from '@efeoncepro/axis-tokens'
import { resolveManzanitasRegisterIntent } from '@efeoncepro/axis-ui-contracts'
import { manzanitasChartSvg, runManzanitasChartChecks } from '@efeoncepro/axis-graphic-line/charts'
import { AXIS_MANZANITAS_ASSETS, manzanitasAssetUrl } from '@efeoncepro/axis-brand-assets'
const manifest = resolveManzanitasRegisterIntent(intent) // falla cerrado: status 'invalid' y ningún manifiesto
const chart = manzanitasChartSvg('ranking', slide.chart, { line: intent.topicLine })
runManzanitasChartChecks(chart).filter((c) => !c.ok) // debe quedar vacío
Ejemplos válidos e inválidos en docs/examples/manzanitas/; schema en docs/agent-composition/manzanitas-register-intent.schema.json.