Entrega guiada, de principio a fin¶
Esta página sigue un cambio desde la petición hasta el archivo: quién hace qué, qué comando ejecuta el asistente, qué comprueba el CLI y qué ficheros escribe cada paso. Los primeros pasos son la versión corta, desde tu lado de la conversación.
Qué es una entrega guiada¶
atipspec new crea una entrega guiada (schema: 2 en su spec.md), para
una funcionalidad y, con --kind fix, para un fix. Sus requisitos
viven en la spec viva de la capacidad, .atipspec/specs/<capability>.md; el
spec.md de la entrega contiene para qué es el cambio y lo que decide en
torno a ellos:
- la intención, lo que queda fuera de alcance, las suposiciones y las preguntas abiertas;
requirements, los IDs de los requisitos que este cambio añade, cambia o elimina en la spec viva;owner,ticket,initiativeydepends_on;base, el commit desde el que partiónew;change_id;created, donde empieza el lead time; yrisk, cuánto exige la puerta.
new no empieza mientras la spec viva de la capacidad tenga cambios sin
commitear, así que el commit base la tiene tal como el cambio parte de ella:
la propuesta muestra el cambio como un diff contra él, y check distingue las
ediciones de esta entrega de lo que trajo la branch de integración.
baseline.json registra ese commit; una entrega creada antes de 0.3.0 se
sigue comparando con la spec viva que guardó ahí.
Las entregas creadas antes de 0.2.0, y los fixes creados antes de 0.3.0,
conservan sus requisitos dentro de spec.md; consulta entregas
antiguas.
Tres decisiones humanas¶
| Decisión | Cuándo | Se presenta con | Se registra con |
|---|---|---|---|
| El contrato y las decisiones que incluye | una vez por proyecto, y cuando cambia el contrato | atipspec proposal contract |
atipspec accept contract --code <code> |
| La propuesta: escenarios, enfoque, pruebas y riesgo | punto de parada 1, antes de cualquier código | atipspec proposal <slug> |
atipspec accept <slug> proposal --code <code> |
| El resultado revisado | punto de parada 2, antes del archivado | atipspec report <slug> |
atipspec accept <slug> result --code <code> |
Nada más pide una aprobación registrada; una decisión sobre una capacidad que
surja se aprueba en la conversación, y la siguiente propuesta la lista.
Decides en la conversación: el asistente
presenta la vista, con su código de aprobación, y ofrece Aprobar y
continuar, Pedir cambios o Cancelar con el selector del cliente, o
te pide una respuesta escrita. Tras tu aprobación explícita, ejecuta el
comando accept con el código del contenido que te mostró; si ese contenido
cambió entretanto, el comando se niega y el asistente lo vuelve a presentar.
Claude Code, configurado por init y abierto en la raíz del proyecto, te
pregunta antes de que ese comando se ejecute: el aviso confirma la misma aprobación, no es una segunda. El
registro indica su canal, terminal, client-permission o assistant
(consulta accept). El contrato no es
necesario para empezar una entrega guiada: mientras no esté aceptado,
check muestra un warning.
Paso a paso¶
| Paso | Tú | El asistente ejecuta | Escribe |
|---|---|---|---|
| 1. Contrato | lo apruebas, una vez | contract, audit, proposal contract, accept contract |
contract.md, decisions/, approvals/contract.json |
| 2. Crear | pides el cambio | new |
deliveries/<slug>/: spec.md, plan.md, deferred.md, baseline.json |
| 3. Especificar | respondes las preguntas | spec, ids, check y, opcionalmente, spec-bind |
specs/<capability>.md, spec.md |
| 4. Planificar | plan, check |
plan.md |
|
| 5. Propuesta | la apruebas: punto de parada 1 | proposal, accept <slug> proposal |
approvals/local-proposal.json, status: ready |
| 6. Construir | build, task-done |
código y tests, progress.json |
|
| 7. Verificar | verify |
evidence/ |
|
| 8. Revisar | review; un revisor en una sesión aislada |
review-rounds.json, review.md |
|
| 9. Resultado | lo aceptas: punto de parada 2 | check, report, accept <slug> result |
approvals/local-result.json |
| 10. Entregar | decides el commit y la fusión | deliver, merge-check |
la spec viva, reports/acceptance.json, archive/<slug>/ |
1. El contrato¶
Una vez por proyecto, la fase contract escribe
.atipspec/contract.md con las reglas que comprueba el CLI, y una decisión
por cada elección que ya tomaste. El asistente ejecuta atipspec audit,
presenta atipspec proposal contract y, tras tu aprobación, registra
atipspec accept contract --code <code>, que pone el contrato y las
decisiones que lista en accepted y escribe
.atipspec/approvals/contract.json.
2. Crear la entrega¶
new escribe spec.md con status: draft, base (el id completo del
commit actual), requirements: [] y risk: normal; un plan.md por
rellenar; un deferred.md vacío; y baseline.json. --branch crea la
branch delivery/password-reset y cambia a ella, --worktree lo hace en una
carpeta hermana; trabaja con una branch por entrega (consulta
equipos). --ticket enlaza un ticket; --depends-on nombra
una entrega cuyo recibo aceptado debe estar en el archivo antes de que el
check de esta se ponga en verde.
3. Especificar¶
/atipspec-spec password-reset: <what you want> ejecuta
atipspec spec password-reset, que imprime el workflow, las reglas y el
contexto. El asistente lee el código y las specs vivas, pregunta solo lo que
queda abierto, en rondas de como máximo tres preguntas, y escribe los
requisitos y sus escenarios en la spec viva. Toma un prefijo de ID una vez
por entrega:
auth/REQ-AUTH-7KQ2M-001 auth/AC-AUTH-7KQ2M-001
Number further requirements and criteria of this delivery with the same prefix: -002, -003.
### REQ-AUTH-7KQ2M-001: The user can request a reset link
Why: support tickets for forgotten passwords are 40% of the queue.
#### AC-AUTH-7KQ2M-001: Registered email
- **GIVEN** a registered user with the email "ana@example.com"
- **WHEN** the user requests a reset for "ana@example.com"
- **THEN** the system answers "Check your email" and sends one reset link to "ana@example.com"
#### AC-AUTH-7KQ2M-002 [manual]: The email reads well on a phone
- **WHEN** the reset email is opened on a 375 px wide screen
- **THEN** the "Reset password" button is visible without scrolling sideways
Un escenario necesita WHEN y THEN, en el orden GIVEN, WHEN, THEN; AND y BUT
extienden el paso anterior. [manual] marca uno que observa una persona;
[invariant], uno que se cumple sin un disparador.
### REQ-... [remove]: Title retira un requisito en el deliver. El spec.md
de la entrega lista los IDs bajo requirements y rellena ## Intent,
## Out of scope y ## Quality attributes (- None cuando no aplica
nada). Un documento redactado aparte, o una lista de criterios de
aceptación, entra con atipspec spec-bind password-reset --file <path>, que
escribe la spec viva y los IDs y no aprueba nada.
atipspec check password-reset lista lo que falta y lo que señala el lint;
un resultado vago, como «funciona correctamente», bloquea la propuesta.
Consulta spec y escribir criterios.
4. Planificar¶
El plan puede empezar antes de la aprobación: atipspec plan password-reset
se abre en cuanto los escenarios están completos, la intención está
declarada y no queda ninguna pregunta abierta. El asistente escribe
plan.md:
---
scope: ["src/auth/**", "tests/auth/**"]
---
# Plan: Password reset
## Approach
A `request_reset(email)` function in `src/auth/reset.py` that answers the same
message for every email and sends the link only to registered ones.
## Tasks
### T1: Request a reset link
Covers: REQ-AUTH-7KQ2M-001
Tests: AC-AUTH-7KQ2M-001
Manual: AC-AUTH-7KQ2M-002
## Final verification
Report: .atipspec/tmp/junit.xml
Proof:
- AC-AUTH-7KQ2M-001: tests/auth/test_reset.py::test_registered_email_sends_link
Verify:
- `python -m pytest -q --junitxml .atipspec/tmp/junit.xml`
Cada requisito listado está cubierto por una tarea, cada criterio está bajo
Tests: o Manual:, y cada require-command del contrato se ejecuta en la
verificación final. Consulta plan.
5. La propuesta: punto de parada 1¶
La vista muestra el tipo y el riesgo con lo que exige el nivel, con qué rigor se comprueban los criterios, qué necesitan la evidencia y la revisión, la intención del cambio, los requisitos con sus escenarios, el plan y el diff de la spec viva contra el commit base, con el código de aprobación. Cuando algo bloquea, lo lista bajo "Not ready for approval" y no muestra ningún código. Tras tu aprobación, el asistente registra:
Pone status: ready y escribe approvals/local-proposal.json con el hash de
lo que aprobaste: spec.md salvo su status y su ticket, cada requisito
que lista de la spec viva de la capacidad, baseline.json, el
alcance, el enfoque y la verificación final del plan, contract.md,
config.yaml salvo su exempt_paths, adapter.json, los responsables de
la capacidad y integration de teams.json, y contracts.json. Editar
cualquiera de ellos devuelve la entrega a draft, y check nombra lo que
cambió. Las tareas
añadidas o divididas dentro del plan no, porque la verificación final las
cubre; tampoco otra entrega integrada desde main (consulta cuando main
avanza).
6. Construir¶
atipspec build password-reset se niega hasta que la propuesta está
aceptada para su contenido actual, y luego imprime el workflow y la
siguiente tarea. El asistente implementa cada tarea con sus tests, dentro del
scope del plan, y la registra:
atipspec task-done password-reset T1 --note "request_reset answers the same message and sends only to registered emails"
task-done escribe progress.json: una declaración de avance atada al
acuerdo aprobado, no una prueba. Se niega antes de la aprobación. Los commits
siguen la política de tu repositorio; no se exige ninguno. Consulta
build.
7. Verificar¶
ejecuta una vez los comandos de ## Final verification sobre el candidato
terminado y escribe evidence/FINAL-<time>.json con los comandos, los
códigos de salida, los logs de salida y la huella del árbol de trabajo. Con
un Report:, primero borra ese fichero y exige que los comandos lo vuelvan a
escribir, y check exige que cada test nombrado en Proof: se haya
ejecutado y haya pasado. Cualquier cambio posterior en el árbol deja la
evidencia obsoleta. --task T1 ejecuta los comandos Verify propios de una
tarea, una comprobación de desarrollo.
8. Revisar¶
se niega mientras una tarea no esté registrada, la evidencia esté obsoleta o
el contrato esté violado. Si no, cuenta la revisión, escribe el paquete en
.atipspec/tmp/password-reset-review-packet.md e imprime review N of M. Un
revisor en una sesión aislada, un
subagente o una sesión nueva a la que solo se le da el paquete, escribe
review.md: tree, reviewer, session, un PASS o FAIL por criterio con
un puntero que la puerta resuelve, y los hallazgos. Las correcciones vuelven
a pasar por verify y review; review_rounds limita cuántas veces. Consulta
review.
9. El resultado: punto de parada 2¶
atipspec check password-reset pasa a checked cuando todo está en verde.
El asistente presenta:
el dosier: cada criterio con su evidencia y su veredicto, el revisor y la sesión, las aprobaciones, cada fichero cambiado desde el commit base con el diff, y el código de aprobación del resultado. Tras tu aceptación:
escribe approvals/local-result.json, atado al árbol, a la revisión, a los
hallazgos aplazados y a la evidencia. La entrega está accepted; el lead
time se detiene.
10. Entregar¶
fusiona los requisitos en specs/auth.md por ID, escribe el recibo
reports/acceptance.json (con code_tree, el hash de todo lo que está fuera
de .atipspec/), pone status: delivered y mueve la carpeta a
.atipspec/archive/password-reset/. No hace commit, push ni fusión. Antes de
la fusión, atipspec merge-check --base <target> confirma que cada entrega
que toca la branch está aceptada y que su código sigue siendo el código
aceptado. Consulta deliver.
Valores de estado¶
status y check derivan en qué punto está una entrega a partir de sus
ficheros y de git:
draft → planned → in_progress → implemented → checked → accepted → delivered
| Estado | Significado |
|---|---|
draft |
la propuesta no está aceptada para su contenido actual |
ready |
aceptada, pero el plan no tiene ninguna tarea: en una entrega guiada, solo cuando sus tareas se quitaron después de la aprobación |
planned |
propuesta aceptada, ninguna tarea registrada |
in_progress |
algunas tareas registradas con task-done |
implemented |
todas las tareas registradas, la puerta aún no está en verde |
checked |
la puerta local está en verde; el resultado no está aceptado |
accepted |
la aceptación del resultado actual está registrada; deliver puede ejecutarse |
delivered |
fusionada en la spec viva y archivada |
Bajo una policy de confianza externa, verified sustituye a checked y a
accepted.
El modo ship y el runner¶
/atipspec-ship <slug> mantiene una sola conversación: atipspec ship <slug>
nombra la siguiente fase a la que la entrega puede entrar, y el asistente
entra en ella, deteniéndose en los dos puntos de parada, ante un cambio
material y ante un bloqueo. atipspec run <slug> ejecuta una entrega
aprobada mediante un adaptador de procesos configurado, con checkpoints y
presupuestos; nunca acepta nada. Consulta el adaptador de
ejecución.
Con una policy de confianza externa¶
Una organización que necesita aprobaciones autenticadas añade una policy de
confianza externa. La puerta ignora entonces los registros locales y exige
aprobaciones firmadas de producto, ingeniería y QA y evidencia de CI
atestada; el éxito es verified, y deliver lo exige. Con
trust: required en config.yaml, la aceptación local queda desactivada.
Consulta aceptación empresarial.
Qué se registra y dónde¶
| Fichero | Lo escribe | Contiene |
|---|---|---|
deliveries/<slug>/spec.md |
new, el asistente; status, accept |
la intención y las decisiones del cambio, los IDs que lista |
specs/<capability>.md |
el asistente, spec-bind; deliver al archivar |
los requisitos y sus escenarios |
deliveries/<slug>/baseline.json |
new |
la spec viva cuando empezó la entrega |
deliveries/<slug>/plan.md |
el asistente | alcance, enfoque, tareas, verificación final |
deliveries/<slug>/approvals/local-*.json |
accept |
lo que aprobaste, su código, cuándo y el canal |
deliveries/<slug>/progress.json |
task-done |
las tareas registradas como implementadas |
deliveries/<slug>/evidence/ |
verify |
comandos, códigos de salida, logs, informes de tests |
deliveries/<slug>/review-rounds.json |
review, run |
las revisiones contadas |
deliveries/<slug>/review.md |
el revisor | veredictos y hallazgos |
deliveries/<slug>/run.json |
run |
el checkpoint del runner |
archive/<slug>/reports/acceptance.json |
deliver |
el recibo que lee merge-check |
Nadie escribe a mano los registros de approvals/, evidence/ o
archive/, ni review-rounds.json; las reglas de permisos de Claude Code
impiden que sus herramientas de edición toquen esos ficheros. Consulta
artefactos.
Entregas antiguas¶
Las entregas creadas antes de 0.2.0, y los fixes creados antes de 0.3.0,
conservan sus requisitos en spec.md, aprueban la spec (y el plan, con
approve_plan) en lugar de una propuesta, y también completan tareas con
marcadores en los commits. Consulta entregas
antiguas.