pumuki 6.3.27 → 6.3.28
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/EXECUTION_BOARD.md
CHANGED
|
@@ -373,9 +373,39 @@
|
|
|
373
373
|
- `npm run -s typecheck`
|
|
374
374
|
- evidencia de campo en clon real de `ruralgo-fork` (runtime `node 20.20.0`):
|
|
375
375
|
- menú `pumuki-framework` opción `3` y `4` imprime `Resultado PASS parcial por alcance vacío`.
|
|
376
|
-
-
|
|
376
|
+
- ✅ `P10.T6` Ejecutar cuarto slice operativo P10 en repos reales (propagación release + revalidación @latest).
|
|
377
|
+
- cierre aplicado:
|
|
378
|
+
- release propagada en npm: `pumuki@6.3.27` publicado y etiquetado como `latest` (`npm view pumuki version dist-tags --json`).
|
|
379
|
+
- revalidación en consumidor real (`ruralgo-fork`) con runtime `node 20.20.0`:
|
|
380
|
+
- `npx --yes --package pumuki@latest pumuki install` ejecutado sin cambios de hooks y con bootstrap OpenSpec en verde.
|
|
381
|
+
- matiz de campo resuelto: cuando `pumuki` ya estaba declarado en consumer (`6.3.26`), `install` no forzó upgrade (`consumer package bootstrap: installed=no reason=already_declared`); se cerró con `npx --yes --package pumuki@latest pumuki update --latest --json`.
|
|
382
|
+
- versión efectiva verificada en consumer: `node -p \"require('pumuki/package.json').version\" => 6.3.27`.
|
|
383
|
+
- salud lifecycle validada: `npm run -s validation:p9:ruralgo-install-health -- --repo=/Users/juancarlosmerlosalbarracin/Developer/Projects/ruralgo-fork --json` => `ready=true`, hooks gestionados y `doctor PASS`.
|
|
384
|
+
- paridad runtime confirmada en consumer:
|
|
385
|
+
- bins stdio presentes: `pumuki-mcp-enterprise-stdio`, `pumuki-mcp-evidence-stdio`.
|
|
386
|
+
- exports oficiales cargan en `require/import`: `pumuki`, `pumuki/integrations/{git,lifecycle,sdd,mcp}`, `pumuki/core/gate/{evaluateGate,evaluateRules}`.
|
|
387
|
+
- ✅ `P10.T7` Ejecutar quinto slice operativo P10 en repos reales (cierre post-propagación + backlog residual).
|
|
388
|
+
- cierre aplicado:
|
|
389
|
+
- baseline real en `R_GO` consolidada con `status/doctor/sdd status` tras propagación `6.3.27`.
|
|
390
|
+
- consumidor oficial `R_GO` actualizado a `pumuki@6.3.27` (`pumuki update --latest`) con lifecycle en verde (`installed=true`, `version=6.3.27`, hooks gestionados).
|
|
391
|
+
- backlog residual revalidado y actualizado en `p9-ruralgo-bug-registry`:
|
|
392
|
+
- `RG-BUG-003 => ✅` (instalación fail-soft en runtime no alineado, sin bloqueo `EBADENGINE`).
|
|
393
|
+
- `RG-BUG-011 => ✅` (comando oficial `pumuki sdd sync-docs --dry-run --json` operativo y machine-readable en `R_GO` y `ruralgo-fork`).
|
|
394
|
+
- `RG-BUG-004 => ⏳` (persistencia de `unknown-ruleset` en `RULESET COVERAGE` de full-audit).
|
|
395
|
+
- `RG-BUG-012 => ⏳` (sin falso positivo iOS en `.ts` en full-audit, pero camino `pumuki-ci` aún bloqueado por precondiciones SDD/evidence).
|
|
396
|
+
- ✅ `P10.T8` Ejecutar sexto slice operativo P10 en repos reales (reducción de backlog residual activo).
|
|
397
|
+
- cierre aplicado:
|
|
398
|
+
- `RG-BUG-004` corregido en source:
|
|
399
|
+
- normalización de `RULESET COVERAGE` en `scripts/framework-menu-legacy-audit-lib.ts` (`common.*` y `workflow/sdd/generic` dejan de caer en `unknown-ruleset`).
|
|
400
|
+
- test de no-regresión añadido y en verde: `scripts/__tests__/framework-menu-legacy-audit.test.ts` (`clasifica common/workflow/sdd sin usar unknown-ruleset`).
|
|
401
|
+
- validación de campo con bin local en `R_GO`: `commonRuleSet (inferred): 75` + `gate-policy.default.PRE_COMMIT: 3`, sin `unknown-ruleset`.
|
|
402
|
+
- `RG-BUG-012` cerrado con repro CI controlada:
|
|
403
|
+
- clon temporal de `R_GO` con OpenSpec instalado + sesión SDD válida + cambio completo (`rgo-1200-03`).
|
|
404
|
+
- `sdd validate --stage=CI` en `ALLOWED` (`items=17`, `passed=17`, `failed=0`).
|
|
405
|
+
- `pumuki-ci` en `ALLOW/PASS` y evidencia CI sin hits de `ios.no-force-unwrap` en `.ts` objetivo.
|
|
406
|
+
- 🚧 `P10.T9` Ejecutar séptimo slice operativo P10 en repos reales (propagación final de fixes residuales).
|
|
377
407
|
- objetivo inmediato:
|
|
378
|
-
-
|
|
408
|
+
- propagar a npm los fixes de `P10.T8` y revalidar en consumidores reales (`ruralgo-fork`/`R_GO`) que `@latest` ya no muestra `unknown-ruleset` en `RULESET COVERAGE`.
|
|
379
409
|
|
|
380
410
|
## Checklist A — Funcionalidades (sin omisiones)
|
|
381
411
|
Totales: bins=10, lifecycle_commands=20, npm_scripts=98, exports=8, total_items=136.
|
|
@@ -670,9 +670,34 @@ Fuente unica de seguimiento operativo. No se abren nuevos MDs temporales de trac
|
|
|
670
670
|
- `framework-menu-consumer-runtime`, `framework-menu-legacy-audit`, `framework-menu-matrix-evidence`.
|
|
671
671
|
- `framework-menu-matrix-runner`, `framework-menu-matrix-baseline`, `framework-menu-matrix-canary`, `framework-menu-consumer-preflight`.
|
|
672
672
|
- `npm run -s typecheck`.
|
|
673
|
-
-
|
|
673
|
+
- ✅ `P10.T6` Ejecutar cuarto slice operativo P10 en repos reales (propagación release + revalidación @latest).
|
|
674
|
+
- cierre aplicado:
|
|
675
|
+
- publicación npm completada: `pumuki@6.3.27` en `dist-tag latest`.
|
|
676
|
+
- revalidación en `ruralgo-fork` (runtime `20.20.0`):
|
|
677
|
+
- `pumuki install` ejecuta correctamente en consumidor real con hooks gestionados.
|
|
678
|
+
- matiz de upgrade resuelto: cuando el consumer tenía `pumuki@6.3.26` declarado, `install` no actualiza versión por diseño (`already_declared`); cierre con `pumuki update --latest`.
|
|
679
|
+
- versión efectiva en `node_modules/pumuki`: `6.3.27`.
|
|
680
|
+
- `validation:p9:ruralgo-install-health` en verde (`ready=true`, `doctor PASS`).
|
|
681
|
+
- paridad runtime confirmada:
|
|
682
|
+
- bins stdio presentes en `node_modules/.bin`.
|
|
683
|
+
- exports oficiales (`pumuki`, `integrations/*`, `core/gate/*`) cargan en `require/import` sin errores.
|
|
684
|
+
- ✅ `P10.T7` Ejecutar quinto slice operativo P10 en repos reales (cierre post-propagación + backlog residual).
|
|
685
|
+
- cierre aplicado:
|
|
686
|
+
- baseline ejecutada en `R_GO` con `pumuki status --json`, `pumuki doctor --json`, `pumuki sdd status --json`.
|
|
687
|
+
- `R_GO` actualizado a `pumuki@6.3.27` vía `pumuki update --latest`; lifecycle reporta `installed=true`, `version=6.3.27`, hooks gestionados.
|
|
688
|
+
- backlog residual actualizado con repro de campo:
|
|
689
|
+
- `RG-BUG-003 => ✅` (instalación no bloquea en runtime no alineado; modo standalone/skip engine mismatch).
|
|
690
|
+
- `RG-BUG-011 => ✅` (`pumuki sdd sync-docs --dry-run --json` operativo en `R_GO` y `ruralgo-fork`).
|
|
691
|
+
- `RG-BUG-004 => ⏳` (`unknown-ruleset` persiste en `RULESET COVERAGE`).
|
|
692
|
+
- `RG-BUG-012 => ⏳` (full-audit sin falso positivo iOS sobre `.ts`; camino CI bloqueado antes por SDD/evidence).
|
|
693
|
+
- ✅ `P10.T8` Ejecutar sexto slice operativo P10 en repos reales (reducción de backlog residual activo).
|
|
694
|
+
- cierre aplicado:
|
|
695
|
+
- `RG-BUG-004` corregido en source con normalización de rulesets (`common/workflow/sdd/generic`) y test de no-regresión en verde.
|
|
696
|
+
- validación de campo en `R_GO` con bin local: `RULESET COVERAGE` sin `unknown-ruleset`.
|
|
697
|
+
- `RG-BUG-012` cerrado mediante repro CI controlada en clon temporal de `R_GO` con precondiciones SDD conformes (`validate CI ALLOWED`, `pumuki-ci PASS`, sin hits de `ios.no-force-unwrap` sobre `.ts` objetivo).
|
|
698
|
+
- 🚧 `P10.T9` Ejecutar séptimo slice operativo P10 en repos reales (propagación final de fixes residuales).
|
|
674
699
|
- foco:
|
|
675
|
-
- publicar y revalidar en
|
|
700
|
+
- publicar en npm los fixes de `P10.T8` y revalidar en consumidores reales (`ruralgo-fork`/`R_GO`) la desaparición de `unknown-ruleset` en `RULESET COVERAGE`.
|
|
676
701
|
|
|
677
702
|
## Plan Por Fases (Ciclo 014)
|
|
678
703
|
Plan base visible para seguimiento previo y durante la implementacion.
|
|
@@ -84,19 +84,19 @@ Registro oficial de bugs detectados durante la validación de Pumuki en `R_GO`/`
|
|
|
84
84
|
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
85
85
|
| `RG-BUG-001` | `P1` | Falso positivo | ✅ | Regla `ios.no-force-unwrap` reportada en archivo TypeScript (`apps/admin-dashboard/middleware.ts:8`) por uso de `!token` (negación lógica). | Corregido en matcher de `scope` con soporte de glob real para `**/*.swift`; test de no-regresión añadido en `core/gate/__tests__/evaluateRules.spec.ts` y `core/gate/__tests__/conditionMatches.spec.ts`. | Distorsionaba severidad y priorización de remediación. | Cerrado también en campo: en `R_GO` y `ruralgo-fork` ya no aparece `middleware.ts` en findings iOS tras ejecutar menú local completo. |
|
|
86
86
|
| `RG-BUG-002` | `P1` | Scope ruleset | ✅ | Fuga de reglas de plataforma: reglas iOS aplicadas sobre código frontend/backend TypeScript (`ios.no-print`, `ios.no-force-unwrap`, etc). | Causa raíz confirmada: matcher de `scope` interpretaba `**/*.swift` como prefijo vacío y evaluaba cualquier archivo; corregido en `core/gate/scopeMatcher.ts` + adopción en `evaluateRules` y `conditionMatches`; además unificado matcher de `scope` en `integrations/git/findingTraceability.ts` para evitar anclaje erróneo de fichero/línea en trazabilidad. | Generaba falsos bloqueos y pérdida de confianza en el gate. | Cerrado operativo con smoke real en `R_GO` y `ruralgo-fork` (finding iOS queda anclado en `.swift`, no en `.ts`). |
|
|
87
|
-
| `RG-BUG-003` | `P2` | Compatibilidad instalación |
|
|
88
|
-
| `RG-BUG-004` | `P2` | Trazabilidad ruleset |
|
|
87
|
+
| `RG-BUG-003` | `P2` | Compatibilidad instalación | ✅ | `pumuki install` podía fallar en repos con `engine-strict` al intentar bootstrap OpenSpec/consumer package fuera de runtime requerido. | Revalidación real en `R_GO` con runtime no alineado (`node v25.6.1/npm 11.10.1`): `npx --yes --package pumuki@latest pumuki install` ya no falla; ejecuta modo tolerante (`npm-install-skipped:engine-mismatch`) y mantiene hooks instalados (`exit=0`). | Se elimina bloqueo operativo de instalación en entornos con runtime no alineado; el comportamiento queda explícito y fail-soft. | Cerrado. Mantener recomendación de runtime `20.20.0/10.8.2` para bootstrap completo (`openspec` + consumer package). |
|
|
88
|
+
| `RG-BUG-004` | `P2` | Trazabilidad ruleset | ✅ | `unknown-ruleset` aparecía en cobertura sin clasificación clara. | Fix aplicado en source (`scripts/framework-menu-legacy-audit-lib.ts`): mapeo determinista para `common.*` -> `commonRuleSet (inferred)` y `workflow.*/sdd.*/generic_*` -> bundle de policy (`gate-policy.default.*` o `policyRuleSet (inferred)`), con test de no-regresión añadido (`scripts/__tests__/framework-menu-legacy-audit.test.ts`); validación de campo con bin local en `R_GO`: `printf '1\\n10\\n' | node .../bin/pumuki-framework.js` muestra `commonRuleSet (inferred): 75` y `gate-policy.default.PRE_COMMIT: 3`, sin `unknown-ruleset`. | Se normaliza trazabilidad de ruleset coverage y desaparece la etiqueta opaca en ejecución corregida. | Cerrado en source; siguiente paso operativo: propagar release npm para que `@latest` herede la normalización en consumer. |
|
|
89
89
|
| `RG-BUG-005` | `P1` | CLI | ✅ | `pumuki --help` y `pumuki sdd --help` retornaban código de salida `1`. | Fix aplicado en parser/catch de CLI con salida explícita para `help`; tests de regresión añadidos en `integrations/lifecycle/__tests__/cli.test.ts`; verificación manual: `root_help_rc=0`, `sdd_help_rc=0`, `bad_rc=1`. | Se elimina rotura de scripts/automatizaciones para comandos informativos. | Cerrado; siguiente foco operativo en `strict mode` y “green vacío” (`RG-BUG-007`). |
|
|
90
90
|
| `RG-BUG-006` | `P1` | Observabilidad gate | ✅ | `pumuki-pre-commit`/`pumuki-pre-push` en éxito no imprimían resumen mínimo de gate. | Fix aplicado en `stageRunners` con línea estable `[pumuki][hook-gate]` y campos `stage/policy_bundle/policy_hash/decision/evidence_age_seconds`; soporte `--quiet` implementado en `runCliCommand`; tests de regresión en `stageRunners.test.ts` y `runCliCommand.test.ts`. | Se recupera auditabilidad operativa de hooks sin perder salida silenciosa opcional. | Cerrado; siguiente foco operativo en `strict mode` (`RG-BUG-007`). |
|
|
91
91
|
| `RG-BUG-007` | `P1` | Validación SDD | ✅ | `pumuki sdd validate` podía devolver `allowed=true` con `items=0`. | Fix aplicado en `integrations/sdd/policy.ts` con bloqueo explícito `SDD_VALIDATION_EMPTY` cuando `validation.ok=true` e `items<=0`; test de no-regresión en `integrations/sdd/__tests__/policy.test.ts`. | Se elimina el “green vacío” y se fuerza fail-closed para validación sin ítems. | Cerrado; siguiente foco operativo en trazabilidad estricta de evidencia (`RG-BUG-008`). |
|
|
92
92
|
| `RG-BUG-008` | `P1` | Evidencia/consistencia | ✅ | La evidencia se reportaba con `kind` y `age`, pero sin trazabilidad explícita de origen. | Fix aplicado en `integrations/gate/evaluateAiGate.ts` y paneles (`integrations/lifecycle/cli.ts`, `scripts/framework-menu-consumer-preflight-lib.ts`) para exponer `evidence.source/path/digest/generated_at`; tests de no-regresión añadidos/actualizados. | Se elimina la opacidad operativa: ahora el gate expone fuente, ruta, huella y timestamp de generación de evidencia. | Cerrado; siguiente foco operativo en gobernanza de skills (`P9.IMP.P1.T1`). |
|
|
93
93
|
| `RG-BUG-009` | `P2` | Canonicalización | ✅ | `changeId` de sesión SDD preservaba casing de entrada en lugar de resolver al identificador canónico del cambio OpenSpec. | Fix aplicado en `integrations/sdd/sessionStore.ts`: resolución case-insensitive con persistencia canónica + `changeAlias`; salida CLI actualizada en `integrations/lifecycle/cli.ts`; tests nuevos en `integrations/sdd/__tests__/sessionStore.test.ts` y `integrations/lifecycle/__tests__/cli.test.ts`. | Se evita fragmentación de trazabilidad/reporting por casing y queda visible el alias resuelto para auditoría. | Cerrado; siguiente foco operativo en `P9.IMP.P2.T1` (integridad criptográfica de evidencia). |
|
|
94
94
|
| `RG-BUG-010` | `P1` | Lifecycle hooks | ✅ | Reporte histórico de hooks 404 (`npx --yes pumuki-pre-*`) tras `install` en iteraciones previas. | Fix aplicado en generación de bloque de hooks para ejecutar `npx --yes --package pumuki@latest pumuki-pre-*` + test E2E `install -> hook execution` con `npx` stub en verde. | Potencial regresión crítica mitigada con cobertura automatizada. | Cerrado; mantener vigilancia de regresión en `test:stage-gates`. |
|
|
95
|
-
| `RG-BUG-011` | `P2` | Gap funcional SDD/docs |
|
|
96
|
-
| `RG-BUG-012` | `P1` | Falso positivo CI (`npm latest`) |
|
|
97
|
-
| `RG-BUG-013` | `P1` | Packaging/bin parity | ✅ | Los bins `pumuki-mcp-evidence-stdio` y `pumuki-mcp-enterprise-stdio` no
|
|
98
|
-
| `RG-BUG-014` | `P2` | Gap consumer scripts | ✅ | Los scripts de `package.json` de `pumuki` no eran ejecutables de forma directa desde consumidor real tras `pumuki install`, porque el paquete no quedaba instalado como dependencia en `node_modules`. |
|
|
99
|
-
| `RG-BUG-015` | `P1` | Packaging/exports runtime | ✅ | En consumidor real con `pumuki@latest@6.3.26`, los subpaths exportados (`core/*`, `integrations/*`) no
|
|
95
|
+
| `RG-BUG-011` | `P2` | Gap funcional SDD/docs | ✅ | No existía mecanismo oficial claro de auto-sync documental SDD (`sync-docs`) en flujo observado. | Revalidación en `R_GO` y `ruralgo-fork` con `pumuki@6.3.27`: `npx --yes --package pumuki@latest pumuki sdd sync-docs --dry-run --json` responde con contrato estable (`targetPath`, `stageChecks`, `diffPreview`, `changed`, `created`). | Se elimina el gap funcional de sincronización documental: ya existe comando oficial y machine-readable para pipelines. | Cerrado. Seguimiento futuro en mejoras DX (calidad del contenido sincronizado por stage). |
|
|
96
|
+
| `RG-BUG-012` | `P1` | Falso positivo CI (`npm latest`) | ✅ | `pumuki-ci` de `pumuki@latest@6.3.26` llegó a bloquear `ruralgo-fork` con `ios.no-force-unwrap` en archivo TypeScript (`apps/admin-dashboard/playwright/e2e/critical-errors-verification.spec.ts:7`). | Repro CI controlada en clon temporal de `R_GO` con precondiciones conformes: OpenSpec instalado (`@fission-ai/openspec@1.2.0`), sesión SDD válida y cambio completo (`rgo-1200-03`), `sdd validate --stage=CI` en `ALLOWED` (`items=17`, `passed=17`, `failed=0`), y `GITHUB_BASE_REF=origin/develop npx --yes --package pumuki@latest pumuki-ci` => `decision=ALLOW outcome=PASS`; verificación de evidencia CI: `hits=[]` para `ios.no-force-unwrap` y para `apps/admin-dashboard/playwright/e2e/critical-errors-verification.spec.ts`. | Bajo condiciones CI conformes no se reproduce falso positivo iOS sobre `.ts`. | Cerrado; mantener monitorización de no-regresión en validación real post-release. |
|
|
97
|
+
| `RG-BUG-013` | `P1` | Packaging/bin parity | ✅ | Los bins `pumuki-mcp-evidence-stdio` y `pumuki-mcp-enterprise-stdio` no existían en `pumuki@latest@6.3.26` publicado aunque sí estaban declarados en `package.json` local del repo. | Cierre E2E propagado: release npm `6.3.27` publicada y validada en `ruralgo-fork`; ambos bins presentes en `node_modules/.bin` (`ls -1 node_modules/.bin | rg '^pumuki-mcp-(enterprise|evidence)-stdio$'`). | Paridad de bins restablecida en `@latest` para consumidor real. | Cerrado end-to-end con propagación npm + validación de campo en consumer real. |
|
|
98
|
+
| `RG-BUG-014` | `P2` | Gap consumer scripts | ✅ | Los scripts de `package.json` de `pumuki` no eran ejecutables de forma directa desde consumidor real tras `pumuki install`, porque el paquete no quedaba instalado como dependencia en `node_modules`. | Cierre E2E propagado: `pumuki@6.3.27` en `latest` + validación real en `ruralgo-fork` (`validation:p9:ruralgo-install-health` => `ready=true`); nota de contrato confirmada: si `pumuki` ya está declarado en consumer, `install` no fuerza upgrade y se usa `pumuki update --latest` para actualizar versión efectiva. | Ejecución de scripts internos y contrato lifecycle operativos en consumidor real con flujo explícito `install/update`. | Cerrado end-to-end con propagación npm + runbook real actualizado (`install` + `update --latest` cuando aplique). |
|
|
99
|
+
| `RG-BUG-015` | `P1` | Packaging/exports runtime | ✅ | En consumidor real con `pumuki@latest@6.3.26`, los subpaths exportados (`core/*`, `integrations/*`) no eran importables en runtime aunque figuraban en `exports`. | Cierre E2E propagado: `pumuki@6.3.27` publicado con exports `.js`; validación en `ruralgo-fork` con `require/import` en verde para exports oficiales (`pumuki`, `pumuki/integrations/{git,lifecycle,sdd,mcp}`, `pumuki/core/gate/{evaluateGate,evaluateRules}`). | API pública de subpaths consumible en runtime desde `@latest`. | Cerrado end-to-end con propagación npm + validación real en consumer. |
|
|
100
100
|
|
|
101
101
|
## Observaciones No-Bug (comportamiento esperado)
|
|
102
102
|
|
|
@@ -379,9 +379,46 @@ Criterio de salida F5:
|
|
|
379
379
|
- `npm run -s typecheck`
|
|
380
380
|
- evidencia de campo en consumidor real (clon temporal de `ruralgo-fork`, runtime `node 20.20.0`):
|
|
381
381
|
- `pumuki-framework` opción `3` y `4` muestran `Resultado PASS parcial por alcance vacío`.
|
|
382
|
-
-
|
|
382
|
+
- ✅ `P10.F1.T4` Ejecutar slice S4: propagación release y revalidación @latest en consumidor real.
|
|
383
|
+
- cierre aplicado:
|
|
384
|
+
- release npm publicada: `pumuki@6.3.27` en `latest` (verificado con `npm view pumuki version dist-tags --json`).
|
|
385
|
+
- revalidación en `ruralgo-fork` (runtime `node 20.20.0`, sin tarball local):
|
|
386
|
+
- `PATH=\"$HOME/.nvm/versions/node/v20.20.0/bin:$PATH\" npx --yes --package pumuki@latest pumuki install` -> `installed 6.3.27` + hooks gestionados + OpenSpec bootstrap OK.
|
|
387
|
+
- matiz real detectado y resuelto: si el consumer ya declara `pumuki` (`6.3.26`), `install` no sube versión (`consumer package bootstrap: installed=no reason=already_declared`); se cerró con `PATH=\"$HOME/.nvm/versions/node/v20.20.0/bin:$PATH\" npx --yes --package pumuki@latest pumuki update --latest --json`.
|
|
388
|
+
- versión efectiva confirmada en consumer: `node -p \"require('pumuki/package.json').version\" => 6.3.27`.
|
|
389
|
+
- salud install/doctor en verde: `npm run -s validation:p9:ruralgo-install-health -- --repo=/Users/juancarlosmerlosalbarracin/Developer/Projects/ruralgo-fork --json` => `ready=true`, `issues=[]`.
|
|
390
|
+
- paridad runtime confirmada:
|
|
391
|
+
- bins stdio presentes en consumer: `pumuki-mcp-enterprise-stdio`, `pumuki-mcp-evidence-stdio`.
|
|
392
|
+
- exports oficiales cargan en `require/import`:
|
|
393
|
+
- `pumuki`
|
|
394
|
+
- `pumuki/integrations/{git,lifecycle,sdd,mcp}`
|
|
395
|
+
- `pumuki/core/gate/{evaluateGate,evaluateRules}`.
|
|
396
|
+
- ✅ `P10.F1.T5` Ejecutar slice S5: cierre post-propagación y backlog residual.
|
|
397
|
+
- cierre aplicado:
|
|
398
|
+
- cierre documental del bloque S1..S4 consolidado en tracking maestro/detallado.
|
|
399
|
+
- repro real en `R_GO` actualizada tras propagación de release:
|
|
400
|
+
- `status/doctor/sdd status` ejecutados con `pumuki@latest`.
|
|
401
|
+
- `R_GO` actualizado a `pumuki@6.3.27` (`pumuki update --latest`) con lifecycle alineado (`installed=true`, `version=6.3.27`, hooks gestionados).
|
|
402
|
+
- backlog residual actualizado en bug registry:
|
|
403
|
+
- `RG-BUG-003 => ✅`
|
|
404
|
+
- `RG-BUG-011 => ✅`
|
|
405
|
+
- `RG-BUG-004 => ⏳`
|
|
406
|
+
- `RG-BUG-012 => ⏳`
|
|
407
|
+
- ✅ `P10.F1.T6` Ejecutar slice S6: reducción de backlog residual activo.
|
|
408
|
+
- cierre aplicado:
|
|
409
|
+
- `RG-BUG-004`:
|
|
410
|
+
- fix en source (`scripts/framework-menu-legacy-audit-lib.ts`) para mapear `common.*` a `commonRuleSet (inferred)` y `workflow/sdd/generic` a bundle de policy.
|
|
411
|
+
- test de no-regresión en verde (`scripts/__tests__/framework-menu-legacy-audit.test.ts`).
|
|
412
|
+
- validación de campo con bin local en `R_GO`: `RULESET COVERAGE` sin `unknown-ruleset`.
|
|
413
|
+
- `RG-BUG-012`:
|
|
414
|
+
- repro CI controlada en clon temporal de `R_GO` con precondiciones conformes:
|
|
415
|
+
- OpenSpec instalado (`@fission-ai/openspec@1.2.0`), sesión válida y cambio completo (`rgo-1200-03`).
|
|
416
|
+
- `pumuki sdd validate --stage=CI --json` => `ALLOWED`, `items=17`, `passed=17`, `failed=0`.
|
|
417
|
+
- `pumuki-ci` => `decision=ALLOW outcome=PASS`.
|
|
418
|
+
- evidencia CI sin hits para `ios.no-force-unwrap` en `apps/admin-dashboard/playwright/e2e/critical-errors-verification.spec.ts`.
|
|
419
|
+
- 🚧 `P10.F1.T7` Ejecutar slice S7: propagación final de fixes residuales.
|
|
383
420
|
- objetivo inmediato:
|
|
384
|
-
- publicar fixes de
|
|
421
|
+
- publicar release npm con fixes de `S6` y revalidar en `ruralgo-fork`/`R_GO` que `@latest` refleja la normalización de `RULESET COVERAGE` (sin `unknown-ruleset`).
|
|
385
422
|
|
|
386
423
|
Criterio de salida F6:
|
|
387
424
|
- veredicto final trazable y cierre administrativo completo.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pumuki",
|
|
3
|
-
"version": "6.3.
|
|
3
|
+
"version": "6.3.28",
|
|
4
4
|
"description": "Enterprise-grade AST Intelligence System with multi-platform support (iOS, Android, Backend, Frontend) and Feature-First + DDD + Clean Architecture enforcement. Includes dynamic violations API for intelligent querying.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
@@ -417,6 +417,11 @@ const inferRulesetBundle = (
|
|
|
417
417
|
};
|
|
418
418
|
|
|
419
419
|
const normalized = ruleId.toLowerCase();
|
|
420
|
+
const inferPolicyBundle = (): string =>
|
|
421
|
+
findBundle((bundle) => bundle.startsWith('gate-policy.default.'))
|
|
422
|
+
?? findBundle((bundle) => bundle.startsWith('policyRuleSet@'))
|
|
423
|
+
?? findBundle((bundle) => bundle === 'project-rules')
|
|
424
|
+
?? 'policyRuleSet (inferred)';
|
|
420
425
|
if (normalized.startsWith('heuristics.')) {
|
|
421
426
|
return findBundle((bundle) => bundle.startsWith('astHeuristicsRuleSet@'))
|
|
422
427
|
?? 'astHeuristicsRuleSet (inferred)';
|
|
@@ -437,6 +442,10 @@ const inferRulesetBundle = (
|
|
|
437
442
|
return findBundle((bundle) => bundle.startsWith('frontendRuleSet@'))
|
|
438
443
|
?? 'frontendRuleSet (inferred)';
|
|
439
444
|
}
|
|
445
|
+
if (normalized.startsWith('common.')) {
|
|
446
|
+
return findBundle((bundle) => bundle.startsWith('commonRuleSet@'))
|
|
447
|
+
?? 'commonRuleSet (inferred)';
|
|
448
|
+
}
|
|
440
449
|
if (normalized.startsWith('skills.ios.')) {
|
|
441
450
|
return findBundle((bundle) => bundle.startsWith('ios-') && bundle.includes('guidelines@'))
|
|
442
451
|
?? 'ios-guidelines (inferred)';
|
|
@@ -454,7 +463,14 @@ const inferRulesetBundle = (
|
|
|
454
463
|
?? 'frontend-guidelines (inferred)';
|
|
455
464
|
}
|
|
456
465
|
if (normalized.startsWith('methodology.') || normalized.startsWith('project.')) {
|
|
457
|
-
return
|
|
466
|
+
return inferPolicyBundle();
|
|
467
|
+
}
|
|
468
|
+
if (
|
|
469
|
+
normalized.startsWith('workflow.')
|
|
470
|
+
|| normalized.startsWith('sdd.')
|
|
471
|
+
|| normalized.startsWith('generic_')
|
|
472
|
+
) {
|
|
473
|
+
return inferPolicyBundle();
|
|
458
474
|
}
|
|
459
475
|
return 'unknown-ruleset';
|
|
460
476
|
};
|