@@ -184,9 +184,10 @@ propaga un fallo de `ReadFile` del `pfs.FS` inyectado.
184184### RW-015 — Pipeline GoReleaser — ✅ HECHO
185185` .goreleaser.yml ` sin ` go test ./... ` en el hook, matriz reducida a Linux
186186(amd64/arm64), bloque ` sboms: ` , y workflow ` release.yml ` por tag que corre los gates
187- de CI y produce draft release con checksums/SBOM. ** Nota:** ` goreleaser ` /` syft ` no
188- están instalados localmente, así que la config no fue verificada con
189- ` task release -- --snapshot ` ; se valida en un runner con las herramientas (RW-018).
187+ de CI y produce draft release con checksums/SBOM. ** Verificado:** ` goreleaser check `
188+ valida la config y ` goreleaser release --snapshot --clean ` produce binarios + archives +
189+ SBOMs (syft) + imágenes docker. Follow-up menor: migrar ` dockers ` /` docker_manifests ` a
190+ ` dockers_v2 ` (deprecation, aún funciona).
190191
191192### RW-016 — Distribuir imagen OCI del CLI — ✅ HECHO
192193
@@ -220,10 +221,11 @@ cosign+syft en el workflow contra el digest inmutable.
220221** Verificado localmente:** ` docker build ` + ` docker run --rm <img> --version ` → ` 0.0.0-smoke `
221222(binario estático ` CGO_ENABLED=0 ` , host amd64). Build multi-arch
222223` docker buildx build --platform linux/amd64,linux/arm64 ` exitoso (containerd store).
223- La variante arm64 ** no** se puede * ejecutar* localmente (QEMU/binfmt no registrado en
224- el host); corre nativamente en CI (el smoke test usa la arch del runner). ` goreleaser ` /
225- ` syft ` /` cosign ` no están instalados localmente: YAML validado por parseo, `goreleaser
226- check` y la firma/SBOM de imagen quedan validados en CI (RW-018).
224+ La variante arm64 corre nativamente en CI (el smoke test usa la arch del runner).
225+ ` goreleaser ` /` syft ` verificados: ` goreleaser check ` valida la config y `goreleaser
226+ release --snapshot` buildea las imágenes ` ghcr.io/spin-stack/devcontainer-cli:* -{amd64,
227+ arm64}` con SBOMs; ` docker run <img > --version` → ` 0.0.0-SNAPSHOT-<sha >` ✅. La firma
228+ cosign de imagen (push real) queda para el path de tag en CI.
227229
228230** Aceptación:** ` docker run <image> --version ` ✅ (local, amd64), amd64/arm64 build ✅,
229231digest artefactado en el workflow ✅.
@@ -255,11 +257,17 @@ amd64/arm64) · parity:contract ✅ 68/0/0 · parity:network ✅ 13/0/0 · parit
255257** 189 matched / 0 failed / 0 inconclusive** (+ TestPublishParity ✅) · skipped-arm64 4
256258(experimental). Reportes JSON por lane + ` reference-commit.txt ` + ` coverage.out ` guardados.
257259
258- ** Caveats de la corrida:** (1) el runtime lane necesitó ` -parallel 2 ` — a ` -parallel 4 `
259- 1 caso compose flakea por contención docker (todos matchean aislados; issue de
260- aislamiento, no de producto). (2) ` task release -- --snapshot ` (RW-015) queda sin
261- verificar: ` goreleaser ` /` syft ` no instalados. Para el gate CI oficial: instalar esas
262- herramientas y correr el runtime lane con paralelismo estable para el host.
260+ ** Caveats — resueltos:** (1) la flakiness del runtime lane bajo ` -parallel 4 ` se
261+ eliminó: el gate (` task parity:runtime ` ) ahora default ` -parallel 2 ` (determinista,
262+ override ` PARITY_PARALLEL ` ). (2) ` goreleaser ` /` syft ` verificados localmente:
263+ ` goreleaser check ` valida la config (queda sólo la deprecation intencional de
264+ ` dockers ` →` dockers_v2 ` ), ` goreleaser release --snapshot ` buildea binarios + archives +
265+ SBOMs + imágenes docker, y ` docker run <img> --version ` funciona. El gate CI
266+ (` .github/workflows/go-cli.yml ` ) corre toda la secuencia con artefactos; arm64 es un job
267+ experimental no-bloqueante.
268+
269+ ** Para declarar paridad completa:** correr el gate CI en verde sobre el commit candidato
270+ y tildar la RELEASE-CHECKLIST. No quedan blockers de producto ni de infra conocidos.
263271
264272
265273
@@ -272,9 +280,8 @@ task parity:contract && task parity:network && task parity:runtime
272280task build:cross
273281```
274282
275- Incluye resolver las colas de otros ítems: promover los diferidos de ** RW-005**
276- (evidence-based), correr la mitad TS→Go de ** RW-006** , y verificar `task release --
277- --snapshot` de **RW-015** con ` goreleaser` / ` syft` instalados.
283+ Las colas de otros ítems ya están cubiertas: los diferidos de ** RW-005** matchean en la
284+ corrida limpia, y ` goreleaser release --snapshot ` de ** RW-015/016** fue verificado.
278285
279286** Aceptación:** cero ` failed ` , cero ` inconclusive ` , deferred resueltos, SHA del
280287oráculo y JSON de cada lane guardados, checklist completa. ` skipped-arm64 ` (runtime
0 commit comments