Skip to content

feat(tasks): adiciona /task-finish para concluir tarefas em aberto - #30

Merged
kellen-xavier merged 1 commit into
devfrom
feature/fechar-task-command
Jul 17, 2026
Merged

kellen-xavier merged 1 commit into
devfrom
feature/fechar-task-command

Conversation

@kellen-xavier

Copy link
Copy Markdown
Owner

Contexto

Resolve a issue #29: fechar as tarefas em aberto após concluir (/task-finish / "task-done").

Hoje, depois de criar uma tarefa com /task, não havia nenhum comando para avançá-la na máquina de estados (Pendente → Em Andamento → Concluído → Aceito). O advance existia apenas no núcleo, sem exposição, então a tarefa ficava "Pendente" para sempre do ponto de vista de quem usa o bot.

O que muda

  • Núcleo (task_service.py) — TaskService.finish(): leva uma tarefa aberta até Concluído em um único passo, auto-avançando de Pendente (passa por Em Andamento, respeitando as transições válidas). É idempotente: tarefas já Concluído/Aceito são devolvidas sem alteração, sem levantar InvalidTransition.
  • Router (command_router.py) — task_finish() com mensagens amigáveis em português:
    • ✅ Tarefa concluída [id]: título
    • 🔒 Tarefa [id] já está aceita e encerrada: título
    • ⚠️ Tarefa <id> não encontrada.
  • Adaptador Discord (discord_bot.py) — expõe /task-finish task_id:<id> e também liga /task-status (que já existia no router, mas não estava disponível no Discord), necessário para o usuário descobrir o id da tarefa a fechar.
  • Docs — README (lista de comandos) e o tutorial de XP (ciclo do dia + boas práticas), reforçando o valor de Feedback: encerrar o ciclo da tarefa é tão importante quanto abri-lo.

A arquitetura hexagonal é preservada: toda a regra vive no núcleo, o adaptador segue fino.

Testes

Seguindo o TDD do projeto, foram adicionados testes de núcleo e de router:

  • Core (test_task_state_machine.py): concluir de Pendente, de Em Andamento, idempotência em Concluído, no-op em Aceito, atualização de last_activity, tarefa inexistente.
  • Router (test_ingest_and_report.py): mensagem de sucesso, tarefa já aceita, tarefa inexistente.

Gates locais (mesmos comandos do CI):

  • ruff check . — sem erros
  • pytest --cov=src/daily --cov-fail-under=8596 passando, cobertura 87.65%

Closes #29

🤖 Generated with Claude Code

https://claude.ai/code/session_01XySNzzBTnxSYCTyJd9aA47


Generated by Claude Code

Fecha a lacuna em que, apos criar uma tarefa com /task, nao havia comando
para avanca-la na maquina de estados. Agora:

- TaskService.finish() leva uma tarefa aberta ate 'Concluido' em um unico
  passo, auto-avancando de 'Pendente' por 'Em Andamento'. E idempotente:
  tarefas ja 'Concluido'/'Aceito' sao devolvidas sem erro.
- CommandRouter.task_finish() com mensagens amigaveis em portugues.
- Adaptador Discord expoe /task-finish e tambem liga /task-status (que ja
  existia no router mas nao estava disponivel), necessario para descobrir o
  id da tarefa a fechar.
- Testes de core (Pendente, Em Andamento, idempotencia, Aceito, last_activity,
  inexistente) e de router (sucesso, aceita, inexistente).
- README e tutorial de XP atualizados com os novos comandos.

Closes #29

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XySNzzBTnxSYCTyJd9aA47
@kellen-xavier kellen-xavier self-assigned this Jul 17, 2026
@kellen-xavier
kellen-xavier merged commit 8e0b061 into dev Jul 17, 2026
4 checks passed
@kellen-xavier
kellen-xavier deleted the feature/fechar-task-command branch July 17, 2026 12:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fechar Tarefas em Aberto após concluir

2 participants