Job | task-reminders

axios job todo

1. Propósito

Funcionar como PM implacável (mas gentil): lembrar cada owner das tarefas vencendo hoje, amanhã ou já vencidas. DM direto, 2× ao dia.


2. Gatilho

  • Cron manhã: 0 9 * * 1-5 (seg–sex 09:00 BRT) — lembrete proativo do dia
  • Cron tarde: 0 17 * * 1-5 (seg–sex 17:00 BRT) — check-in de fim de dia
  • Skip: feriado; se owner mandou mensagem ”✅ done” em DM nas últimas 4h

3. Input (leitura)

FonteO que ler
TASKS.mdTodas as tarefas abertas (parse via vault.parse_tasks_md())
06-directory/pessoas/*.mdSlack user ID de cada owner (campo contato.slack)
memory/sessions/YYYY-MM-DD_task-reminders.mdLembretes já enviados hoje (idempotência)

4. Processo

Passo 1 — Parse de tarefas

Use vault.parse_tasks_md() para extrair as linhas. Para cada tarefa:

  • Determine se entra na cesta de lembretes desta execução:
    • Manhã (09:00): prazo hoje, prazo amanhã, ou vencidas (prazo < hoje) com status != concluida
    • Tarde (17:00): prazo hoje com status ainda aberta ou em progresso

Passo 2 — Agrupar por owner

Use vault.tasks_by_owner(tasks) para pegar dict owner → [tarefas].

Observação: alguns owners são compostos (ex: “Pedro / Axios”, “Blaschek + Lucas + Gabriel”). Split já feito pela lib. Cada pessoa recebe 1 DM com suas tarefas.

Passo 3 — Resolver Slack user ID

Para cada owner em português (ex: “Rafael”, “Pedro”), olhar em 06-directory/pessoas/<slug>.md buscando:

  • Frontmatter contato.slack OU slack_id
  • Se não achar, logar warning em feedback e pular (não mandar DM genérica)

Passo 4 — Compor DM

Formato (manhã):

👋 Bom dia, [Nome]. Axios aqui — seu resumo de tarefas:

🔴 *Vencidas (ação hoje):*
- T-XXX | [tarefa] | venceu em [data] | [link-origem]

🟡 *Com prazo hoje:*
- T-XXX | [tarefa] | [link-origem]

🟢 *Com prazo amanhã:*
- T-XXX | [tarefa] | [link-origem]

Marque "✅" aqui no thread quando concluir alguma. Se precisar repassar prazo, me responde que registro.

Formato (tarde):

🌇 Boa tarde, [Nome]. Check-in de fim de dia:

*Pendentes de hoje:*
- T-XXX | [tarefa] | status atual: [aberta/em progresso]

Tudo sob controle? Se sim, só me confirma com "✅". Se precisar empurrar prazo ou marcar como bloqueada, também me avisa.

Passo 5 — Enviar e registrar

Para cada owner com DM a enviar:

  1. slack.dm_user(slack_id, text)
  2. Gravar TS e canal em memória
  3. Tolerar erro individual — se 1 owner falha, continua com os outros

Passo 6 — Consolidar

Gravar memory/sessions/YYYY-MM-DD_task-reminders.md com:

  • Lista de owners notificados + IDs das tarefas mencionadas
  • Nº total de DMs enviadas
  • Owners pulados (sem Slack ID, ou silenciados)

5. Output

DestinoConteúdo
Slack (DMs)1 DM por owner com tarefas relevantes
memory/sessions/YYYY-MM-DD_task-reminders.mdLog de envios
memory/feedback/... (se aplicável)Warnings de owner sem Slack ID

6. Guardrails específicos

  • Máximo 1 DM por owner por execução. Se manhã+tarde ambos enviariam, ok (são 2 runs distintas).
  • Não mandar DM a Igor, Marcos, Michael, Daniel e outros não-Anouk sem autorização explícita do Pedro (configurável em memory/integrations/slack.md na lista external_do_not_dm).
  • Se tarefa é concluida ou bloqueada, não lembrar
  • Se a tarefa tem dependência bloqueando (origem aponta para D-XXX com status bloqueado), mencionar isso no DM: ⏸️ bloqueada por D-XXX — aguardando [owner da dep]
  • Se >5 tarefas vencidas para o mesmo owner, incluir aviso suave: Percebi que tem acumulado tarefas vencidas. Se quiser repriorizar comigo, só chamar.
  • Se alguém já respondeu ”✅” em thread anterior com T-XXX, marcar como concluída na próxima atualização do TASKS.md (essa parte vai para um job futuro de sync-task-responses, não este)

7. Critério de sucesso

  • Todos os owners com tarefas relevantes receberam DM
  • Nenhum DM duplicado na mesma execução
  • Tarefas concluídas ou bloqueadas foram filtradas
  • Session log gravado

8. Falha e retry

  • Slack rate limit: respeitar Retry-After, pausar, retomar
  • Se 3+ DMs falham consecutivas, abortar e DM a Pedro

9. Memória

Além da sessão normal, gravar tabela em memory/sessions/YYYY-MM-DD_task-reminders.md:

| Owner | Slack ID | Tarefas lembradas | Status |
|---|---|---|---|
| Antônio | U123 | T-001, T-002, T-003 | ok |
| Rafael | U456 | T-005, T-006, T-008 | ok |
| Pedro | U789 | T-011, T-012 | ok |

10. Referências