pumuki 6.3.45 → 6.3.47

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.
@@ -5,6 +5,32 @@ 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.47)
9
+
10
+ - Manifest integrity hardening in hook stages (`PRE_COMMIT` / `PRE_PUSH`):
11
+ - Pumuki now snapshots `package.json` and `package-lock.json` before hook gate execution.
12
+ - If an unexpected mutation appears during the hook flow, Pumuki restores both files automatically and blocks with:
13
+ - `MANIFEST_MUTATION_DETECTED`
14
+ - Operational impact:
15
+ - avoids silent consumer manifest drift while keeping explicit upgrade flows (`pumuki update --latest`) under developer control.
16
+ - Validation evidence:
17
+ - `npx --yes tsx@4.21.0 --test integrations/git/__tests__/stageRunners.test.ts` (`32 pass / 0 fail`)
18
+ - `npm run -s typecheck` (`PASS`)
19
+ - consumer check with local bin in RuralGo: hashes of `package.json`/`package-lock.json` unchanged after `PRE_WRITE + pre-commit + pre-push`.
20
+
21
+ ### 2026-03-05 (v6.3.46)
22
+
23
+ - Paridad hook/watch en auto-remediación de skills coverage:
24
+ - `pre-commit` y `pre-push` ahora ejecutan `policy reconcile --strict --apply` y reintentan una única vez cuando el bloqueo es de coverage de skills.
25
+ - elimina recurrencia de bootstrap/reconcile manual entre iteraciones de consumer.
26
+ - Contrato `watch --json` enriquecido para drift de versión:
27
+ - nuevo bloque `version` con `effective/runtime/consumerInstalled/source`,
28
+ - incluye `driftFromRuntime` y `driftWarning` cuando el binario del consumer no está alineado con runtime/latest.
29
+ - Evidencia de validación:
30
+ - `npx --yes tsx@4.21.0 --test integrations/git/__tests__/stageRunners.test.ts` (`30 pass / 0 fail`)
31
+ - `npx --yes tsx@4.21.0 --test integrations/lifecycle/__tests__/watch.test.ts integrations/lifecycle/__tests__/cli.test.ts` (`48 pass / 0 fail`)
32
+ - `npm run -s typecheck` (`PASS`)
33
+
8
34
  ### 2026-03-05 (v6.3.45)
9
35
 
10
36
  - SDD sync canónico ampliado por defecto en consumer:
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 \
@@ -2185,8 +2185,335 @@
2185
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
2186
  - `npm run -s typecheck` -> `PASS`.
2187
2187
 
2188
- - 🚧 PUMUKI-167: Preparar release + rollout consumidor tras cierre de backlog SDD/Flux/RuralGo.
2189
- - Alcance:
2190
- - consolidar changelog de fixes/mejoras cerradas en este bloque,
2191
- - publicar nueva versión npm con evidencia de tests en verde,
2192
- - ejecutar upgrade/update en repos consumidores (`SAAS`, `R_GO`) y validar smoke mínimo post-upgrade.
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`.
2393
+ - Resultado (2026-03-05):
2394
+ - release publicado: `pumuki@6.3.46`.
2395
+ - rollout en Flux:
2396
+ - `pnpm add -Dw pumuki@latest`
2397
+ - `pnpm exec pumuki watch --once --stage=PRE_COMMIT --scope=staged --json`
2398
+ - contrato validado en consumer:
2399
+ - `version.effective=6.3.46`
2400
+ - `version.runtime=6.3.46`
2401
+ - `version.driftFromRuntime=false`
2402
+ - `lastTick.changedFiles[]` y `lastTick.evaluatedFiles[]` presentes.
2403
+ - MD externo Flux actualizado:
2404
+ - `PUM-012` -> `✅ Cerrado`
2405
+ - backlog Flux queda `✅ 100% cerrado`.
2406
+
2407
+ - ✅ PUMUKI-181: Ejecutar verificación post-release en SAAS y RuralGo (`status/doctor/watch`) y registrar únicamente hallazgos netos nuevos.
2408
+ - Resultado (2026-03-05):
2409
+ - verificación completa en `SAAS`:
2410
+ - `status --json`: `packageVersion=6.3.46`, `lifecycleState.version=6.3.46`.
2411
+ - `doctor --json`: `issues=[]`.
2412
+ - `watch --once --json`: `version.effective=6.3.46`, `driftFromRuntime=false`, gate `ALLOW`.
2413
+ - verificación completa en `R_GO`:
2414
+ - `status --json`: `packageVersion=6.3.46`, `lifecycleState.version=6.3.46`.
2415
+ - `doctor --json`: `issues=[]`.
2416
+ - `watch --once --json`: `version.effective=6.3.46`, `driftFromRuntime=false`, gate `ALLOW`.
2417
+ - contraste de backlog externo (solo señal neta):
2418
+ - `SAAS`: `hasActionRequired=false`.
2419
+ - `RuralGo`: `hasActionRequired=false`.
2420
+ - no se registran hallazgos netos nuevos en esta pasada.
2421
+ - Evidencia:
2422
+ - `pnpm exec pumuki status --json` (SAAS).
2423
+ - `pnpm exec pumuki doctor --json` (SAAS).
2424
+ - `pnpm exec pumuki watch --once --stage=PRE_COMMIT --scope=staged --json` (SAAS).
2425
+ - `npx --yes --package pumuki@latest pumuki status --json` (R_GO).
2426
+ - `npx --yes --package pumuki@latest pumuki doctor --json` (R_GO).
2427
+ - `npx --yes --package pumuki@latest pumuki watch --once --stage=PRE_COMMIT --scope=staged --json` (R_GO).
2428
+ - `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`.
2429
+ - `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`.
2430
+
2431
+ - ✅ PUMUKI-182: Ejecutar ciclo de vigilancia activa post-6.3.46 en SAAS/RuralGo/Flux y abrir fix inmediato solo si aparece `has_action_required=true`.
2432
+ - Resultado (2026-03-05):
2433
+ - ciclo `tick` y `gate` ejecutado en flota completa (`SAAS`, `RuralGo`, `Flux`).
2434
+ - estado consolidado:
2435
+ - `targets=3`
2436
+ - `entries_scanned_total=137`
2437
+ - `non_closed_total=0`
2438
+ - `has_action_required=false`
2439
+ - no se abrió fix nuevo al no existir señal neta reproducible.
2440
+ - Evidencia:
2441
+ - `npm run -s validation:backlog-watch:tick`.
2442
+ - `npm run -s validation:backlog-watch:gate`.
2443
+
2444
+ - ✅ PUMUKI-183: Mantener vigilancia continua (tick/gate) y preparar corte de release solo cuando aparezca incidencia neta reproducible en consumers.
2445
+ - Resultado (2026-03-05):
2446
+ - nueva pasada operativa completada con `tick` y `gate` sobre `SAAS`, `RuralGo` y `Flux`.
2447
+ - estado consolidado:
2448
+ - `targets=3`
2449
+ - `entries_scanned_total=137`
2450
+ - `non_closed_total=0`
2451
+ - `action_required_targets=0`
2452
+ - `has_action_required=false`
2453
+ - sin señal neta reproducible, no se abre fix nuevo ni corte de release.
2454
+ - Evidencia:
2455
+ - `npm run -s validation:backlog-watch:tick`.
2456
+ - `npm run -s validation:backlog-watch:gate`.
2457
+
2458
+ - ✅ PUMUKI-184: Mantener ciclo continuo de vigilancia multi-consumer (tick/gate) y ejecutar fix inmediato al primer `has_action_required=true` con actualización de leyenda en MD externo + MD interno.
2459
+ - Resultado (2026-03-05):
2460
+ - el ciclo `tick/gate` detectó señal neta reproducible:
2461
+ - `targets=3`
2462
+ - `entries_scanned_total=139`
2463
+ - `non_closed_total=1`
2464
+ - `has_action_required=true`
2465
+ - origen: `RuralGo` -> `PUMUKI-INC-063` (`needs_issue`).
2466
+ - trazabilidad inmediata ejecutada:
2467
+ - issue upstream creada: `#720`.
2468
+ - MD externo RuralGo actualizado con referencia de issue:
2469
+ - fila resumen activa `PUMUKI-INC-063` -> incluye `issue #720`.
2470
+ - entrada incremental `PUMUKI-INC-063` -> `🚧 REPORTED (#720)`.
2471
+ - se mantiene disciplina de una sola task activa y se abre implementación técnica del fix.
2472
+ - Evidencia:
2473
+ - `npm run -s validation:backlog-watch:tick`.
2474
+ - `npm run -s validation:backlog-watch:gate`.
2475
+ - `gh issue create --repo SwiftEnProfundidad/ast-intelligence-hooks ...` -> `https://github.com/SwiftEnProfundidad/ast-intelligence-hooks/issues/720`.
2476
+ - edición de `/Users/juancarlosmerlosalbarracin/Developer/Projects/R_GO/docs/technical/08-validation/refactor/pumuki-integration-feedback.md`.
2477
+
2478
+ - ✅ PUMUKI-185: Implementar fix técnico de `#720` (no mutación de `package.json`/`package-lock.json` en hooks/gates sin upgrade explícito) con RED -> GREEN -> REFACTOR y cerrar trazabilidad en MD externo + interno.
2479
+ - Resultado (2026-03-05):
2480
+ - `integrations/git/stageRunners.ts` incorpora guard de integridad de manifests en hooks:
2481
+ - snapshot previo de `package.json` + `package-lock.json`,
2482
+ - detección de mutación inesperada tras gate,
2483
+ - reversión automática al snapshot original,
2484
+ - bloqueo explícito con código `MANIFEST_MUTATION_DETECTED`.
2485
+ - comportamiento objetivo:
2486
+ - los hooks no dejan side-effects en manifests del consumer sin comando explícito de upgrade.
2487
+ - cobertura RED -> GREEN añadida:
2488
+ - `runPreCommitStage bloquea y revierte mutación inesperada de manifests`.
2489
+ - `runPrePushStage bloquea y revierte mutación inesperada de manifests`.
2490
+ - Evidencia:
2491
+ - `npx --yes tsx@4.21.0 --test integrations/git/__tests__/stageRunners.test.ts` -> `32 pass / 0 fail`.
2492
+ - `npm run -s typecheck` -> `PASS`.
2493
+ - issue de trazabilidad: `https://github.com/SwiftEnProfundidad/ast-intelligence-hooks/issues/720`.
2494
+
2495
+ - ✅ PUMUKI-186: Validar fix `#720` en consumer real (RuralGo), actualizar estado del hallazgo `PUMUKI-INC-063` y cerrar issue/loop de vigilancia si `has_action_required=false`.
2496
+ - Resultado (2026-03-05):
2497
+ - validación ejecutada en RuralGo con binario local del core (incluye fix `#720`) sobre ciclo real:
2498
+ - `pumuki sdd validate --stage=PRE_WRITE --json`
2499
+ - `pumuki-pre-commit`
2500
+ - `pumuki-pre-push`
2501
+ - comprobación de integridad de manifests:
2502
+ - `package.json`: hash sin cambios antes/después.
2503
+ - `package-lock.json`: hash sin cambios antes/después.
2504
+ - resultado funcional:
2505
+ - `RC prewrite=0`, `RC precommit=0`, `RC prepush=0`.
2506
+ - vigilancia consolidada:
2507
+ - `validation:backlog-watch:tick` en verde (`has_action_required=false`).
2508
+ - Evidencia:
2509
+ - ejecución local fix en consumer RuralGo:
2510
+ - `node /Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/bin/pumuki.js sdd validate --stage=PRE_WRITE --json`
2511
+ - `node /Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/bin/pumuki-pre-commit.js`
2512
+ - `PUMUKI_PRE_PUSH_STDIN=\"\" node /Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/bin/pumuki-pre-push.js`
2513
+ - verificación de hashes + estado:
2514
+ - `shasum -a 256 package.json package-lock.json`
2515
+ - `git status --short -- package.json package-lock.json`
2516
+ - vigilancia:
2517
+ - `npm run -s validation:backlog-watch:tick`.
2518
+
2519
+ - 🚧 PUMUKI-187: Publicar corte con fix `#720`, actualizar consumers a la versión publicada y mover `PUMUKI-INC-063` de `🚧 REPORTED` a `✅ FIXED` con referencia de issue/commit/release.