Verificabilidad: criterios de aceptación, fichas de feature y cobertura verificada en CI - #6
Merged
Merged
Conversation
…a en CI El protocolo era enteramente autodeclarado: todas las reglas eran "el agente debe" y el checklist del PR lo marcaba el mismo agente que había hecho el trabajo. Faltaba además la unidad de trabajo: una feature existía como conversación → código → changelog escrito a posteriori, sin ningún artefacto que fijara el acuerdo antes de escribir código. - Los requisitos del PRD llevan identificador estable (M-01, S-01) y criterio de aceptación comprobable "Dado…, cuando…, entonces…", con resultado observable y no un adjetivo - Nueva capa docs/features/: una ficha por unidad de trabajo, con tabla de cobertura y tres estados (Acordada / En construcción / Verificada) que permiten retomar el trabajo en otra sesión - Ningún requisito se queda sin tercera columna: o la ruta de su test, o "no verificable por interfaz: <razón concreta>" y cómo se comprueba entonces - Los tests se escriben después de implementar, leyendo el código real; escritos antes apuntan a selectores imaginados y acaban vaciándose de aserciones hasta que pasan - El PR se cierra con la salida real de los comandos pegada, no con casillas: quien afirma haber verificado y quien tenía que verificar son el mismo - scripts/verificar-cobertura.mjs valida las tablas contra docs/prd.md y falla si un test declarado no existe en una ficha Verificada. Node sin dependencias, ejecutado en CI en cada pull request - Tabla de proporcionalidad: qué documentos de docs/ exige cada tamaño de proyecto, para que la ceremonia escale con lo que está en juego - Nueva sección "Límites de ejecución": todo se prueba en localhost, el agente no despliega, los secretos no van por línea de comandos, nada destructivo sin confirmación previa con el alcance exacto - Comandos nuevos: /feature (ficha antes de construir) y /doctor (parte del estado de documentación, entorno, variables, MCPs y tests) La verificación solo exige que los archivos de test existan en estado Verificada. Los tests van después de implementar, así que una ficha en construcción sin el archivo creado es lo correcto; un script que chillara ahí daría rojos legítimos y acabaría desactivado. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… de cobertura Revisión de seguridad del PR #6. Cuatro correcciones, dos de ellas sobre cosas que introdujo el propio PR. - `Bash(node scripts/*)` autoaprobaba ejecutar cualquier archivo bajo scripts/. En esta plantilla solo hay uno, pero en un proyecto real esa carpeta acaba con scripts de despliegue o de migración, y el permiso contradecía la sección "Límites de ejecución" que este mismo PR añade. Se acota al script concreto - El workflow no declaraba `permissions`, así que en las ejecuciones sobre main heredaba el token por defecto del repositorio. El script solo lee archivos: se fija a `contents: read` - Las rutas de la tercera columna son entrada no confiable (una ficha puede llegar en un pull request desde un fork). Ahora se comprueba que apunten dentro del repositorio, en cualquier estado de la ficha, antes de tocarlas - La sección "Evidencia" del PR pide pegar salida de comandos, que puede arrastrar tokens o cadenas de conexión: se avisa de repasarla antes de enviar El disparador sigue siendo `pull_request` y no `pull_request_target`, de modo que los PR desde forks corren sin secretos y con token de solo lectura. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
¿Qué se hizo?
Se cierra el hueco entre "el agente dice que está hecho" y "está hecho": los requisitos del PRD pasan a llevar criterio de aceptación comprobable, aparece una capa nueva (
docs/features/) donde cada unidad de trabajo declara cómo se validará, el PR se cierra con evidencia pegada en vez de casillas, y un script verifica todo eso en CI.Añade además tres cosas que faltaban y no dependen del stack: una tabla de proporcionalidad (qué documentos exige cada tamaño de proyecto), una sección de límites de ejecución, y los comandos
/featurey/doctor.Motivación
El protocolo era enteramente autodeclarado. Todas las reglas eran "el agente debe", y el checklist del PR lo marcaba el mismo agente que había hecho el trabajo: quien afirmaba haber verificado y quien tenía que verificar eran el mismo. Una casilla marcada no distingue entre "lo ejecuté y pasó" y "estoy razonablemente seguro de que pasaría".
El hueco de fondo era otro: la plantilla gobernaba el proyecto pero no la unidad de trabajo. Una feature existía como conversación → código → entrada de changelog escrita a posteriori, sin ningún artefacto que fijara el acuerdo antes del código. El alcance se renegociaba solo, sin que nadie lo notara.
Requisitos que cierra
Ninguno. Este repositorio es el andamiaje: no tiene PRD con requisitos propios.
Tipo de cambio
Evidencia
1. El script sobre este repositorio (plantilla sin rellenar, sin fichas):
Era el caso crítico: si un clon recién hecho diera rojo, el workflow nacería desactivado.
2. Ficha Verificada, con test existente y una excepción bien justificada (sobre una copia del repo, con fixtures):
3. Ficha En construcción con el test todavía sin escribir — no debe fallar, porque los tests se escriben después de implementar:
4. Los nueve modos de fallo mezclados:
Verificación de los requisitos:
No aplica: este PR no cierra ningún requisito de PRD (ver sección anterior). Lo que se verifica es el comportamiento del propio script, y está arriba: los cuatro escenarios, con los códigos de salida.
Checklist
docs/están actualizados —prd.md,testing.md,architecture.mdy el nuevofeatures/README.mddocs/features/está en estado Verificada — no aplica: este repositorio es el andamiaje y no tiene fichas propias.docs/features/llega vacía a los proyectos que usen la plantillachangelog/con este cambio — dos entradas, en.template/changelog/, que es donde el protocolo manda registrar los cambios sobre el andamiaje para que quien use la plantilla arranque con el changelog limpio/security-reviewsi hay cambios sensibles — no se ha ejecutado. Revisión manual del único cambio con superficie real, el workflow: usapull_requesty nopull_request_target, con lo que los PR desde forks corren con token de solo lectura y sin acceso a secretos; no consume ningún secreto, no instala dependencias y el script solo lee archivos del repositorio. Si prefieres pasarlo igualmente antes de mergear, dilo y lo lanzoNota sobre el historial: va en un solo commit a propósito. Los dos bloques —la metodología y la verificación ejecutable— comparten los mismos archivos (
CLAUDE.md,README.md,/doctor,docs/features/README.md), y separarlos habría dejado un commit intermedio con documentación apuntando a un script que todavía no existe. La separación sí está en las dos entradas de.template/changelog/.