@trycore/spec-build-harness 0.10.0 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/VERSION +1 -1
- package/commands/build/escalate.md +1 -1
- package/commands/build/onboard.md +20 -4
- package/commands/build/release.md +4 -3
- package/dist/cli.js +11 -1
- package/dist/commands/migrate.js +107 -2
- package/dist/lib/normalize.js +925 -78
- package/dist/lib/state-bundle.js +112 -8
- package/docs/runtime/guia-modo-dual-y-migracion.md +9 -2
- package/docs/runtime/protocolo-cliente-runtime.md +29 -19
- package/hooks/build/event-emitter.sh +9 -52
- package/hooks/build/lib/runtime-client.sh +183 -23
- package/hooks/build/lib/runtime-ops.sh +14 -8
- package/hooks/build/lib/state-io.sh +0 -0
- package/hooks/build/release-ops.sh +48 -16
- package/hooks/build/slice-ops.sh +152 -81
- package/package.json +1 -1
- package/scripts/check-runtime-purity.sh +0 -0
- package/scripts/denylist.txt +4 -0
- package/scripts/lib/graph-bundle.py +68 -20
- package/scripts/tests/test-baseline-verdict.sh +0 -0
- package/scripts/tests/test-hooks-runtime.sh +13 -38
- package/scripts/tests/test-install.sh +46 -0
- package/scripts/tests/test-skill-ops.sh +578 -58
- package/skills/building-a-slice/references/runtime-protocol.md +1 -1
- package/skills/releasing-a-version/SKILL.md +10 -6
- package/skills/releasing-a-version/workflows/release-gate.workflow.js +3 -3
|
@@ -69,7 +69,7 @@ En `runtime` el fichero `.claude/state/build-state.json` **no se lee ni se escri
|
|
|
69
69
|
|---|---|
|
|
70
70
|
| `active_slice.gates` | `slice-ops.sh status` / caché de proyección |
|
|
71
71
|
| `active_slice.wiring_checklist[]` | eventos `wiring_*` + `wiring_failing` de la proyección |
|
|
72
|
-
| `active_slice.progress_log[]` | eventos `
|
|
72
|
+
| `active_slice.progress_log[]` | eventos `progress_noted` (event stream) |
|
|
73
73
|
| `session_continuity.resume_hint` | `resume_hint` de `/agent/context` (lo rinde `next-step`) |
|
|
74
74
|
| `scaffold`, `design_source`, `project_kind`, `foundation` | hechos de proyecto (`fact …`) |
|
|
75
75
|
| `history[]`, `releases[]`, `parallel_front` | proyecciones del runtime (consola del hub) |
|
|
@@ -24,9 +24,12 @@ de épicas de la release son las que vas a auditar en bloque.
|
|
|
24
24
|
`dual`/`runtime` la release vive en el runtime y cada gate se reporta con
|
|
25
25
|
`bash .claude/hooks/build/release-ops.sh verdict <line> <gate> <pass|fail|na>`; en `legacy`, en el
|
|
26
26
|
array `releases[]` del fichero local (protocolo en `building-a-slice/references/state-protocol.md`).
|
|
27
|
-
- **Reportar es de agentes;
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
- **Reportar es de agentes; el cierre en verde es del runtime; el degradado es humano** (política
|
|
28
|
+
A-con-B). El agente mide y reporta los seis veredictos; con el último veredicto de los 6 gates
|
|
29
|
+
canónicos en PASS **el hub auto-cierra** la release (`closed_by: AUTO_6_OF_6_PASS`, audit trail).
|
|
30
|
+
Si algún gate queda `fail`/`partial` o hay deudas por decidir, **el cierre es decisión humana en
|
|
31
|
+
la consola** — el gobierno humano vive donde hay decisión real, no en el clic de un resultado
|
|
32
|
+
derivable. `release-ops.sh close-hint <line>` imprime la política.
|
|
30
33
|
- **Sobre el diff acumulado**: el alcance es el rango de commits de todas las épicas de la release
|
|
31
34
|
(desde el merge anterior a la primera épica de la release hasta `main`).
|
|
32
35
|
- **Delega en subagentes** (devuelven síntesis, protegen el contexto).
|
|
@@ -67,9 +70,10 @@ Checklist de cierre: `references/release-dod.md`.
|
|
|
67
70
|
5. Reporta **cada** gate en cuanto lo tengas medido, con su evidencia:
|
|
68
71
|
`release-ops.sh verdict R1-mvp security pass --evidence-file informe.txt` (usa `na` cuando el gate
|
|
69
72
|
no aplique — p. ej. `ux` en una release sin UI). Un `rc 6` es el servidor rechazando: muestra su
|
|
70
|
-
razón, no reintentes. Sin red, el veredicto
|
|
71
|
-
|
|
72
|
-
|
|
73
|
+
razón, no reintentes. Sin red, el veredicto **no** tiene camino por la cola offline (`rc 5`,
|
|
74
|
+
issue #44): reintenta el mismo comando cuando vuelva la red, antes de pedir el cierre.
|
|
75
|
+
6. Con los seis reportados **en verde, el hub cierra solo** (la respuesta del último `verdict`
|
|
76
|
+
anuncia `release CERRADA … closed_by: AUTO_6_OF_6_PASS`) — no hay paso manual. Si algún gate quedó `fail`,
|
|
73
77
|
lista los hallazgos bloqueantes; el usuario los corrige como un slice normal (fix en
|
|
74
78
|
`building-a-slice`) y se re-corre el Release Gate.
|
|
75
79
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
//
|
|
10
10
|
// READ-ONLY sobre el estado: esta plantilla devuelve un diagnóstico; la skill
|
|
11
11
|
// releasing-a-version es la ÚNICA que reporta los veredictos (release-ops.sh verdict por gate;
|
|
12
|
-
// en modo legacy, una entrada en releases[] del fichero). El agregado y el cierre son del
|
|
12
|
+
// en modo legacy, una entrada en releases[] del fichero). El agregado y el auto-cierre en verde son del
|
|
13
13
|
// runtime/humano. Parciales NO promueven a passed. Si METODOLOGIA.md (§5) contradice algo aquí,
|
|
14
14
|
// gana la metodología.
|
|
15
15
|
//
|
|
@@ -150,11 +150,11 @@ const reviewersGreen = reviews.filter(Boolean).every((r) => r.na || r.value ===
|
|
|
150
150
|
const status = (reviewersGreen && gates.integration === true) ? 'passed' : 'failed'
|
|
151
151
|
|
|
152
152
|
return {
|
|
153
|
-
status, // reportado por releasing-a-version vía release-ops.sh verdict (agregado y cierre son del runtime
|
|
153
|
+
status, // reportado por releasing-a-version vía release-ops.sh verdict (agregado y auto-cierre en verde son del runtime; el degradado lo decide un humano).
|
|
154
154
|
gates, // {security, smell, ux, coherence, stack_arch, integration}
|
|
155
155
|
blocking: [
|
|
156
156
|
...reviews.filter((r) => r && r.value === false).map((r) => ({ gate: r.gate, error: r.error || null, findings: r.findings || [] })),
|
|
157
157
|
...(gates.integration === true ? [] : [{ gate: 'integration', findings: (integration && integration.findings) || [] }]),
|
|
158
158
|
],
|
|
159
|
-
note: 'Read-only. releasing-a-version reporta un veredicto por gate (release-ops.sh verdict). El runtime agrega y
|
|
159
|
+
note: 'Read-only. releasing-a-version reporta un veredicto por gate (release-ops.sh verdict). El runtime agrega y AUTO-CIERRA con 6/6 PASS (closed_by: AUTO_6_OF_6_PASS); el caso degradado lo decide un humano en la consola. Parciales NO promueven a passed.',
|
|
160
160
|
}
|