pumuki 6.3.100 → 6.3.101

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/CHANGELOG.md CHANGED
@@ -6,6 +6,13 @@ This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [6.3.101] - 2026-04-22
10
+
11
+ ### Fixed
12
+
13
+ - **`gate.blocked` sin `ReferenceError` en consumers:** `resolveBlockedRemediation` recupera su contrato con variantes (`banner`/`dialog`) y deja de romper la ruta bloqueante de `PRE_WRITE` por un `options is not defined`.
14
+ - **Cobertura de regresión del módulo de remediación:** la suite de `framework-menu-system-notifications-remediation` fija el caso de copy legacy en inglés y la compactación de banners sin truncados rotos.
15
+
9
16
  ## [6.3.100] - 2026-04-22
10
17
 
11
18
  ### Fixed
@@ -6,6 +6,11 @@ This file keeps only the operational highlights and rollout notes that matter wh
6
6
 
7
7
  ## 2026-04 (CLI stability and macOS notifications)
8
8
 
9
+ ### 2026-04-22 (v6.3.101)
10
+
11
+ - **Hotfix de ruta bloqueante:** `gate.blocked` deja de lanzar `ReferenceError: options is not defined` al construir la remediación visible en `PRE_WRITE`.
12
+ - **Rollout recomendado:** publicar `pumuki@6.3.101`, repin inmediato en `RuralGo` y revalidar que el bloqueo de `PRE_WRITE` termina limpio, sin error residual tras el panel.
13
+
9
14
  ### 2026-04-22 (v6.3.100)
10
15
 
11
16
  - **Hotfix de activación efectiva:** la línea publicada deja de resolver `PRE_WRITE` a `off/default` en ausencia de override explícito; el default vuelve a ser coercitivo para el flujo real del agente/editor.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pumuki",
3
- "version": "6.3.100",
3
+ "version": "6.3.101",
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": {
@@ -5,21 +5,26 @@ import {
5
5
  } from './framework-menu-system-notifications-text';
6
6
 
7
7
  const BLOCKED_REMEDIATION_BY_CODE: Readonly<Record<string, string>> = {
8
- EVIDENCE_MISSING: 'Genera evidencia del slice actual y vuelve a validar el gate de esta fase.',
9
- EVIDENCE_INVALID: 'Regenera la evidencia de la iteración y repite la validación en el mismo stage.',
8
+ EVIDENCE_MISSING: 'Genera la evidencia del slice actual y vuelve a validar esta fase.',
9
+ EVIDENCE_INVALID: 'Regenera la evidencia de esta iteración y repite la validación.',
10
10
  EVIDENCE_CHAIN_INVALID: 'Regenera la evidencia para restaurar la cadena de integridad y vuelve a validar.',
11
- EVIDENCE_STALE: 'Ejecuta una auditoría completa de evidencia y vuelve a validar PRE_WRITE/PRE_PUSH. Si persiste, refresca la sesión SDD y reintenta.',
12
- EVIDENCE_BRANCH_MISMATCH: 'Regenera evidencia en esta rama y vuelve a ejecutar la validación para sincronizar branch y snapshot.',
13
- EVIDENCE_REPO_ROOT_MISMATCH: 'Regenera evidencia desde este repositorio y relanza la validación del gate.',
14
- PRE_PUSH_UPSTREAM_MISSING: 'Configura upstream con `git push --set-upstream origin <branch>` y vuelve a ejecutar PRE_PUSH.',
15
- SDD_SESSION_MISSING: 'Abre sesión SDD del change activo y repite la validación de la fase actual.',
16
- SDD_SESSION_INVALID: 'Refresca la sesión SDD (open/refresh) y vuelve a validar en el mismo stage.',
17
- OPENSPEC_MISSING: 'Instala OpenSpec en el repositorio y relanza la validación del gate.',
18
- MCP_ENTERPRISE_RECEIPT_MISSING: 'Genera el receipt enterprise de MCP y vuelve a ejecutar la validación.',
19
- BACKEND_AVOID_EXPLICIT_ANY: 'Reemplaza `any` por tipos concretos en backend y vuelve a lanzar el gate para confirmar el fix.',
11
+ EVIDENCE_STALE: 'Refresca la evidencia y vuelve a validar PRE_WRITE/PRE_PUSH.',
12
+ EVIDENCE_BRANCH_MISMATCH: 'La evidencia no corresponde a esta rama. Regenera el receipt/evidencia y vuelve a validar.',
13
+ EVIDENCE_REPO_ROOT_MISMATCH: 'Regenera la evidencia desde este repositorio y vuelve a validar.',
14
+ PRE_PUSH_UPSTREAM_MISSING: 'Configura upstream con `git push --set-upstream origin <branch>` y repite PRE_PUSH.',
15
+ SDD_SESSION_MISSING: 'Abre la sesión SDD del change activo y repite la validación.',
16
+ SDD_SESSION_INVALID: 'Refresca la sesión SDD activa y vuelve a validar esta fase.',
17
+ OPENSPEC_MISSING: 'Instala OpenSpec en este repositorio y vuelve a validar el gate.',
18
+ MCP_ENTERPRISE_RECEIPT_MISSING: 'Genera el receipt enterprise de MCP y vuelve a validar.',
19
+ BACKEND_AVOID_EXPLICIT_ANY: 'Sustituye `any` por tipos concretos en backend y relanza el gate.',
20
+ GIT_ATOMICITY_TOO_MANY_SCOPES: 'Divide el cambio por scope o en commits más pequeños y vuelve a ejecutar el gate.',
21
+ SOLID_HEURISTIC: 'Corrige la violación detectada y vuelve a ejecutar el gate.',
20
22
  };
21
23
 
22
- const BLOCKED_REMEDIATION_MAX_LENGTH = 220;
24
+ const BLOCKED_REMEDIATION_MAX_LENGTH_BY_VARIANT: Readonly<Record<BlockedRemediationVariant, number>> = {
25
+ banner: 120,
26
+ dialog: 220,
27
+ };
23
28
 
24
29
  const GENERIC_BLOCKED_REMEDIATION =
25
30
  'Corrige el bloqueo indicado y vuelve a ejecutar el comando.';
@@ -37,7 +42,6 @@ const resolveFallbackRemediation = (causeCode: string): string =>
37
42
  const hasEnglishHints = (message: string): boolean => {
38
43
  const normalized = message.toLowerCase();
39
44
  return [
40
- 'detected',
41
45
  'avoid explicit any',
42
46
  'set-upstream',
43
47
  'refresh evidence',
@@ -48,16 +52,6 @@ const hasEnglishHints = (message: string): boolean => {
48
52
  'rerun',
49
53
  'retry',
50
54
  'to continue',
51
- 'protected branch',
52
- 'open spec',
53
- 'openspec',
54
- 'session',
55
- 'missing',
56
- 'invalid',
57
- 'failed',
58
- 'worktree',
59
- 'callback usage',
60
- 'usage.',
61
55
  'run ',
62
56
  ].some((hint) => normalized.includes(hint));
63
57
  };
@@ -73,9 +67,6 @@ const toKnownSpanishRemediationFromMessage = (message: string, causeCode: string
73
67
  if (normalized.includes('refresh evidence') || normalized.includes('evidence is stale')) {
74
68
  return BLOCKED_REMEDIATION_BY_CODE.EVIDENCE_STALE;
75
69
  }
76
- if (normalized.includes('evidence ai gate status is blocked')) {
77
- return BLOCKED_REMEDIATION_BY_CODE.EVIDENCE_GATE_BLOCKED;
78
- }
79
70
  if (normalized.includes('split the change')) {
80
71
  return BLOCKED_REMEDIATION_BY_CODE.GIT_ATOMICITY_TOO_MANY_SCOPES;
81
72
  }
@@ -87,7 +78,10 @@ const toKnownSpanishRemediationFromMessage = (message: string, causeCode: string
87
78
 
88
79
  export const resolveBlockedRemediation = (
89
80
  event: Extract<PumukiCriticalNotificationEvent, { kind: 'gate.blocked' }>,
90
- causeCode: string
81
+ causeCode: string,
82
+ options?: {
83
+ variant?: BlockedRemediationVariant;
84
+ }
91
85
  ): string => {
92
86
  const variant = options?.variant ?? 'dialog';
93
87
  const maxLength = BLOCKED_REMEDIATION_MAX_LENGTH_BY_VARIANT[variant];