pumuki 6.3.84 → 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.
package/VERSION CHANGED
@@ -1 +1 @@
1
- v6.3.84
1
+ v6.3.85
@@ -6,6 +6,18 @@ 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
+
15
+ ### 2026-04-20 (v6.3.85)
16
+
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.
18
+ - **Causa visible en español**: los bloqueos de tracking `TRACKING_CANONICAL_SOURCE_CONFLICT` y `TRACKING_CANONICAL_IN_PROGRESS_INVALID` renderizan ya el texto final en español en banner y modal.
19
+ - **Rollout recomendado**: publicar `pumuki@6.3.85`, repin en `R_GO` y `Flux_training`, y confirmar que el bloqueo residual ya no mezcla inglés y español ni falla por ignorar la fila `- [🚧] -`.
20
+
9
21
  ### 2026-04-20 (v6.3.84)
10
22
 
11
23
  - **Tracking en español**: `TRACKING_CANONICAL_SOURCE_CONFLICT` y `TRACKING_CANONICAL_IN_PROGRESS_INVALID` ya renderizan una causa 100% en español en el banner y en el modal macOS.
@@ -16,6 +16,7 @@ const IN_PROGRESS_PATTERNS = [
16
16
  /^- Estado:\s*🚧/m,
17
17
  /^- 🚧 (\`?P[0-9A-Za-z.-]+\`?)/m,
18
18
  /^\`?\[\s*🚧\s*\]\s*-\`?/m,
19
+ /^-\s*\`?\[\s*🚧\s*\]\s*-\`?/m,
19
20
  /^\|\s*🚧(?:\s|\|)/m,
20
21
  /^\|[^|\n]+\|\s*🚧(?:\s|\|)/m,
21
22
  /^\|[^|\n]+\|\s*\`?\[\s*🚧\s*\]\s*-\`?/m,
@@ -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: rawPreWriteAiGate ?? 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
- (rawPreWriteAiGate ?? aiGate)
212
+ (aiGate)
220
213
  ? buildPreWriteValidationEnvelope(
221
214
  result,
222
- rawPreWriteAiGate ?? aiGate!,
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' || params.aiGate.allowed) {
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.84",
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": {