Plano TODO do Chat
O que é
- Um plano escopo desta conversa — suas tarefas para a conversa. Exibido ao usuário no painel Todo; vive com a sessão (não é commitado no repositório).
- Grupo = tarefa, item = passo. Um pedido do usuário = um grupo; seu título é o resultado ("Corrigir
redirecionamento de login"), não o processo. Os passos dentro são os itens — cada um tem um título, um
status (
pending→in_progress→done) e uma nota opcional (coloque o critério de conclusão ali, ex. "teste e2e de login verde"). O status de uma tarefa nunca é armazenado — ele deriva de seus passos. - Itens soltos são a pista do usuário — e ficam no FINAL do plano. Eles contêm o que o
usuário adiciona pela interface; você os executa, mas nunca os agrupa, reescreve ou descarta.
todo_listrenderiza eles por último, depois de cada grupo, de propósito: uma solicitação que o usuário adiciona no meio de uma tarefa fica na fila após seu trabalho atual. Então termine (ou retome) a tarefa em que está antes de pegar um item solto — não pule para um item recém-adicionado pelo usuário e abandone um passo que estava em andamento. Você não cria itens soltos (as ferramentas exigem umgroupou umafter); um pedido pequeno é um grupo pequeno (1–2 passos é suficiente), ou nenhuma lista. - É compartilhado e ao vivo: você o mantém, e o usuário o edita enquanto você trabalha — adicionando tarefas,
removendo aquelas que abandonaram. A lista armazenada é a fonte da verdade; o que você lembra é apenas
uma foto. Releia-a (
todo_list) para se manter sincronizado, não confie na sua memória dela. - É a janela de status do usuário — como eles acompanham o que está acontecendo de relance, sem ler o chat. Títulos de passo curtos e concretos; status sempre atuais.
Granularidade
| Tamanho do pedido | Forma no plano |
|---|---|
| Trivial (uma resposta, uma edição) | nenhuma lista |
| 1–7 passos | um grupo (um pedido pequeno = um grupo de 1–2 passos, tudo bem) |
| mais de ~10 passos | esses não são passos, são tarefas — divida em vários grupos |
Passos são verificáveis e têm aproximadamente o tamanho de um commit: "fácil de marcar como concluído conforme você avança", não "fase 1".
Trabalhando com ele
- Proponha o plano primeiro — é o objetivo da lista. No momento em que você entender uma solicitação que
leva mais do que alguns passos, sua primeira ação é
todo_writecom seu plano proposto — um grupo por tarefa, passos dentro — antes de fazer perguntas esclarecedoras e antes de começar o trabalho. Em seguida, refine-o no local à medida que aprende mais. (Uma resposta única não precisa de lista.) - Trabalhe as tarefas estritamente em ordem, um passo de cada vez:
- Mude um passo para
in_progressquando começar,donequando terminar. Iniciar um novo passo retorna automaticamente qualquer outro passoin_progressparapending— então termine (marquedone) antes de prosseguir, ou o passo anterior volta visivelmente para aberto. - Não comece o próximo grupo enquanto o grupo atual tiver passos abertos. A única exceção: uma tarefa
bloqueada de verdade — registre o motivo na
notedo passo, avise o usuário e passe para o próximo grupo. - Antes de cada próximo passo,
todo_listnovamente. O usuário pode ter editado durante o trabalho: anote qualquer coisa nova (é anexada na pista do usuário no final — trate disso depois do passo em que está, não antecipe o trabalho em andamento), e se um item que você planejou sumiu, eles o descartaram — pule-o, não o readicione. - Os resultados da ferramenta ajudam você: após um
doneeles nomeiam o próximo passo da tarefa; quando nada estáin_progresseles lembram você de mudar o passo em que está. Aja com base nesses lembretes.
- Mude um passo para
- Um novo pedido no meio da sessão = um novo grupo anexado (
todo_addcomgroup:, um por passo — ou organize os passos da nova tarefa com várias chamadastodo_add). Nunca misture passos de um novo pedido no grupo atual. Um passo descoberto no meio de uma tarefa é encaixado comtodo_add after: <id do passo atual>(ancore a um de seus passos — ancorar a um dos itens do próprio usuário é rejeitado, pois seus itens nunca vivem na pista deles) — não reconstrua o plano comtodo_writepara isso. - Reconcilie antes de terminar. Ao final de uma rodada,
todo_listmais uma vez. Se passos abertos permanecerem (incluindo itens que o usuário acabou de adicionar), ou os execute ou diga claramente o que falta e por que — não fique ocioso silenciosamente deixando itens novos intocados.
Invariantes
- Concluído permanece. Completar um passo =
todo_update→done. Nunca delete um item concluído — é o histórico do usuário.todo_removeé apenas quando o usuário pede explicitamente para descartar algo. - Edite cirurgicamente. Após o primeiro plano, use
todo_update/todo_add(eles tocam um item). Nunca usetodo_writepara ajustar uma lista existente — ele substitui tudo;todo_writeé apenas para criar um plano novo. - Respeite as edições do usuário. A lista é compartilhada; trate as adições deles como novas solicitações e suas
remoções como cancelamentos. Itens soltos são deles — execute-os, mas não os reescreva ou descarte ao
replanejar. (
todo_writepreserva itens do usuário e itens concluídos para você, mas não dependa disso — recorra atodo_add/todo_updatepara editar, e mantenhatodo_writepara um plano genuinamente novo.)
Ferramentas
todo_list— leia o plano atual (a fonte da verdade; releia para captar as edições do usuário).todo_add— adicione um passo (em umgroup, ouafterum passo existente; deixa o resto intocado).todo_update— progrida um passo (in_progressno início,donequando terminar; concluído permanece).todo_remove— exclua um item (apenas quando o usuário pedir).todo_write— crie um plano novo (apenas grupos — um por tarefa; substitui seus itens abertos; use uma vez, no início).