Skip to content

[T21] Briefing matutino con APScheduler #9

Description

@johnma96

Objetivo

El sistema pasa de reactivo a proactivo: un job programado envía cada mañana a
las 7am un briefing por Telegram con papers nuevos, noticias y un concepto.

Contexto

Hasta ahora el bot solo responde cuando se le pregunta. El briefing es el primer
comportamiento autónomo del sistema, y es lo que convierte ResearchOS de
"chatbot sobre papers" en "asistente de investigación".

Criterios de aceptación

  • apscheduler agregado como dependencia
  • Job programado a las 7am hora Bogotá (verificar manejo de timezone)
  • Contenido del briefing: 5 papers nuevos relevantes, 3 noticias tech, 1
    concepto explicado
  • El briefing se envía al telegram_chat_id de config.py (ya existe el
    setting)
  • Los papers del briefing se ingieren automáticamente al vector store, no
    solo se listan
  • Mensaje formateado y legible en Telegram, respetando el límite de 4096
    caracteres ya manejado en T15
  • Test unitario de la lógica de composición del briefing, con las fuentes
    mockeadas
  • Ejecución manual verificada: un comando o flag que dispare el briefing sin
    esperar las 7am

Capas afectadas

  • application/services/briefing_service.py — nuevo, compone el briefing
  • infrastructure/scheduler/ — nuevo, APScheduler
  • scripts/run_telegram_bot.py — el scheduler arranca junto al bot

Decisiones a documentar

¿El scheduler corre en el mismo proceso que el bot? run_polling() gestiona
su propio event loop; APScheduler tiene versiones sync y async. Hay que decidir
si el scheduler vive dentro del proceso del bot (más simple, un solo despliegue)
o como proceso separado (más robusto, dos contenedores). Esta decisión condiciona
T23.

Cómo se decide "papers nuevos relevantes". Hace falta una lista de temas de
interés. ¿Hardcodeada, en config, o derivada de las queries que el usuario ha
hecho al bot? La tercera es la más interesante y conecta con T24.

Idempotencia. Si el job corre dos veces, no debe ingerir los mismos papers ni
enviar dos briefings. Definir cómo se garantiza.

Objetivo de aprendizaje

Comportamiento autónomo programado y sus problemas: timezone, idempotencia,
qué pasa si el proceso estaba caído a las 7am, cómo se prueba algo que depende
del reloj.

Fuera de alcance

Cloud Scheduler (V4). Personalización del briefing por usuario.

Estimación

5h

Depende de

T20 — el briefing usa las tools de noticias y conceptos.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions