pumuki 6.3.85 → 6.3.86
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.
|
@@ -6,6 +6,12 @@ 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-20 (v6.3.86)
|
|
10
|
+
|
|
11
|
+
- **Paridad de gate real**: `pumuki sdd validate --stage=PRE_WRITE --json` deja de devolver verde falso cuando el hook real bloquearía por evidencia o findings staged; ahora fuerza refresh de evidencia incluso si el `aiGate` inicial llega en `ALLOWED`.
|
|
12
|
+
- **Evidencia consistente**: el envelope final de `validate` usa el resultado refrescado y `.ai_evidence.json` queda en `BLOCK` cuando el rojo real del consumer persiste.
|
|
13
|
+
- **Rollout recomendado**: publicar `pumuki@6.3.86`, repin inmediato en `Flux_training` y revalidar con un rojo frontend staged (`validate PRE_WRITE`, `pre-commit`, `.ai_evidence.json`, `status`, `doctor`).
|
|
14
|
+
|
|
9
15
|
### 2026-04-20 (v6.3.85)
|
|
10
16
|
|
|
11
17
|
- **Tracking con viñeta reconocido**: el enforcement ya cuenta correctamente `- [🚧] - tarea` como única tarea activa válida en el MD canónico, eliminando falsos `count=0` en consumers que usan ese formato.
|
|
@@ -35,7 +35,6 @@ import {
|
|
|
35
35
|
type PreWriteOpenSpecBootstrapTrace,
|
|
36
36
|
buildPreWriteExperimentalDisabledResult,
|
|
37
37
|
buildSddExperimentalEnableAdvisoryCommand,
|
|
38
|
-
runRawPreWriteAiGateCheck,
|
|
39
38
|
PRE_WRITE_ENABLE_STRICT_COMMAND,
|
|
40
39
|
} from './cli';
|
|
41
40
|
|
|
@@ -196,15 +195,9 @@ export const runSddCommand = async (parsed: ParsedArgs, activeDependencies: Life
|
|
|
196
195
|
automationTrace.attempted = auto.trace.attempted;
|
|
197
196
|
automationTrace.actions = auto.trace.actions;
|
|
198
197
|
}
|
|
199
|
-
const rawPreWriteAiGate = result.stage === 'PRE_WRITE' && aiGate
|
|
200
|
-
? runRawPreWriteAiGateCheck({
|
|
201
|
-
repoRoot: process.cwd(),
|
|
202
|
-
requireMcpReceipt: true,
|
|
203
|
-
})
|
|
204
|
-
: null;
|
|
205
198
|
const nextAction = resolvePreWriteNextAction({
|
|
206
199
|
sdd: result,
|
|
207
|
-
aiGate
|
|
200
|
+
aiGate,
|
|
208
201
|
});
|
|
209
202
|
const sddExperimentalNextAction =
|
|
210
203
|
!aiGate && result.decision.code === 'SDD_EXPERIMENTAL_DISABLED'
|
|
@@ -216,10 +209,10 @@ export const runSddCommand = async (parsed: ParsedArgs, activeDependencies: Life
|
|
|
216
209
|
if (parsed.json) {
|
|
217
210
|
writeInfo(
|
|
218
211
|
JSON.stringify(
|
|
219
|
-
(
|
|
212
|
+
(aiGate)
|
|
220
213
|
? buildPreWriteValidationEnvelope(
|
|
221
214
|
result,
|
|
222
|
-
|
|
215
|
+
aiGate!,
|
|
223
216
|
preWriteEnforcement,
|
|
224
217
|
experimentalFeatures,
|
|
225
218
|
policyValidation,
|
|
@@ -98,7 +98,7 @@ export const buildPreWriteAutomationTrace = async (params: {
|
|
|
98
98
|
attempted: false,
|
|
99
99
|
actions: [],
|
|
100
100
|
};
|
|
101
|
-
if (params.sdd.stage !== 'PRE_WRITE'
|
|
101
|
+
if (params.sdd.stage !== 'PRE_WRITE') {
|
|
102
102
|
return {
|
|
103
103
|
aiGate: params.aiGate,
|
|
104
104
|
trace,
|
|
@@ -106,6 +106,42 @@ export const buildPreWriteAutomationTrace = async (params: {
|
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
let aiGate = params.aiGate;
|
|
109
|
+
if (aiGate.allowed) {
|
|
110
|
+
trace.attempted = true;
|
|
111
|
+
try {
|
|
112
|
+
const gateExitCode = await params.runPlatformGate({
|
|
113
|
+
policy: {
|
|
114
|
+
stage: 'PRE_COMMIT',
|
|
115
|
+
blockOnOrAbove: 'ERROR',
|
|
116
|
+
warnOnOrAbove: 'WARN',
|
|
117
|
+
},
|
|
118
|
+
scope: {
|
|
119
|
+
kind: 'workingTree',
|
|
120
|
+
},
|
|
121
|
+
auditMode: 'gate',
|
|
122
|
+
dependencies: {
|
|
123
|
+
printGateFindings: () => {},
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
trace.actions.push({
|
|
127
|
+
action: 'refresh_evidence',
|
|
128
|
+
status: 'OK',
|
|
129
|
+
details: `stage=PRE_COMMIT runPlatformGate exit_code=${gateExitCode} parity_probe=allowed_initial`,
|
|
130
|
+
});
|
|
131
|
+
aiGate = activeDependencies.runEnterpriseAiGateCheck({
|
|
132
|
+
repoRoot: params.repoRoot,
|
|
133
|
+
stage: 'PRE_WRITE',
|
|
134
|
+
requireMcpReceipt: true,
|
|
135
|
+
}).result;
|
|
136
|
+
} catch (error) {
|
|
137
|
+
trace.actions.push({
|
|
138
|
+
action: 'refresh_evidence',
|
|
139
|
+
status: 'FAILED',
|
|
140
|
+
details: error instanceof Error ? error.message : 'Unknown PRE_COMMIT parity refresh error',
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
109
145
|
if (hasAutoFixableEvidenceViolation(aiGate)) {
|
|
110
146
|
trace.attempted = true;
|
|
111
147
|
try {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pumuki",
|
|
3
|
-
"version": "6.3.
|
|
3
|
+
"version": "6.3.86",
|
|
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": {
|