pumuki 6.3.128 → 6.3.129
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 +8 -0
- package/core/facts/detectors/text/android.test.ts +268 -0
- package/core/facts/detectors/text/android.ts +340 -0
- package/core/facts/extractHeuristicFacts.ts +29 -0
- package/core/rules/presets/heuristics/android.test.ts +56 -1
- package/core/rules/presets/heuristics/android.ts +200 -0
- package/docs/operations/RELEASE_NOTES.md +6 -0
- package/docs/product/CONFIGURATION.md +8 -0
- package/integrations/config/skillsCompilerTemplates.test.ts +14 -0
- package/integrations/config/skillsCompilerTemplates.ts +27 -0
- package/integrations/config/skillsDetectorRegistry.ts +36 -0
- package/integrations/config/skillsMarkdownRules.ts +177 -7
- package/integrations/config/skillsRuleSet.ts +6 -0
- package/integrations/evidence/rulesCoverage.ts +13 -0
- package/integrations/evidence/schema.ts +2 -0
- package/integrations/git/runPlatformGate.ts +31 -4
- package/integrations/policy/gitAtomicityEnforcement.ts +2 -2
- package/integrations/policy/heuristicsEnforcement.ts +2 -2
- package/integrations/policy/sddCompletenessEnforcement.ts +2 -2
- package/integrations/policy/skillsEnforcement.ts +2 -2
- package/integrations/policy/tddBddEnforcement.ts +2 -2
- package/package.json +1 -1
- package/skills.lock.json +146 -527
|
@@ -63,6 +63,9 @@ export const normalizeSnapshotRulesCoverage = (
|
|
|
63
63
|
const matchedRuleIds = normalizeStringArray(value.matched_rule_ids);
|
|
64
64
|
const unevaluatedRuleIds = normalizeStringArray(value.unevaluated_rule_ids);
|
|
65
65
|
const unsupportedAutoRuleIds = normalizeStringArray(value.unsupported_auto_rule_ids ?? []);
|
|
66
|
+
const unsupportedDetectorRuleIds = normalizeStringArray(
|
|
67
|
+
value.unsupported_detector_rule_ids ?? []
|
|
68
|
+
);
|
|
66
69
|
const stageApplicableAutoRuleIds = normalizeStringArray(
|
|
67
70
|
value.stage_applicable_auto_rule_ids ?? []
|
|
68
71
|
);
|
|
@@ -80,6 +83,10 @@ export const normalizeSnapshotRulesCoverage = (
|
|
|
80
83
|
unsupportedAutoRuleIds.length,
|
|
81
84
|
normalizeCount(value.counts?.unsupported_auto ?? 0)
|
|
82
85
|
);
|
|
86
|
+
const unsupportedDetectorCount = Math.max(
|
|
87
|
+
unsupportedDetectorRuleIds.length,
|
|
88
|
+
normalizeCount(value.counts?.unsupported_detector ?? 0)
|
|
89
|
+
);
|
|
83
90
|
|
|
84
91
|
const counts: SnapshotRulesCoverage['counts'] = {
|
|
85
92
|
active: Math.max(derivedCounts.active, normalizeCount(value.counts?.active ?? 0)),
|
|
@@ -103,6 +110,9 @@ export const normalizeSnapshotRulesCoverage = (
|
|
|
103
110
|
if (unsupportedAutoCount > 0) {
|
|
104
111
|
counts.unsupported_auto = unsupportedAutoCount;
|
|
105
112
|
}
|
|
113
|
+
if (unsupportedDetectorCount > 0) {
|
|
114
|
+
counts.unsupported_detector = unsupportedDetectorCount;
|
|
115
|
+
}
|
|
106
116
|
|
|
107
117
|
const ratioFromCounts = createCoverageRatio(counts.active, counts.evaluated);
|
|
108
118
|
const coverageRatio = normalizeCoverageRatio(
|
|
@@ -146,6 +156,9 @@ export const normalizeSnapshotRulesCoverage = (
|
|
|
146
156
|
if (unsupportedAutoRuleIds.length > 0 || unsupportedAutoCount > 0) {
|
|
147
157
|
normalized.unsupported_auto_rule_ids = unsupportedAutoRuleIds;
|
|
148
158
|
}
|
|
159
|
+
if (unsupportedDetectorRuleIds.length > 0 || unsupportedDetectorCount > 0) {
|
|
160
|
+
normalized.unsupported_detector_rule_ids = unsupportedDetectorRuleIds;
|
|
161
|
+
}
|
|
149
162
|
|
|
150
163
|
return normalized;
|
|
151
164
|
};
|
|
@@ -54,6 +54,7 @@ export type SnapshotRulesCoverage = {
|
|
|
54
54
|
matched_rule_ids: string[];
|
|
55
55
|
unevaluated_rule_ids: string[];
|
|
56
56
|
unsupported_auto_rule_ids?: string[];
|
|
57
|
+
unsupported_detector_rule_ids?: string[];
|
|
57
58
|
registry_totals?: {
|
|
58
59
|
total: number;
|
|
59
60
|
auto: number;
|
|
@@ -72,6 +73,7 @@ export type SnapshotRulesCoverage = {
|
|
|
72
73
|
registry_declarative?: number;
|
|
73
74
|
stage_applicable_auto?: number;
|
|
74
75
|
unsupported_auto?: number;
|
|
76
|
+
unsupported_detector?: number;
|
|
75
77
|
};
|
|
76
78
|
coverage_ratio: number;
|
|
77
79
|
};
|
|
@@ -220,13 +220,25 @@ const toRulesCoverageBlockingFinding = (params: {
|
|
|
220
220
|
|
|
221
221
|
const toSkillsUnsupportedAutoRulesBlockingFinding = (params: {
|
|
222
222
|
stage: 'PRE_COMMIT' | 'PRE_PUSH' | 'CI';
|
|
223
|
+
filesScanned: number;
|
|
223
224
|
unsupportedAutoRuleIds: ReadonlyArray<string>;
|
|
225
|
+
unsupportedDetectorRuleIds?: ReadonlyArray<string>;
|
|
224
226
|
}): Finding | undefined => {
|
|
225
|
-
if (params.
|
|
227
|
+
if (params.filesScanned === 0) {
|
|
226
228
|
return undefined;
|
|
227
229
|
}
|
|
228
230
|
|
|
229
|
-
const
|
|
231
|
+
const unsupportedRuleIds = [
|
|
232
|
+
...new Set([
|
|
233
|
+
...params.unsupportedAutoRuleIds,
|
|
234
|
+
...(params.unsupportedDetectorRuleIds ?? []),
|
|
235
|
+
]),
|
|
236
|
+
].sort();
|
|
237
|
+
if (unsupportedRuleIds.length === 0) {
|
|
238
|
+
return undefined;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
const unsupportedRuleIdsToken = unsupportedRuleIds.join(', ');
|
|
230
242
|
|
|
231
243
|
return {
|
|
232
244
|
ruleId: 'governance.skills.detector-mapping.incomplete',
|
|
@@ -234,8 +246,8 @@ const toSkillsUnsupportedAutoRulesBlockingFinding = (params: {
|
|
|
234
246
|
code: 'SKILLS_DETECTOR_MAPPING_INCOMPLETE_HIGH',
|
|
235
247
|
message:
|
|
236
248
|
`Skills detector mapping incomplete at ${params.stage}: ` +
|
|
237
|
-
`
|
|
238
|
-
'Map every
|
|
249
|
+
`unsupported_detector_rule_ids=[${unsupportedRuleIdsToken}]. ` +
|
|
250
|
+
'Map every skill rule to an intelligent AST detector before proceeding; DECLARATIVE is not an acceptable final coverage state.',
|
|
239
251
|
filePath: '.ai_evidence.json',
|
|
240
252
|
matchedBy: 'SkillsDetectorMappingGuard',
|
|
241
253
|
source: 'skills-detector-mapping',
|
|
@@ -993,7 +1005,9 @@ export async function runPlatformGate(params: {
|
|
|
993
1005
|
params.policy.stage === 'CI'
|
|
994
1006
|
? toSkillsUnsupportedAutoRulesBlockingFinding({
|
|
995
1007
|
stage: params.policy.stage,
|
|
1008
|
+
filesScanned,
|
|
996
1009
|
unsupportedAutoRuleIds: skillsRuleSet.unsupportedAutoRuleIds ?? [],
|
|
1010
|
+
unsupportedDetectorRuleIds: skillsRuleSet.unsupportedDetectorRuleIds ?? [],
|
|
997
1011
|
})
|
|
998
1012
|
: undefined;
|
|
999
1013
|
const effectiveUnsupportedSkillsMappingFinding = applySkillsFindingEnforcement(
|
|
@@ -1138,6 +1152,13 @@ export async function runPlatformGate(params: {
|
|
|
1138
1152
|
unsupported_auto_rule_ids: [...(skillsRuleSet.unsupportedAutoRuleIds ?? [])],
|
|
1139
1153
|
}
|
|
1140
1154
|
: {}),
|
|
1155
|
+
...((skillsRuleSet.unsupportedDetectorRuleIds?.length ?? 0) > 0
|
|
1156
|
+
? {
|
|
1157
|
+
unsupported_detector_rule_ids: [
|
|
1158
|
+
...(skillsRuleSet.unsupportedDetectorRuleIds ?? []),
|
|
1159
|
+
],
|
|
1160
|
+
}
|
|
1161
|
+
: {}),
|
|
1141
1162
|
counts: {
|
|
1142
1163
|
active: coverage.activeRuleIds.length,
|
|
1143
1164
|
evaluated: coverage.evaluatedRuleIds.length,
|
|
@@ -1158,6 +1179,12 @@ export async function runPlatformGate(params: {
|
|
|
1158
1179
|
unsupported_auto: (skillsRuleSet.unsupportedAutoRuleIds ?? []).length,
|
|
1159
1180
|
}
|
|
1160
1181
|
: {}),
|
|
1182
|
+
...((skillsRuleSet.unsupportedDetectorRuleIds?.length ?? 0) > 0
|
|
1183
|
+
? {
|
|
1184
|
+
unsupported_detector:
|
|
1185
|
+
(skillsRuleSet.unsupportedDetectorRuleIds ?? []).length,
|
|
1186
|
+
}
|
|
1187
|
+
: {}),
|
|
1161
1188
|
},
|
|
1162
1189
|
coverage_ratio:
|
|
1163
1190
|
coverage.activeRuleIds.length === 0
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pumuki",
|
|
3
|
-
"version": "6.3.
|
|
3
|
+
"version": "6.3.129",
|
|
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": {
|