2026-09-08: second-brain-twitter — ingest + “la lógica” del export de X

Decisión

Crear ~/nef/second-brain-twitter/ como proyecto hermano del second-brain de estudio (NO dentro de ~/nef/second-brain/, cuyo contrato es solo el grafo AI/ML). Pipeline mínimo: ingest.py (export .js → data/twitter.db SQLite) + report.py (reporte de patrones). Sin LLM en la primera pasada.

Privacidad por diseño

Nunca persistir: email/IP/phone/DM bodies/claves. El db es local.

La lógica encontrada (hechos, no inferencia)

  • Cuenta @nefter_ creada 2009-11-09; 5,911 tweets (37% originales); 139,555 likes; 4,715 following; 879 followers; 128 DMs; 1,025 block.
  • Perfil dominante: política/medios MX (RT de @julioastillero 119, @piedepagina 71, prensa en general). Hashtags: astilleroinforma, cdmx, ayotzinapa.
  • Eras: diseño/web/frontend 2014–2017 (~38 hits web, ~33 tipografía/diseño); datos/viz 2018–2021 (39); IA/ML casi nula en toda la historia (pico 25 hits en 2022–2026, casi todos de RTs recientes).
  • Cruce con títulos de nodos del grafo nodo.ws: prácticamente cero.
  • Límites: likes sin autor/fecha y texto truncado; following sin screen names; DMs excluidos.

Conclusión (juicio)

El export documenta un “yo editorial/diseñador” (2009–2022) que no es una mina técnica directa para un grafo de estudio AI/ML. Forzar la ingesta masiva metería ruido. Las vías con señal real:

  1. Originales técnicos propios (~2,196 originales, subconjunto técnico mucho menor) → tarjetas de conocimiento con Ollama local, siguiendo el patrón _stubs/papers (revisión humana antes de entrar al grafo).
  2. Los ~2–3k likes técnicos (IA/web/datos/diseño) como índice de “taste” y fuentes persona/dataset potenciales.
  3. Si el cruce sigue ≈0, cerrar el tema con un summary y NO alimentar el grafo (evitar contaminación).

Estado

~/nef/second-brain-twitter/{scripts/ingest.py, scripts/report.py} + reports/logica-2026-09-08.md. La capa visual se separa en tweets y likes.

Decisión añadida: búsqueda unificada

La visualización permitirá buscar en ambos corpus:

  • tweets propios (tweets)
  • likes con texto (likes)

La búsqueda no meterá todos los mensajes dentro del JSON del grafo. El JSON mantendrá muestras pequeñas para cargar rápido; la consulta completa vivirá en SQLite con un índice FTS5 local.

Flujo previsto

grafo (tweets / likes)
  -> buscador global
  -> API local read-only en [IP]
  -> SQLite + FTS5
  -> resultados paginados y evidencia completa

Funciones

  • Selector: Tweets | Likes | Ambos.
  • Búsqueda por palabras, frases, @mención y #hashtag.
  • Paginación de 30 resultados.
  • Filtros por idioma, RT/original, respuesta y periodo cuando exista fecha.
  • Resultado con texto, referencia y enlace a X.
  • Clic en un nodo para restringir la búsqueda a ese topic, categoría, término o cluster.
  • El servidor queda solo en localhost; no se expone el corpus.

Estado de likes

  • Export original: 139,555 registros.
  • Artefactos automáticos eliminados de la SQLite de trabajo: 8,227.
  • SQLite de trabajo: 131,328 likes.
  • Likes procesados semánticamente: 130,626 con texto.
  • 702 referencias sin texto quedan fuera de la búsqueda textual.
  • Backup previo: ~/nef/backups/exports/second-brain-twitter/twitter.db.pre-platform-artifacts.sqlite.

La implementación del buscador queda pendiente; esta especificación es la decisión vigente.