Arquitectura del motor de Listas · V9 (27-10-2026, revisión 28-10 V11)

Documento rector de la arquitectura vigente. Describe cómo está construido el motor hoy (Plan V9: gerente SEO/AEO, Semrush a fondo, tandas encadenadas con control) y cómo se extiende. La historia vive en CHANGELOG.md (adendas); las reglas, en CLAUDE.md; los comandos, en docs/HERRAMIENTAS_CLI.md; el método paso a paso, en docs/RUNBOOK_AUDITORIAS_SEO_AEO.md; el índice de toda la documentación, en docs/INDICE_DOCUMENTACION.md. Estado vivo del día: CONTINUAR_AQUI_2026-10-28.md y la sección «Estado vivo» de docs/ARQUITECTURA.html, que tools/arquitectura_html.py rehace en cada plan (y corrige aquí las versiones citadas que quedaron viejas).

Versión del motor: 0.9.394 (MOTOR_VERSION), Kit Portable 1.154.0. Red: hub www.masterestaurant.com + 7 satélites (meseros.ai, costorestaurante.com, contenidorestaurante.com, restaurantescerca.com, restaurantecercademi.co, hospitalidad.ai, sateinstitute.org). 8.070 páginas vivas del motor (ES+EN, inventario del 28-10; el dato del día está en el estado vivo).


1 · Qué hace el motor (en una frase por capa)

flowchart LR
  subgraph F[Fuentes]
    GSC[Search Console] --- BING[Bing · Copilot] --- GA4 --- SEM[Semrush] --- UBS[Ubersuggest] --- ATP[AnswerThePublic]
  end
  F --> CAP[Captura y consolidación<br/>receptor_semrush · semrush_consolidar · exportadores]
  CAP --> GER[Gerente SEO/AEO<br/>gerente_seo_aeo 1.10.0]
  CAP --> TC[temas_competencia 1.3.1<br/>--decidir]
  CAP --> ESC[escalera_top10 1.6.0]
  GER --> COLAS[(cola/*.json<br/>objetivos · lotes · enlaces)]
  TC --> COLAS
  ESC --> COLAS
  COLAS --> TANDA[Lanzador de tanda<br/>.command en fila]
  TANDA --> EJ[Ejecución<br/>refuerzo · orquestar · transformar · enlaces · gen_pdf]
  EJ --> REN[Render<br/>engine/ · pilares.py]
  REN --> GUA{Guardianes<br/>C1 · golden · integridad · GA · identidad}
  GUA -- verde --> PUB[Publicación única<br/>TERMINAR HOY · SFTP 8 sitios]
  GUA -- rojo --> STOP[Se detiene<br/>sin bandera]
  PUB --> VIVO[En vivo + indexación<br/>IndexNow · Bing · Google API]
  VIVO --> MED[Medición<br/>seguimiento · control · hitos]
  MED --> GER
  MED --> PLAN[Plan V9 HTML<br/>v9_listas + FX + guardián]
  PLAN --> TR[Traspasos<br/>armar_traspaso → Landings]

2 · Capas y componentes

CapaComponente (versión)EntraSaleDocumento
Datoscontenido/content.<slug>.json · registro.jsonbriefs, redacciónla pieza bilingüe y su índicedocs/ARQUITECTURA_MOTOR_BLOG.md
DatosBanco de cifras repertorio_estadisticas.json + fuentes_externas.jsoninvestigar/aplicar cifrascifras con página verificadadocs/CONTRATO_CIFRAS_Y_FUENTES.md
DatosPilares pilares/contenido/pilar.<id>.json · seo/pilares_contenido.jsonredacción del pilar; videos (id, título, subida, segundos, descripción ES/EN) y _refuerzos (marca, plan, motivo)/dark/, /EN/dark/, cursospilares.py (docstring)
Capturatools/receptor_semrush.py 1.3.1 (archivos semrush_pNN_<herramienta>_…)Descargasdocs/semrush_reportes/<F>/<categoría>/docs/SEMRUSH_GUIA.md
Capturatools/semrush_consolidar.py 1.2.1 (Keyword Magic en filas; dueño declarado de Listas manda sobre URL truncada)datos y síntesis de todas las rondasseo/semrush/consolidado_<F>.json: posiciones por URL, acciones con dueño y preguntas realesR-SEMRUSH-POR-HERRAMIENTAS
Capturaexportadores GSC/Bing/GA4/Ubersuggest/ATPAPIs y Chromedocs/*_reportes/docs/EXPORTAR_*.md
Decisióntools/gerente_seo_aeo.py 1.10.022 fuentesseo/gerente/{expedientes,decisiones,resumen}_<F>CLAUDE.md R-GERENTE
Decisióntools/mega_cola.py 1.5.0gerente + Semrushcolas de objetivos con controldocs/HERRAMIENTAS_CLI.md
Decisióntools/temas_competencia.py 1.3.1Top Pages de la competencia · temas aprobados por Diegocubierto/plantar/hueco/producto; --decidir ajustar o crear; --crear-temas lote dirigidoR-COMPETENCIA-CANDIDATOS
Decisióntools/mapa_oportunidades.py 1.1.0salidas de todas las herramientasseo/oportunidades/mapa_<F>.{json,md} + plan «Oportunidades»docs/HERRAMIENTAS_CLI.md
Capturatools/repertorio_youtube.py 1.2.0canal @masterestaurant (público) + Search Console del canal (export)seo/videos/repertorio_youtube.json: 4.166 videos, índice por temadocs/VIDEOS_YOUTUBE_MOTOR.md
Decisióntools/gerente_seo_aeo.py 1.10.0 · palanca video_youtube + decisión por videorepertorio + plan de trabajo (keywords) + dueñas + Position Tracking (vid) + AIOcola/videos_recomendados_<F>.json · cola/videos_decision_<F>.jsonR-VIDEO-PROPIO
Creacióntools/videos_paginas.py 1.0.0decisiones «pagina_video»lote dirigido con la guarda → piezas con el video como principaldocs/VIDEOS_YOUTUBE_MOTOR.md §3b
Renderengine/videos.py 1.3.0 · gancho en engine/builder.py · tools/videos_aplicar.py 1.1.0 (también AL NACER, desde orquestar)videos del contenidosección con 1 reproductor + VideoObject + lintBiblioteca videos-youtube-seo-aeo
Decisióntools/optimizar_pareja.py 1.1.0cola/pareja_<E>_<F>.json + preguntas del consolidadoFAQ distinta + enlaces que suman para dos piezas que rankean juntas; solo_faq para piezas nuevasR-PAREJA-RANKEA
Decisióntools/escalera_top10.py 1.6.0Semrush p14 + consolidadoFAQ, preguntas, enlaces hacia la URL 4-20R-ESCALERA-TOP10
Decisióntools/plantar_competencia.py 1.2.0temas «plantar» + AI PRobjetivos FAQ en páginas existentesR-COMPETENCIA-CANDIDATOS
Ejecuciónrefuerzo_preguntas_reales.py 1.2.0 → reforzar_citas_ia.py 1.4.0cola de objetivosFAQ literal redactada (juez de sentido) y aplicadadocs/SEGUIMIENTO_PIEZAS.md
Ejecuciónorquestar.py continuar --plan + guarda_canibalizacion.py 1.2.0lote dirigidopiezas nuevas (pre-vuelo de cifras)docs/GUARDA_CANIBALIZACION.md
Ejecucióntools/transformar_misma_url.py 1.0.2página dormidala misma URL con tema nuevoR-COMPETENCIA-CANDIDATOS
Ejecucióntools/enlaces_v9_3.py 1.0.0registro + gerentetarjetas «Contenido relacionado» que sumanR-V9-3-ENLACES
Ejecucióngen_pdf.py (TIPOS_PDF + checklist)piezas profundasPDF alojado + compuerta de leaddocs/HERRAMIENTAS_CLI.md
Renderengine/ (builder, render_pieza, schema, enlaces_red…)content + banderasHTML ES/EN, JSON-LD, sitemapsdocs/ARQUITECTURA_MOTOR_BLOG.md
RenderBanderas de plantilla seo/v8_tecnico.json, seo/v9_tecnico.jsonlanzadorarreglos técnicos con golden intacto apagadosRUNBOOK §10
Guardianescontrato_cifras.py 1.0.13 (C1/C2/C3) · golden · pulso · integridad · GA · identidadsalida localVERDE o detencióndocs/GUARDIAN_DUPLICADOS_Y_GATES.md
Publicación«TERMINAR HOY 0.9.392» → publicar_paralelo.py · pilares.py 1.2.0 (videos por engine/videos.py, lint en verificar)Comparativas Para Publicar8 sitios por SFTP, sitemap solo sumadocs/ARQUITECTURA_PUBLICACION.md
Indexaciónindexacion.py (cuota Google por proyecto, seo/cuota_indexacion.json)URL nuevas/cambiadasIndexNow, Bing, WebSub, Googledocs/ARQUITECTURA_PUBLICACION.md
Medicióntools/seguimiento_piezas.py 1.4.1 · tools/inventario_publicado.py 1.2.0 · seo/mega/*_control.jsonGSC/GA4/sitemapsfichas por pieza, inventario vivo, lecturas contra controldocs/SEGUIMIENTO_PIEZAS.md
Informetools/plan_html/v9_listas.py 1.11.0 + FX + tools/guardian_reporte.py 1.0.1todo lo anteriordocs/planes/PLAN_SEO_AEO_V9_2026-10-26.html (CONFIABLE)docs/LISTAS_VIZ.md, docs/GUARDIAN_REPORTES.md
Traspasotools/armar_traspaso.py 1.0.0manifiestozip con SHA256, 0 secretosRUNBOOK §11-12

3 · Contratos de datos (lo que no se rompe)

ContratoReglaQuién la hace cumplir
PiezaES+EN, un H1, canonical propio, hreflang, JSON-LD válido, FAQ literal; nada de 301, noindex ni cambio de URLrender + tests/ + guardián de integridad
Cifrascada número que afirma un dato tiene fuente verificada; el banco solo suma respaldo; una pieza nueva nace en 0contrato_cifras.py 1.0.13 (C1/C2/C3) + pre-vuelo
Enlacessolo se suman; destino en 200; ≤ 3 tarjetas por pieza; se pueden re-apuntar al destino final (sin redirección)enlaces_v9_3, escalera_top10, tests/test_enlaces_hub_satelite.py
Dueño de URLregistro.json = pieza; seo/pilares_contenido.json = pilar; /kpi-dashboard/ = KPIs; resto del hub = LandingsR-DUENO-URL; escalera_top10 1.1.0+
Control15 % por semilla propia de cada tanda (mr-control-v9t, -v93, -v94…); el control nunca recibe la intervencióncada herramienta + seo/mega/*_control.json
Alcanceinocuidad EN ESPERA (D-V10a); sin comparaciones de marcas ni cursos; legales excluidasexpresión INOCUIDAD (MR_INOCUIDAD=1 reactiva), seo/exclusiones_intervencion.json
Secretosningún secreto en logs, commits, documentos, traspasos ni _PARA_BORRAR/receptor_semrush y armar_traspaso los rechazan

4 · Las 22 fuentes del gerente

Seguimiento de piezas (7.378) · plan técnico de keywords · canibalización (dueñas) · Search Console 90 d por URL · Bing Webmaster (páginas) · Copilot (citas por página) · GA4 90 d (vistas y conversiones) · Semrush: posiciones por URL, Keyword Strategy Builder, AI Overviews con impresiones propias, Site Audit › AI Search, AI Traffic, Keyword Magic, Keyword Gap · Ubersuggest · AnswerThePublic · temas de la competencia · rondas de Semrush consolidadas (posiciones por URL y acciones, tools/semrush_consolidar.py) · repertorio de YouTube del canal · decisión por video · palanca video_youtube · palanca hipotesis (plan_dormidas + elegir_duena + páginas con impresiones sin acción). Si una falta, la tarjeta «gerente» del Pulso se pone en rojo (seo/gerente/resumen_<F>.md).


5 · El ciclo de una tanda

sequenceDiagram
  participant D as Diego (Finder)
  participant L as Lanzador .command
  participant H as Herramientas
  participant G as Guardianes
  participant S as Servidores (8 sitios)
  D->>L: doble clic (puede quedar en fila)
  L->>L: pgrep: espera a toda corrida de Listas
  L->>L: exige la bandera de la tanda anterior
  L->>H: autopruebas · golden · pulso · gerente al día
  H->>H: plan en seco + control 15 % (semilla propia)
  H->>H: redactar (CLI) → aplicar → PDF → enlaces (vivo 200 → aplicar)
  L->>G: TERMINAR HOY (paso 5): C1, cifras, GA, integridad, identidad
  alt verde
    G->>S: UNA publicación SFTP, sitemap solo suma
    S-->>L: en vivo 200 + muestra de cambios
    L->>H: indexación · seguimiento · hito · gerente · plan
    L->>L: escribe cola/_tanda_<x>_<F>_hecho.flag
  else rojo
    G-->>L: [Proceso detenido] sin bandera → las siguientes se detienen solas
  end

Reglas de operación: nunca dos publicaciones a la vez; nunca se edita un .command que corre; el patrón pgrep de una tanda no incluye a las que vienen después (sin abrazo mortal); los lanzadores se abren por Finder (Diego o Claude con computer use; con la pantalla bloqueada, Finder no responde). Fila del 27-10: V9-1b → HUECOS → V9-3 → V9-4 → PILARES → V9-5 (D-V10b) → PILARES 2 (/dark/ revisado: forma del AIO, México y Colombia, videos) → VIDEOS (videos del canal donde el gerente los recomienda).


6 · Guardianes y compuertas

MomentoGuardiánQué para
Antes de tocarautopruebas de cada herramienta; tests/golden_builder.py check; tests/test_pulso_cobertura.pycódigo roto, render cambiado sin re-base, herramienta sin tarjeta del Pulso
Antes de redactarpre-vuelo de cifras; guarda anti-canibalización; juez de sentido del refuerzotemas sin cifras verificadas, choque con una pieza dueña, FAQ sin sentido
Antes de publicarcontrato de cifras C1/C2/C3; cifras verificadas; verificar_ga; integridad de la red; identidad externa; dependencias de páginamás números sin fuente, medición mixta, 404/noindex/canonical roto
Después de publicaren vivo 200; muestra de enlaces/PDF; pilares.py verificarlo que no llegó al servidor
En el informetools/guardian_reporte.py 1.0.1 (G1-G5): tablas, páginas a intervenir, inventario = sitemaps, acumulado = inventario al corteun plan con cifras que no cuadran (NO CONFIABLE)

Cuando un guardián frena, se arregla la causa y se verifica con su prueba; nunca se baja el guardián (RUNBOOK §12.7).


7 · Semrush como subsistema (prueba Pro hasta ~01-11)


8 · Plan V9 y capa visual

docs/planes/constructores/construir_plan_v9_2026-10-26.py arma el plan sobre el V8 y el v7, con:


9 · Relación con otros motores

MotorQué recibe de ListasQué le da a ListasCanal
Landings (_MR_Landings, solo lectura desde aquí)hallazgos por URL suya, herramientas portables, ejemplos de lanzadorrespuestas, paquetes de datos, cuota de indexación cedidazips de docs/traspasos/ (último consolidado: ACTUALIZACION_LISTAS_A_LANDINGS_2026-10-27n.zip)
KPIs (/kpi-dashboard/)solo informe—traspaso
MR Centralaportes al Kit PortableKit 1.154.0, cerebro de marcadocs/INTEGRACION_CON_MR_CENTRAL.md

10 · Medición


11 · Cómo extender el motor (lista de comprobación)

Creado por MASTERESTAURANT®.

Adiciones 27/28-10 (videos al nacer, cadena V10, medición y respaldos)

PiezaQué haceDónde
Videos al nacerorquestar._render_incremental llama a videos_aplicar.para_piezas_nuevas() antes del render: cada pieza nueva recibe su video del canal con las reglas del gerente (control 15 %, una vez por pieza, fail-open). EN = enlace con miniatura, sin reproductor ni VideoObject (engine/videos 1.3.0).orquestar.py, tools/videos_aplicar.py 1.1.0, engine/videos.py 1.3.0
Cadena V10V10-1 (FAQ y AIO literal) → V10-3 (canal → web) → V10-4 (temas sin cifras y dormidas), por bandera y pgrep; V10-2 (lectura GA4) aparte, sin publicar.lanzadores TANDA V10-*
Medición de conversión8 propiedades GA4 con eventos clave cta_click/file_download/form_submit y dimensiones oferta/tema/posicion (27-10); lectura con la Data API.tools/ga4_conversion.py 1.0.0
Canal → webDescripción sugerida por video con su página dueña.tools/videos_descripciones.py 1.0.0
RespaldosToda copia previa va a respaldos/ (fuera de git); _PARA_BORRAR/ solo lo borrable.23 herramientas, R-PARA-BORRAR-SOLO-BORRABLE
Filtro de focotemas_competencia.INOCUIDAD 1.3.1, compartido por gerente, escalera, plantar_competencia y los lotes V10.tools/temas_competencia.py

12 · Decidir, probar y aprender (28-10: V11, hipótesis y salud del motor)

El motor ya no espera a tener evidencia perfecta. Decide, plantea una hipótesis con su control, la lee a los 28 días y aprende (Diego, 28-10 07:18-07:26). Cuatro piezas nuevas se conectan con el gerente y el plan:

PiezaQué decideEntra porSale hacia
tools/elegir_duena.py 1.1.1 (R-DUENA-MULTIVARIABLE, docs/METODO_ELECCION_DUENA.md)Qué página del motor es la dueña de cada consulta que 2+ URL de la red se disputan. Usa 8 variables con pesos explícitos (aprendidos si hay lecturas), margen, estabilidad Monte Carlo y guardas de evidencia. Siempre decide: si hay poca evidencia, la decisión es una hipótesis de confianza baja. Landings no compite ni recibe nada.Search Console consulta × URL (8 sitios), expedientes del gerenteseo/duenas_manuales.json → duenas_por_frase → render (tarjeta). Las otras páginas se redactan hacia su propio foco con optimizar_pareja (TANDA V11-2).
guarda_canibalizacion.py 1.2.0 · G5Que una página nueva no nazca donde la red ya gana (top 10 de cualquier sitio) ni donde ya hay 2+ URL compitiendo.Search Console de la red + eleccion_duenaslote.py, lote_familias, orquestar y temas_competencia --crear-temas: es el motor principal cuando crea cientos de páginas.
tools/plan_dormidas.py 1.0.0Para cada página sin tráfico (6.086): estado de indexación (UI), un foco libre por evidencia, chequeo técnico SEO/AEO, acciones, hipótesis y control 15 %.Expedientes, Search Console (UI y API), huecos, árbol de temascola/dormidas_reorientar_<F>_L<NN>.json → refuerzo_preguntas_reales (TANDA V11-5); enlaces desde el hub (construir/aplicar_enlaces_hub_satelite); indexación.
tools/hipotesis.py 1.0.0El ciclo de aprendizaje: registra lo aplicado con su línea base, lee lo vencido contra el control y actualiza P(éxito) por clase (Beta con previas informadas). Con ≥ 30 lecturas de canibalización, ajusta los pesos de elegir_duena.Lo anterior + Search Consoleseo/hipotesis/modelo.json. P(éxito) se multiplica en la prioridad de plan_dormidas y se muestra en cada acción «hipotesis» del gerente.
tools/gerente_seo_aeo.py 1.10.0 · palanca hipotesisDonde no hay palanca probada, el gerente propone:
• dormidas (de plan_dormidas);
• canibalización (de elegir_duena);
• con impresiones sin acción: FAQ literal de su keyword.
Cada propuesta lleva confianza, P(éxito) y fecha de lectura.
Las salidas anterioresExpedientes → tandas → plan.
tools/arbol_temas.py 1.0.0Árbol tema → subtema → keywords, priorizado por la demanda de todas las fuentes (Search Console de la red, Semrush, canal, competencia, huecos), con su estado: hueco, oportunidad, competido o cubierto.Fuentes de keywords + registrodemanda_temas.para_lote() (nivel «arbol») → lote.py: la creación nueva sigue las keywords, no solo los temas generales. Se rehace solo en cada plan.
tools/auditar_piezas_nuevas.py 1.1.0Comprueba si cada página nueva hizo el procedimiento completo, con 10 controles (C1-C10): contenido ES y EN, render, en vivo, sitemap, schema, registro, envío a buscadores, seguimiento, video y llms.Contenido, render, sitios en vivoCOMPLETAR PAGINAS NUEVAS (indexación y seguimiento de lo que falte).
tools/salud_motor.py 1.0.0Comprueba que todo esté al día y conectado:
• edad de 16 fuentes y salidas frente a su tope;
• los 219 lanzadores y las referencias del panel apuntan a archivos que existen.
DiscoPlan («Salud del motor») y arquitectura HTML.

Cadena del 28-10:

Cada tanda se encadena por bandera y pgrep, y ninguna espera a otra posterior.

Siempre al día:

Reglas que gobiernan esta capa:

13 · La arquitectura en HTML: atlas 3D e infografías (28-10, LAT 1.0.0)

Este documento tiene una sola versión en HTML, siempre al día: docs/ARQUITECTURA.html (local) y su copia web https://www.masterestaurant.com/arquitecturablogs.html (noindex,follow, como universo.html). Las rehace tools/arquitectura_html.py 2.1.0 al final de cada tanda, con el modelo de datos real del día. Sin artifacts (Diego 28-10 07:39-07:47).