Repaso de motores que producen conocimiento — unificación (scraping · APIs · sitios · X/anti-fomo)
Fecha: 2026-09-27. Autor: Nef + opencode.
Actualiza: 2026-09-22-adr-engine-unico.md, [CREDENCIAL].md,
[CREDENCIAL].md, 2026-09-22-linode-caido-permanentemente.md,
[CREDENCIAL].md.
0. Objetivo
Un solo core que produzca conocimiento por scraping (RSS/sitios + APIs + X), con
perfiles de salida. Recipientes: surtido (desk editorial) y finitud
(escritura). Consumidores locales: second-brain (grafo), news-silo (eventos).
Foco pedido: X / anti-fomo.
Estado real: el core (nef-silo/silo_engine.py) existe y está generalizado, pero
lleva sin host desde el 22-sep. Lo demás sigue operando por vías locales, con
duplicación.
1. Inventario verificado (2026-09-27)
| Motor | Qué produce | Fuentes | Salida | Host | Estado |
|---|---|---|---|---|---|
nef-silo (silo_engine) | items clasificados por tema/perfil, búsqueda híbrida, silos LSH | 132: 75 RSS + 51 X + 6 TG (RSSHub) | silo.db (36 MB), silo.jsonl, estado/salud.json, export-<perfil>.json | sin host | core listo (F0/F1a); export muerto |
surtido/feed.py | feed X+YT+TG+HN | RSSHub + Invidious | reporte/feed*.json, RSS | Mac + Vercel | operando; rama x-anti-fomo |
surtido/scripts/home_feed.py | home limpio por 7 temas | feed.json/feed-tech.json | reporte/home.json | Mac (auto en hn.py) | operando |
surtido/scripts/prensa_noche.py | prensa indep. AR/MX | RSS (cron 03:00) | candidatas/prensa-*.json | Mac | operando (fragilidad DNS) |
surtido/ingest.py | video→transcripción→triage | YouTube RSS + STT | candidatas/*.json | Mac (GPU) | boletín v3 |
surtido/papers_cn.py | papers CN traducidos | OpenAlex API | reporte/papers-cn.json | Mac | → second-brain |
surtido/{nlp,sentimiento,pulso,traducciones}.py | sentimiento/pulso/ES | Reddit/Bluesky/NewsAPI (+X opcional) | bloques de edición | Mac | operando |
surtido/scripts/fomo_release.py | marca anti-FOMO (demo/opinado/patrocinado) | feed local (X/TG/RSS) | reporte/*.fomo-release.{json,md} | Mac | operando |
surtido/scripts/likes_*.py | likes X enriquecidos | export X (privado) | data/likes.db (139k) | Mac | local-only |
social-silo/{mine,likes_*,distill,reports_to_enrich}.py | nodos candidatos desde X/exports | X likes + exports claude/chatgpt + X/RSS | reports/extraccion-*.md, _enrich/ | Mac + HF | extracción Claude en curso |
news-silo/{silo,silo_medios,harvest_cf,scrape_mlai}.py | silos por evento (embeddings+HDBSCAN) | corpus NYT/WaPo/Atlantic, RSS | data/silos.json, infografías | Mac | 128 docs; local |
cf-crawl (Worker) | RSS parse + Browser Run | sitios/URLs | JSON → news-silo | Cloudflare | Browser Run OFF |
ckan-datos | 2 datasets agregados | reportes SB/SB-twitter | CSV/sitio | Mac | MVP lite |
estado_turismo/spab-retrieval | reseñas/precio/ocupación | Apify/SerpApi/Booking/BigQuery/Reddit | corpus places | Mac+Vercel | vivo (perfil places) |
yt-extract/yt/* | observatorio YouTube (dashboard/deck) | Invidious | HTML | Mac | ~copia vieja de surtido/monitoreo |
2. Estado crítico: el core está sin host
- Linode
[IP]dado de baja permanente. Verificado hoy: puertos 22/80/443 cerrados. - Efectos:
surtido/feed.py(FEED_SOURCE=engine) apunta ahttp://[IP]/silo/export-editorial.json→ muerto; cae anef-silo/recursos.jsonlocal (solo registro de feeds) + cron Mac.vercel.jsonaún reescribe/vivo*→ IP muerta (radio).deploy.sh/pull.shapuntan a la IP muerta. - Destino decidido (no ejecutado): OCI free (region
mx-queretaro-1,~/.oci/configpresente, 4 OCPU/24 GB ARM always-on), RSSHub como sidecar, estado en OCI + snapshot a R2, exports servidos por Cloudflare. - El repo del core ya vive en GitHub:
github.com:[usuario]/nef-silo(HEAD8986cdd).
3. Solapamiento (lo que hay que unificar)
Del ADR: fetch RSS/X/TG ×2, clasificador de 7 temas ×2 (home_feed.py vs _REGLAS
del engine), dedup ×3, clustering ×2 (LSH en engine vs HDBSCAN en news-silo),
búsqueda ×3, enriquecimiento ×3. Añadido hoy:
- Observatorio duplicado:
yt-extract/yt/*≈surtido/monitoreo/*(misma API, código divergido). - Conocimiento X en dos mundos:
surtido(curación editorial:channels*.json,pool-likes,fomo_release) vssocial-silo(likes.db139k +mine.py→ nodos). No comparten curación ni schema. - Extracción de texto ×3:
cf-crawl(Browser Run) vsingest.py(STT) vsnews-silo(boilerplate).
4. Unificación propuesta — un core, perfiles, recipientes
┌──────────── nef-silo (core) ────────────┐
fuentes ───────►│ captura RSS·X·TG(RSSHub)·web(T1) │
(perfil) │ normaliza/dedup · SQLite+FTS5 · salud │
│ export por perfil (JSON/RSS) │
└───────────────┬─────────────────────────┘
│
export-editorial ──► surtido (home · boletín · radio) ← recipiente
└► finitud (escritura/piezas) ← recipiente
export-places ─────► estado_turismo/engine (consumidor)
perfil ideas (local) ► second-brain (grafo) ← consumidor
corpus/tiers ──────► news-silo (silos por evento) ← consumidor
- Contrato de item único (ya implementado):
{url,titulo,medio,tema,perfil,publicado,capturado,lang,region,tipo,fuente}(+texto,extra).silo_engine.py ingesta <json> --perfil Xya acepta items de cualquier scraper. - Perfiles = fuente+salida+consumidor, no codebases:
editorial,places,ideas,gartner-bikes. - Tiers de privacidad: T0/T1 al server; T2/T3 (paywall, likes, chats) local-only.
5. X / anti-fomo — la capa única (foco)
Hoy hay tres piezas X sin unificar. Deben quedar así:
- Curación (source of truth de handles):
surtido/channels.json+channels-todo.json(87 canales) +pool-likes.json(pool anti-fomo de tus likes). Es la lista que alimenta el registro del engine (51 handles X ya enrecursos.json). - Clasificador anti-FOMO:
scripts/fomo_release.py(reglasdemo/opinado/patrocinado) → debe operar sobre el export del engine (X+TG) y marcaranti_fomopor item, no sobre un feed local reconstruido. - Privado (local-only):
likes.db(139k likes + embeddings) +mine.py→ perfilideas→second-brain. Nunca al server. El ranking por afinidad a tus likes (likes_buscar.py) se corre local y ordena el fomo-release (pendiente de cablear).
Regla de oro: el engine captura X por handles curados (no timelines personales); el fomo es una anotación sobre items públicos; tus likes son una señal privada de ranking.
6. Brecha vs plan 22-sep
- Hecho (repo
nef-silo): F0 (perfil en fuentes/items +exportar --perfil+ shape único), F1a (132 fuentes con prensa indep.),cmd ingesta,run.shregenera export. - Falta: F1b (servir export + adapter surtido contra export vivo) — bloqueado por host. F2 (places), F3 (ideas), F4 (gartner-bikes).
- Bloqueo raíz: el host del core. Sin eso, el “un solo engine” no se puede verificar de punta a punta.
7. Próximos pasos concretos (verificables)
- Reponer el core en OCI free
mx-queretaro-1(o correr local si se quiere inmediato): engine + RSSHub sidecar + cron*/30, estado en OCI + snapshot R2. Artefacto:curl https://<host>/silo/export-editorial.jsondevuelve N items. - Repuntar surtido:
ENGINE_EXPORT_URLal nuevo host;FEED_SOURCE=engine; quitar/repuntar los rewrites/vivo*devercel.json. Artefacto: una edición generada 100% desde el engine. - Conectar X/anti-fomo al engine:
fomocomo anotación por item + canal curado como fuente. Artefacto: export con flaganti_fomoy conteo pordemo/opinado/patrocinado. - finitud como recipiente: research desk de surtido (candidatas/briefes) → bloque
“conexiones del grafo” (
dist/graph.json) en templates Zola.
8. NO
- NO duplicar captura (dos scrapers de la misma fuente = doble costo + dedup inconsistente).
- NO subir likes/X/chats ni paywall al server (T2/T3 local-only).
- NO monorepo (rompería deploys Vercel/CF/OCI); core único + consumidores en sus repos.
- NO fusionar consumidores (
proponer,mailing,radio,estado_turismo/engine,quartz). - NO reintentar contra la IP muerta
[IP].