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.
|
|
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
|
|
9
|
-
EVIDENCE_INVALID: 'Regenera la evidencia de
|
|
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: '
|
|
12
|
-
EVIDENCE_BRANCH_MISMATCH: '
|
|
13
|
-
EVIDENCE_REPO_ROOT_MISMATCH: 'Regenera evidencia desde este repositorio y
|
|
14
|
-
PRE_PUSH_UPSTREAM_MISSING: 'Configura upstream con `git push --set-upstream origin <branch>` y
|
|
15
|
-
SDD_SESSION_MISSING: 'Abre sesión SDD del change activo y repite la validación
|
|
16
|
-
SDD_SESSION_INVALID: 'Refresca la sesión SDD
|
|
17
|
-
OPENSPEC_MISSING: 'Instala OpenSpec en
|
|
18
|
-
MCP_ENTERPRISE_RECEIPT_MISSING: 'Genera el receipt enterprise de MCP y vuelve a
|
|
19
|
-
BACKEND_AVOID_EXPLICIT_ANY: '
|
|
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
|
|
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];
|