plan¶
Dos cenários à abordagem, às tarefas e aos testes que o portão pode comprovar. A fase em que a conformidade com a arquitetura é decidida.
| Papel | O designer e o testador: quem vai manter isso daqui a um ano. Prefere a forma mais simples dentro do contrato, reaproveita o que já existe, conta a você as escolhas com consequências antes de fazê-las e escolhe os testes pelo risco. |
| Quem decide | Você, como parte da proposta: cenários, abordagem e testes são aprovados juntos (ponto de parada 1). Uma entrega antiga aprova seu plano à parte quando approve_plan: true. |
| Produz | plan.md: escopo, abordagem, tarefas e a verificação final |
Como executar¶
A skill executa atipspec plan password-reset. Uma entrega guiada pode
planejar antes da sua aprovação, assim que seus cenários estão completos sem
um achado bloqueante, sua intenção está declarada, suas seções de fora do
escopo e de qualidade estão decididas e nenhuma pergunta está em aberto; o
comando recusa com a primeira coisa que faltar e, caso contrário, imprime o
workflow, as regras e o contexto.
O que o modelo faz¶
- Lê o contexto que o comando imprimiu, e as áreas de código envolvidas.
- Verifica o contrato. Se os cenários precisam de algo que o contrato proíbe, ele para: isso exige uma decisão, nunca uma solução alternativa.
-
Escreve
plan.md:--- scope: ["shop/auth/**", "tests/auth/**"] --- # Plan: Password reset ## Approach A `reset` module under `shop/auth/` with `request()` and `consume()`, following the contract's structure (domain must not import infrastructure, DEC-002). Tokens stored in the existing `auth_token` table. ## Tasks ### T1: Request a reset link Covers: REQ-AUTH-7KQ2M-001 Tests: AC-AUTH-7KQ2M-001, AC-AUTH-7KQ2M-002 ### T2: Expire links after 30 minutes Covers: REQ-AUTH-7KQ2M-002 Tests: AC-AUTH-7KQ2M-003 ### T3: Reset requests under load Covers: REQ-AUTH-7KQ2M-003 Tests: AC-AUTH-7KQ2M-004 ## Final verification Report: .atipspec/tmp/junit.xml Proof: - AC-AUTH-7KQ2M-001: tests/auth/test_reset.py::test_registered_email_sends_link - AC-AUTH-7KQ2M-002: tests/auth/test_reset.py::test_unknown_email_same_answer - AC-AUTH-7KQ2M-003: tests/auth/test_reset.py::test_link_expires_after_30_minutes - AC-AUTH-7KQ2M-004: tests/auth/test_load.py::test_p95_below_300_ms Verify: - `python -m pytest -q --junitxml .atipspec/tmp/junit.xml` -
atipspec check password-resetaté não haver mais erros de plano. - Apresenta o plano com os cenários em
atipspec proposal password-resete pede sua aprovação na conversa; o assistente a registra comatipspec accept password-reset proposal --code <code>, eatipspec buildrecusa até lá. A aprovação vincula o escopo, a abordagem e a verificação final do plano. Dividir ou adicionar uma tarefa dentro deles não exige nova aprovação, já que a verificação final cobre todas as tarefas, emboracheckcontinue verificando a cobertura e o escopo; um escopo mais amplo, outra abordagem ou uma verificação final alterada é apresentado a você de novo.
O que check exige de um plano¶
- Todo requisito ativo é coberto por pelo menos uma tarefa (
Covers:), e todo critério é listado uma vez emTests:ouManual:, seguindo sua marca[manual]na spec; até lá,atipspec buildrecusa. - Todo
require-commanddo contrato aparece nos comandos de## Final verificationou, em um plano sem ela, noVerify:de pelo menos uma tarefa. - Os comandos são comandos reais do projeto.
verifyos executa a partir da raiz do projeto pelo shell: a verificação final uma única vez para o candidato terminado; oVerify:próprio de uma tarefa é uma verificação de desenvolvimento. - Uma tarefa só com critérios
Manual:pode dizerVerify: none, com uma nota do que o revisor deve observar. - Um
Report:nomeia um caminho que o git ignora, como.atipspec/tmp/junit.xml, que os comandos de Verify escrevem. Comrequire_proof: trueourisk: high, todo critério emTests:tem uma entrada emProof:que nomeia seu teste, e sua verificação tem umReport:;proposalmostra essa exigência ao lado da verificação dos critérios (veja build). Comrisk: low, um critério emTests:cujo teste nomeado emProof:passou não precisa de veredito do revisor (veja risco). scopenomeia os arquivos que as tarefas vão mudar, com a sintaxe de glob das regras do contrato:**atravessa diretórios,*não. Comstrict_scope: true, o padrão, ourisk: high, um plano semscope, ou com globs que juntos correspondem a todos os caminhos (**,**/*,*com*/**), é um erro que bloqueia a aprovação, para que você veja o escopo antes de aprovar. Um arquivo tocado fora dele, uma exclusão inclusive, é um erro (um aviso comstrict_scope: falsee um risco diferente dehigh); o pacote de review os lista sempre que é escrito. As skills e as regras de permissão que o AtipSpec instala não contam enquanto contêm apenas o conteúdo dele; remover uma dessas regras conta. Trabalho imprevisto amplia oscopena mesma edição que adiciona sua tarefa, e um escopo mais amplo muda o que você aprovou, então é apresentado a você de novo.
Tarefas, não histórias¶
Uma tarefa é uma mudança coerente que deixa o projeto funcionando,
registrada com task-done quando está implementada. As tarefas rodam em
sequência dentro de uma entrega, e acima de max_tasks o plano é grande
demais para um dia de trabalho: check avisa e o modelo propõe uma
iniciativa. Trabalho que você quer rodar em paralelo entre pessoas pertence a
entregas separadas; veja equipes e escala.