pumuki 6.3.130 → 6.3.131

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.
@@ -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'],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pumuki",
3
- "version": "6.3.130",
3
+ "version": "6.3.131",
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.",