pumuki 6.3.320 → 6.3.322
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.
|
@@ -1501,9 +1501,6 @@ const appendWorktreeHygieneViolations = (
|
|
|
1501
1501
|
};
|
|
1502
1502
|
|
|
1503
1503
|
const toPolicyStage = (stage: AiGateStage): SkillsStage => {
|
|
1504
|
-
if (stage === 'PRE_WRITE') {
|
|
1505
|
-
return 'PRE_COMMIT';
|
|
1506
|
-
}
|
|
1507
1504
|
return stage;
|
|
1508
1505
|
};
|
|
1509
1506
|
|
|
@@ -1699,6 +1696,9 @@ export const evaluateAiGate = (
|
|
|
1699
1696
|
suppressSkillsContractViolation
|
|
1700
1697
|
|| skillsContract.status !== 'FAIL'
|
|
1701
1698
|
|| (params.stage === 'PRE_WRITE' && requiredSkillsPlatforms.length === 0)
|
|
1699
|
+
|| skillsContract.violations.some((violation) =>
|
|
1700
|
+
violation.code === 'EVIDENCE_PLATFORM_CRITICAL_SKILLS_RULES_MISSING'
|
|
1701
|
+
)
|
|
1702
1702
|
? []
|
|
1703
1703
|
: [
|
|
1704
1704
|
toSkillsViolation(
|
|
@@ -84,9 +84,6 @@ const defaultDependencies: PlatformGateEvaluationDependencies = {
|
|
|
84
84
|
const normalizeStageForSkills = (
|
|
85
85
|
stage: GateStage
|
|
86
86
|
): Exclude<GateStage, 'STAGED'> => {
|
|
87
|
-
if (stage === 'PRE_WRITE') {
|
|
88
|
-
return 'CI';
|
|
89
|
-
}
|
|
90
87
|
return stage === 'STAGED' ? 'PRE_COMMIT' : stage;
|
|
91
88
|
};
|
|
92
89
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pumuki",
|
|
3
|
-
"version": "6.3.
|
|
3
|
+
"version": "6.3.322",
|
|
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": {
|
|
@@ -22,6 +22,16 @@ const buildBlockingCausesDetails = (
|
|
|
22
22
|
if (!causes || causes.length === 0) {
|
|
23
23
|
return null;
|
|
24
24
|
}
|
|
25
|
+
if (causes.every(isSkillsContractCause)) {
|
|
26
|
+
const first = resolvePrioritizedBlockingCauses(causes)[0];
|
|
27
|
+
if (!first) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return [
|
|
31
|
+
'Causas bloqueantes: 1',
|
|
32
|
+
...formatBlockingCauseForDialog(first, 0),
|
|
33
|
+
].join('\n');
|
|
34
|
+
}
|
|
25
35
|
const total = causes.length;
|
|
26
36
|
const header = total === 1
|
|
27
37
|
? 'Causas bloqueantes: 1'
|
|
@@ -236,16 +246,20 @@ const formatPlatformName = (platform: string | null): string =>
|
|
|
236
246
|
: 'plataforma detectada';
|
|
237
247
|
|
|
238
248
|
const extractSkillsContractPlatform = (message: string): string | null =>
|
|
239
|
-
message.match(/\bplatforms?=([a-z0-9_,.-]+)/i)?.[1]?.split(',')[0]?.trim()
|
|
249
|
+
message.match(/\bplatforms?=([a-z0-9_,.-]+)/i)?.[1]?.split(',')[0]?.trim()
|
|
250
|
+
?? message.match(/\b(ios|android|frontend|backend)\(missing_critical_rule_ids=/i)?.[1]?.trim()
|
|
251
|
+
?? message.match(/\bfor\s+(ios|android|frontend|backend)\s*:/i)?.[1]?.trim()
|
|
252
|
+
?? null;
|
|
240
253
|
|
|
241
254
|
const extractSkillsContractRules = (message: string): string | null => {
|
|
242
255
|
const rulesMatch = message.match(/\brules?=\{([^}]+)\}/i)?.[1];
|
|
243
256
|
const missingMatch = message.match(/\bmissing=\[([^\]]+)\]/i)?.[1];
|
|
244
|
-
|
|
257
|
+
const criticalMissingMatch = message.match(/\bmissing_critical_rule_ids=\[([^\]]+)\]/i)?.[1];
|
|
258
|
+
return normalizeNotificationText(rulesMatch ?? criticalMissingMatch ?? missingMatch ?? '');
|
|
245
259
|
};
|
|
246
260
|
|
|
247
261
|
const SKILLS_CONTRACT_REMEDIATION =
|
|
248
|
-
'Actualiza o reconcilia el contrato de skills de Pumuki y vuelve a intentar el commit. Si estás en
|
|
262
|
+
'Actualiza o reconcilia el contrato de skills de Pumuki y vuelve a intentar el commit. Si ya estás en la última versión, es un bug del motor de Pumuki y debe corregirse allí antes de cerrar el commit.';
|
|
249
263
|
|
|
250
264
|
const WORKTREE_HYGIENE_REMEDIATION =
|
|
251
265
|
'Reduce el worktree pendiente a un slice atómico: stagea solo la tarea activa o guarda el resto en stash nombrado, y reejecuta PRE_WRITE.';
|
|
@@ -65,16 +65,20 @@ const formatPlatformName = (platform: string | null): string =>
|
|
|
65
65
|
: 'plataforma detectada';
|
|
66
66
|
|
|
67
67
|
const extractSkillsContractPlatform = (message: string): string | null =>
|
|
68
|
-
message.match(/\bplatforms?=([a-z0-9_,.-]+)/i)?.[1]?.split(',')[0]?.trim()
|
|
68
|
+
message.match(/\bplatforms?=([a-z0-9_,.-]+)/i)?.[1]?.split(',')[0]?.trim()
|
|
69
|
+
?? message.match(/\b(ios|android|frontend|backend)\(missing_critical_rule_ids=/i)?.[1]?.trim()
|
|
70
|
+
?? message.match(/\bfor\s+(ios|android|frontend|backend)\s*:/i)?.[1]?.trim()
|
|
71
|
+
?? null;
|
|
69
72
|
|
|
70
73
|
const extractSkillsContractRules = (message: string): string | null => {
|
|
71
74
|
const rulesMatch = message.match(/\brules?=\{([^}]+)\}/i)?.[1];
|
|
72
75
|
const missingMatch = message.match(/\bmissing=\[([^\]]+)\]/i)?.[1];
|
|
73
|
-
|
|
76
|
+
const criticalMissingMatch = message.match(/\bmissing_critical_rule_ids=\[([^\]]+)\]/i)?.[1];
|
|
77
|
+
return normalizeNotificationText(rulesMatch ?? criticalMissingMatch ?? missingMatch ?? '');
|
|
74
78
|
};
|
|
75
79
|
|
|
76
80
|
const SKILLS_CONTRACT_REMEDIATION =
|
|
77
|
-
'Actualiza o reconcilia el contrato de skills de Pumuki y vuelve a intentar el commit. Si estás en
|
|
81
|
+
'Actualiza o reconcilia el contrato de skills de Pumuki y vuelve a intentar el commit. Si ya estás en la última versión, es un bug del motor de Pumuki y debe corregirse allí antes de cerrar el commit.';
|
|
78
82
|
|
|
79
83
|
const extractExpectedBddFeatureFile = (cause: BlockedCause): string => {
|
|
80
84
|
const directFile = cause.file?.endsWith('.feature') ? cause.file : null;
|