deliver¶
Fusiona los requisitos en la spec viva y archiva la entrega. Solo cuando
la puerta está en verde y aceptaste el resultado actual: en local, el
registro que escribe atipspec accept <slug> result tras tu aprobación; con
una policy de confianza, la puerta de confianza en verified con aprobaciones
firmadas. El resultado que aceptas es lo que muestra atipspec report <slug>:
los criterios con su evidencia y los veredictos de la revisión, y los
ficheros cambiados desde el commit base con el diff.
| Quién decide | Aceptas el resultado revisado en la conversación: punto de parada 2. Bajo una policy de confianza, la aceptación firmada de QA, y atipspec check --policy debe salir con 0. La fusión sigue la política de tu repositorio, después de merge-check. |
| Produce | .atipspec/specs/<capability>.md actualizado, .atipspec/archive/<slug>/ con el recibo |
Cómo ejecutarla¶
El skill ejecuta atipspec check password-reset, presenta
atipspec report password-reset y, tras tu aceptación, registra
atipspec accept password-reset result --code <code>. Luego:
git add -A && git commit -m "feat: password reset" # when the repository's policy commits: the accepted code first
atipspec deliver password-reset # --policy /secure/company.toml under a trust policy
AtipSpec: merged into .atipspec/specs/auth.md and moved to .atipspec/archive/password-reset/
Result archived. Commit, merge and deployment follow the repository's explicit policy.
Before merging, `atipspec merge-check --base <target branch>` confirms the branch still matches this acceptance; any later change outside .atipspec/ requires reopening the delivery: revert the archive commit, then verify, review and accept again.
Qué hace¶
- Ejecuta la puerta. Cualquier cosa que no sea verde se rechaza con el informe completo.
- Fusiona cada requisito por su ID estable con alcance de capacidad. Un cambio de título actualiza el mismo requisito. Los IDs de criterio se conservan. Los conflictos de baseline concurrentes fallan para una reconciliación explícita. Todo requisito necesita un ID.
- Escribe el recibo
reports/acceptance.json, concode_tree: el hash de todo lo que está fuera de.atipspec/que aceptaste.delivery la contabilidad posterior de AtipSpec (curate, otras entregas, aprobaciones) nunca lo cambian; cualquier cambio de código sí. También registraliving_spec, el digest de la spec viva que escribió, yliving_requirements, el texto de cada requisito que la entrega lista tal como quedó escrito ahí, para que se note una edición posterior de los requisitos aceptados, y loschangesdel dosier: los ficheros cambiados con su estado y el tamaño y el sha256 del diff, sin el texto del diff, que conserva el historial de git. - Pone
status: delivereden la spec de la entrega y mueve la carpeta aarchive/. La evidencia, las aprobaciones y la revisión viajan con ella.
Después del ejemplo, la spec viva contiene cada requisito listado tal como lo
escribió la entrega, por ID; un requisito marcado [remove] desaparece:
# auth
## Requirements
### REQ-AUTH-7KQ2M-001: The user can request a reset link
From the sign-in screen the user enters an email and receives a link.
#### AC-AUTH-7KQ2M-001: Registered email
- **WHEN** a user requests a reset for the registered email "ana@example.com"
- **THEN** the system sends a reset link to "ana@example.com" within 60 seconds
### REQ-AUTH-7KQ2M-002: The link expires
#### AC-AUTH-7KQ2M-003: Link older than 30 minutes
- **WHEN** a link issued 31 minutes ago is opened
- **THEN** the page shows "link expired" and sends nothing
Luego¶
Cuando la política de tu repositorio permite que el asistente haga commit y push:
git add -A
git commit -m "chore: deliver password-reset" # only .atipspec/ changes: the archive commit
atipspec merge-check --base origin/main
git push -u origin delivery/password-reset
merge-check bloquea la fusión mientras una entrega que toca la branch no
esté aceptada, cuando el código en el head no es el código que aceptó un
recibo, cuando una spec viva o el contrato aceptado cambiaron fuera de su
aceptación, o cuando la branch cambia un fichero fuera de .atipspec/ que
ninguna entrega de ella cambió después de su commit base, como el código
commiteado antes de atipspec new, y que exempt_paths en la branch de
destino no exime. Los ejemplos de CI lo ejecutan como el check del pull request,
cuyo resumen lista cada entrega con su estado y su ticket (consulta
aceptación empresarial). Abre el pull
request con el ticket y la salida de
atipspec report <slug> --format markdown en su descripción, y fusiónalo.
Después de la fusión, atipspec status en main muestra la entrega bajo
delivered, y la fase curate refresca el overview.
Después de deliver, el código queda fijado¶
No cambies nada fuera de .atipspec/ en la branch después de deliver, ni
la spec viva que escribió, y no traigas a ella la branch de destino:
cualquiera de las dos cosas cambia lo que aceptó el recibo, y merge-check
falla. Trae la branch de destino antes de la verificación final, con una
fusión: lo que trae no anula la propuesta aprobada (consulta
equipos). Cuando hace falta un cambio, reabre
la entrega:
git revert <the archive commit> # the delivery returns to deliveries/, the living spec to its previous text
luego verifica, revisa, presenta atipspec report <slug> para que aceptes el
resultado cambiado y vuelve a entregar. Es la misma aceptación, repetida
porque el resultado cambió. Mantener el código y el archivado en commits
separados hace que el revert solo toque .atipspec/.