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/skills.lock.json CHANGED
@@ -1,14 +1,50 @@
1
1
  {
2
2
  "version": "1.0",
3
3
  "compilerVersion": "1.0.0",
4
- "generatedAt": "2026-04-05T00:13:54.218Z",
4
+ "generatedAt": "2026-04-29T06:53:15.629Z",
5
5
  "bundles": [
6
6
  {
7
7
  "name": "android-guidelines",
8
8
  "version": "1.0.0",
9
9
  "source": "file:vendor/skills/android-enterprise-rules/SKILL.md",
10
- "hash": "1551c5bf13b6cf980f67a75aadfabc7ab6ccdddb1ba389ba34a99ed3c064bb49",
10
+ "hash": "a1957d3e5dbca7cd28d1e8aa6d72231b5c5f60ef018e484a69f34a9685baa81b",
11
11
  "rules": [
12
+ {
13
+ "id": "skills.android.asynctask-deprecated-usar-coroutines",
14
+ "description": "AsyncTask - Deprecated, usar Coroutines",
15
+ "severity": "ERROR",
16
+ "platform": "android",
17
+ "sourceSkill": "android-guidelines",
18
+ "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
19
+ "confidence": "HIGH",
20
+ "locked": true,
21
+ "evaluationMode": "AUTO",
22
+ "origin": "core"
23
+ },
24
+ {
25
+ "id": "skills.android.dispatchers-main-ui-io-network-disk-default-cpu",
26
+ "description": "Dispatchers - Main (UI), IO (network/disk), Default (CPU)",
27
+ "severity": "WARN",
28
+ "platform": "android",
29
+ "sourceSkill": "android-guidelines",
30
+ "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
31
+ "confidence": "MEDIUM",
32
+ "locked": true,
33
+ "evaluationMode": "AUTO",
34
+ "origin": "core"
35
+ },
36
+ {
37
+ "id": "skills.android.findviewbyid-view-binding-o-compose",
38
+ "description": "Compose 100% - NO XML layouts en código nuevo",
39
+ "severity": "WARN",
40
+ "platform": "android",
41
+ "sourceSkill": "android-guidelines",
42
+ "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
43
+ "confidence": "MEDIUM",
44
+ "locked": true,
45
+ "evaluationMode": "AUTO",
46
+ "origin": "core"
47
+ },
12
48
  {
13
49
  "id": "skills.android.guideline.android.aaa-pattern-arrange-act-assert",
14
50
  "description": "AAA pattern - Arrange, Act, Assert",
@@ -165,18 +201,6 @@
165
201
  "evaluationMode": "DECLARATIVE",
166
202
  "origin": "core"
167
203
  },
168
- {
169
- "id": "skills.android.guideline.android.asynctask-deprecated-usar-coroutines",
170
- "description": "AsyncTask - Deprecated, usar Coroutines",
171
- "severity": "ERROR",
172
- "platform": "android",
173
- "sourceSkill": "android-guidelines",
174
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
175
- "confidence": "HIGH",
176
- "locked": true,
177
- "evaluationMode": "DECLARATIVE",
178
- "origin": "core"
179
- },
180
204
  {
181
205
  "id": "skills.android.guideline.android.baseline-profiles-optimizacio-n-de-startup",
182
206
  "description": "Baseline Profiles - Optimización de startup",
@@ -321,18 +345,6 @@
321
345
  "evaluationMode": "DECLARATIVE",
322
346
  "origin": "core"
323
347
  },
324
- {
325
- "id": "skills.android.guideline.android.coil-async-image-loading-recomendado-para-compose",
326
- "description": "Coil - Async image loading (recomendado para Compose)",
327
- "severity": "WARN",
328
- "platform": "android",
329
- "sourceSkill": "android-guidelines",
330
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
331
- "confidence": "MEDIUM",
332
- "locked": true,
333
- "evaluationMode": "DECLARATIVE",
334
- "origin": "core"
335
- },
336
348
  {
337
349
  "id": "skills.android.guideline.android.collect-terminal-operator-para-consumir-flow",
338
350
  "description": "collect - Terminal operator para consumir Flow",
@@ -345,18 +357,6 @@
345
357
  "evaluationMode": "DECLARATIVE",
346
358
  "origin": "core"
347
359
  },
348
- {
349
- "id": "skills.android.guideline.android.collectasstate-en-compose-para-observar-flow",
350
- "description": "collectAsState - En Compose para observar Flow",
351
- "severity": "WARN",
352
- "platform": "android",
353
- "sourceSkill": "android-guidelines",
354
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
355
- "confidence": "MEDIUM",
356
- "locked": true,
357
- "evaluationMode": "DECLARATIVE",
358
- "origin": "core"
359
- },
360
360
  {
361
361
  "id": "skills.android.guideline.android.color-contrast-wcag-aa-mi-nimo",
362
362
  "description": "Color contrast - WCAG AA mínimo",
@@ -393,42 +393,6 @@
393
393
  "evaluationMode": "DECLARATIVE",
394
394
  "origin": "core"
395
395
  },
396
- {
397
- "id": "skills.android.guideline.android.compose-100-no-xml-layouts-en-co-digo-nuevo",
398
- "description": "Compose 100% - NO XML layouts en código nuevo",
399
- "severity": "WARN",
400
- "platform": "android",
401
- "sourceSkill": "android-guidelines",
402
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
403
- "confidence": "MEDIUM",
404
- "locked": true,
405
- "evaluationMode": "DECLARATIVE",
406
- "origin": "core"
407
- },
408
- {
409
- "id": "skills.android.guideline.android.compose-bom-androidx-compose-compose-bom",
410
- "description": "Compose BOM - androidx.compose:compose-bom",
411
- "severity": "WARN",
412
- "platform": "android",
413
- "sourceSkill": "android-guidelines",
414
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
415
- "confidence": "MEDIUM",
416
- "locked": true,
417
- "evaluationMode": "DECLARATIVE",
418
- "origin": "core"
419
- },
420
- {
421
- "id": "skills.android.guideline.android.compose-ui-test-testing-de-composables",
422
- "description": "Compose UI Test - Testing de Composables",
423
- "severity": "WARN",
424
- "platform": "android",
425
- "sourceSkill": "android-guidelines",
426
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
427
- "confidence": "MEDIUM",
428
- "locked": true,
429
- "evaluationMode": "DECLARATIVE",
430
- "origin": "core"
431
- },
432
396
  {
433
397
  "id": "skills.android.guideline.android.comprobar-que-compile-antes-de-sugerir-gradle-build-sin-errores",
434
398
  "description": "Comprobar que compile ANTES de sugerir - Gradle build sin errores",
@@ -489,18 +453,6 @@
489
453
  "evaluationMode": "DECLARATIVE",
490
454
  "origin": "core"
491
455
  },
492
- {
493
- "id": "skills.android.guideline.android.coroutines-test-runtest-testdispatcher",
494
- "description": "Coroutines Test - runTest, TestDispatcher",
495
- "severity": "WARN",
496
- "platform": "android",
497
- "sourceSkill": "android-guidelines",
498
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
499
- "confidence": "MEDIUM",
500
- "locked": true,
501
- "evaluationMode": "DECLARATIVE",
502
- "origin": "core"
503
- },
504
456
  {
505
457
  "id": "skills.android.guideline.android.coverage-80-objetivo-95-en-lo-gica-cri-tica",
506
458
  "description": "Coverage >80% - Objetivo 95% en lógica crítica",
@@ -669,18 +621,6 @@
669
621
  "evaluationMode": "DECLARATIVE",
670
622
  "origin": "core"
671
623
  },
672
- {
673
- "id": "skills.android.guideline.android.dispatchers-main-ui-io-network-disk-default-cpu",
674
- "description": "Dispatchers - Main (UI), IO (network/disk), Default (CPU)",
675
- "severity": "WARN",
676
- "platform": "android",
677
- "sourceSkill": "android-guidelines",
678
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
679
- "confidence": "MEDIUM",
680
- "locked": true,
681
- "evaluationMode": "DECLARATIVE",
682
- "origin": "core"
683
- },
684
624
  {
685
625
  "id": "skills.android.guideline.android.disposableeffect-cleanup-cuando-composable-sale-de-composicio-n",
686
626
  "description": "DisposableEffect - Cleanup cuando Composable sale de composición",
@@ -838,18 +778,6 @@
838
778
  "evaluationMode": "DECLARATIVE",
839
779
  "origin": "core"
840
780
  },
841
- {
842
- "id": "skills.android.guideline.android.findviewbyid-view-binding-o-compose",
843
- "description": "findViewById - View Binding o Compose",
844
- "severity": "ERROR",
845
- "platform": "android",
846
- "sourceSkill": "android-guidelines",
847
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
848
- "confidence": "HIGH",
849
- "locked": true,
850
- "evaluationMode": "DECLARATIVE",
851
- "origin": "core"
852
- },
853
781
  {
854
782
  "id": "skills.android.guideline.android.firebase-app-distribution-beta-testing",
855
783
  "description": "Firebase App Distribution - Beta testing",
@@ -898,18 +826,6 @@
898
826
  "evaluationMode": "DECLARATIVE",
899
827
  "origin": "core"
900
828
  },
901
- {
902
- "id": "skills.android.guideline.android.force-unwrapping-usar-let",
903
- "description": "Force unwrapping (!!) - Usar ?, ?:, let",
904
- "severity": "ERROR",
905
- "platform": "android",
906
- "sourceSkill": "android-guidelines",
907
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
908
- "confidence": "HIGH",
909
- "locked": true,
910
- "evaluationMode": "DECLARATIVE",
911
- "origin": "core"
912
- },
913
829
  {
914
830
  "id": "skills.android.guideline.android.github-actions-gitlab-ci-pipelines",
915
831
  "description": "GitHub Actions / GitLab CI - Pipelines",
@@ -983,18 +899,6 @@
983
899
  "evaluationMode": "DECLARATIVE",
984
900
  "origin": "core"
985
901
  },
986
- {
987
- "id": "skills.android.guideline.android.hardcoded-strings-usar-strings-xml",
988
- "description": "Hardcoded strings - Usar strings.xml",
989
- "severity": "ERROR",
990
- "platform": "android",
991
- "sourceSkill": "android-guidelines",
992
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
993
- "confidence": "HIGH",
994
- "locked": true,
995
- "evaluationMode": "DECLARATIVE",
996
- "origin": "core"
997
- },
998
902
  {
999
903
  "id": "skills.android.guideline.android.hilt-com-google-dagger-hilt-android",
1000
904
  "description": "Hilt - com.google.dagger:hilt-android",
@@ -1079,18 +983,6 @@
1079
983
  "evaluationMode": "DECLARATIVE",
1080
984
  "origin": "core"
1081
985
  },
1082
- {
1083
- "id": "skills.android.guideline.android.java-en-co-digo-nuevo-solo-kotlin",
1084
- "description": "Java en código nuevo - Solo Kotlin",
1085
- "severity": "ERROR",
1086
- "platform": "android",
1087
- "sourceSkill": "android-guidelines",
1088
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
1089
- "confidence": "HIGH",
1090
- "locked": true,
1091
- "evaluationMode": "DECLARATIVE",
1092
- "origin": "core"
1093
- },
1094
986
  {
1095
987
  "id": "skills.android.guideline.android.junit5-framework-de-testing-preferido-sobre-junit4",
1096
988
  "description": "JUnit5 - Framework de testing (preferido sobre JUnit4)",
@@ -1379,42 +1271,6 @@
1379
1271
  "evaluationMode": "DECLARATIVE",
1380
1272
  "origin": "core"
1381
1273
  },
1382
- {
1383
- "id": "skills.android.guideline.android.navigation-androidx-navigation-navigation-compose",
1384
- "description": "Navigation - androidx.navigation:navigation-compose",
1385
- "severity": "WARN",
1386
- "platform": "android",
1387
- "sourceSkill": "android-guidelines",
1388
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
1389
- "confidence": "MEDIUM",
1390
- "locked": true,
1391
- "evaluationMode": "DECLARATIVE",
1392
- "origin": "core"
1393
- },
1394
- {
1395
- "id": "skills.android.guideline.android.navigation-component-jetpack-navigation-para-compose",
1396
- "description": "Navigation Component - Jetpack Navigation para Compose",
1397
- "severity": "WARN",
1398
- "platform": "android",
1399
- "sourceSkill": "android-guidelines",
1400
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
1401
- "confidence": "MEDIUM",
1402
- "locked": true,
1403
- "evaluationMode": "DECLARATIVE",
1404
- "origin": "core"
1405
- },
1406
- {
1407
- "id": "skills.android.guideline.android.navigation-compose-androidx-navigation-navigation-compose",
1408
- "description": "Navigation Compose - androidx.navigation:navigation-compose",
1409
- "severity": "WARN",
1410
- "platform": "android",
1411
- "sourceSkill": "android-guidelines",
1412
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
1413
- "confidence": "MEDIUM",
1414
- "locked": true,
1415
- "evaluationMode": "DECLARATIVE",
1416
- "origin": "core"
1417
- },
1418
1274
  {
1419
1275
  "id": "skills.android.guideline.android.network-security-config-certificate-pinning",
1420
1276
  "description": "Network Security Config - Certificate pinning",
@@ -1427,30 +1283,6 @@
1427
1283
  "evaluationMode": "DECLARATIVE",
1428
1284
  "origin": "core"
1429
1285
  },
1430
- {
1431
- "id": "skills.android.guideline.android.no-java-en-co-digo-nuevo-kotlin-para-todo",
1432
- "description": "NO Java en código nuevo - Kotlin para todo",
1433
- "severity": "WARN",
1434
- "platform": "android",
1435
- "sourceSkill": "android-guidelines",
1436
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
1437
- "confidence": "MEDIUM",
1438
- "locked": true,
1439
- "evaluationMode": "DECLARATIVE",
1440
- "origin": "core"
1441
- },
1442
- {
1443
- "id": "skills.android.guideline.android.no-logs-en-produccio-n-if-buildconfig-debug-timber-d",
1444
- "description": "NO logs en producción - if (BuildConfig.DEBUG) Timber.d()",
1445
- "severity": "WARN",
1446
- "platform": "android",
1447
- "sourceSkill": "android-guidelines",
1448
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
1449
- "confidence": "MEDIUM",
1450
- "locked": true,
1451
- "evaluationMode": "DECLARATIVE",
1452
- "origin": "core"
1453
- },
1454
1286
  {
1455
1287
  "id": "skills.android.guideline.android.no-poner-comentarios-en-el-co-digo-nombres-autodescriptivos",
1456
1288
  "description": "No poner comentarios en el código - Nombres autodescriptivos",
@@ -1463,30 +1295,6 @@
1463
1295
  "evaluationMode": "DECLARATIVE",
1464
1296
  "origin": "core"
1465
1297
  },
1466
- {
1467
- "id": "skills.android.guideline.android.no-singleton-usar-inyeccio-n-de-dependencias-hilt-dagger",
1468
- "description": "No Singleton - Usar Inyección de Dependencias (Hilt/Dagger)",
1469
- "severity": "WARN",
1470
- "platform": "android",
1471
- "sourceSkill": "android-guidelines",
1472
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
1473
- "confidence": "MEDIUM",
1474
- "locked": true,
1475
- "evaluationMode": "DECLARATIVE",
1476
- "origin": "core"
1477
- },
1478
- {
1479
- "id": "skills.android.guideline.android.null-safety-no-force-unwrap-usar-let-requirenotnull",
1480
- "description": "Null safety - NO !! (force unwrap), usar ?, ?:, let, requireNotNull",
1481
- "severity": "WARN",
1482
- "platform": "android",
1483
- "sourceSkill": "android-guidelines",
1484
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
1485
- "confidence": "MEDIUM",
1486
- "locked": true,
1487
- "evaluationMode": "DECLARATIVE",
1488
- "origin": "core"
1489
- },
1490
1298
  {
1491
1299
  "id": "skills.android.guideline.android.numberformat-nu-meros-monedas-localizados",
1492
1300
  "description": "NumberFormat - Números, monedas localizados",
@@ -1535,18 +1343,6 @@
1535
1343
  "evaluationMode": "DECLARATIVE",
1536
1344
  "origin": "core"
1537
1345
  },
1538
- {
1539
- "id": "skills.android.guideline.android.paging-androidx-paging-paging-compose",
1540
- "description": "Paging - androidx.paging:paging-compose",
1541
- "severity": "WARN",
1542
- "platform": "android",
1543
- "sourceSkill": "android-guidelines",
1544
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
1545
- "confidence": "MEDIUM",
1546
- "locked": true,
1547
- "evaluationMode": "DECLARATIVE",
1548
- "origin": "core"
1549
- },
1550
1346
  {
1551
1347
  "id": "skills.android.guideline.android.placeholders-mientras-carga",
1552
1348
  "description": "Placeholders - Mientras carga",
@@ -1799,18 +1595,6 @@
1799
1595
  "evaluationMode": "DECLARATIVE",
1800
1596
  "origin": "core"
1801
1597
  },
1802
- {
1803
- "id": "skills.android.guideline.android.rxjava-en-nuevo-co-digo-usar-flow",
1804
- "description": "RxJava en nuevo código - Usar Flow",
1805
- "severity": "ERROR",
1806
- "platform": "android",
1807
- "sourceSkill": "android-guidelines",
1808
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
1809
- "confidence": "HIGH",
1810
- "locked": true,
1811
- "evaluationMode": "DECLARATIVE",
1812
- "origin": "core"
1813
- },
1814
1598
  {
1815
1599
  "id": "skills.android.guideline.android.safetynet-play-integrity-verificar-integridad-del-dispositivo",
1816
1600
  "description": "SafetyNet/Play Integrity - Verificar integridad del dispositivo",
@@ -1883,18 +1667,6 @@
1883
1667
  "evaluationMode": "DECLARATIVE",
1884
1668
  "origin": "core"
1885
1669
  },
1886
- {
1887
- "id": "skills.android.guideline.android.semantics-en-compose-para-accesibilidad",
1888
- "description": "semantics - En Compose para accesibilidad",
1889
- "severity": "WARN",
1890
- "platform": "android",
1891
- "sourceSkill": "android-guidelines",
1892
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
1893
- "confidence": "MEDIUM",
1894
- "locked": true,
1895
- "evaluationMode": "DECLARATIVE",
1896
- "origin": "core"
1897
- },
1898
1670
  {
1899
1671
  "id": "skills.android.guideline.android.shared-kernel-tipos-mi-nimos-compartidos-entre-features",
1900
1672
  "description": "Shared Kernel - Tipos mínimos compartidos entre features",
@@ -1955,30 +1727,6 @@
1955
1727
  "evaluationMode": "DECLARATIVE",
1956
1728
  "origin": "core"
1957
1729
  },
1958
- {
1959
- "id": "skills.android.guideline.android.singleton-solo-para-recursos-globales-db-api-client",
1960
- "description": "@Singleton - Solo para recursos globales (DB, API client)",
1961
- "severity": "WARN",
1962
- "platform": "android",
1963
- "sourceSkill": "android-guidelines",
1964
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
1965
- "confidence": "MEDIUM",
1966
- "locked": true,
1967
- "evaluationMode": "DECLARATIVE",
1968
- "origin": "core"
1969
- },
1970
- {
1971
- "id": "skills.android.guideline.android.singletons-everywhere-usar-hilt-di",
1972
- "description": "Singletons everywhere - Usar Hilt DI",
1973
- "severity": "ERROR",
1974
- "platform": "android",
1975
- "sourceSkill": "android-guidelines",
1976
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
1977
- "confidence": "HIGH",
1978
- "locked": true,
1979
- "evaluationMode": "DECLARATIVE",
1980
- "origin": "core"
1981
- },
1982
1730
  {
1983
1731
  "id": "skills.android.guideline.android.skip-recomposition-para-metros-inmutables-o-estables",
1984
1732
  "description": "Skip recomposition - Parámetros inmutables o estables",
@@ -2015,18 +1763,6 @@
2015
1763
  "evaluationMode": "DECLARATIVE",
2016
1764
  "origin": "core"
2017
1765
  },
2018
- {
2019
- "id": "skills.android.guideline.android.state-hoisting-elevar-estado-en-compose",
2020
- "description": "State hoisting - Elevar estado en Compose",
2021
- "severity": "WARN",
2022
- "platform": "android",
2023
- "sourceSkill": "android-guidelines",
2024
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
2025
- "confidence": "MEDIUM",
2026
- "locked": true,
2027
- "evaluationMode": "DECLARATIVE",
2028
- "origin": "core"
2029
- },
2030
1766
  {
2031
1767
  "id": "skills.android.guideline.android.stateflow-estado-mutable-observable",
2032
1768
  "description": "StateFlow - Estado mutable observable",
@@ -2255,18 +1991,6 @@
2255
1991
  "evaluationMode": "DECLARATIVE",
2256
1992
  "origin": "core"
2257
1993
  },
2258
- {
2259
- "id": "skills.android.guideline.android.try-catch-manejo-de-errores-en-coroutines",
2260
- "description": "try-catch - Manejo de errores en coroutines",
2261
- "severity": "WARN",
2262
- "platform": "android",
2263
- "sourceSkill": "android-guidelines",
2264
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
2265
- "confidence": "MEDIUM",
2266
- "locked": true,
2267
- "evaluationMode": "DECLARATIVE",
2268
- "origin": "core"
2269
- },
2270
1994
  {
2271
1995
  "id": "skills.android.guideline.android.turbine-testing-de-flows",
2272
1996
  "description": "Turbine - Testing de Flows",
@@ -2399,18 +2123,6 @@
2399
2123
  "evaluationMode": "DECLARATIVE",
2400
2124
  "origin": "core"
2401
2125
  },
2402
- {
2403
- "id": "skills.android.guideline.android.withcontext-cambiar-dispatcher",
2404
- "description": "withContext - Cambiar dispatcher",
2405
- "severity": "WARN",
2406
- "platform": "android",
2407
- "sourceSkill": "android-guidelines",
2408
- "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
2409
- "confidence": "MEDIUM",
2410
- "locked": true,
2411
- "evaluationMode": "DECLARATIVE",
2412
- "origin": "core"
2413
- },
2414
2126
  {
2415
2127
  "id": "skills.android.guideline.android.workmanager-androidx-work-work-runtime-ktx",
2416
2128
  "description": "WorkManager - androidx.work:work-runtime-ktx",
@@ -2436,15 +2148,41 @@
2436
2148
  "origin": "core"
2437
2149
  },
2438
2150
  {
2439
- "id": "skills.android.guideline.android.xml-layouts-usar-jetpack-compose",
2440
- "description": "XML layouts - Usar Jetpack Compose",
2151
+ "id": "skills.android.hardcoded-strings-usar-strings-xml",
2152
+ "description": "Disallow hardcoded strings in Android production code.",
2441
2153
  "severity": "ERROR",
2442
2154
  "platform": "android",
2155
+ "confidence": "HIGH",
2156
+ "stage": "PRE_PUSH",
2157
+ "locked": true,
2443
2158
  "sourceSkill": "android-guidelines",
2444
2159
  "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
2160
+ "evaluationMode": "AUTO",
2161
+ "origin": "core"
2162
+ },
2163
+ {
2164
+ "id": "skills.android.no-console-log",
2165
+ "description": "Disallow logs in Android production code.",
2166
+ "severity": "ERROR",
2167
+ "platform": "android",
2445
2168
  "confidence": "HIGH",
2169
+ "stage": "PRE_PUSH",
2446
2170
  "locked": true,
2447
- "evaluationMode": "DECLARATIVE",
2171
+ "sourceSkill": "android-guidelines",
2172
+ "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
2173
+ "evaluationMode": "AUTO",
2174
+ "origin": "core"
2175
+ },
2176
+ {
2177
+ "id": "skills.android.no-force-unwrap",
2178
+ "description": "Null safety - NO !! (force unwrap), usar ?, ?:, let, requireNotNull",
2179
+ "severity": "WARN",
2180
+ "platform": "android",
2181
+ "sourceSkill": "android-guidelines",
2182
+ "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
2183
+ "confidence": "MEDIUM",
2184
+ "locked": true,
2185
+ "evaluationMode": "AUTO",
2448
2186
  "origin": "core"
2449
2187
  },
2450
2188
  {
@@ -2460,6 +2198,18 @@
2460
2198
  "evaluationMode": "AUTO",
2461
2199
  "origin": "core"
2462
2200
  },
2201
+ {
2202
+ "id": "skills.android.no-java-new-code",
2203
+ "description": "NO Java en código nuevo - Kotlin para todo",
2204
+ "severity": "WARN",
2205
+ "platform": "android",
2206
+ "sourceSkill": "android-guidelines",
2207
+ "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
2208
+ "confidence": "MEDIUM",
2209
+ "locked": true,
2210
+ "evaluationMode": "AUTO",
2211
+ "origin": "core"
2212
+ },
2463
2213
  {
2464
2214
  "id": "skills.android.no-runblocking",
2465
2215
  "description": "Disallow runBlocking in Android production code.",
@@ -2473,6 +2223,19 @@
2473
2223
  "evaluationMode": "AUTO",
2474
2224
  "origin": "core"
2475
2225
  },
2226
+ {
2227
+ "id": "skills.android.no-singleton-usar-inyeccio-n-de-dependencias-hilt-dagger",
2228
+ "description": "Disallow singleton object patterns in Android production code; use Hilt or Dagger DI.",
2229
+ "severity": "ERROR",
2230
+ "platform": "android",
2231
+ "confidence": "HIGH",
2232
+ "stage": "PRE_PUSH",
2233
+ "locked": true,
2234
+ "sourceSkill": "android-guidelines",
2235
+ "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
2236
+ "evaluationMode": "AUTO",
2237
+ "origin": "core"
2238
+ },
2476
2239
  {
2477
2240
  "id": "skills.android.no-thread-sleep",
2478
2241
  "description": "Disallow Thread.sleep in Android production code.",
@@ -2485,6 +2248,42 @@
2485
2248
  "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
2486
2249
  "evaluationMode": "AUTO",
2487
2250
  "origin": "core"
2251
+ },
2252
+ {
2253
+ "id": "skills.android.rxjava-new-code",
2254
+ "description": "RxJava en nuevo código - Usar Flow",
2255
+ "severity": "ERROR",
2256
+ "platform": "android",
2257
+ "sourceSkill": "android-guidelines",
2258
+ "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
2259
+ "confidence": "HIGH",
2260
+ "locked": true,
2261
+ "evaluationMode": "AUTO",
2262
+ "origin": "core"
2263
+ },
2264
+ {
2265
+ "id": "skills.android.try-catch-manejo-de-errores-en-coroutines",
2266
+ "description": "try-catch - Manejo de errores en coroutines",
2267
+ "severity": "WARN",
2268
+ "platform": "android",
2269
+ "sourceSkill": "android-guidelines",
2270
+ "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
2271
+ "confidence": "MEDIUM",
2272
+ "locked": true,
2273
+ "evaluationMode": "AUTO",
2274
+ "origin": "core"
2275
+ },
2276
+ {
2277
+ "id": "skills.android.withcontext-change-dispatcher",
2278
+ "description": "withContext - Cambiar dispatcher",
2279
+ "severity": "WARN",
2280
+ "platform": "android",
2281
+ "sourceSkill": "android-guidelines",
2282
+ "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
2283
+ "confidence": "MEDIUM",
2284
+ "locked": true,
2285
+ "evaluationMode": "AUTO",
2286
+ "origin": "core"
2488
2287
  }
2489
2288
  ]
2490
2289
  },
@@ -2492,7 +2291,7 @@
2492
2291
  "name": "backend-guidelines",
2493
2292
  "version": "1.0.0",
2494
2293
  "source": "file:vendor/skills/backend-enterprise-rules/SKILL.md",
2495
- "hash": "0a5b328dd65c74972e3506f55942c2bf5f812e55c25e49d54aef3b68e61ba3a9",
2294
+ "hash": "d3ffeb9b55f803ca804e69697fdedb24f5109485759e035995772358313e9e28",
2496
2295
  "rules": [
2497
2296
  {
2498
2297
  "id": "skills.backend.avoid-explicit-any",
@@ -2556,18 +2355,6 @@
2556
2355
  "evaluationMode": "DECLARATIVE",
2557
2356
  "origin": "core"
2558
2357
  },
2559
- {
2560
- "id": "skills.backend.guideline.backend.anemic-domain-models-entidades-solo-con-getters-setters",
2561
- "description": "Anemic domain models - Entidades solo con getters/setters",
2562
- "severity": "ERROR",
2563
- "platform": "backend",
2564
- "sourceSkill": "backend-guidelines",
2565
- "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
2566
- "confidence": "HIGH",
2567
- "locked": true,
2568
- "evaluationMode": "DECLARATIVE",
2569
- "origin": "core"
2570
- },
2571
2358
  {
2572
2359
  "id": "skills.backend.guideline.backend.async-processing-no-bloquear-request-principal",
2573
2360
  "description": "Async processing - No bloquear request principal",
@@ -2664,18 +2451,6 @@
2664
2451
  "evaluationMode": "DECLARATIVE",
2665
2452
  "origin": "core"
2666
2453
  },
2667
- {
2668
- "id": "skills.backend.guideline.backend.clean-por-feature-presentation-application-domain-infrastructure-domai",
2669
- "description": "Clean por feature - presentation → application → domain, infrastructure → domain",
2670
- "severity": "WARN",
2671
- "platform": "backend",
2672
- "sourceSkill": "backend-guidelines",
2673
- "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
2674
- "confidence": "MEDIUM",
2675
- "locked": true,
2676
- "evaluationMode": "DECLARATIVE",
2677
- "origin": "core"
2678
- },
2679
2454
  {
2680
2455
  "id": "skills.backend.guideline.backend.compression-gzip-para-responses-grandes",
2681
2456
  "description": "Compression - gzip para responses grandes",
@@ -2748,18 +2523,6 @@
2748
2523
  "evaluationMode": "DECLARATIVE",
2749
2524
  "origin": "core"
2750
2525
  },
2751
- {
2752
- "id": "skills.backend.guideline.backend.controllers-delgados-solo-routing-y-validacio-n-lo-gica-en-servicios",
2753
- "description": "Controllers delgados - Solo routing y validación, lógica en servicios",
2754
- "severity": "WARN",
2755
- "platform": "backend",
2756
- "sourceSkill": "backend-guidelines",
2757
- "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
2758
- "confidence": "MEDIUM",
2759
- "locked": true,
2760
- "evaluationMode": "DECLARATIVE",
2761
- "origin": "core"
2762
- },
2763
2526
  {
2764
2527
  "id": "skills.backend.guideline.backend.correlation-ids-para-tracing-distribuido",
2765
2528
  "description": "Correlation IDs - Para tracing distribuido",
@@ -3072,18 +2835,6 @@
3072
2835
  "evaluationMode": "DECLARATIVE",
3073
2836
  "origin": "core"
3074
2837
  },
3075
- {
3076
- "id": "skills.backend.guideline.backend.feature-first-cada-feature-es-un-bounded-context-aislado",
3077
- "description": "Feature-first - Cada feature es un Bounded Context aislado",
3078
- "severity": "WARN",
3079
- "platform": "backend",
3080
- "sourceSkill": "backend-guidelines",
3081
- "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
3082
- "confidence": "MEDIUM",
3083
- "locked": true,
3084
- "evaluationMode": "DECLARATIVE",
3085
- "origin": "core"
3086
- },
3087
2838
  {
3088
2839
  "id": "skills.backend.guideline.backend.guards-en-todas-las-rutas-protegidas-useguards-jwtauthguard",
3089
2840
  "description": "Guards en todas las rutas protegidas - @UseGuards(JwtAuthGuard)",
@@ -3360,18 +3111,6 @@
3360
3111
  "evaluationMode": "DECLARATIVE",
3361
3112
  "origin": "core"
3362
3113
  },
3363
- {
3364
- "id": "skills.backend.guideline.backend.lo-gica-en-controllers-mover-a-servicios-use-cases",
3365
- "description": "Lógica en controllers - Mover a servicios/use cases",
3366
- "severity": "ERROR",
3367
- "platform": "backend",
3368
- "sourceSkill": "backend-guidelines",
3369
- "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
3370
- "confidence": "HIGH",
3371
- "locked": true,
3372
- "evaluationMode": "DECLARATIVE",
3373
- "origin": "core"
3374
- },
3375
3114
  {
3376
3115
  "id": "skills.backend.guideline.backend.log-levels-error-warn-info-debug",
3377
3116
  "description": "Log levels - ERROR, WARN, INFO, DEBUG",
@@ -3504,18 +3243,6 @@
3504
3243
  "evaluationMode": "DECLARATIVE",
3505
3244
  "origin": "core"
3506
3245
  },
3507
- {
3508
- "id": "skills.backend.guideline.backend.mo-dulos-cohesivos-un-mo-dulo-por-feature-ordersmodule-usersmodule-etc",
3509
- "description": "Módulos cohesivos - Un módulo por feature (OrdersModule, UsersModule, etc.)",
3510
- "severity": "WARN",
3511
- "platform": "backend",
3512
- "sourceSkill": "backend-guidelines",
3513
- "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
3514
- "confidence": "MEDIUM",
3515
- "locked": true,
3516
- "evaluationMode": "DECLARATIVE",
3517
- "origin": "core"
3518
- },
3519
3246
  {
3520
3247
  "id": "skills.backend.guideline.backend.mocks-en-produccio-n-solo-datos-reales",
3521
3248
  "description": "Mocks en producción - Solo datos reales",
@@ -3912,18 +3639,6 @@
3912
3639
  "evaluationMode": "DECLARATIVE",
3913
3640
  "origin": "core"
3914
3641
  },
3915
- {
3916
- "id": "skills.backend.guideline.backend.shared-kernel-tipos-mi-nimos-compartidos",
3917
- "description": "Shared Kernel - Tipos mínimos compartidos",
3918
- "severity": "WARN",
3919
- "platform": "backend",
3920
- "sourceSkill": "backend-guidelines",
3921
- "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
3922
- "confidence": "MEDIUM",
3923
- "locked": true,
3924
- "evaluationMode": "DECLARATIVE",
3925
- "origin": "core"
3926
- },
3927
3642
  {
3928
3643
  "id": "skills.backend.guideline.backend.siempre-responder-en-espan-ol",
3929
3644
  "description": "Siempre responder en español",
@@ -4044,18 +3759,6 @@
4044
3759
  "evaluationMode": "DECLARATIVE",
4045
3760
  "origin": "core"
4046
3761
  },
4047
- {
4048
- "id": "skills.backend.guideline.backend.try-catch-silenciosos-siempre-loggear-o-propagar-ast-common-error-empt",
4049
- "description": "try-catch silenciosos - Siempre loggear o propagar (AST: common.error.emptycatch)",
4050
- "severity": "ERROR",
4051
- "platform": "backend",
4052
- "sourceSkill": "backend-guidelines",
4053
- "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
4054
- "confidence": "HIGH",
4055
- "locked": true,
4056
- "evaluationMode": "DECLARATIVE",
4057
- "origin": "core"
4058
- },
4059
3762
  {
4060
3763
  "id": "skills.backend.guideline.backend.un-archivo-por-use-case-createorderusecase-updateorderstatususecase",
4061
3764
  "description": "Un archivo por use case - CreateOrderUseCase, UpdateOrderStatusUseCase",
@@ -4221,7 +3924,7 @@
4221
3924
  "name": "frontend-guidelines",
4222
3925
  "version": "1.0.0",
4223
3926
  "source": "file:vendor/skills/frontend-enterprise-rules/SKILL.md",
4224
- "hash": "1914407604d820e3c2d43c593c54cd30e2af162067cbb14b354291e5b3da62f0",
3927
+ "hash": "905e00e8b613c31ba3654a691516230ea60f2fd2f86d097704d6bc08563f5d7d",
4225
3928
  "rules": [
4226
3929
  {
4227
3930
  "id": "skills.frontend.avoid-explicit-any",
@@ -4345,18 +4048,6 @@
4345
4048
  "evaluationMode": "DECLARATIVE",
4346
4049
  "origin": "core"
4347
4050
  },
4348
- {
4349
- "id": "skills.frontend.guideline.frontend.clean-por-feature-presentation-application-domain-infrastructure-domai",
4350
- "description": "Clean por feature - presentation → application → domain, infrastructure → domain",
4351
- "severity": "WARN",
4352
- "platform": "frontend",
4353
- "sourceSkill": "frontend-guidelines",
4354
- "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
4355
- "confidence": "MEDIUM",
4356
- "locked": true,
4357
- "evaluationMode": "DECLARATIVE",
4358
- "origin": "core"
4359
- },
4360
4051
  {
4361
4052
  "id": "skills.frontend.guideline.frontend.cn-helper-combinar-clases-con-clsx-o-tailwind-merge",
4362
4053
  "description": "cn() helper - Combinar clases con clsx o tailwind-merge",
@@ -4597,18 +4288,6 @@
4597
4288
  "evaluationMode": "DECLARATIVE",
4598
4289
  "origin": "core"
4599
4290
  },
4600
- {
4601
- "id": "skills.frontend.guideline.frontend.feature-first-cada-feature-es-un-bounded-context-aislado",
4602
- "description": "Feature-first - Cada feature es un Bounded Context aislado",
4603
- "severity": "WARN",
4604
- "platform": "frontend",
4605
- "sourceSkill": "frontend-guidelines",
4606
- "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
4607
- "confidence": "MEDIUM",
4608
- "locked": true,
4609
- "evaluationMode": "DECLARATIVE",
4610
- "origin": "core"
4611
- },
4612
4291
  {
4613
4292
  "id": "skills.frontend.guideline.frontend.focus-management-focus-visible-trap-focus-en-modales",
4614
4293
  "description": "Focus management - Focus visible, trap focus en modales",
@@ -4825,30 +4504,6 @@
4825
4504
  "evaluationMode": "DECLARATIVE",
4826
4505
  "origin": "core"
4827
4506
  },
4828
- {
4829
- "id": "skills.frontend.guideline.frontend.no-any-usar-unknown-si-el-tipo-es-desconocido-luego-type-guard",
4830
- "description": "No any - Usar unknown si el tipo es desconocido, luego type guard",
4831
- "severity": "WARN",
4832
- "platform": "frontend",
4833
- "sourceSkill": "frontend-guidelines",
4834
- "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
4835
- "confidence": "MEDIUM",
4836
- "locked": true,
4837
- "evaluationMode": "DECLARATIVE",
4838
- "origin": "core"
4839
- },
4840
- {
4841
- "id": "skills.frontend.guideline.frontend.no-catch-vaci-os-prohibido-silenciar-errores-ast-common-error-emptycat",
4842
- "description": "No catch vacíos - Prohibido silenciar errores (AST: common.error.emptycatch)",
4843
- "severity": "WARN",
4844
- "platform": "frontend",
4845
- "sourceSkill": "frontend-guidelines",
4846
- "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
4847
- "confidence": "MEDIUM",
4848
- "locked": true,
4849
- "evaluationMode": "DECLARATIVE",
4850
- "origin": "core"
4851
- },
4852
4507
  {
4853
4508
  "id": "skills.frontend.guideline.frontend.no-class-components-solo-functional-components",
4854
4509
  "description": "NO class components - Solo functional components",
@@ -4909,18 +4564,6 @@
4909
4564
  "evaluationMode": "DECLARATIVE",
4910
4565
  "origin": "core"
4911
4566
  },
4912
- {
4913
- "id": "skills.frontend.guideline.frontend.preferir-early-returns-y-destructuring-evitar-if-else-anidados-callbac",
4914
- "description": "Preferir early returns y destructuring - Evitar if/else anidados, callback hell o prop drilling excesivo",
4915
- "severity": "ERROR",
4916
- "platform": "frontend",
4917
- "sourceSkill": "frontend-guidelines",
4918
- "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
4919
- "confidence": "MEDIUM",
4920
- "locked": true,
4921
- "evaluationMode": "DECLARATIVE",
4922
- "origin": "core"
4923
- },
4924
4567
  {
4925
4568
  "id": "skills.frontend.guideline.frontend.preferir-spies-frente-a-stubs-o-mocks-si-es-posible-usar-jest-spyon-pa",
4926
4569
  "description": "Preferir spies frente a stubs o mocks si es posible - Usar jest.spyOn para métodos reales",
@@ -5113,18 +4756,6 @@
5113
4756
  "evaluationMode": "DECLARATIVE",
5114
4757
  "origin": "core"
5115
4758
  },
5116
- {
5117
- "id": "skills.frontend.guideline.frontend.shared-kernel-tipos-mi-nimos-compartidos-entre-features",
5118
- "description": "Shared Kernel - Tipos mínimos compartidos entre features",
5119
- "severity": "WARN",
5120
- "platform": "frontend",
5121
- "sourceSkill": "frontend-guidelines",
5122
- "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
5123
- "confidence": "MEDIUM",
5124
- "locked": true,
5125
- "evaluationMode": "DECLARATIVE",
5126
- "origin": "core"
5127
- },
5128
4759
  {
5129
4760
  "id": "skills.frontend.guideline.frontend.siempre-responder-en-espan-ol",
5130
4761
  "description": "Siempre responder en español",
@@ -5752,7 +5383,7 @@
5752
5383
  "name": "ios-guidelines",
5753
5384
  "version": "1.0.0",
5754
5385
  "source": "file:vendor/skills/ios-enterprise-rules/SKILL.md",
5755
- "hash": "f2b2d9cee6e4b36785916bc98bd355b42afa9915e71938c02fd20d29d9b5c811",
5386
+ "hash": "630af341b60b0303348b072f594200e52dc29ca1df3687fc1ed077ec9635b8d4",
5756
5387
  "rules": [
5757
5388
  {
5758
5389
  "id": "skills.ios.guideline.ios.accessibility-identifiers-para-localizar-elementos",
@@ -6992,8 +6623,8 @@
6992
6623
  "origin": "core"
6993
6624
  },
6994
6625
  {
6995
- "id": "skills.ios.guideline.ios.massive-view-controllers-viewcontrollers-300-li-neas",
6996
- "description": "Massive View Controllers - ViewControllers >300 líneas",
6626
+ "id": "skills.ios.guideline.ios.massive-view-controllers-viewcontrollers-que-mezclan-presentacio-n-nav",
6627
+ "description": "Massive View Controllers - ViewControllers que mezclan presentación, navegación, estado, acceso a datos o coordinación de infraestructura",
6997
6628
  "severity": "ERROR",
6998
6629
  "platform": "ios",
6999
6630
  "sourceSkill": "ios-guidelines",
@@ -8347,18 +7978,6 @@
8347
7978
  "evaluationMode": "DECLARATIVE",
8348
7979
  "origin": "core"
8349
7980
  },
8350
- {
8351
- "id": "skills.ios.guideline.ios.xctest-solo-para-proyectos-legacy-o-ui-tests",
8352
- "description": "XCTest - Solo para proyectos legacy o UI tests",
8353
- "severity": "WARN",
8354
- "platform": "ios",
8355
- "sourceSkill": "ios-guidelines",
8356
- "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
8357
- "confidence": "MEDIUM",
8358
- "locked": true,
8359
- "evaluationMode": "DECLARATIVE",
8360
- "origin": "core"
8361
- },
8362
7981
  {
8363
7982
  "id": "skills.ios.guideline.ios.xcuitest-ui-testing-nativo",
8364
7983
  "description": "XCUITest - UI testing nativo",
@@ -8623,6 +8242,18 @@
8623
8242
  "locked": true,
8624
8243
  "evaluationMode": "AUTO",
8625
8244
  "origin": "core"
8245
+ },
8246
+ {
8247
+ "id": "skills.ios.prefer-swift-testing",
8248
+ "description": "XCTest - Solo para proyectos legacy o UI tests",
8249
+ "severity": "WARN",
8250
+ "platform": "ios",
8251
+ "sourceSkill": "ios-guidelines",
8252
+ "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
8253
+ "confidence": "MEDIUM",
8254
+ "locked": true,
8255
+ "evaluationMode": "AUTO",
8256
+ "origin": "core"
8626
8257
  }
8627
8258
  ]
8628
8259
  },
@@ -8630,7 +8261,7 @@
8630
8261
  "name": "ios-swift-testing-guidelines",
8631
8262
  "version": "1.0.0",
8632
8263
  "source": "file:vendor/skills/swift-testing-expert/SKILL.md",
8633
- "hash": "f75a4765dafca2b9d6d174ccd13ad601ab8b5b0ebe70719073831b563ca9dfda",
8264
+ "hash": "48249808a0c025bb5fb16ac2e5cec4d44ac4b0634273509ee2165ad60d0fe81f",
8634
8265
  "rules": [
8635
8266
  {
8636
8267
  "id": "skills.ios.guideline.ios-swift-testing.keep-tests-isolated-expressive-and-aligned-with-swift-concurrency",
@@ -8644,18 +8275,6 @@
8644
8275
  "evaluationMode": "DECLARATIVE",
8645
8276
  "origin": "core"
8646
8277
  },
8647
- {
8648
- "id": "skills.ios.guideline.ios-swift-testing.new-xctest-only-unit-tests-when-swift-testing-is-available",
8649
- "description": "New XCTest-only unit tests when Swift Testing is available.",
8650
- "severity": "ERROR",
8651
- "platform": "ios",
8652
- "sourceSkill": "ios-swift-testing-guidelines",
8653
- "sourcePath": "vendor/skills/swift-testing-expert/SKILL.md",
8654
- "confidence": "HIGH",
8655
- "locked": true,
8656
- "evaluationMode": "DECLARATIVE",
8657
- "origin": "core"
8658
- },
8659
8278
  {
8660
8279
  "id": "skills.ios.guideline.ios-swift-testing.preserve-repository-specific-test-contracts-such-as-makesut-and-memory",
8661
8280
  "description": "Preserve repository-specific test contracts such as makeSUT() and memory-leak tracking helpers when they are mandatory.",