pumuki 6.3.44 → 6.3.46
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/docs/RELEASE_NOTES.md +31 -0
- package/docs/USAGE.md +19 -0
- package/docs/seguimiento-activo-pumuki-saas-supermercados.md +287 -5
- package/integrations/git/runPlatformGate.ts +30 -19
- package/integrations/git/stageRunners.ts +128 -30
- package/integrations/lifecycle/watch.ts +26 -0
- package/integrations/mcp/aiGateCheck.ts +16 -2
- package/integrations/mcp/autoExecuteAiStart.ts +12 -2
- package/integrations/mcp/preFlightCheck.ts +16 -0
- package/integrations/sdd/learningInsights.ts +91 -0
- package/integrations/sdd/syncDocs.ts +317 -28
- package/package.json +5 -2
- package/scripts/backlog-id-issue-map-lib.ts +1 -1
- package/scripts/reconcile-consumer-backlog-issues-lib.ts +2 -2
- package/scripts/watch-consumer-backlog-fleet-tick.ts +225 -0
- package/scripts/watch-consumer-backlog-fleet.ts +200 -0
- package/scripts/watch-consumer-backlog-lib.ts +2 -2
package/docs/RELEASE_NOTES.md
CHANGED
|
@@ -5,6 +5,37 @@ Detailed commit history remains available through Git history (`git log` / `git
|
|
|
5
5
|
|
|
6
6
|
## 2026-03 (enterprise hardening updates)
|
|
7
7
|
|
|
8
|
+
### 2026-03-05 (v6.3.46)
|
|
9
|
+
|
|
10
|
+
- Paridad hook/watch en auto-remediación de skills coverage:
|
|
11
|
+
- `pre-commit` y `pre-push` ahora ejecutan `policy reconcile --strict --apply` y reintentan una única vez cuando el bloqueo es de coverage de skills.
|
|
12
|
+
- elimina recurrencia de bootstrap/reconcile manual entre iteraciones de consumer.
|
|
13
|
+
- Contrato `watch --json` enriquecido para drift de versión:
|
|
14
|
+
- nuevo bloque `version` con `effective/runtime/consumerInstalled/source`,
|
|
15
|
+
- incluye `driftFromRuntime` y `driftWarning` cuando el binario del consumer no está alineado con runtime/latest.
|
|
16
|
+
- Evidencia de validación:
|
|
17
|
+
- `npx --yes tsx@4.21.0 --test integrations/git/__tests__/stageRunners.test.ts` (`30 pass / 0 fail`)
|
|
18
|
+
- `npx --yes tsx@4.21.0 --test integrations/lifecycle/__tests__/watch.test.ts integrations/lifecycle/__tests__/cli.test.ts` (`48 pass / 0 fail`)
|
|
19
|
+
- `npm run -s typecheck` (`PASS`)
|
|
20
|
+
|
|
21
|
+
### 2026-03-05 (v6.3.45)
|
|
22
|
+
|
|
23
|
+
- SDD sync canónico ampliado por defecto en consumer:
|
|
24
|
+
- `pumuki sdd sync-docs` ahora sincroniza, cuando existen, los 3 documentos base:
|
|
25
|
+
- `docs/strategy/ruralgo-tracking-hub.md`
|
|
26
|
+
- `docs/technical/08-validation/refactor/operational-summary.md`
|
|
27
|
+
- `docs/validation/refactor/last-run.json`
|
|
28
|
+
- Auto-sync OpenSpec integral por cambio:
|
|
29
|
+
- `pumuki sdd auto-sync` incluye por defecto:
|
|
30
|
+
- `openspec/changes/<change>/tasks.md`
|
|
31
|
+
- `openspec/changes/<change>/design.md`
|
|
32
|
+
- `openspec/changes/<change>/retrospective.md`
|
|
33
|
+
- Consumo automático universal de aprendizaje:
|
|
34
|
+
- `ai_gate_check`, `pre_flight_check` y `auto_execute_ai_start` exponen `learning_context` cuando existe `openspec/changes/<change>/learning.json`.
|
|
35
|
+
- Evidencia de validación:
|
|
36
|
+
- `npx --yes tsx@4.21.0 --test integrations/mcp/__tests__/aiGateCheck.test.ts integrations/mcp/__tests__/preFlightCheck.test.ts integrations/mcp/__tests__/autoExecuteAiStart.test.ts integrations/sdd/__tests__/syncDocs.test.ts integrations/lifecycle/__tests__/cli.test.ts` (`78 pass / 0 fail`)
|
|
37
|
+
- `npm run -s typecheck` (`PASS`)
|
|
38
|
+
|
|
8
39
|
### 2026-03-05 (v6.3.43)
|
|
9
40
|
|
|
10
41
|
- `pumuki sdd evidence` alinea su salida con el contrato TDD/BDD del gate:
|
package/docs/USAGE.md
CHANGED
|
@@ -334,6 +334,8 @@ Watch runtime behavior:
|
|
|
334
334
|
Backlog tooling behavior (`watch` + `reconcile` scripts):
|
|
335
335
|
- mapping precedence is deterministic: inline `#issue` -> `--id-issue-map-from` -> `--id-issue-map` -> `--resolve-missing-via-gh`.
|
|
336
336
|
- `watch-consumer-backlog` is non-destructive and reports action-required drift.
|
|
337
|
+
- `watch-consumer-backlog-fleet` agrega varios backlogs en una sola ejecución y devuelve resumen consolidado por target.
|
|
338
|
+
- `watch-consumer-backlog-fleet-tick` ejecuta un ciclo canónico SAAS+RuralGo+Flux con overrides opcionales (`--saas/--ruralgo/--flux`).
|
|
337
339
|
- `watch-consumer-backlog` reports heading drift (`heading_drift`) when section headers `### ✅/🚧/⏳/⛔ <ID>` diverge from effective table status.
|
|
338
340
|
- `watch-consumer-backlog --json` exposes `heading_drift_count` for low-friction alerting parsers.
|
|
339
341
|
- `watch-consumer-backlog --json` exposes `classification_counts` (`needs_issue`, `drift_closed_issue`, `active_issue`, `heading_drift`).
|
|
@@ -405,6 +407,9 @@ Backlog tooling quick reference:
|
|
|
405
407
|
|---|---|
|
|
406
408
|
| `npm run -s test:backlog-tooling` | Ejecutar suite focal de regresión del tooling de backlog. |
|
|
407
409
|
| `scripts/watch-consumer-backlog.ts --json` | Detectar drift accionable sin mutar archivos. |
|
|
410
|
+
| `scripts/watch-consumer-backlog-fleet.ts --json` | Vigilar varios backlogs consumidores y consolidar estado global en una sola salida. |
|
|
411
|
+
| `npm run -s validation:backlog-watch:tick` | Ejecutar tick canónico único (SAAS+RuralGo+Flux) para decisión rápida `fix now` vs `no-action`. |
|
|
412
|
+
| `npm run -s validation:backlog-watch:gate` | Gate previo a release: falla con exit code `1` si hay señal neta accionable en cualquier consumer. |
|
|
408
413
|
| `scripts/reconcile-consumer-backlog-issues.ts --json` | Simular reconciliación (dry-run) y revisar cambios planeados. |
|
|
409
414
|
| `scripts/reconcile-consumer-backlog-issues.ts --apply` | Aplicar reconciliación sobre el backlog consumidor. |
|
|
410
415
|
|
|
@@ -429,6 +434,20 @@ npx --yes tsx@4.21.0 scripts/watch-consumer-backlog.ts \
|
|
|
429
434
|
--resolve-missing-via-gh \
|
|
430
435
|
--json
|
|
431
436
|
|
|
437
|
+
# watch fleet: varios consumers en una sola pasada (sin mutar, sin fallar pipeline)
|
|
438
|
+
npx --yes tsx@4.21.0 scripts/watch-consumer-backlog-fleet.ts \
|
|
439
|
+
--target=/abs/path/consumer1/PUMUKI_BUGS_MEJORAS.md::SwiftEnProfundidad/ast-intelligence-hooks \
|
|
440
|
+
--target=/abs/path/consumer2/pumuki-integration-feedback.md::SwiftEnProfundidad/ast-intelligence-hooks \
|
|
441
|
+
--target=/abs/path/consumer3/BUGS_Y_MEJORAS_PUMUKI.md \
|
|
442
|
+
--json \
|
|
443
|
+
--no-fail
|
|
444
|
+
|
|
445
|
+
# watch tick canónico (usa rutas por defecto y devuelve JSON consolidado)
|
|
446
|
+
npm run -s validation:backlog-watch:tick
|
|
447
|
+
|
|
448
|
+
# gate de release (misma señal, pero bloquea con exit code 1 si hay acción requerida)
|
|
449
|
+
npm run -s validation:backlog-watch:gate
|
|
450
|
+
|
|
432
451
|
# reconcile dry-run: same source chain
|
|
433
452
|
npx --yes tsx@4.21.0 scripts/reconcile-consumer-backlog-issues.ts \
|
|
434
453
|
--file=/abs/path/consumer/PUMUKI_BUGS_MEJORAS.md \
|
|
@@ -2099,12 +2099,294 @@
|
|
|
2099
2099
|
- `npx --yes tsx@4.21.0 --test integrations/lifecycle/__tests__/watch.test.ts integrations/lifecycle/__tests__/cli.test.ts integrations/lifecycle/__tests__/policyReconcile.test.ts` -> `53 pass / 0 fail`.
|
|
2100
2100
|
- `npm run -s typecheck` -> `PASS`.
|
|
2101
2101
|
|
|
2102
|
-
-
|
|
2102
|
+
- ✅ PUMUKI-162: Ejecutar siguiente pendiente activo de Flux (`PUM-011`) para cerrar paridad consumer de `watch --once --json` con `lastTick.changedFiles[]` y `lastTick.evaluatedFiles[]`.
|
|
2103
2103
|
- Alcance:
|
|
2104
2104
|
- verificar contrato JSON final en paquete publicado vs consumer runtime,
|
|
2105
2105
|
- eliminar drift de payload entre core y distribución npm,
|
|
2106
2106
|
- cerrar con validación reproducible en consumer (sin tocar código funcional del consumer).
|
|
2107
|
-
-
|
|
2108
|
-
-
|
|
2109
|
-
-
|
|
2110
|
-
|
|
2107
|
+
- Resultado (2026-03-05):
|
|
2108
|
+
- release publicado: `pumuki@6.3.44`.
|
|
2109
|
+
- verificación `@latest` en repo temporal:
|
|
2110
|
+
- `lastTick.changedFiles[]` presente.
|
|
2111
|
+
- `lastTick.evaluatedFiles[]` presente.
|
|
2112
|
+
- leyenda Flux actualizada:
|
|
2113
|
+
- `PUM-011` -> `✅ Cerrado`.
|
|
2114
|
+
|
|
2115
|
+
- ✅ PUMUKI-163: Ejecutar siguiente pendiente activo de Flux (`PUM-012`) para garantizar contrato JSON estricto (`stdout` solo JSON) cuando se usa `--json`.
|
|
2116
|
+
- Resultado (2026-03-05):
|
|
2117
|
+
- `integrations/git/runPlatformGate.ts` añade `silent?: boolean` para suprimir salida humana en `stdout` al ejecutar en flujos machine-readable.
|
|
2118
|
+
- `integrations/lifecycle/watch.ts` invoca `runPlatformGate(..., { silent: true })` en `watch --json` para mantener contrato estricto de parseo.
|
|
2119
|
+
- cobertura de regresión añadida en `integrations/git/__tests__/runPlatformGate.test.ts`:
|
|
2120
|
+
- `runPlatformGate silent evita salida humana en stdout para contratos JSON`.
|
|
2121
|
+
- validación funcional de contrato:
|
|
2122
|
+
- `node bin/pumuki.js watch --once --stage=PRE_COMMIT --scope=workingTree --json | jq -e '.status'` -> `JSON_PIPE_OK`.
|
|
2123
|
+
- leyenda Flux actualizada:
|
|
2124
|
+
- `PUM-012` -> `✅ Cerrado`.
|
|
2125
|
+
- backlog Flux externo queda en `✅ 100% cerrado`.
|
|
2126
|
+
- Evidencia:
|
|
2127
|
+
- `npx --yes tsx@4.21.0 --test integrations/git/__tests__/runPlatformGate.test.ts integrations/lifecycle/__tests__/watch.test.ts integrations/lifecycle/__tests__/cli.test.ts` -> `81 pass / 0 fail`.
|
|
2128
|
+
- `npm run -s typecheck` -> `PASS`.
|
|
2129
|
+
|
|
2130
|
+
- ✅ PUMUKI-164: Priorizar cierre SDD pendiente de RuralGo para `sync-docs` completo (3 docs canónicos por defecto + aprendizaje operativo) y dejar contrato enterprise sin ambigüedad.
|
|
2131
|
+
- Resultado (2026-03-05):
|
|
2132
|
+
- `integrations/sdd/syncDocs.ts` amplía targets por defecto de `sync-docs`:
|
|
2133
|
+
- `docs/strategy/ruralgo-tracking-hub.md` (sección managed auto-creable),
|
|
2134
|
+
- `docs/technical/08-validation/refactor/operational-summary.md` (sección managed auto-creable),
|
|
2135
|
+
- `docs/validation/refactor/last-run.json` (merge JSON determinista con `pumuki_sdd_status`),
|
|
2136
|
+
- manteniendo compatibilidad con target previo (`pumuki-integration-feedback.md`) y sin romper repos que no tengan esos archivos (targets opcionales por existencia).
|
|
2137
|
+
- `applyManagedSection` ahora soporta `createIfMissing` (solo cuando faltan ambos markers) para evitar conflicto falso en docs canónicos nuevos.
|
|
2138
|
+
- test de regresión añadido:
|
|
2139
|
+
- `integrations/sdd/__tests__/syncDocs.test.ts` -> `runSddSyncDocs por defecto sincroniza 3 docs canónicos SDD cuando existen en el repo consumer`.
|
|
2140
|
+
- estado RuralGo actualizado:
|
|
2141
|
+
- `/Users/juancarlosmerlosalbarracin/Developer/Projects/R_GO/docs/technical/08-validation/refactor/pumuki-integration-feedback.md`
|
|
2142
|
+
- bloque “Actualizar 3 docs canónicos del consumer por defecto” -> `✅ Implementado`.
|
|
2143
|
+
- Evidencia:
|
|
2144
|
+
- `npx --yes tsx@4.21.0 --test integrations/sdd/__tests__/syncDocs.test.ts integrations/lifecycle/__tests__/cli.test.ts` -> `59 pass / 0 fail`.
|
|
2145
|
+
- `npm run -s typecheck` -> `PASS`.
|
|
2146
|
+
|
|
2147
|
+
- ✅ PUMUKI-165: Priorizar siguiente SDD pendiente de RuralGo para auto-sync integral de artefactos OpenSpec (`tasks.md/design.md/retrospective.md`) por contrato default.
|
|
2148
|
+
- Resultado (2026-03-05):
|
|
2149
|
+
- `integrations/sdd/syncDocs.ts` amplía `runSddAutoSync` para incluir por defecto targets OpenSpec por cambio:
|
|
2150
|
+
- `openspec/changes/<change>/tasks.md`
|
|
2151
|
+
- `openspec/changes/<change>/design.md`
|
|
2152
|
+
- `openspec/changes/<change>/retrospective.md`
|
|
2153
|
+
- comportamiento idempotente y compatible:
|
|
2154
|
+
- crea archivo si no existe (`bootstrapIfMissing`),
|
|
2155
|
+
- inserta/actualiza bloque managed `AUTO_SYNC_STATUS`,
|
|
2156
|
+
- no rompe consumers existentes (targets opcionales/canónicos previos se mantienen).
|
|
2157
|
+
- cobertura actualizada:
|
|
2158
|
+
- `runSddAutoSync dry-run orquesta sync-docs + learning sin modificar archivos` ahora valida 4 archivos sincronizados (canónico + 3 OpenSpec),
|
|
2159
|
+
- `runSddAutoSync aplica sync-docs y persiste learning en modo escritura` valida creación real de `tasks/design/retrospective` con markers.
|
|
2160
|
+
- estado RuralGo actualizado:
|
|
2161
|
+
- `/Users/juancarlosmerlosalbarracin/Developer/Projects/R_GO/docs/technical/08-validation/refactor/pumuki-integration-feedback.md`
|
|
2162
|
+
- bloque “Auto-sync integral de tasks.md/design.md/retrospective.md por defecto” -> `✅ Implementado`.
|
|
2163
|
+
- Evidencia:
|
|
2164
|
+
- `npx --yes tsx@4.21.0 --test integrations/sdd/__tests__/syncDocs.test.ts integrations/lifecycle/__tests__/cli.test.ts` -> `59 pass / 0 fail`.
|
|
2165
|
+
- `npm run -s typecheck` -> `PASS`.
|
|
2166
|
+
|
|
2167
|
+
- ✅ PUMUKI-166: Priorizar último pendiente SDD de RuralGo para consumo automático universal de `learning.json` por agente/orquestador.
|
|
2168
|
+
- Resultado (2026-03-05):
|
|
2169
|
+
- nuevo helper `integrations/sdd/learningInsights.ts` para lectura robusta de `openspec/changes/<change>/learning.json` (cambio activo) y derivación de recomendaciones accionables.
|
|
2170
|
+
- integración automática en herramientas MCP:
|
|
2171
|
+
- `integrations/mcp/aiGateCheck.ts`
|
|
2172
|
+
- `integrations/mcp/preFlightCheck.ts`
|
|
2173
|
+
- `integrations/mcp/autoExecuteAiStart.ts`
|
|
2174
|
+
- salida extendida sin romper contrato:
|
|
2175
|
+
- campo `learning_context` en cada tool,
|
|
2176
|
+
- hints/auto_fixes/instruction enriquecidos con recomendaciones de learning cuando existen.
|
|
2177
|
+
- cobertura añadida:
|
|
2178
|
+
- `integrations/mcp/__tests__/aiGateCheck.test.ts` (ingesta + auto_fix learning),
|
|
2179
|
+
- `integrations/mcp/__tests__/preFlightCheck.test.ts` (learning_context en preflight),
|
|
2180
|
+
- `integrations/mcp/__tests__/autoExecuteAiStart.test.ts` (mensaje/instrucción con learning).
|
|
2181
|
+
- estado RuralGo actualizado:
|
|
2182
|
+
- `/Users/juancarlosmerlosalbarracin/Developer/Projects/R_GO/docs/technical/08-validation/refactor/pumuki-integration-feedback.md`
|
|
2183
|
+
- bloque “Consumo automático universal de learning.json por cualquier agente” -> `✅ Implementado`.
|
|
2184
|
+
- Evidencia:
|
|
2185
|
+
- `npx --yes tsx@4.21.0 --test integrations/mcp/__tests__/aiGateCheck.test.ts integrations/mcp/__tests__/preFlightCheck.test.ts integrations/mcp/__tests__/autoExecuteAiStart.test.ts integrations/sdd/__tests__/syncDocs.test.ts integrations/lifecycle/__tests__/cli.test.ts` -> `78 pass / 0 fail`.
|
|
2186
|
+
- `npm run -s typecheck` -> `PASS`.
|
|
2187
|
+
|
|
2188
|
+
- ✅ PUMUKI-167: Preparar release + rollout consumidor tras cierre de backlog SDD/Flux/RuralGo.
|
|
2189
|
+
- Resultado (2026-03-05):
|
|
2190
|
+
- versión publicada: `pumuki@6.3.45`.
|
|
2191
|
+
- changelog/release notes actualizados para bloque SDD:
|
|
2192
|
+
- `sync-docs` default 3 docs canónicos,
|
|
2193
|
+
- `auto-sync` default `tasks/design/retrospective`,
|
|
2194
|
+
- `learning_context` automático en tools MCP.
|
|
2195
|
+
- rollout consumidor completado:
|
|
2196
|
+
- `R_GO`: `install + status --json + doctor --json` en verde (`lifecycleState.version=6.3.45`, `issues=[]`).
|
|
2197
|
+
- `SAAS:APP_SUPERMERCADOS`: `install + status --json + doctor --json` en verde (`lifecycleState.version=6.3.45`, `issues=[]`).
|
|
2198
|
+
- `Flux_training`: `install + status --json + doctor --json` en verde (`lifecycleState.version=6.3.45`, `issues=[]`).
|
|
2199
|
+
- Evidencia:
|
|
2200
|
+
- `npx --yes tsx@4.21.0 --test integrations/mcp/__tests__/aiGateCheck.test.ts integrations/mcp/__tests__/preFlightCheck.test.ts integrations/mcp/__tests__/autoExecuteAiStart.test.ts integrations/sdd/__tests__/syncDocs.test.ts integrations/lifecycle/__tests__/cli.test.ts` -> `78 pass / 0 fail`.
|
|
2201
|
+
- `npm run -s typecheck` -> `PASS`.
|
|
2202
|
+
- `npm publish --access public` -> `+ pumuki@6.3.45`.
|
|
2203
|
+
- `npm view pumuki@6.3.45 version` -> `6.3.45`.
|
|
2204
|
+
|
|
2205
|
+
- ✅ PUMUKI-168: Monitorización post-release 6.3.45 en consumidores reales y captura de hallazgos netos nuevos (sin reabrir cerrados).
|
|
2206
|
+
- Resultado (2026-03-05):
|
|
2207
|
+
- pasada completa de `backlog-watch` en consumidores:
|
|
2208
|
+
- `SAAS`: `entriesScanned=25`, `nonClosedEntries=0`, `hasActionRequired=false`.
|
|
2209
|
+
- `RuralGo`: `entriesScanned=100`, `nonClosedEntries=0`, `hasActionRequired=false`.
|
|
2210
|
+
- `Flux`: se detectó gap de parser (`entriesScanned=0`) con IDs `PUM-*`.
|
|
2211
|
+
- fix inmediato aplicado en core backlog tooling para compatibilidad con IDs Flux:
|
|
2212
|
+
- regex de IDs ampliado a `PUM-*` en:
|
|
2213
|
+
- `scripts/watch-consumer-backlog-lib.ts`
|
|
2214
|
+
- `scripts/reconcile-consumer-backlog-issues-lib.ts`
|
|
2215
|
+
- `scripts/backlog-id-issue-map-lib.ts`
|
|
2216
|
+
- tests de regresión añadidos:
|
|
2217
|
+
- `scripts/__tests__/watch-consumer-backlog.test.ts`
|
|
2218
|
+
- `scripts/__tests__/reconcile-consumer-backlog-issues.test.ts`
|
|
2219
|
+
- `scripts/__tests__/backlog-id-issue-map-lib.test.ts`
|
|
2220
|
+
- revalidación post-fix:
|
|
2221
|
+
- `Flux` pasa a `entriesScanned=12`, `nonClosedEntries=0`, `hasActionRequired=false`.
|
|
2222
|
+
- Evidencia:
|
|
2223
|
+
- `npm run -s test:backlog-tooling` -> `51 pass / 0 fail`.
|
|
2224
|
+
- `npm run -s typecheck` -> `PASS`.
|
|
2225
|
+
- `npm run -s validation:backlog-watch -- --file=\"/Users/juancarlosmerlosalbarracin/Developer/Projects/SAAS:APP_SUPERMERCADOS/docs/pumuki/PUMUKI_BUGS_MEJORAS.md\" --repo=SwiftEnProfundidad/ast-intelligence-hooks --json --no-fail` -> `hasActionRequired=false`.
|
|
2226
|
+
- `npm run -s validation:backlog-watch -- --file=\"/Users/juancarlosmerlosalbarracin/Developer/Projects/R_GO/docs/technical/08-validation/refactor/pumuki-integration-feedback.md\" --repo=SwiftEnProfundidad/ast-intelligence-hooks --json --no-fail` -> `hasActionRequired=false`.
|
|
2227
|
+
- `npm run -s validation:backlog-watch -- --file=\"/Users/juancarlosmerlosalbarracin/Developer/Projects/Flux_training/docs/BUGS_Y_MEJORAS_PUMUKI.md\" --repo=SwiftEnProfundidad/ast-intelligence-hooks --json --no-fail` -> `entriesScanned=12`, `hasActionRequired=false`.
|
|
2228
|
+
|
|
2229
|
+
- ✅ PUMUKI-169: Vigilancia continua post-6.3.45 + preparación de siguiente corte solo ante incidencia neta reproducible.
|
|
2230
|
+
- Resultado (2026-03-05):
|
|
2231
|
+
- monitorización ejecutada en los 3 consumers con `backlog-watch`:
|
|
2232
|
+
- `SAAS`: `entriesScanned=25`, `nonClosedEntries=0`, `hasActionRequired=false`.
|
|
2233
|
+
- `RuralGo`: `entriesScanned=100`, `nonClosedEntries=0`, `hasActionRequired=false`.
|
|
2234
|
+
- `Flux`: se detectó bug de parser interno (IDs `PUM-*` no contabilizados, `entriesScanned=0`).
|
|
2235
|
+
- fix aplicado en core backlog-tooling:
|
|
2236
|
+
- soporte de IDs `PUM-*` añadido en:
|
|
2237
|
+
- `scripts/watch-consumer-backlog-lib.ts`
|
|
2238
|
+
- `scripts/reconcile-consumer-backlog-issues-lib.ts`
|
|
2239
|
+
- `scripts/backlog-id-issue-map-lib.ts`
|
|
2240
|
+
- regresión cubierta en tests:
|
|
2241
|
+
- `scripts/__tests__/watch-consumer-backlog.test.ts`
|
|
2242
|
+
- `scripts/__tests__/reconcile-consumer-backlog-issues.test.ts`
|
|
2243
|
+
- `scripts/__tests__/backlog-id-issue-map-lib.test.ts`
|
|
2244
|
+
- revalidación post-fix:
|
|
2245
|
+
- `Flux` pasa a `entriesScanned=12`, `nonClosedEntries=0`, `hasActionRequired=false`.
|
|
2246
|
+
- Evidencia:
|
|
2247
|
+
- `npm run -s test:backlog-tooling` -> `51 pass / 0 fail`.
|
|
2248
|
+
- `npm run -s typecheck` -> `PASS`.
|
|
2249
|
+
- `npm run -s validation:backlog-watch -- --file=\"/Users/juancarlosmerlosalbarracin/Developer/Projects/Flux_training/docs/BUGS_Y_MEJORAS_PUMUKI.md\" --repo=SwiftEnProfundidad/ast-intelligence-hooks --json --no-fail` -> `entriesScanned=12`, `hasActionRequired=false`.
|
|
2250
|
+
|
|
2251
|
+
- ✅ PUMUKI-170: Consolidar vigilancia multi-consumer en un solo comando fleet para reducir fricción operativa y mantener la señal neta en una ejecución única.
|
|
2252
|
+
- Resultado (2026-03-05):
|
|
2253
|
+
- nuevo comando fleet:
|
|
2254
|
+
- `scripts/watch-consumer-backlog-fleet.ts`
|
|
2255
|
+
- permite múltiples `--target=<path>[::repo]`, resumen agregado y salida JSON consolidada.
|
|
2256
|
+
- cobertura añadida:
|
|
2257
|
+
- `scripts/__tests__/watch-consumer-backlog-fleet.test.ts` (help, agregación JSON multi-target, exit code determinista con/ sin `--no-fail`).
|
|
2258
|
+
- wiring operativo:
|
|
2259
|
+
- `package.json`: nuevo script `validation:backlog-watch:fleet`.
|
|
2260
|
+
- `docs/USAGE.md`: comportamiento, referencia rápida y ejemplo de uso multi-consumer.
|
|
2261
|
+
- Evidencia:
|
|
2262
|
+
- `npm run -s test:backlog-tooling` -> `54 pass / 0 fail`.
|
|
2263
|
+
- `npm run -s typecheck` -> `PASS`.
|
|
2264
|
+
- `npm run -s validation:backlog-watch:fleet -- --target=\"/Users/juancarlosmerlosalbarracin/Developer/Projects/SAAS:APP_SUPERMERCADOS/docs/pumuki/PUMUKI_BUGS_MEJORAS.md::SwiftEnProfundidad/ast-intelligence-hooks\" --target=\"/Users/juancarlosmerlosalbarracin/Developer/Projects/R_GO/docs/technical/08-validation/refactor/pumuki-integration-feedback.md::SwiftEnProfundidad/ast-intelligence-hooks\" --target=\"/Users/juancarlosmerlosalbarracin/Developer/Projects/Flux_training/docs/BUGS_Y_MEJORAS_PUMUKI.md\" --json --no-fail` -> `targets=3`, `has_action_required=false`.
|
|
2265
|
+
|
|
2266
|
+
- ✅ PUMUKI-171: Mantener vigilancia continua con el nuevo comando fleet y abrir fix incremental solo ante incidencia neta reproducible.
|
|
2267
|
+
- Resultado (2026-03-05):
|
|
2268
|
+
- ciclo de vigilancia ejecutado con `validation:backlog-watch:fleet` en `SAAS`, `RuralGo`, `Flux`.
|
|
2269
|
+
- salida consolidada limpia:
|
|
2270
|
+
- `targets=3`
|
|
2271
|
+
- `entries_scanned_total=137`
|
|
2272
|
+
- `non_closed_total=0`
|
|
2273
|
+
- `action_required_targets=0`
|
|
2274
|
+
- `has_action_required=false`
|
|
2275
|
+
- no se abrió frente técnico nuevo porque no hubo señal neta reproducible.
|
|
2276
|
+
- Evidencia:
|
|
2277
|
+
- `npm run -s validation:backlog-watch:fleet -- --target=\"/Users/juancarlosmerlosalbarracin/Developer/Projects/SAAS:APP_SUPERMERCADOS/docs/pumuki/PUMUKI_BUGS_MEJORAS.md::SwiftEnProfundidad/ast-intelligence-hooks\" --target=\"/Users/juancarlosmerlosalbarracin/Developer/Projects/R_GO/docs/technical/08-validation/refactor/pumuki-integration-feedback.md::SwiftEnProfundidad/ast-intelligence-hooks\" --target=\"/Users/juancarlosmerlosalbarracin/Developer/Projects/Flux_training/docs/BUGS_Y_MEJORAS_PUMUKI.md\" --json --no-fail` -> `has_action_required=false`.
|
|
2278
|
+
|
|
2279
|
+
- ✅ PUMUKI-172: Automatizar vigilancia cíclica sin fricción (tick único) y dejar evidencia compacta para decisión de release/fix.
|
|
2280
|
+
- Resultado (2026-03-05):
|
|
2281
|
+
- nuevo comando operativo de tick:
|
|
2282
|
+
- `scripts/watch-consumer-backlog-fleet-tick.ts`
|
|
2283
|
+
- defaults canónicos para `SAAS`, `RuralGo` y `Flux` con overrides por flag (`--saas/--ruralgo/--flux`) y repo configurable (`--repo`).
|
|
2284
|
+
- wiring operativo:
|
|
2285
|
+
- `package.json`: nuevo script `validation:backlog-watch:tick`.
|
|
2286
|
+
- `docs/USAGE.md`: comportamiento + referencia rápida + ejemplo de uso.
|
|
2287
|
+
- cobertura añadida:
|
|
2288
|
+
- `scripts/__tests__/watch-consumer-backlog-fleet-tick.test.ts` (`--help`, JSON limpio, exit code 1 con findings sin `--no-fail`).
|
|
2289
|
+
- ejecución real del tick canónico completada en verde (`has_action_required=false`).
|
|
2290
|
+
- Evidencia:
|
|
2291
|
+
- `npm run -s test:backlog-tooling` -> `57 pass / 0 fail`.
|
|
2292
|
+
- `npm run -s typecheck` -> `PASS`.
|
|
2293
|
+
- `npm run -s validation:backlog-watch:tick` -> `targets=3`, `entries_scanned_total=137`, `has_action_required=false`.
|
|
2294
|
+
|
|
2295
|
+
- ✅ PUMUKI-173: Cerrar ciclo de release incremental con criterio “no-action” documentado y checklist de publicación solo cuando haya señal neta.
|
|
2296
|
+
- Resultado (2026-03-05):
|
|
2297
|
+
- criterio operativo formalizado en comandos:
|
|
2298
|
+
- `validation:backlog-watch:tick` (observabilidad, no bloquea pipeline).
|
|
2299
|
+
- `validation:backlog-watch:gate` (gate de release, bloquea con exit code `1` cuando hay señal neta).
|
|
2300
|
+
- documentación actualizada en `docs/USAGE.md` con quick reference y ejemplo explícito para ambos comandos.
|
|
2301
|
+
- verificación real:
|
|
2302
|
+
- `tick` y `gate` devuelven `has_action_required=false` en el estado actual de `SAAS`, `RuralGo`, `Flux`.
|
|
2303
|
+
- Evidencia:
|
|
2304
|
+
- `npm run -s validation:backlog-watch:tick` -> `targets=3`, `has_action_required=false`.
|
|
2305
|
+
- `npm run -s validation:backlog-watch:gate` -> `targets=3`, `has_action_required=false`.
|
|
2306
|
+
- `npm run -s typecheck` -> `PASS`.
|
|
2307
|
+
|
|
2308
|
+
- ✅ PUMUKI-174: Ejecutar ciclo de vigilancia continua y preparar fix inmediato solo al primer `has_action_required=true` en consumers.
|
|
2309
|
+
- Resultado (2026-03-05):
|
|
2310
|
+
- ciclo de vigilancia ejecutado con ambos modos:
|
|
2311
|
+
- `validation:backlog-watch:tick` (observabilidad),
|
|
2312
|
+
- `validation:backlog-watch:gate` (bloqueante para release).
|
|
2313
|
+
- salida consolidada del ciclo:
|
|
2314
|
+
- `targets=3`
|
|
2315
|
+
- `entries_scanned_total=137`
|
|
2316
|
+
- `non_closed_total=0`
|
|
2317
|
+
- `has_action_required=false`
|
|
2318
|
+
- no se abrió issue/fix nuevo porque no hubo señal neta reproducible.
|
|
2319
|
+
- Evidencia:
|
|
2320
|
+
- `npm run -s validation:backlog-watch:tick` -> `has_action_required=false`.
|
|
2321
|
+
- `npm run -s validation:backlog-watch:gate` -> `has_action_required=false`.
|
|
2322
|
+
|
|
2323
|
+
- ✅ PUMUKI-175: Mantener operación continua de vigilancia y disparar fix/release incremental únicamente con señal neta (`has_action_required=true`).
|
|
2324
|
+
- Resultado (2026-03-05):
|
|
2325
|
+
- ciclo de vigilancia periódico ejecutado en modo observabilidad (`tick`) y modo gate (`gate`).
|
|
2326
|
+
- señal consolidada estable:
|
|
2327
|
+
- `targets=3`
|
|
2328
|
+
- `entries_scanned_total=137`
|
|
2329
|
+
- `non_closed_total=0`
|
|
2330
|
+
- `action_required_targets=0`
|
|
2331
|
+
- `has_action_required=false`
|
|
2332
|
+
- no se abrió issue/fix nuevo al no existir incidencia neta reproducible.
|
|
2333
|
+
- Evidencia:
|
|
2334
|
+
- `npm run -s validation:backlog-watch:tick` -> `has_action_required=false`.
|
|
2335
|
+
- `npm run -s validation:backlog-watch:gate` -> `has_action_required=false`.
|
|
2336
|
+
|
|
2337
|
+
- ✅ PUMUKI-176: Continuar vigilancia operativa y abrir ejecución técnica inmediata al primer hallazgo neto en SAAS/RuralGo/Flux.
|
|
2338
|
+
- Resultado (2026-03-05):
|
|
2339
|
+
- ciclo ejecutado con `tick` y `gate` en los tres consumers.
|
|
2340
|
+
- resumen consolidado:
|
|
2341
|
+
- `targets=3`
|
|
2342
|
+
- `entries_scanned_total=137`
|
|
2343
|
+
- `non_closed_total=0`
|
|
2344
|
+
- `action_required_targets=0`
|
|
2345
|
+
- `has_action_required=false`
|
|
2346
|
+
- sin señal neta reproducible, por lo que no se abrió fix nuevo.
|
|
2347
|
+
- Evidencia:
|
|
2348
|
+
- `npm run -s validation:backlog-watch:tick` -> `has_action_required=false`.
|
|
2349
|
+
- `npm run -s validation:backlog-watch:gate` -> `has_action_required=false`.
|
|
2350
|
+
|
|
2351
|
+
- ✅ PUMUKI-177: Mantener vigilancia continua y disparar fix inmediato al primer `has_action_required=true` con actualización simultánea de leyendas externas e internas.
|
|
2352
|
+
- Resultado (2026-03-05):
|
|
2353
|
+
- se detectó señal neta en `Flux` (`has_action_required=true`) por `needs_issue` en `PUM-009/010/011`.
|
|
2354
|
+
- normalización ejecutada sin tocar código funcional del consumer:
|
|
2355
|
+
- `PUM-009` validado como corregido con `pumuki@latest` (`artifact.version="1"` + `artifact.slices[]`) y marcado `✅ Cerrado`.
|
|
2356
|
+
- `PUM-011` validado como corregido con `pumuki@latest` (`lastTick.changedFiles[]` + `lastTick.evaluatedFiles[]`) y marcado `✅ Cerrado`.
|
|
2357
|
+
- `PUM-010` mantenido activo y enlazado a issue upstream `#719` para trazabilidad (`🚧 En construccion`).
|
|
2358
|
+
- tras normalización de leyenda/refs en MD externo, el ciclo vuelve a estado saludable (`has_action_required=false`).
|
|
2359
|
+
- Evidencia:
|
|
2360
|
+
- `gh issue create ...` -> `https://github.com/SwiftEnProfundidad/ast-intelligence-hooks/issues/719`.
|
|
2361
|
+
- `npx --yes --package pumuki@latest pumuki sdd evidence --scenario-id=docs/validation/features/p3_t1_web_shell_dashboard --test-command="pnpm test" --test-status=passed --json` (en Flux) -> contrato válido.
|
|
2362
|
+
- `npx --yes --package pumuki@latest pumuki watch --once --stage=PRE_COMMIT --scope=staged --json` (en Flux) -> `lastTick.changedFiles[]` y `lastTick.evaluatedFiles[]` presentes.
|
|
2363
|
+
- `npm run -s validation:backlog-watch:tick` + `npm run -s validation:backlog-watch:gate` -> `has_action_required=false`.
|
|
2364
|
+
|
|
2365
|
+
- ✅ PUMUKI-178: Ejecutar implementación técnica del issue `#719` para persistencia estable de skills coverage entre iteraciones en consumer.
|
|
2366
|
+
- Resultado (2026-03-05):
|
|
2367
|
+
- `stageRunners` ahora replica el patrón de auto-reconcile de `watch` para bloqueos de skills coverage en hooks (`PRE_COMMIT`/`PRE_PUSH`):
|
|
2368
|
+
- detecta códigos de bloqueo de cobertura de skills,
|
|
2369
|
+
- ejecuta `policy reconcile --strict --apply`,
|
|
2370
|
+
- reintenta una única vez el gate de hook con política re-resuelta.
|
|
2371
|
+
- cobertura de regresión añadida:
|
|
2372
|
+
- retry exitoso con reconcile automático en `PRE_COMMIT`,
|
|
2373
|
+
- no-retry cuando `PUMUKI_HOOK_POLICY_AUTO_RECONCILE=0`.
|
|
2374
|
+
- Evidencia:
|
|
2375
|
+
- `npx --yes tsx@4.21.0 --test integrations/git/__tests__/stageRunners.test.ts` -> `30 pass / 0 fail`.
|
|
2376
|
+
- `npm run -s typecheck` -> `PASS`.
|
|
2377
|
+
|
|
2378
|
+
- ✅ PUMUKI-179: Ejecutar siguiente foco activo de Flux (`PUM-012`) para eliminar drift entre binario local del consumer y `pumuki@latest` en contrato `watch --json` (`changedFiles/evaluatedFiles` + versión efectiva).
|
|
2379
|
+
- Resultado (2026-03-05):
|
|
2380
|
+
- `watch --json` ahora expone bloque `version` con:
|
|
2381
|
+
- `effective`, `runtime`, `consumerInstalled`, `source`,
|
|
2382
|
+
- `driftFromRuntime`,
|
|
2383
|
+
- `driftWarning` humano/accionable cuando existe desalineación.
|
|
2384
|
+
- cobertura técnica añadida:
|
|
2385
|
+
- `integrations/lifecycle/__tests__/watch.test.ts` (metadata + warning de drift),
|
|
2386
|
+
- ajuste de contrato en `integrations/lifecycle/__tests__/cli.test.ts`.
|
|
2387
|
+
- Evidencia:
|
|
2388
|
+
- `npx --yes tsx@4.21.0 --test integrations/lifecycle/__tests__/watch.test.ts integrations/lifecycle/__tests__/cli.test.ts` -> `48 pass / 0 fail`.
|
|
2389
|
+
- `npm run -s typecheck` -> `PASS`.
|
|
2390
|
+
- smoke consumer Flux (binario local core): `watch --once --json` -> `version.driftFromRuntime=true` + `driftWarning` presente.
|
|
2391
|
+
|
|
2392
|
+
- 🚧 PUMUKI-180: Cerrar rollout consumidor de `PUM-012` (release + update en Flux) y mover leyenda externa de `🚧` a `✅` con evidencia en `pnpm exec pumuki watch --json`.
|
|
@@ -769,6 +769,7 @@ export async function runPlatformGate(params: {
|
|
|
769
769
|
auditMode?: 'gate' | 'engine';
|
|
770
770
|
policyTrace?: ResolvedStagePolicy['trace'];
|
|
771
771
|
scope: GateScope;
|
|
772
|
+
silent?: boolean;
|
|
772
773
|
sddShortCircuit?: boolean;
|
|
773
774
|
services?: Partial<GateServices>;
|
|
774
775
|
dependencies?: Partial<GateDependencies>;
|
|
@@ -797,7 +798,9 @@ export async function runPlatformGate(params: {
|
|
|
797
798
|
repoRoot
|
|
798
799
|
);
|
|
799
800
|
if (!sddDecision.allowed) {
|
|
800
|
-
|
|
801
|
+
if (params.silent !== true) {
|
|
802
|
+
process.stdout.write(`[pumuki][sdd] ${sddDecision.code}: ${sddDecision.message}\n`);
|
|
803
|
+
}
|
|
801
804
|
sddBlockingFinding = toSddBlockingFinding(sddDecision);
|
|
802
805
|
if (shouldShortCircuitSdd) {
|
|
803
806
|
const emptyDetectedPlatforms: DetectedPlatforms = {};
|
|
@@ -972,16 +975,18 @@ export async function runPlatformGate(params: {
|
|
|
972
975
|
const astIntelligenceDualFinding = astIntelligenceDualValidation?.finding;
|
|
973
976
|
if (astIntelligenceDualValidation && astIntelligenceDualValidation.mode !== 'off') {
|
|
974
977
|
const summary = astIntelligenceDualValidation.summary;
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
978
|
+
if (params.silent !== true) {
|
|
979
|
+
process.stdout.write(
|
|
980
|
+
`[pumuki][ast-intelligence] mode=${astIntelligenceDualValidation.mode}` +
|
|
981
|
+
` mapped_rules=${summary.mapped_rules}` +
|
|
982
|
+
` compared_rules=${summary.compared_rules}` +
|
|
983
|
+
` divergences=${summary.divergences}` +
|
|
984
|
+
` false_positives=${summary.false_positives}` +
|
|
985
|
+
` false_negatives=${summary.false_negatives}` +
|
|
986
|
+
` latency_ms=${summary.latency_ms}` +
|
|
987
|
+
` languages=[${summary.languages.join(',') || 'none'}]\n`
|
|
988
|
+
);
|
|
989
|
+
}
|
|
985
990
|
}
|
|
986
991
|
const degradedModeBlocks = params.policyTrace?.degraded?.action === 'block';
|
|
987
992
|
const rulesCoverage = coverage
|
|
@@ -1170,9 +1175,11 @@ export async function runPlatformGate(params: {
|
|
|
1170
1175
|
} catch (error) {
|
|
1171
1176
|
const rawReason = error instanceof Error ? error.message : String(error);
|
|
1172
1177
|
const reason = rawReason.trim().replace(/\s+/g, ' ');
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1178
|
+
if (params.silent !== true) {
|
|
1179
|
+
process.stdout.write(
|
|
1180
|
+
`[pumuki][memory-shadow] unavailable reason=${reason.length > 0 ? reason : 'unknown_error'}\n`
|
|
1181
|
+
);
|
|
1182
|
+
}
|
|
1176
1183
|
}
|
|
1177
1184
|
}
|
|
1178
1185
|
const memoryShadow:
|
|
@@ -1196,11 +1203,13 @@ export async function runPlatformGate(params: {
|
|
|
1196
1203
|
: undefined;
|
|
1197
1204
|
|
|
1198
1205
|
if (memoryShadowRecommendation) {
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1206
|
+
if (params.silent !== true) {
|
|
1207
|
+
process.stdout.write(
|
|
1208
|
+
`[pumuki][memory-shadow] recommended=${memoryShadowRecommendation.recommendedOutcome}` +
|
|
1209
|
+
` confidence=${memoryShadowRecommendation.confidence.toFixed(2)}` +
|
|
1210
|
+
` reasons=${memoryShadowRecommendation.reasonCodes.join(',')}\n`
|
|
1211
|
+
);
|
|
1212
|
+
}
|
|
1204
1213
|
}
|
|
1205
1214
|
|
|
1206
1215
|
dependencies.emitPlatformGateEvidence({
|
|
@@ -1224,7 +1233,9 @@ export async function runPlatformGate(params: {
|
|
|
1224
1233
|
});
|
|
1225
1234
|
|
|
1226
1235
|
if (gateOutcome === 'BLOCK') {
|
|
1236
|
+
if (params.silent !== true) {
|
|
1227
1237
|
dependencies.printGateFindings(findingsWithWaiver);
|
|
1238
|
+
}
|
|
1228
1239
|
return 1;
|
|
1229
1240
|
}
|
|
1230
1241
|
|