pumuki 6.3.371 → 6.3.373

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.
@@ -240,6 +240,17 @@ const isNonCodeRule = (rule: SkillsCompiledRule): boolean => {
240
240
  return NON_CODE_RULE_PATTERNS.some((pattern) => pattern.test(haystack));
241
241
  };
242
242
 
243
+ const isMetaInstructionRule = (rule: SkillsCompiledRule): boolean => {
244
+ const normalizedId = normalizeText(rule.id);
245
+ return (
246
+ normalizedId.includes('.use-grep-for-') ||
247
+ normalizedId.includes('.use-read-on-') ||
248
+ normalizedId.includes('.use-references-') ||
249
+ normalizedId.includes('.references-') ||
250
+ normalizedId.includes('.then-use-references-')
251
+ );
252
+ };
253
+
243
254
  const hasDirectCodeDetectorCandidate = (rule: SkillsCompiledRule): boolean => {
244
255
  const haystack = normalizeText(`${rule.id} ${rule.description} ${rule.sourceSkill}`);
245
256
  return CODE_RULE_WITH_DIRECT_DETECTOR_PATTERNS.some((pattern) => pattern.test(haystack));
@@ -249,6 +260,20 @@ const classifyRule = (rule: SkillsCompiledRule): ClassifiedSkillsRule => {
249
260
  const evaluationMode = rule.evaluationMode ?? 'AUTO';
250
261
  const astNodeIds = resolveMappedHeuristicRuleIdsForCompiledRule(rule);
251
262
 
263
+ if (isMetaInstructionRule(rule)) {
264
+ return {
265
+ ruleId: rule.id,
266
+ platform: rule.platform,
267
+ sourceSkill: rule.sourceSkill,
268
+ sourcePath: rule.sourcePath,
269
+ evaluationMode,
270
+ severity: rule.severity,
271
+ status: 'NO_ES_REGLA_DE_CODIGO',
272
+ reason: 'Instruccion meta de uso de tooling o referencias; no debe emitirse como finding runtime.',
273
+ astNodeIds,
274
+ };
275
+ }
276
+
252
277
  if (astNodeIds.length > 0) {
253
278
  return {
254
279
  ruleId: rule.id,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pumuki",
3
- "version": "6.3.371",
3
+ "version": "6.3.373",
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": {
@@ -13,10 +13,10 @@ type LegacySkillCause = {
13
13
  const FIELD_NAMES = ['severity', 'file', 'line', 'lines', 'message', 'remediation'] as const;
14
14
 
15
15
  const RULE_LABELS: Readonly<Record<string, string>> = {
16
- 'skills.ios.prefer-swift-testing': 'Swift Testing',
17
- 'skills.ios.no-wait-for-expectations': 'Swift Testing async',
18
- 'skills.ios.no-xctassert': 'Swift Testing',
19
- 'skills.ios.no-xctunwrap': 'Swift Testing',
16
+ 'skills.ios.prefer-swift-testing': 'Test XCTest legacy',
17
+ 'skills.ios.no-wait-for-expectations': 'waitForExpectations legacy',
18
+ 'skills.ios.no-xctassert': 'Assertions XCTest en Swift Testing',
19
+ 'skills.ios.no-xctunwrap': 'XCTUnwrap en Swift Testing',
20
20
  'skills.backend.no-empty-catch': 'Backend: no empty catch',
21
21
  };
22
22
 
@@ -156,9 +156,10 @@ const formatLocation = (cause: NonNullable<Extract<PumukiCriticalNotificationEve
156
156
  const humanizeRuleId = (ruleId: string): string => {
157
157
  const knownRules: Record<string, string> = {
158
158
  'no-empty-catch': 'catch vacío',
159
- 'prefer-swift-testing': 'Swift Testing',
160
- 'no-xctassert': 'XCTest assertions',
161
- 'no-wait-for-expectations': 'waitForExpectations en XCTest',
159
+ 'prefer-swift-testing': 'Test XCTest legacy',
160
+ 'no-xctassert': 'Assertions XCTest en Swift Testing',
161
+ 'no-xctunwrap': 'XCTUnwrap en Swift Testing',
162
+ 'no-wait-for-expectations': 'waitForExpectations legacy',
162
163
  'ios-test-quality': 'calidad de tests iOS',
163
164
  'action-handlers-should-reference-methods-not-contain-inline-logic': 'handlers SwiftUI sin lógica inline',
164
165
  'ensure-constant-number-of-views-per-foreach-element': 'estructura estable en ForEach',
@@ -140,9 +140,10 @@ const formatCauseRule = (cause: BlockedCause): string => cause.ruleId ?? cause.c
140
140
 
141
141
  const humanizeRuleId = (ruleId: string): string => {
142
142
  const knownRules: Record<string, string> = {
143
- 'prefer-swift-testing': 'Swift Testing',
144
- 'no-xctassert': 'XCTest assertions',
145
- 'no-wait-for-expectations': 'waitForExpectations en XCTest',
143
+ 'prefer-swift-testing': 'Test XCTest legacy',
144
+ 'no-xctassert': 'Assertions XCTest en Swift Testing',
145
+ 'no-xctunwrap': 'XCTUnwrap en Swift Testing',
146
+ 'no-wait-for-expectations': 'waitForExpectations legacy',
146
147
  'ios-test-quality': 'calidad de tests iOS',
147
148
  'dynamic-type-font-scaling-automatico': 'Dynamic Type',
148
149
  'dynamic-type-font-scaling-automa-tico': 'Dynamic Type',
package/skills.lock.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": "1.0",
3
3
  "compilerVersion": "1.0.0",
4
- "generatedAt": "2026-05-25T06:04:51.295Z",
4
+ "generatedAt": "2026-05-25T06:14:06.228Z",
5
5
  "bundles": [
6
6
  {
7
7
  "name": "android-guidelines",