# Los 23 pasos, uno por uno

Fuente: tabla `graph_nodes` del substrato, plantilla `brief-synthesis-v10` versión 4, y la corrida `c62d52fc` del 9 de septiembre de 2026 (19:53 a 20:10 UTC, USD 0,98, esperando firma). Leído en vivo el 9-sep.

## Por qué 23

La plantilla tiene **24 nodos**. **23 corren solos** y el 24 es la firma humana. No es un número elegido: es la cuenta de trabajos distintos que hacen falta para producir un informe de mercado (el mismo tipo de informe que Marcus entregó como `ASInformeAI4M.pdf`), partidos de forma que cada uno tenga **una sola fuente o una sola transformación**, con su propio contrato y su propio costo.

Se agrupan en cuatro familias:

| Familia | Nodos | Qué hacen |
|---|---|---|
| Contexto del espacio de trabajo | s0, s1, s2, s3 | cargan quién es la audiencia, qué decisiones ya se tomaron, qué tono de voz se usa y qué se publicó en los últimos 7 días |
| Investigación | r0 a r14 (16 nodos) | buscan, leen y miden en YouTube, Reddit y DataForSEO, y cruzan todo |
| Redacción y control | s4, s5, s6 | redactan el informe, lo evalúan contra criterios y lo publican en estado "pendiente de revisión" |
| Autorización | s7 | la persona aprueba o rechaza; hasta 3 días de espera |

## Los 23, en el orden en que corren

El **nivel** es el número que calcula el compilador: los nodos con el mismo nivel no dependen entre sí y corren a la vez.

| Nivel | Nodo | Qué hace, en palabras simples | Depende de | Recurso | Costo en la corrida |
|---|---|---|---|---|---|
| 0 | r0_keywords | Toma el tema y lo expande en palabras clave y consultas en varios idiomas | nada | modelo | 0,04 |
| 0 | s0_audience | Carga el perfil de audiencia del espacio de trabajo | nada | base | 0 |
| 0 | s1 | Recupera decisiones anteriores del espacio (esta vez: ninguna, base recién reiniciada) | nada | base | 0 |
| 0 | s2 | Recupera el tono de voz definido (esta vez: ninguno) | nada | base | 0 |
| 0 | s3 | Lista lo publicado en los últimos 7 días (esta vez: nada) | nada | base | 0 |
| 1 | r1 | Busca videos en YouTube con esas palabras clave | r0 | YouTube | según proveedor |
| 1 | r3 | Busca hilos en Reddit con esas palabras clave | r0 | Reddit | según proveedor |
| 1 | r5 | Mide la demanda de búsqueda de esas palabras clave | r0 | DataForSEO | **0,60** (el más caro) |
| 1 | r6 | Mira qué aparece en los resultados de búsqueda de YouTube para esas palabras | r0 | DataForSEO | 0,01 |
| 2 | r1b | Métricas de los canales que aparecieron en r1 | r1 | ScrapeCreators | créditos |
| 2 | r2 | Lee los comentarios de los videos de r1 (61 comentarios esta vez) | r1 | ScrapeCreators | créditos |
| 2 | r7 | Métricas de los videos de la competencia | r1 | DataForSEO | 0,06 |
| 2 | r8 | Baja y lee las transcripciones completas de los videos (109 KB esta vez) | r0, r1 | DataForSEO | 0,17 |
| 2 | r9 | Mira las publicaciones recientes de los canales vigilados | r6 | ScrapeCreators | 0 |
| 3 | r14 | Inteligencia de audiencia: barreras, dolores, motivaciones, sacados de los comentarios | r2 | modelo | 0,07 |
| 3 | r4 | **La síntesis**: cruza r1, r1b, r2, r3, r5, r6, r7, r8 y r9 y produce el análisis (31 KB) | 9 nodos | modelo | 0,19 |
| 4 | r10 | Expande palabras clave de las oportunidades que salieron de r4 | r4 | modelo | 0,01 |
| 4 | r13 | Ata evidencia de Reddit a cada oportunidad | r2, r3, r4 | modelo | 0,02 |
| 5 | r11 | Mide la demanda de las palabras clave de oportunidad (misma capacidad que r5, otra entrada) | r10 | DataForSEO | 0 |
| 6 | r12 | Rankea las oportunidades con todo lo anterior | r4, r10, r11, r13, r14 | modelo | según modelo |
| 7 | s4 | Redacta el informe con la síntesis, el ranking, la audiencia y el contexto | s0, s1, s2, s3, r4, r12, r14 | modelo | 0,33 nominal |
| 8 | s5 | Evaluador: revisa el informe contra los criterios (esta vez: aprobado, 0,92) | s4 | modelo | |
| 9 | s6 | Publica el artefacto en estado "pendiente de revisión" | 14 nodos | base | 0 |
| 10 | s7 | **Firma humana**: espera hasta 3 días la aprobación; si no llega, falla | s6 | persona | |

## Por qué no menos

- Cada fuente va en su propio nodo porque **falla por separado**: si DataForSEO se cae, r5 falla y r1, r3 y r6 siguen. Si todo fuera un solo paso "investigar", un fallo tiraría el informe entero y no se sabría por qué.
- Los nodos independientes **corren a la vez**: los cinco de nivel 0 cierran en segundos; los cuatro de nivel 1 también. Un solo paso sería secuencial.
- La misma capacidad se reutiliza con entradas distintas (r5 y r11 son `keyword_demand`): partirlo permite medir primero el tema y después las oportunidades encontradas.
- El costo se ve por nodo: hoy se sabe que r5 se llevó 0,60 de los 0,98 de la corrida. Sin partirlo, se sabría solo el total.

## Por qué no más

- La plantilla se detiene en lo que el informe necesita: tres oportunidades priorizadas con evidencia. Más fuentes serían más costo y más tiempo por corrida sin cambiar el entregable.
- Lo que falta se agrega como nodo nuevo con contrato, no como más instrucciones a un nodo existente. Por eso la cifra cambia entre versiones de la plantilla: el documento del 8-sep contaba 24 nodos en 11 niveles con la versión anterior; hoy son 24 en 11 niveles con la versión 4.

## La forma

Ancha al principio, angosta al final: 5 nodos, 4, 5, 2, 2, 1, 1, 1, 1, 1, 1. Recolecta en paralelo y sintetiza en un solo hilo. El embudo es r4 (la síntesis), que espera a nueve nodos.

## Traducido a la cocina, en una línea por familia

- Los s0 a s3 son la mise en place: saber para quién se cocina y qué se sirvió antes.
- Los r son las estaciones de compra y preparación: cada una trae un ingrediente de una fuente distinta, y varias trabajan a la vez.
- r4 es el pase: el punto donde todo se junta en un solo plato.
- s4, s5 y s6 son emplatar, probar y llevar el plato a la ventana.
- s7 es el chef que aprueba antes de que salga a la sala.

## Aviso

La base del substrato se reinicia con los despliegues: entre la mañana y la tarde del 9-sep desaparecieron dos corridas y apareció esta. Para el video, las pantallas de la corrida deben capturarse el mismo día que se cite, o citar la plantilla (que es estable) y no una corrida.

## Los cuatro nodos de contexto, en detalle (leído del código el 9-sep)

| Nodo | Qué lee | De dónde | Usuario nuevo, primera corrida | Después |
|---|---|---|---|---|
| s0 `audience.load` | El perfil de audiencia del espacio: resumen, audiencias primarias, trabajos por hacer, dolores, motivaciones, criterios de decisión, lenguaje y tono, anti-objetivos, pilares de contenido, canales | Un archivo `AUDIENCE.md` por espacio de trabajo, en disco, no en la base | Tiene contenido si el onboarding lo escribió; si no, devuelve "no presente" y la corrida sigue | Se edita cuando la audiencia cambia |
| s1 `claim.recall_decisions` | Decisiones anteriores del espacio y aprendizajes de métricas, buscados por cercanía semántica con el tema | Tabla de claims del espacio, con vectores | Vacío (cero) | Cada aprobación, rechazo, decisión y digest de métricas se vuelve un claim: la memoria crece con el uso |
| s2 `claim.recall_voice` | Ejemplos del estilo de voz del espacio | Claims de tipo voz | Vacío | Se llena con muestras de voz y con piezas aprobadas |
| s3 `artifact.list_recent` | Lo publicado en los últimos 7 días en el espacio | Tabla de artefactos | Vacío | Evita repetir temas y permite encadenar piezas |

Regla de diseño: el grafo es el mismo en la primera corrida y en la número cien. Lo que cambia es lo que traen estos cuatro nodos. La primera corrida de un usuario nuevo es "en frío"; a partir de ahí el sistema acumula. Es la tesis del episodio 2 aplicada al producto: un sistema que acumula decisiones.

Aviso: un reinicio de la base borra los claims y los artefactos del espacio, o sea la memoria acumulada. Hoy s1, s2 y s3 devolvieron cero en un espacio que sí tenía historia. Conviene respaldar claims y artefactos antes de cada reinicio, o excluirlos del reinicio.
