pumuki 6.3.130 → 6.3.132

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 CHANGED
@@ -6,6 +6,14 @@ This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [6.3.132] - 2026-05-03
10
+
11
+ ### Fixed
12
+
13
+ - **Reglas declarativas sin detector no bloquean el gate:** `unsupported_detector_rule_ids` se conserva en evidencia, pero deja de convertirse en `SKILLS_DETECTOR_MAPPING_INCOMPLETE_HIGH` cuando no hay reglas AUTO ejecutables sin detector.
14
+ - **Bloqueo solo para AUTO real:** el guard de cobertura de skills ahora bloquea exclusivamente `unsupported_auto_rule_ids`, evitando que doctrina declarativa de skills vuelva a parar consumers con `coverage_ratio=1`.
15
+ - **Regresión focalizada:** `runPlatformGate` cubre el caso en modo strict para asegurar que declarativas sin detector quedan como evidencia no bloqueante.
16
+
9
17
  ## [6.3.130] - 2026-05-03
10
18
 
11
19
  ### Fixed
package/VERSION CHANGED
@@ -1 +1 @@
1
- v6.3.130
1
+ v6.3.132
@@ -319,6 +319,16 @@ export const skillsCompilerTemplates: Record<string, SkillsCompilerTemplate> = {
319
319
  description:
320
320
  'Curated enforcement mapping for Swift Testing adoption in iOS unit and integration tests.',
321
321
  rules: [
322
+ {
323
+ id: 'skills.ios.critical-test-quality',
324
+ description:
325
+ 'Critical iOS test quality contract: Swift tests must be covered by modern testing rules and XCTest compatibility guards.',
326
+ severity: 'ERROR',
327
+ platform: 'ios',
328
+ confidence: 'HIGH',
329
+ stage: 'PRE_COMMIT',
330
+ locked: true,
331
+ },
322
332
  {
323
333
  id: 'skills.ios.prefer-swift-testing',
324
334
  description:
@@ -112,6 +112,15 @@ const registryByRuleId: Record<string, SkillsDetectorBinding> = {
112
112
  'skills.ios.no-uiscreen-main-bounds': heuristicDetector('ios.uiscreen-main-bounds', [
113
113
  'heuristics.ios.uiscreen-main-bounds.ast',
114
114
  ]),
115
+ 'skills.ios.critical-test-quality': heuristicDetector('ios.testing.critical-quality', [
116
+ 'heuristics.ios.testing.xctest-import.ast',
117
+ 'heuristics.ios.testing.xctest-suite-modernizable.ast',
118
+ 'heuristics.ios.testing.xctassert.ast',
119
+ 'heuristics.ios.testing.xctunwrap.ast',
120
+ 'heuristics.ios.testing.wait-for-expectations.ast',
121
+ 'heuristics.ios.testing.legacy-expectation-description.ast',
122
+ 'heuristics.ios.testing.mixed-frameworks.ast',
123
+ ]),
115
124
  'skills.ios.prefer-swift-testing': heuristicDetector('ios.testing.xctest-import', [
116
125
  'heuristics.ios.testing.xctest-import.ast',
117
126
  'heuristics.ios.testing.xctest-suite-modernizable.ast',
@@ -507,6 +507,38 @@ const emptyResult = (): SkillsRuleSetLoadResult => {
507
507
  };
508
508
  };
509
509
 
510
+ const IOS_CRITICAL_TEST_QUALITY_RULE: SkillsCompiledRule = {
511
+ id: 'skills.ios.critical-test-quality',
512
+ description:
513
+ 'Critical iOS test quality contract: Swift tests must be covered by modern testing rules and XCTest compatibility guards.',
514
+ severity: 'ERROR',
515
+ platform: 'ios',
516
+ sourceSkill: 'ios-swift-testing-guidelines',
517
+ sourcePath: 'compat:synthetic/ios-critical-test-quality',
518
+ stage: 'PRE_COMMIT',
519
+ confidence: 'HIGH',
520
+ locked: true,
521
+ evaluationMode: 'AUTO',
522
+ origin: 'core',
523
+ };
524
+
525
+ const withSyntheticCompatibilityRules = (
526
+ bundles: ReadonlyArray<SkillsLockBundle>
527
+ ): SkillsLockBundle[] => {
528
+ return bundles.map((bundle) => {
529
+ if (bundle.name !== 'ios-swift-testing-guidelines') {
530
+ return bundle;
531
+ }
532
+ if (bundle.rules.some((rule) => rule.id === IOS_CRITICAL_TEST_QUALITY_RULE.id)) {
533
+ return bundle;
534
+ }
535
+ return {
536
+ ...bundle,
537
+ rules: [IOS_CRITICAL_TEST_QUALITY_RULE, ...bundle.rules],
538
+ };
539
+ });
540
+ };
541
+
510
542
  export const loadSkillsRuleSetForStage = (
511
543
  stage: Exclude<GateStage, 'STAGED'>,
512
544
  repoRoot: string = process.cwd(),
@@ -521,13 +553,13 @@ export const loadSkillsRuleSetForStage = (
521
553
  const policy = loadSkillsPolicy(repoRoot);
522
554
  const defaultBundleEnabled = policy?.defaultBundleEnabled ?? true;
523
555
 
524
- const activeBundles = lock.bundles.filter((bundle) => {
556
+ const activeBundles = withSyntheticCompatibilityRules(lock.bundles.filter((bundle) => {
525
557
  return resolveBundleEnabled({
526
558
  bundleName: bundle.name,
527
559
  defaultBundleEnabled,
528
560
  bundlePolicy: policy?.bundles[bundle.name],
529
561
  });
530
- });
562
+ }));
531
563
 
532
564
  if (activeBundles.length === 0) {
533
565
  return emptyResult();
@@ -150,6 +150,8 @@ const PLATFORM_REQUIRED_SKILLS_BUNDLES: Readonly<Record<PreWriteSkillsPlatform,
150
150
  'ios-guidelines',
151
151
  'ios-concurrency-guidelines',
152
152
  'ios-swiftui-expert-guidelines',
153
+ 'ios-swift-testing-guidelines',
154
+ 'ios-core-data-guidelines',
153
155
  ],
154
156
  android: ['android-guidelines'],
155
157
  backend: ['backend-guidelines'],
@@ -228,12 +228,7 @@ const toSkillsUnsupportedAutoRulesBlockingFinding = (params: {
228
228
  return undefined;
229
229
  }
230
230
 
231
- const unsupportedRuleIds = [
232
- ...new Set([
233
- ...params.unsupportedAutoRuleIds,
234
- ...(params.unsupportedDetectorRuleIds ?? []),
235
- ]),
236
- ].sort();
231
+ const unsupportedRuleIds = [...new Set(params.unsupportedAutoRuleIds)].sort();
237
232
  if (unsupportedRuleIds.length === 0) {
238
233
  return undefined;
239
234
  }
@@ -246,8 +241,8 @@ const toSkillsUnsupportedAutoRulesBlockingFinding = (params: {
246
241
  code: 'SKILLS_DETECTOR_MAPPING_INCOMPLETE_HIGH',
247
242
  message:
248
243
  `Skills detector mapping incomplete at ${params.stage}: ` +
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.',
244
+ `unsupported_auto_rule_ids=[${unsupportedRuleIdsToken}]. ` +
245
+ 'Map every stage-applicable AUTO skill rule to an intelligent AST detector before proceeding.',
251
246
  filePath: '.ai_evidence.json',
252
247
  matchedBy: 'SkillsDetectorMappingGuard',
253
248
  source: 'skills-detector-mapping',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pumuki",
3
- "version": "6.3.130",
3
+ "version": "6.3.132",
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": {
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-04-29T22:58:10.446Z",
4
+ "generatedAt": "2026-05-03T12:45:29.960Z",
5
5
  "bundles": [
6
6
  {
7
7
  "name": "android-guidelines",
@@ -8176,8 +8176,21 @@
8176
8176
  "name": "ios-swift-testing-guidelines",
8177
8177
  "version": "1.0.0",
8178
8178
  "source": "file:vendor/skills/swift-testing-expert/SKILL.md",
8179
- "hash": "48249808a0c025bb5fb16ac2e5cec4d44ac4b0634273509ee2165ad60d0fe81f",
8179
+ "hash": "1d5d5236f9cd9fdd12a860048512fa3c2d6b9af5aedfafaaa4a18f837d2ca9e1",
8180
8180
  "rules": [
8181
+ {
8182
+ "id": "skills.ios.critical-test-quality",
8183
+ "description": "Critical iOS test quality contract: Swift tests must be covered by modern testing rules and XCTest compatibility guards.",
8184
+ "severity": "ERROR",
8185
+ "platform": "ios",
8186
+ "confidence": "HIGH",
8187
+ "stage": "PRE_COMMIT",
8188
+ "locked": true,
8189
+ "sourceSkill": "ios-swift-testing-guidelines",
8190
+ "sourcePath": "vendor/skills/swift-testing-expert/SKILL.md",
8191
+ "evaluationMode": "AUTO",
8192
+ "origin": "core"
8193
+ },
8181
8194
  {
8182
8195
  "id": "skills.ios.guideline.ios-swift-testing.keep-tests-isolated-expressive-and-aligned-with-swift-concurrency",
8183
8196
  "description": "Keep tests isolated, expressive, and aligned with Swift Concurrency.",