Orquestador único + motor local (nef-silo → second-brain / finitud / surtido)

Fecha: 2026-09-27. Estado: hecho (local). Relacionados: 2026-09-27-repaso-motores-unificacion.md, 2026-09-22-adr-engine-unico.md, 2026-09-22-linode-caido-permanentemente.md, [CREDENCIAL].md.

Decisión

Un solo orquestador (~/nef/orquestador/orquestador.py) une el pipeline:

  • motor: nef-silo (captura RSS·X·TG vía RSSHub → silo.db → export por perfil).
  • visualizador: second-brain (Quartz garden → nodo.ws).
  • blog: finitud (Zola) + in·finitud.
  • desk: surtido (home/RSS/boletín) — consume el export.
  • emdash (CMS Astro) queda fuera por ahora.

Por ahora local (no OCI/HF aún). ENGINE_EXPORT_URL apunta al archivo local; el orquestador no cambia cuando el motor se mueva a OCI.

Qué se hizo

  • ~/nef/orquestador/orquestador.py + README.md: comandos estado · capturar · exportar · render · todo · servir, con --dias/--only/--dry. capturar levanta RSSHub (Docker rsshub-silo) si falta.
  • surtido/feed.py::generar_desde_engine: acepta archivo local (file:// o ruta) además de URL → consumo sin servidor.
  • Corrida real de verificación (2026-09-27, local):
    • captura: +747 nuevos, total silo 5163 (94 fuentes ok, 3 errores; X vía RSSHub local).
    • export editorial: 600 items.
    • surtido: origen=engine, feed.json 600 · home.json 400 (7 temas).
    • second-brain: build ✓ 415 nodos. finitud/in·finitud: zola build ✓.

Pendientes

  • Mover el motor a OCI free (mx-queretaro-1): RSSHub sidecar + cron */30 + export servido por Cloudflare; repuntar ENGINE_EXPORT_URL. El orquestador no cambia.
  • Cablear X/anti-fomo como anotación por item en el motor (foco del repaso).
  • news-silo (clustering) y social-silo (ideas) como pasos locales opcionales.
  • emdash: retomar aparte.

NO

  • No reintentar contra [IP] (muerto). No monorepo. No subir likes/X/chats al server.

Repo paraguas + anti-fomo (misma sesión)

  • ~/nef/knowledge-factory/ — repo git (commit c67cad4) que agrupa todo:
    • subrepos.json: manifiesto de 10 subrepos (rol · repo · remoto). No mueve carpetas (las rutas relativas de los proyectos quedan intactas).
    • orquestador.py: pipeline (estado·capturar·exportar·render·todo·servir) + gestión (repos·sync).
    • sync.sh / status.sh: autoactualización (fetch + pull --ff-only solo si limpio) y estado (rama · HEAD · ± vs upstream · sucio). Nunca pisa un subrepo sucio.
    • decisions -> ../decisions: conocimiento compartido, igual que ~/nef/decisions.
    • npm de segundo-brain, zola de finitud, etc. se manejan vía render.
  • anti-fomo cableado en el motor (nef-silo/silo_engine.py): clasificador _anti_fomo() (reglas de surtido/scripts/fomo_release.py: patrocinado > demo > opinado), columna anti_fomo en items (migración + backfill), anotado en capturar e ingesta, y expuesto en exportar. Verificado: 600 items → demo 35 · opinado 33 · patrocinado 5 · limpios 527. surtido/feed.py propaga el flag.
  • Verificado todo (2026-09-27): captura +16 (total 5179) → export 600 → surtido home 400 → second-brain 415 nodos → finitud + in·finitud build ✓.

Pendiente de commit (subrepos, sin commitear a propósito)

  • nef-silo: silo_engine.py (anti-fomo). surtido: feed.py (flag en el adapter + lectura local file://). Commitear/push cuando lo pidas (el paraguas ya los refleja como sucios).