plan¶
De los escenarios al enfoque, las tareas y las pruebas que la puerta puede demostrar. La fase donde se decide el cumplimiento de la arquitectura.
| Rol | El diseñador y el tester: quien tendrá que mantener esto dentro de un año. Prefiere la forma más simple dentro del contrato, reutiliza lo que existe, te cuenta las decisiones con consecuencias antes de tomarlas y elige las pruebas según el riesgo. |
| Quién decide | Tú, como parte de la propuesta: escenarios, enfoque y pruebas se aprueban juntos (punto de parada 1). Una entrega antigua aprueba su plan aparte cuando approve_plan: true. |
| Produce | plan.md: alcance, enfoque, tareas y la verificación final |
Cómo ejecutarla¶
El skill ejecuta atipspec plan password-reset. Una entrega guiada puede
planificarse antes de su aprobación, en cuanto sus escenarios están
completos sin un hallazgo bloqueante, su intención está declarada, sus
secciones de fuera de alcance y de calidad están decididas y no queda
ninguna pregunta abierta; el comando se niega con lo primero que falte y, si
no, imprime el workflow, las reglas y el contexto.
Qué hace el modelo¶
- Lee el contexto que imprimió el comando, y las áreas de código implicadas.
- Comprueba el contrato. Si los escenarios necesitan algo que el contrato prohíbe, se detiene: eso necesita una decisión, nunca un rodeo.
-
Escribe
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-resethasta que no haya errores de plan. - Presenta el plan con los escenarios en
atipspec proposal password-resety pide tu aprobación en la conversación; el asistente la registra conatipspec accept password-reset proposal --code <code>, yatipspec buildse niega hasta entonces. La aprobación ata el alcance, el enfoque y la verificación final del plan. Dividir o añadir una tarea dentro de ellos no necesita una nueva aprobación, porque la verificación final cubre todas las tareas, aunquechecksigue comprobando la cobertura y el alcance; un alcance más amplio, otro enfoque o una verificación final cambiada se te presentan de nuevo.
Qué exige check de un plan¶
- Todo requisito activo está cubierto por al menos una tarea (
Covers:), y todo criterio está listado una vez bajoTests:oManual:, según su marca[manual]en la spec; hasta entoncesatipspec buildse niega. - Todo
require-commanddel contrato aparece en los comandos de## Final verificationo, en un plan sin esa sección, en elVerify:de al menos una tarea. - Los comandos son comandos reales del proyecto.
verifylos ejecuta desde la raíz del proyecto a través del shell: la verificación final, una vez para el candidato terminado; elVerify:propio de una tarea es una comprobación de desarrollo. - Una tarea con solo criterios
Manual:puede decirVerify: none, con una nota de lo que el revisor debe observar. - Un
Report:nombra una ruta que git ignora, como.atipspec/tmp/junit.xml, y que escriben los comandos Verify. Conrequire_proof: trueorisk: high, todo criterio bajoTests:tiene una entradaProof:que nombra su test, y su verificación tiene unReport:;proposalmuestra ese requisito junto a la comprobación de los criterios (consulta build). Conrisk: low, un criterio bajoTests:cuyo test nombrado enProof:pasó no necesita veredicto del revisor (consulta riesgo). scopenombra los ficheros que las tareas van a cambiar, con la sintaxis de glob de las reglas del contrato:**cruza directorios,*no. Constrict_scope: true, el valor por defecto, o conrisk: high, un plan sinscope, o con globs que juntos coinciden con cualquier ruta (**,**/*,*con*/**), es un error que bloquea la aprobación, para que veas el alcance antes de aprobar. Un fichero tocado fuera de él, incluida una eliminación, es un error (un warning constrict_scope: falsey un riesgo distinto dehigh); el paquete de revisión los lista siempre que se escribe. Los skills y las reglas de permisos que instala AtipSpec no cuentan mientras contengan solo su contenido; quitar una de esas reglas sí cuenta. El trabajo imprevisto amplíascopeen la misma edición que añade su tarea, y un alcance más amplio cambia lo que aprobaste, así que se te presenta de nuevo.
Tareas, no stories¶
Una tarea es un cambio coherente que deja el proyecto funcionando, registrado
con task-done cuando está implementado. Las tareas se ejecutan en secuencia
dentro de una entrega, y por encima de max_tasks el plan es demasiado
grande para una jornada de trabajo: check avisa y el modelo propone una
iniciativa. El trabajo que quieres ejecutar en paralelo entre varias personas
pertenece a entregas separadas; consulta equipos y escala.