{
  "version": "1.0",
  "compilerVersion": "1.0.0",
  "generatedAt": "2026-05-25T06:14:06.228Z",
  "bundles": [
    {
      "name": "android-guidelines",
      "version": "1.0.0",
      "source": "file:vendor/skills/android-enterprise-rules/SKILL.md",
      "hash": "1551c5bf13b6cf980f67a75aadfabc7ab6ccdddb1ba389ba34a99ed3c064bb49",
      "rules": [
        {
          "id": "skills.android.guideline.android.aaa-pattern-arrange-act-assert",
          "description": "AAA pattern - Arrange, Act, Assert",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.accessibility-semantics-contentdescription",
          "description": "Accessibility - semantics, contentDescription",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.actu-a-como-un-arquitecto-de-soluciones-y-software-designer",
          "description": "Actúa como un Arquitecto de Soluciones y Software Designer",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.adaptive-layouts-responsive-design-windowsizeclass",
          "description": "Adaptive layouts - Responsive design (WindowSizeClass)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.analizar-estructura-existente-mo-dulos-interfaces-dependencias-gradle",
          "description": "Analizar estructura existente - Módulos, interfaces, dependencias, Gradle",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.analytics-firebase-analytics-o-custom",
          "description": "Analytics - Firebase Analytics o custom",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.android-profiler-cpu-memory-network-profiling",
          "description": "Android Profiler - CPU, Memory, Network profiling",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.androidentrypoint-activity-fragment-viewmodel",
          "description": "@AndroidEntryPoint - Activity, Fragment, ViewModel",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.androidtest-instrumented-tests-device-emulator",
          "description": "androidTest/ - Instrumented tests (Device/Emulator)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.app-module-composicio-n-final",
          "description": "App module - Composición final",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.app-startup-androidx-startup-para-lazy-init",
          "description": "App startup - androidx.startup para lazy init",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.arguments-pasar-datos-entre-pantallas",
          "description": "Arguments - Pasar datos entre pantallas",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.async-await-paralelismo",
          "description": "async/await - Paralelismo",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.asynctask-deprecated-usar-coroutines",
          "description": "AsyncTask - Deprecated, usar Coroutines",
          "severity": "ERROR",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.baseline-profiles-optimizacio-n-de-startup",
          "description": "Baseline Profiles - Optimización de startup",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.binds-para-implementaciones-de-interfaces-ma-s-eficiente",
          "description": "@Binds - Para implementaciones de interfaces (más eficiente)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.biometric-auth-biometricprompt-api",
          "description": "Biometric auth - BiometricPrompt API",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.bottom-navigation-material-3-navigationbar",
          "description": "Bottom navigation - Material 3 NavigationBar",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.build-types-debug-release-staging",
          "description": "Build types - debug, release, staging",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.build-variants-combinacio-n-de-build-type-flavor",
          "description": "Build variants - Combinación de build type + flavor",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.buildconfig-constantes-en-tiempo-de-compilacio-n",
          "description": "BuildConfig - Constantes en tiempo de compilación",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.buildsrc-para-lo-gica-compartida-de-build",
          "description": "buildSrc - Para lógica compartida de build",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.caching-memory-disk-cache",
          "description": "Caching - Memory + Disk cache",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.certificate-pinning-ssl-pinning-para-seguridad",
          "description": "Certificate pinning - SSL pinning para seguridad",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.clean-por-feature-presentation-application-domain-data-domain",
          "description": "Clean por feature - presentation → application → domain, data → domain",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.clear-dependencies-feature-core-no-feature-feature",
          "description": "Clear dependencies - Feature → Core, NO Feature → Feature",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.coil-async-image-loading-recomendado-para-compose",
          "description": "Coil - Async image loading (recomendado para Compose)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.collect-terminal-operator-para-consumir-flow",
          "description": "collect - Terminal operator para consumir Flow",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.collectasstate-en-compose-para-observar-flow",
          "description": "collectAsState - En Compose para observar Flow",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.color-contrast-wcag-aa-mi-nimo",
          "description": "Color contrast - WCAG AA mínimo",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.compartir-dtos-con-backend-typescript-kotlin-codegen-quicktype-openapi",
          "description": "Compartir DTOs con backend - TypeScript → Kotlin codegen (quicktype, OpenAPI)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.composable-functions-composable-para-ui",
          "description": "Composable functions - @Composable para UI",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.compose-100-no-xml-layouts-en-co-digo-nuevo",
          "description": "Compose 100% - NO XML layouts en código nuevo",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.compose-bom-androidx-compose-compose-bom",
          "description": "Compose BOM - androidx.compose:compose-bom",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.compose-ui-test-testing-de-composables",
          "description": "Compose UI Test - Testing de Composables",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.comprobar-que-compile-antes-de-sugerir-gradle-build-sin-errores",
          "description": "Comprobar que compile ANTES de sugerir - Gradle build sin errores",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.contentdescription-para-ima-genes-y-botones",
          "description": "contentDescription - Para imágenes y botones",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.context-leaks-no-referencias-a-activity-en-objetos-long-lived",
          "description": "Context leaks - No referencias a Activity en objetos long-lived",
          "severity": "ERROR",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.core-modules-core-network-core-database-core-ui",
          "description": "Core modules - :core:network, :core:database, :core:ui",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.coroutines-async-await-no-callbacks",
          "description": "Coroutines - async/await, NO callbacks",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.coroutines-test-runtest-testdispatcher",
          "description": "Coroutines Test - runTest, TestDispatcher",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.coverage-80-objetivo-95-en-lo-gica-cri-tica",
          "description": "Coverage >80% - Objetivo 95% en lógica crítica",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.crashlytics-firebase-para-crash-reporting",
          "description": "Crashlytics - Firebase para crash reporting",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.dao-data-access-objects-con-suspend-functions",
          "description": "@Dao - Data Access Objects con suspend functions",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.dark-theme-soportar-desde-di-a-1-issystemindarktheme",
          "description": "Dark theme - Soportar desde día 1 (isSystemInDarkTheme())",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.data-classes-para-dtos-y-modelos",
          "description": "Data classes - Para DTOs y modelos",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.database-database-class-abstracta",
          "description": "@Database - Database class abstracta",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.datastore-androidx-datastore-datastore-preferences-reemplazo-de-shared",
          "description": "DataStore - androidx.datastore:datastore-preferences (reemplazo de SharedPreferences)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.dateformat-fechas-localizadas",
          "description": "DateFormat - Fechas localizadas",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.ddd-entidades-value-objects-repositorios-eventos-de-dominio",
          "description": "DDD - entidades, value objects, repositorios, eventos de dominio",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.deep-links-soporte-para-urls",
          "description": "Deep links - Soporte para URLs",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.dependency-management-versiones-consistentes",
          "description": "Dependency management - Versiones consistentes",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.derivedstateof-ca-lculos-caros-solo-cuando-cambia-input",
          "description": "derivedStateOf - Cálculos caros solo cuando cambia input",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.derivedstateof-ca-lculos-derivados-de-state",
          "description": "derivedStateOf - Cálculos derivados de state",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.detekt-static-analysis-para-kotlin",
          "description": "Detekt - Static analysis para Kotlin",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.dispatchers-main-ui-io-network-disk-default-cpu",
          "description": "Dispatchers - Main (UI), IO (network/disk), Default (CPU)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.disposableeffect-cleanup-cuando-composable-sale-de-composicio-n",
          "description": "DisposableEffect - Cleanup cuando Composable sale de composición",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.dynamic-features-para-app-bundles-grandes-opcional",
          "description": "Dynamic features - Para app bundles grandes (opcional)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.early-returns-guard-clauses-evitar-if-else-anidados",
          "description": "Early returns - Guard clauses, evitar if/else anidados",
          "severity": "ERROR",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.en-produccio-n-ni-un-mocks-ni-un-spies-todo-real-de-apis-y-persistenci",
          "description": "En producción ni un mocks ni un spies - Todo real de APIs y persistencia (Room, SharedPreferences)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.encryptedsharedpreferences-para-datos-sensibles",
          "description": "EncryptedSharedPreferences - Para datos sensibles",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.entity-tablas",
          "description": "@Entity - Tablas",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.environment-variables-para-ci-cd",
          "description": "Environment variables - Para CI/CD",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "stage": "CI",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.error-handling-custom-sealed-class-result-t",
          "description": "Error handling - Custom sealed class Result<T>",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.error-handling-fallback-images",
          "description": "Error handling - Fallback images",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.espresso-ui-testing-si-usas-fragments",
          "description": "Espresso - UI testing (si usas Fragments)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.extension-functions-extender-funcionalidad-sin-herencia",
          "description": "Extension functions - Extender funcionalidad sin herencia",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.feature-first-cada-feature-es-un-bounded-context-aislado",
          "description": "Feature-first - Cada feature es un Bounded Context, aislado",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.feature-modules-feature-orders-feature-users",
          "description": "Feature modules - :feature:orders, :feature:users",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.findviewbyid-view-binding-o-compose",
          "description": "findViewById - View Binding o Compose",
          "severity": "ERROR",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.firebase-app-distribution-beta-testing",
          "description": "Firebase App Distribution - Beta testing",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.flow-builders-flow-emit-flowof-asflow",
          "description": "Flow builders - flow { emit() }, flowOf(), asFlow()",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.flow-streams-de-datos-reactivos",
          "description": "Flow - Streams de datos reactivos",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.flow-t-queries-observables",
          "description": "Flow<T> - Queries observables",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.force-unwrapping-usar-let",
          "description": "Force unwrapping (!!) - Usar ?, ?:, let",
          "severity": "ERROR",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.github-actions-gitlab-ci-pipelines",
          "description": "GitHub Actions / GitLab CI - Pipelines",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "stage": "CI",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.given-when-then-bdd-style",
          "description": "Given-When-Then - BDD style",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.glide-alternativa-ma-s-maduro",
          "description": "Glide - Alternativa, más maduro",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.god-activities-single-activity-composables",
          "description": "God Activities - Single Activity + Composables",
          "severity": "ERROR",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.gradle-properties-configuracio-n-de-build",
          "description": "gradle.properties - Configuración de build",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.gradle-tasks-gradlew-assembledebug-test",
          "description": "Gradle tasks - ./gradlew assembleDebug, test",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.hardcoded-strings-usar-strings-xml",
          "description": "Hardcoded strings - Usar strings.xml",
          "severity": "ERROR",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.hilt-com-google-dagger-hilt-android",
          "description": "Hilt - com.google.dagger:hilt-android",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.hilt-di-framework-no-manual-factories",
          "description": "Hilt - DI framework (NO manual factories)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.hiltandroidapp-application-class",
          "description": "@HiltAndroidApp - Application class",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.immutable-collections-kotlinx-collections-immutable",
          "description": "Immutable collections - kotlinx.collections.immutable",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.immutable-state-data-class-copy",
          "description": "Immutable state - data class + copy()",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.inject-constructor-constructor-injection",
          "description": "@Inject constructor - Constructor injection",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.interceptors-logging-auth-tokens-error-handling",
          "description": "Interceptors - Logging, auth tokens, error handling",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.java-en-co-digo-nuevo-solo-kotlin",
          "description": "Java en código nuevo - Solo Kotlin",
          "severity": "ERROR",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.junit5-framework-de-testing-preferido-sobre-junit4",
          "description": "JUnit5 - Framework de testing (preferido sobre JUnit4)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.keystore-claves-criptogra-ficas",
          "description": "Keystore - Claves criptográficas",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.kotlin-1-9-usar-features-modernas-del-lenguaje",
          "description": "Kotlin 1.9+ - Usar features modernas del lenguaje",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.kotlin-dsl-build-gradle-kts-preferido-sobre-groovy",
          "description": "Kotlin DSL - build.gradle.kts (preferido sobre Groovy)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.launchedeffect-keys-controlar-cua-ndo-se-relanza-effect",
          "description": "LaunchedEffect keys - Controlar cuándo se relanza effect",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.launchedeffect-side-effects-con-lifecycle",
          "description": "LaunchedEffect - Side effects con lifecycle",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.lazycolumn-lazyrow-virtualizacio-n-de-listas",
          "description": "LazyColumn/LazyRow - Virtualización de listas",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.leakcanary-deteccio-n-de-memory-leaks",
          "description": "LeakCanary - Detección de memory leaks",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.lifecyclescope-scope-de-activity-fragment",
          "description": "lifecycleScope - Scope de Activity/Fragment",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.lint-gradlew-lint-warnings-errores",
          "description": "Lint - ./gradlew lint (warnings = errores)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.local-properties-api-keys-no-subir-a-git",
          "description": "local.properties - API keys (NO subir a git)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.log-levels-e-error-w-warn-i-info-d-debug",
          "description": "Log levels - e (error), w (warn), i (info), d (debug)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.mapper-convertir-entre-dtos-y-domain-models",
          "description": "Mapper - Convertir entre DTOs y domain models",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.material-3-components-button-card-textfield-etc",
          "description": "Material 3 components - Button, Card, TextField, etc.",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.migrations-versionado-de-schema",
          "description": "Migrations - Versionado de schema",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.mockk-mocking-library-para-kotlin",
          "description": "MockK - Mocking library para Kotlin",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.modifier-orden-importa-padding-antes-que-background",
          "description": "Modifier - Orden importa (padding antes que background)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.module-installin-provide-dependencies",
          "description": "@Module + @InstallIn - Provide dependencies",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.moshi-gson-json-serialization-moshi-preferido",
          "description": "Moshi/Gson - JSON serialization (Moshi preferido)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.motion-animaciones-consistentes-con-material-guidelines",
          "description": "Motion - Animaciones consistentes con Material guidelines",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.mvvm-model-view-viewmodel",
          "description": "MVVM - Model-View-ViewModel",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.navcontroller-controla-navegacio-n",
          "description": "NavController - Controla navegación",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.navegacio-n-event-driven-cuando-el-modelo-crezca-event-bus-router",
          "description": "Navegación event-driven cuando el modelo crezca (event bus + router)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.navhost-container-de-navegacio-n",
          "description": "NavHost - Container de navegación",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.navigation-androidx-navigation-navigation-compose",
          "description": "Navigation - androidx.navigation:navigation-compose",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.navigation-component-jetpack-navigation-para-compose",
          "description": "Navigation Component - Jetpack Navigation para Compose",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.navigation-compose-androidx-navigation-navigation-compose",
          "description": "Navigation Compose - androidx.navigation:navigation-compose",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.network-security-config-certificate-pinning",
          "description": "Network Security Config - Certificate pinning",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.no-java-en-co-digo-nuevo-kotlin-para-todo",
          "description": "NO Java en código nuevo - Kotlin para todo",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.no-logs-en-produccio-n-if-buildconfig-debug-timber-d",
          "description": "NO logs en producción - if (BuildConfig.DEBUG) Timber.d()",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.no-poner-comentarios-en-el-co-digo-nombres-autodescriptivos",
          "description": "No poner comentarios en el código - Nombres autodescriptivos",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.no-singleton-usar-inyeccio-n-de-dependencias-hilt-dagger",
          "description": "No Singleton - Usar Inyección de Dependencias (Hilt/Dagger)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.null-safety-no-force-unwrap-usar-let-requirenotnull",
          "description": "Null safety - NO !! (force unwrap), usar ?, ?:, let, requireNotNull",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.numberformat-nu-meros-monedas-localizados",
          "description": "NumberFormat - Números, monedas localizados",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.okhttp-http-client-con-interceptors",
          "description": "OkHttp - HTTP client con interceptors",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.operators-map-filter-combine-flatmaplatest-catch",
          "description": "Operators - map, filter, combine, flatMapLatest, catch",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.paging-3-paginacio-n-de-datos-grandes",
          "description": "Paging 3 - Paginación de datos grandes",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.paging-androidx-paging-paging-compose",
          "description": "Paging - androidx.paging:paging-compose",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.placeholders-mientras-carga",
          "description": "Placeholders - Mientras carga",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.play-console-production-deployment",
          "description": "Play Console - Production deployment",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.plurals-values-plurals-xml",
          "description": "Plurals - values/plurals.xml",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.preview-preview-para-ver-ui-sin-correr-app",
          "description": "Preview - @Preview para ver UI sin correr app",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.product-flavors-para-variantes-de-app",
          "description": "Product flavors - Para variantes de app",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.proguard-r8-ofuscacio-n-de-co-digo-en-release",
          "description": "ProGuard/R8 - Ofuscación de código en release",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.provides-para-interfaces-o-third-party",
          "description": "@Provides - Para interfaces o third-party",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.recomposition-composables-deben-ser-idempotentes",
          "description": "Recomposition - Composables deben ser idempotentes",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.remember-evitar-recrear-objetos",
          "description": "remember - Evitar recrear objetos",
          "severity": "ERROR",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.remember-para-mantener-estado-entre-recomposiciones",
          "description": "remember - Para mantener estado entre recomposiciones",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.remembersaveable-sobrevive-process-death",
          "description": "rememberSaveable - Sobrevive process death",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.repository-pattern-abstraer-acceso-a-datos",
          "description": "Repository pattern - Abstraer acceso a datos",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.repository-pattern-ordersrep",
          "description": "Repository pattern - OrdersRep",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.retrofit-rest-client",
          "description": "Retrofit - REST client",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.retry-logic-exponential-backoff",
          "description": "Retry logic - Exponential backoff",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.robolectric-unit-tests-con-android-framework",
          "description": "Robolectric - Unit tests con Android framework",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.room-androidx-room-room-ktx",
          "description": "Room - androidx.room:room-ktx",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.room-sqlite-wrapper-type-safe",
          "description": "Room - SQLite wrapper type-safe",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.root-detection-prevenir-uso-en-dispositivos-rooted",
          "description": "Root detection - Prevenir uso en dispositivos rooted",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.routes-strings-para-destinos",
          "description": "Routes - Strings para destinos",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.rtl-support-start-end-en-lugar-de-left-right",
          "description": "RTL support - start/end en lugar de left/right",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.rxjava-en-nuevo-co-digo-usar-flow",
          "description": "RxJava en nuevo código - Usar Flow",
          "severity": "ERROR",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.safetynet-play-integrity-verificar-integridad-del-dispositivo",
          "description": "SafetyNet/Play Integrity - Verificar integridad del dispositivo",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.scope-functions-let-run-apply-also-with-apropiadamente",
          "description": "Scope functions - let, run, apply, also, with apropiadamente",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.sealed-classes-para-estados-y-resultados-success-error-loading",
          "description": "Sealed classes - Para estados y resultados (Success, Error, Loading)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.secrets-gradle-plugin-para-api-keys-seguras",
          "description": "secrets-gradle-plugin - Para API keys seguras",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.seguir-clean-architecture-domain-data-presentation",
          "description": "Seguir Clean Architecture - Domain → Data → Presentation",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.seguir-siempre-flujo-bdd-tdd-feature-files-specs-junit5-espresso-imple",
          "description": "Seguir siempre flujo BDD->TDD - Feature files → Specs (JUnit5, Espresso) → Implementación",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.semantics-en-compose-para-accesibilidad",
          "description": "semantics - En Compose para accesibilidad",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.shared-kernel-tipos-mi-nimos-compartidos-entre-features",
          "description": "Shared Kernel - Tipos mínimos compartidos entre features",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.sharedflow-hot-stream-puede-no-tener-valor-para-eventos",
          "description": "SharedFlow - Hot stream, puede no tener valor, para eventos",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.siempre-responder-en-espan-ol",
          "description": "Siempre responder en español",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.single-activity-mu-ltiples-composables-fragments-no-activities",
          "description": "Single Activity - Múltiples Composables/Fragments, no Activities",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.single-source-of-truth-viewmodel-es-la-fuente",
          "description": "Single source of truth - ViewModel es la fuente",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.singleton-solo-para-recursos-globales-db-api-client",
          "description": "@Singleton - Solo para recursos globales (DB, API client)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.singletons-everywhere-usar-hilt-di",
          "description": "Singletons everywhere - Usar Hilt DI",
          "severity": "ERROR",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.skip-recomposition-para-metros-inmutables-o-estables",
          "description": "Skip recomposition - Parámetros inmutables o estables",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.stability-composables-estables-recomponen-menos",
          "description": "Stability - Composables estables recomponen menos",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.state-hoisting-elevar-estado-al-nivel-apropiado",
          "description": "State hoisting - Elevar estado al nivel apropiado",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.state-hoisting-elevar-estado-en-compose",
          "description": "State hoisting - Elevar estado en Compose",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.stateflow-estado-mutable-observable",
          "description": "StateFlow - Estado mutable observable",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.stateflow-hot-stream-siempre-tiene-valor-para-estado",
          "description": "StateFlow - Hot stream, siempre tiene valor, para estado",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.stateflow-sharedflow-para-exponer-estado-del-viewmodel",
          "description": "StateFlow/SharedFlow - Para exponer estado del ViewModel",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.statein-convertir-cold-flow-a-hot-stateflow",
          "description": "stateIn - Convertir cold Flow a hot StateFlow",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.string-formatting-1-s-2-d-para-argumentos",
          "description": "String formatting - %1$s, %2$d para argumentos",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.strings-xml-por-idioma-values-es-values-en",
          "description": "strings.xml - Por idioma (values-es, values-en)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.supervisorscope-errores-no-cancelan-otros-jobs",
          "description": "supervisorScope - Errores no cancelan otros jobs",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.suspend-functions-en-api-service",
          "description": "suspend functions - En API service",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.suspend-functions-para-operaciones-async",
          "description": "suspend functions - Para operaciones async",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.talkback-screen-reader-de-android",
          "description": "TalkBack - Screen reader de Android",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.test-doubles-fakes-mocks-para-repositories",
          "description": "Test doubles - Fakes > Mocks para repositories",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.test-unit-tests-jvm",
          "description": "test/ - Unit tests (JVM)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.text-scaling-soportar-font-scaling-del-sistema",
          "description": "Text scaling - Soportar font scaling del sistema",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.theme-color-scheme-typography-shapes",
          "description": "Theme - Color scheme, typography, shapes",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.timber-logging-library",
          "description": "Timber - Logging library",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.touch-targets-mi-nimo-48dp",
          "description": "Touch targets - Mínimo 48dp",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.transaction-para-operaciones-multi-query",
          "description": "@Transaction - Para operaciones multi-query",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.transformations-resize-crop-blur",
          "description": "Transformations - Resize, crop, blur",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.truth-assertions-ma-s-legibles",
          "description": "Truth - Assertions más legibles",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.try-catch-manejo-de-errores-en-coroutines",
          "description": "try-catch - Manejo de errores en coroutines",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.turbine-testing-de-flows",
          "description": "Turbine - Testing de Flows",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.typeconverter-para-tipos-custom-date-list-etc",
          "description": "@TypeConverter - Para tipos custom (Date, List, etc.)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.uistate-sealed-class-loading-success-error-states",
          "description": "UiState sealed class - Loading, Success, Error states",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.use-cases-lo-gica-de-negocio-encapsulada",
          "description": "Use Cases - Lógica de negocio encapsulada",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.verificar-que-no-viole-solid-srp-ocp-lsp-isp-dip",
          "description": "Verificar que NO viole SOLID (SRP, OCP, LSP, ISP, DIP)",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.version-catalogs-libs-versions-toml-para-dependencias",
          "description": "Version catalogs - libs.versions.toml para dependencias",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.viewmodel-androidx-lifecycle-lifecycle-viewmodel-ktx",
          "description": "ViewModel - androidx.lifecycle:lifecycle-viewmodel-ktx",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.viewmodel-androidx-lifecycle-viewmodel",
          "description": "ViewModel - androidx.lifecycle.ViewModel",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.viewmodel-sobrevive-configuration-changes",
          "description": "ViewModel - Sobrevive configuration changes",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.viewmodelscope-scope-de-viewmodel-cancelado-automa-ticamente",
          "description": "viewModelScope - Scope de ViewModel, cancelado automáticamente",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.viewmodelscoped-para-dependencias-de-viewmodel",
          "description": "@ViewModelScoped - Para dependencias de ViewModel",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.withcontext-cambiar-dispatcher",
          "description": "withContext - Cambiar dispatcher",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.workmanager-androidx-work-work-runtime-ktx",
          "description": "WorkManager - androidx.work:work-runtime-ktx",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.workmanager-background-tasks",
          "description": "WorkManager - Background tasks",
          "severity": "WARN",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.guideline.android.xml-layouts-usar-jetpack-compose",
          "description": "XML layouts - Usar Jetpack Compose",
          "severity": "ERROR",
          "platform": "android",
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.android.no-globalscope",
          "description": "Disallow GlobalScope in Android production code.",
          "severity": "ERROR",
          "platform": "android",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.android.no-runblocking",
          "description": "Disallow runBlocking in Android production code.",
          "severity": "WARN",
          "platform": "android",
          "confidence": "MEDIUM",
          "stage": "PRE_COMMIT",
          "locked": true,
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.android.no-thread-sleep",
          "description": "Disallow Thread.sleep in Android production code.",
          "severity": "ERROR",
          "platform": "android",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "android-guidelines",
          "sourcePath": "vendor/skills/android-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        }
      ]
    },
    {
      "name": "backend-guidelines",
      "version": "1.0.0",
      "source": "file:vendor/skills/backend-enterprise-rules/SKILL.md",
      "hash": "83b74fb23950df5c32ef69f2a3af5dd78d29cf932904479a2548411a0f62a9db",
      "rules": [
        {
          "id": "skills.backend.avoid-explicit-any",
          "description": "Avoid explicit any in backend runtime code.",
          "severity": "WARN",
          "platform": "backend",
          "confidence": "MEDIUM",
          "stage": "PRE_COMMIT",
          "locked": true,
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.backend.enforce-clean-architecture",
          "description": "Enforce clean architecture dependency direction in backend code.",
          "severity": "ERROR",
          "platform": "backend",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.aaa-pattern-arrange-act-assert",
          "description": "AAA pattern - Arrange, Act, Assert",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.actu-a-como-un-arquitecto-de-soluciones-y-software-designer",
          "description": "Actúa como un Arquitecto de Soluciones y Software Designer",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.analizar-estructura-existente-mo-dulos-servicios-repositorios-dtos",
          "description": "Analizar estructura existente - Módulos, servicios, repositorios, DTOs",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.anemic-domain-models-entidades-solo-con-getters-setters",
          "description": "Anemic domain models - Entidades solo con getters/setters",
          "severity": "ERROR",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.async-processing-no-bloquear-request-principal",
          "description": "Async processing - No bloquear request principal",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.audit-logging-registrar-cambios-cri-ticos",
          "description": "Audit logging - Registrar cambios críticos",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.cache-aside-pattern-leer-de-cache-si-no-existe-leer-de-bd-y-cachear",
          "description": "Cache-aside pattern - Leer de caché, si no existe, leer de BD y cachear",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.cache-manager-nestjs-cache-manager",
          "description": "Cache-Manager - @nestjs/cache-manager",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.caching-redis-para-datos-frecuentes",
          "description": "Caching - Redis para datos frecuentes",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.callback-hell-usar-async-await",
          "description": "Callback hell - Usar async/await",
          "severity": "ERROR",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.class-transformer-transform-exclude-expose",
          "description": "class-transformer - @Transform(), @Exclude(), @Expose()",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.class-validator-decorators-isstring-isemail-min-max",
          "description": "class-validator decorators - @IsString(), @IsEmail(), @Min(), @Max()",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.clean-por-feature-presentation-application-domain-infrastructure-domai",
          "description": "Clean por feature - presentation → application → domain, infrastructure → domain",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.compression-gzip-para-responses-grandes",
          "description": "Compression - gzip para responses grandes",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.comprobar-que-compile-antes-de-sugerir-npm-run-build-sin-errores",
          "description": "Comprobar que compile ANTES de sugerir - npm run build sin errores",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.config-por-entorno-env-development-env-production",
          "description": "Config por entorno - .env.development, .env.production",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.connection-pooling-configurar-maxconnections",
          "description": "Connection pooling - Configurar maxconnections",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.connection-pooling-reutilizar-conexiones-de-bd",
          "description": "Connection pooling - Reutilizar conexiones de BD",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.contexto-en-logs-userid-requestid-traceid",
          "description": "Contexto en logs - userId, requestId, traceId",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.controllers-delgados-solo-routing-y-validacio-n-lo-gica-en-servicios",
          "description": "Controllers delgados - Solo routing y validación, lógica en servicios",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.correlation-ids-para-tracing-distribuido",
          "description": "Correlation IDs - Para tracing distribuido",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.cors-configurado-solo-ori-genes-permitidos",
          "description": "CORS configurado - Solo orígenes permitidos",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.cors-configurar-ori-genes-permitidos",
          "description": "CORS - Configurar orígenes permitidos",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.coverage-95-en-lo-gica-cri-tica",
          "description": "Coverage >95% - En lógica crítica",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.custom-exceptions-validationexception-notfoundexception-unauthorizedex",
          "description": "Custom exceptions - ValidationException, NotFoundException, UnauthorizedException",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.database-indexing-i-ndices-en-columnas-frecuentes-en-where-join",
          "description": "Database indexing - Índices en columnas frecuentes en WHERE/JOIN",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.ddd-entidades-value-objects-repositorios-eventos-de-dominio",
          "description": "DDD - entidades, value objects, repositorios, eventos de dominio",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.dependency-injection-injectable-inject-providers-array",
          "description": "Dependency Injection - @Injectable(), @Inject(), providers array",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.diagramas-c4-context-container-component-para-arquitectura",
          "description": "Diagramas C4 - Context, Container, Component para arquitectura",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.domain-events-ordercreatedevent-userregisteredevent",
          "description": "Domain events - OrderCreatedEvent, UserRegisteredEvent",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.dtos-en-boundaries-validacio-n-en-entrada-salida",
          "description": "DTOs en boundaries - Validación en entrada/salida",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.dtos-para-validacio-n-class-validator-class-transformer",
          "description": "DTOs para validación - class-validator + class-transformer",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.dtos-separados-createorderdto-updateorderdto-orderresponsedto",
          "description": "DTOs separados - CreateOrderDto, UpdateOrderDto, OrderResponseDto",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.e2e-tests-supertest-para-flujos-completos",
          "description": "E2E tests - Supertest para flujos completos",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.emitir-eventos-de-dominio-ordercreatedevent-ordercancelledevent",
          "description": "Emitir eventos de dominio - OrderCreatedEvent, OrderCancelledEvent",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.en-produccio-n-ni-un-mocks-ni-un-spies-todo-real-de-bbdd-supabase-post",
          "description": "En producción ni un mocks ni un spies - Todo real de BBDD (Supabase/PostgreSQL)",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.enums-para-valores-fijos-orderstatus-paymentmethod-incidenttype",
          "description": "Enums para valores fijos - OrderStatus, PaymentMethod, IncidentType",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.error-responses-consistentes-statuscode-message-timestamp-path",
          "description": "Error responses consistentes - { statusCode, message, timestamp, path }",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.estrategia-de-invalidacio-n-ttl-invalidacio-n-expli-cita",
          "description": "Estrategia de invalidación - TTL + invalidación explícita",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.event-bus-nestjs-event-emitter-o-custom",
          "description": "Event Bus - @nestjs/event-emitter o custom",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.event-driven-comunicacio-n-entre-features-por-eventos",
          "description": "Event-driven - Comunicación entre features por eventos",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.event-handlers-onevent-order-created",
          "description": "Event handlers - @OnEvent('order.created')",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.event-sourcing-para-auditori-a-auditlogs-table",
          "description": "Event sourcing para auditoría - auditlogs table",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.event-store-log-de-eventos-para-auditori-a",
          "description": "Event store - Log de eventos para auditoría",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.exception-filters-catch-para-manejo-global",
          "description": "Exception filters - @Catch() para manejo global",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.fast-tests-100ms-integracio-n-10ms-unitarios",
          "description": "Fast tests - <100ms integración, <10ms unitarios",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.feature-first-cada-feature-es-un-bounded-context-aislado",
          "description": "Feature-first - Cada feature es un Bounded Context aislado",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.guards-en-todas-las-rutas-protegidas-useguards-jwtauthguard",
          "description": "Guards en todas las rutas protegidas - @UseGuards(JwtAuthGuard)",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.guards-para-autenticacio-n-autorizacio-n-useguards-jwtauthguard",
          "description": "Guards para autenticación/autorización - @UseGuards(JwtAuthGuard)",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.hardcoded-values-config-en-variables-de-entorno",
          "description": "Hardcoded values - Config en variables de entorno",
          "severity": "ERROR",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.hateoas-opcional-links-en-responses-para-navegacio-n",
          "description": "HATEOAS (opcional) - Links en responses para navegación",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.health-checks-health-endpoint-liveness-readiness",
          "description": "Health checks - /health endpoint (liveness, readiness)",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.helmet-security-headers",
          "description": "Helmet - Security headers",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.http-status-codes-apropiados-200-201-400-401-403-404-500",
          "description": "HTTP status codes apropiados - 200, 201, 400, 401, 403, 404, 500",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.http-status-codes-sema-ntica-correcta",
          "description": "HTTP status codes - Semántica correcta",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.https-redirect-en-produccio-n",
          "description": "HTTPS redirect - En producción",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.i-ndices-apropiados-para-queries-frecuentes",
          "description": "Índices apropiados - Para queries frecuentes",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.i18n-en-error-messages-mensajes-traducibles",
          "description": "i18n en error messages - Mensajes traducibles",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.idempotencia-eventos-procesables-mu-ltiples-veces-sin-efectos-secundar",
          "description": "Idempotencia - Eventos procesables múltiples veces sin efectos secundarios",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.idempotencia-put-y-delete-idempotentes",
          "description": "Idempotencia - PUT y DELETE idempotentes",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.implementaciones-en-infrastructure-inyectar-dependencia-de-bd",
          "description": "Implementaciones en infrastructure/ - Inyectar dependencia de BD",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.input-validation-siempre-validar-con-dtos",
          "description": "Input validation - SIEMPRE validar con DTOs",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.integration-tests-controllers-services-repositorios-reales",
          "description": "Integration tests - Controllers + Services + Repositorios reales",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.interceptors-para-logging-transformacio-n-no-en-cada-endpoint",
          "description": "Interceptors para logging/transformación - No en cada endpoint",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.interfaces-en-domain-iordersrepository-iusersrepository",
          "description": "Interfaces en domain/ - IOrdersRepository, IUsersRepository",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.inyectar-repositorios-necesarios-di-en-constructor",
          "description": "Inyectar repositorios necesarios - DI en constructor",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.jest-framework-de-testing",
          "description": "Jest - Framework de testing",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.jsdoc-mi-nimo-solo-para-apis-pu-blicas-o-lo-gica-compleja",
          "description": "JSDoc mínimo - Solo para APIs públicas o lógica compleja",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.jwt-strategy-nestjs-jwt-nestjs-passport",
          "description": "JWT strategy - @nestjs/jwt + @nestjs/passport",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.key-naming-convention-module-entity-id-orders-order-123",
          "description": "Key naming convention - \"module:entity:id\" (orders:order:123)",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.lo-gica-en-controllers-mover-a-servicios-use-cases",
          "description": "Lógica en controllers - Mover a servicios/use cases",
          "severity": "ERROR",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.log-levels-error-warn-info-debug",
          "description": "Log levels - ERROR, WARN, INFO, DEBUG",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.loggear-errores-con-contexto-completo",
          "description": "Loggear errores - Con contexto completo",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.magic-numbers-usar-constantes-con-nombres-descriptivos",
          "description": "Magic numbers - Usar constantes con nombres descriptivos",
          "severity": "ERROR",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.makesut-pattern-system-under-test-factory",
          "description": "makeSUT pattern - System Under Test factory",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.manejo-de-errores-lanzar-excepciones-especi-ficas",
          "description": "Manejo de errores - Lanzar excepciones específicas",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.me-todos-expresivos-findactiveordersbyuserid-mejor-que-find",
          "description": "Métodos expresivos - findActiveOrdersByUserId() mejor que find()",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.me-tricas-de-negocio-kpis-analytics",
          "description": "Métricas de negocio - KPIs, analytics",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.me-tricas-prometheus-prom-client-para-me-tricas",
          "description": "Métricas Prometheus - prom-client para métricas",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.measure-twice-cut-once-planificar-arquitectura-dependencias-y-flujo-de",
          "description": "\"Measure twice, cut once\" - Planificar arquitectura, dependencias y flujo de datos antes de implementar. Analizar impacto en BD, caché y performance.",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.middleware-para-cross-cutting-concerns-logging-cors-etc",
          "description": "Middleware para cross-cutting concerns - Logging, CORS, etc.",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.migrations-versionadas-nunca-modificar-migraciones-pasadas",
          "description": "Migrations versionadas - Nunca modificar migraciones pasadas",
          "severity": "ERROR",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.mo-dulos-cohesivos-un-mo-dulo-por-feature-ordersmodule-usersmodule-etc",
          "description": "Módulos cohesivos - Un módulo por feature (OrdersModule, UsersModule, etc.)",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.mocks-en-produccio-n-solo-datos-reales",
          "description": "Mocks en producción - Solo datos reales",
          "severity": "ERROR",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.n-1-query-prevention-eager-loading-cuando-sea-apropiado",
          "description": "N+1 query prevention - Eager loading cuando sea apropiado",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.naming-conventions-plurales-para-colecciones-orders-users",
          "description": "Naming conventions - Plurales para colecciones (/orders, /users)",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.nested-validation-validatenested-type",
          "description": "Nested validation - @ValidateNested(), @Type()",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.nestjs-config-configmodule-para-variables-de-entorno",
          "description": "@nestjs/config - ConfigModule para variables de entorno",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.no-cachear-datos-sensibles-o-cifrar-antes-de-cachear",
          "description": "No cachear datos sensibles - O cifrar antes de cachear",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.no-defaults-en-produccio-n-fallar-si-falta-config-cri-tica",
          "description": "No defaults en producción - Fallar si falta config crítica",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.no-exponer-stack-traces-solo-en-desarrollo",
          "description": "No exponer stack traces - Solo en desarrollo",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.no-lo-gica-de-negocio-en-repositorios-solo-crud-y-queries",
          "description": "No lógica de negocio en repositorios - Solo CRUD y queries",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.no-loggear-datos-sensibles-passwords-tokens-pii",
          "description": "No loggear datos sensibles - Passwords, tokens, PII",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.no-poner-comentarios-en-el-co-digo-nombres-autodescriptivos",
          "description": "No poner comentarios en el código - Nombres autodescriptivos",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.no-singleton-en-su-lugar-inyeccio-n-de-dependencias-nestjs-di-containe",
          "description": "No Singleton, en su lugar Inyección de Dependencias - NestJS DI container",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.pagination-siempre-para-listas-offset-limit-o-cursor-based",
          "description": "Pagination - SIEMPRE para listas (offset/limit o cursor-based)",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.password-hashing-bcrypt-con-salt-rounds-10",
          "description": "Password hashing - bcrypt con salt rounds >= 10",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.pipes-para-validacio-n-global-validationpipe-en-main-ts",
          "description": "Pipes para validación global - ValidationPipe en main.ts",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.preferir-early-returns-guard-clauses-evitar-if-else-anidados",
          "description": "Preferir early returns - Guard clauses, evitar if/else anidados",
          "severity": "ERROR",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.queries-parametrizadas-prevenir-sql-injection",
          "description": "Queries parametrizadas - Prevenir SQL injection",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.query-optimization-explain-analyze",
          "description": "Query optimization - EXPLAIN ANALYZE",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.query-optimization-explain-analyze-para-queries-lentas",
          "description": "Query optimization - EXPLAIN ANALYZE para queries lentas",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.rate-limiting-nestjs-throttler-para-prevenir-brute-force",
          "description": "Rate limiting - @nestjs/throttler para prevenir brute force",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.rate-limiting-throttler-para-prevenir-abuse",
          "description": "Rate limiting - Throttler para prevenir abuse",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.readme-por-mo-dulo-explicar-responsabilidad-del-mo-dulo",
          "description": "README por módulo - Explicar responsabilidad del módulo",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.redis-para-cache-distribuido",
          "description": "Redis - Para caché distribuido",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.refresh-tokens-no-solo-access-tokens",
          "description": "Refresh tokens - No solo access tokens",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.repositories-para-datos-abstraer-acceso-a-bd-con-interfaces",
          "description": "Repositories para datos - Abstraer acceso a BD con interfaces",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.repository-pattern-siempre-iordersrepository-ordersrepository",
          "description": "Repository pattern SIEMPRE - IOrdersRepository, OrdersRepository",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.restful-get-post-put-patch-delete-apropiados",
          "description": "RESTful - GET, POST, PUT, PATCH, DELETE apropiados",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.retornar-dtos-no-exponer-entidades-directamente",
          "description": "Retornar DTOs - No exponer entidades directamente",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.role-based-access-control-roles-admin-user",
          "description": "Role-based access control - @Roles('admin', 'user')",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.secrets-management-variables-de-entorno-nunca-en-co-digo",
          "description": "Secrets management - Variables de entorno, nunca en código",
          "severity": "ERROR",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.secrets-separados-aws-secrets-manager-hashicorp-vault",
          "description": "Secrets separados - AWS Secrets Manager, HashiCorp Vault",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.seguir-siempre-flujo-bdd-tdd-feature-files-specs-implementacio-n",
          "description": "Seguir siempre flujo BDD->TDD - Feature files → Specs → Implementación",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.services-para-lo-gica-de-negocio-orquestar-use-cases-y-repositorios",
          "description": "Services para lógica de negocio - Orquestar use cases y repositorios",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.shared-kernel-tipos-mi-nimos-compartidos",
          "description": "Shared Kernel - Tipos mínimos compartidos",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.siempre-responder-en-espan-ol",
          "description": "Siempre responder en español",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.soft-deletes-deletedat-en-lugar-de-delete-fi-sico",
          "description": "Soft deletes - deletedat en lugar de DELETE físico",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.soft-deletes-por-defecto-deletedat-column",
          "description": "Soft deletes por defecto - deletedat column",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.sql-injection-prevention-queries-parametrizadas",
          "description": "SQL injection prevention - Queries parametrizadas",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.supabase-client-supabase-supabase-js",
          "description": "Supabase client - @supabase/supabase-js",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.swagger-nestjs-swagger-decoradores-apiproperty",
          "description": "Swagger - @nestjs/swagger, decoradores @ApiProperty()",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.swagger-openapi-nestjs-swagger-para-documentacio-n",
          "description": "Swagger/OpenAPI - @nestjs/swagger para documentación",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.test-db-base-de-datos-separada-para-tests",
          "description": "Test DB - Base de datos separada para tests",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.transacciones-para-operaciones-cri-ticas",
          "description": "Transacciones - Para operaciones críticas",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.transacciones-para-operaciones-multi-tabla",
          "description": "Transacciones - Para operaciones multi-tabla",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.try-catch-silenciosos-siempre-loggear-o-propagar-ast-common-error-empt",
          "description": "try-catch silenciosos - Siempre loggear o propagar (AST: common.error.emptycatch)",
          "severity": "ERROR",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.un-archivo-por-use-case-createorderusecase-updateorderstatususecase",
          "description": "Un archivo por use case - CreateOrderUseCase, UpdateOrderStatusUseCase",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.unit-tests-servicios-use-cases-con-mocks",
          "description": "Unit tests - Servicios, use cases con mocks",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.use-cases-expli-citos-createorderusecase-updateorderstatususecase",
          "description": "Use Cases explícitos - CreateOrderUseCase, UpdateOrderStatusUseCase",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.validar-precondiciones-fail-fast",
          "description": "Validar precondiciones - Fail fast",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.validation-de-config-joi-o-class-validator-para-env",
          "description": "Validation de config - Joi o class-validator para .env",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.validationpipe-global-en-main-ts-con-whitelist-true",
          "description": "ValidationPipe global - En main.ts con whitelist: true",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.versionado-api-v1-api-v2",
          "description": "Versionado - /api/v1/, /api/v2/",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.winston-logger-estructurado-json-logs",
          "description": "Winston - Logger estructurado (JSON logs)",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.guideline.backend.xss-prevention-sanitizar-inputs",
          "description": "XSS prevention - Sanitizar inputs",
          "severity": "WARN",
          "platform": "backend",
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.backend.no-console-log",
          "description": "Disallow console.log in backend runtime code.",
          "severity": "ERROR",
          "platform": "backend",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.backend.no-empty-catch",
          "description": "Disallow empty catch blocks in backend runtime code.",
          "severity": "CRITICAL",
          "platform": "backend",
          "confidence": "HIGH",
          "locked": true,
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.backend.no-god-classes",
          "description": "Disallow god classes in backend code.",
          "severity": "ERROR",
          "platform": "backend",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.backend.no-solid-violations",
          "description": "Disallow backend SOLID violations in production code.",
          "severity": "ERROR",
          "platform": "backend",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "backend-guidelines",
          "sourcePath": "vendor/skills/backend-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        }
      ]
    },
    {
      "name": "frontend-guidelines",
      "version": "1.0.0",
      "source": "file:vendor/skills/frontend-enterprise-rules/SKILL.md",
      "hash": "1914407604d820e3c2d43c593c54cd30e2af162067cbb14b354291e5b3da62f0",
      "rules": [
        {
          "id": "skills.frontend.avoid-explicit-any",
          "description": "Avoid explicit any in frontend runtime code.",
          "severity": "WARN",
          "platform": "frontend",
          "confidence": "MEDIUM",
          "stage": "PRE_COMMIT",
          "locked": true,
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.frontend.enforce-clean-architecture",
          "description": "Enforce clean architecture dependency direction in frontend code.",
          "severity": "ERROR",
          "platform": "frontend",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.accesibilidad-aria-semantic-html-primero-aria-cuando-sea-necesario",
          "description": "Accesibilidad (ARIA) - Semantic HTML primero, ARIA cuando sea necesario",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.actu-a-como-un-arquitecto-de-soluciones-y-software-designer",
          "description": "Actúa como un Arquitecto de Soluciones y Software Designer",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.analizar-archivos-existentes-revisar-componentes-servicios-tipos-actua",
          "description": "Analizar archivos existentes - Revisar componentes, servicios, tipos actuales",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.analizar-estructura-existente-archivos-componentes-servicios-dependenc",
          "description": "Analizar estructura existente - Archivos, componentes, servicios, dependencias, estado global (Zustand/Redux)",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.api-client-abstrai-do-axios-fetch-en-capa-de-infraestructura",
          "description": "API client abstraído - axios/fetch en capa de infraestructura",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.aplicar-reglas-de-testing-makesut-system-under-test-helpers-separados-",
          "description": "Aplicar reglas de testing - makeSUT (System Under Test), helpers separados en archivos de test",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.app-router-usar-app-directory-no-pages-excepto-legacy",
          "description": "App Router - Usar app/ directory, no pages/ (excepto legacy)",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.aria-labels-aria-label-aria-describedby-cuando-sea-necesario",
          "description": "ARIA labels - aria-label, aria-describedby cuando sea necesario",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.clean-por-feature-presentation-application-domain-infrastructure-domai",
          "description": "Clean por feature - presentation → application → domain, infrastructure → domain",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.cn-helper-combinar-clases-con-clsx-o-tailwind-merge",
          "description": "cn() helper - Combinar clases con clsx o tailwind-merge",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.code-splitting-react-lazy-suspense-dynamic-imports",
          "description": "Code splitting - React.lazy + Suspense, dynamic imports",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.compatibilidad-con-componentes-actuales-mantener-consistencia-en-patro",
          "description": "Compatibilidad con componentes actuales - Mantener consistencia en patrones",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.comprobar-que-compile-y-pase-tests-antes-de-sugerir-typescript-strict-",
          "description": "Comprobar que compile y pase tests ANTES de sugerir - TypeScript strict, ESLint, verificar builds",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.contrast-ratio-wcag-aa-mi-nimo-4-5-1-texto-normal-3-1-texto-grande",
          "description": "Contrast ratio - WCAG AA mínimo (4.5:1 texto normal, 3:1 texto grande)",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.csp-headers-content-security-policy-en-next-js-config",
          "description": "CSP headers - Content Security Policy en Next.js config",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.css-modules-para-estilos-especi-ficos-de-componente-si-es-necesario",
          "description": "CSS Modules - Para estilos específicos de componente si es necesario",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.custom-hooks-para-lo-gica-reutilizable-extraer-lo-gica-compleja-a-hook",
          "description": "Custom hooks para lógica reutilizable - Extraer lógica compleja a hooks propios",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.data-fetching-en-server-components-fetch-con-cache-revalidate-async-co",
          "description": "Data fetching en Server Components - fetch con cache/revalidate, async components",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.ddd-entidades-value-objects-repositorios-eventos",
          "description": "DDD - entidades, value objects, repositorios, eventos",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.debounce-throttle-para-inputs-de-bu-squeda-scroll-handlers",
          "description": "Debounce/Throttle - Para inputs de búsqueda, scroll handlers",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.dynamic-imports-next-dynamic-para-code-splitting",
          "description": "Dynamic imports - next/dynamic para code splitting",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.e2e-con-playwright-user-flows-cri-ticos",
          "description": "E2E con Playwright - User flows críticos",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.en-produccio-n-ni-un-mocks-ni-un-spies-todo-real-de-apis-o-almacenamie",
          "description": "En producción ni un mocks ni un spies - Todo real de APIs o almacenamiento real que el proyecto necesite",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.error-handling-global-interceptors-para-401-500-etc",
          "description": "Error handling global - Interceptors para 401, 500, etc.",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.error-messages-claros-accionables-traducidos-i18n",
          "description": "Error messages - Claros, accionables, traducidos (i18n)",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.estado-local-global-eficiente-usestate-para-local-zustand-context-para",
          "description": "Estado local/global eficiente - useState para local, Zustand/Context para global",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.event-driven-navegacio-n-y-coordinacio-n-por-eventos-cuando-crezca-el-",
          "description": "Event-driven - Navegación y coordinación por eventos cuando crezca el dominio",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.evitar-prop-drilling-context-api-o-zustand-para-estado-compartido-prof",
          "description": "Evitar prop drilling - Context API o Zustand para estado compartido profundo",
          "severity": "ERROR",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.fallback-locale-ingle-s-como-fallback",
          "description": "Fallback locale - Inglés como fallback",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.feature-first-cada-feature-es-un-bounded-context-aislado",
          "description": "Feature-first - Cada feature es un Bounded Context aislado",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.focus-management-focus-visible-trap-focus-en-modales",
          "description": "Focus management - Focus visible, trap focus en modales",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.formateo-de-fechas-nu-meros-usar-intl-api-o-i18n-helpers",
          "description": "Formateo de fechas/números - Usar Intl API o i18n helpers",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.generics-cuando-sea-apropiado-componentes-y-hooks-reutilizables-type-s",
          "description": "Generics cuando sea apropiado - Componentes y hooks reutilizables type-safe",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.hooks-primero-usestate-useeffect-usecallback-usememo-custom-hooks",
          "description": "Hooks primero - useState, useEffect, useCallback, useMemo, custom hooks",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.https-siempre-redirect-automa-tico-en-produccio-n",
          "description": "HTTPS siempre - Redirect automático en producción",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.i18n-desde-di-a-1-archivos-de-traduccio-n-separados-locales",
          "description": "i18n desde día 1 - Archivos de traducción separados (locales/)",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.interfaces-para-props-definir-tipos-expli-citos-para-todos-los-compone",
          "description": "Interfaces para props - Definir tipos explícitos para todos los componentes",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.invalidacio-n-inteligente-invalidar-cache-despue-s-de-mutaciones",
          "description": "Invalidación inteligente - Invalidar caché después de mutaciones",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.key-props-en-listas-nunca-usar-i-ndice-como-key-si-el-orden-puede-camb",
          "description": "Key props en listas - Nunca usar índice como key si el orden puede cambiar",
          "severity": "ERROR",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.keyboard-navigation-todos-los-interactivos-accesibles-por-teclado",
          "description": "Keyboard navigation - Todos los interactivos accesibles por teclado",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.loading-error-states-loading-tsx-error-tsx-en-cada-ruta",
          "description": "Loading/Error states - loading.tsx, error.tsx en cada ruta",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.loading-states-skeleton-screens-spinners-optimistic-updates",
          "description": "Loading states - Skeleton screens, spinners, optimistic updates",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.measure-twice-cut-once-planificar-arquitectura-dependencias-y-flujo-de",
          "description": "\"Measure twice, cut once\" - Planificar arquitectura, dependencias y flujo de datos para evitar refactorizaciones múltiples. Analizar impacto en estado global y rendimiento ANTES de implementar.",
          "severity": "ERROR",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.memoizacio-n-estrate-gica-no-todo-necesita-memo-perfilar-primero",
          "description": "Memoización estratégica - No todo necesita memo, perfilar primero",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.metadata-api-generatemetadata-para-seo",
          "description": "Metadata API - generateMetadata para SEO",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.msw-mock-service-worker-mock-apis-en-tests-no-axios-fetch-directamente",
          "description": "MSW (Mock Service Worker) - Mock APIs en tests, no axios/fetch directamente",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.namespaces-separar-traducciones-por-feature-mo-dulo",
          "description": "Namespaces - Separar traducciones por feature/módulo",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.next-image-siempre-para-ima-genes-optimizacio-n-automa-tica",
          "description": "Next/Image - Siempre para imágenes, optimización automática",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.no-any-usar-unknown-si-el-tipo-es-desconocido-luego-type-guard",
          "description": "No any - Usar unknown si el tipo es desconocido, luego type guard",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.no-catch-vaci-os-prohibido-silenciar-errores-ast-common-error-emptycat",
          "description": "No catch vacíos - Prohibido silenciar errores (AST: common.error.emptycatch)",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.no-class-components-solo-functional-components",
          "description": "NO class components - Solo functional components",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.no-poner-comentarios-en-el-co-digo-nombres-autodescriptivos-lo-hacen-i",
          "description": "No poner comentarios en el código - Nombres autodescriptivos lo hacen innecesario",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.no-singleton-en-su-lugar-inyeccio-n-de-dependencias-usar-providers-con",
          "description": "No Singleton, en su lugar Inyección de Dependencias - Usar providers, context o DI containers",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.nombres-autodescriptivos-todo-en-ingle-s-usar-i18n-para-ui",
          "description": "Nombres autodescriptivos - Todo en inglés (usar i18n para UI)",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.optimizar-renders-react-memo-usememo-usecallback-para-prevenir-re-rend",
          "description": "Optimizar renders - React.memo, useMemo, useCallback para prevenir re-renders innecesarios",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.preferir-early-returns-y-destructuring-evitar-if-else-anidados-callbac",
          "description": "Preferir early returns y destructuring - Evitar if/else anidados, callback hell o prop drilling excesivo",
          "severity": "ERROR",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.preferir-spies-frente-a-stubs-o-mocks-si-es-posible-usar-jest-spyon-pa",
          "description": "Preferir spies frente a stubs o mocks si es posible - Usar jest.spyOn para métodos reales",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.queries-apropiadas-getbyrole-getbylabeltext-getbytext-getbytestid",
          "description": "Queries apropiadas - getByRole > getByLabelText > getByText > getByTestId",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.rate-limiting-proteger-endpoints-pu-blicos",
          "description": "Rate limiting - Proteger endpoints públicos",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.react-hook-form-performance-menos-re-renders",
          "description": "React Hook Form - Performance, menos re-renders",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.react-query-para-server-state-cache-automa-tico-refetch-invalidacio-n",
          "description": "React Query para server state - Caché automático, refetch, invalidación",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.react-testing-library-testear-como-usuario-no-implementation-details",
          "description": "React Testing Library - Testear como usuario, no implementation details",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.respetar-patrones-establecidos-repository-pattern-use-cases-dtos",
          "description": "Respetar patrones establecidos - Repository pattern, Use Cases, DTOs",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.responsive-design-mobile-first-breakpoints-de-tailwind",
          "description": "Responsive design - Mobile-first, breakpoints de Tailwind",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.retry-logic-reintentar-requests-fallidos-react-query-retry",
          "description": "Retry logic - Reintentar requests fallidos (React Query retry)",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.reutilizar-componentes-ui-no-duplicar-button-card-dialog-etc",
          "description": "Reutilizar componentes UI - No duplicar Button, Card, Dialog, etc.",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.route-handlers-app-api-para-endpoints-backend",
          "description": "Route handlers - app/api/ para endpoints backend",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.sanitizar-html-dompurify-si-se-renderiza-html-de-usuario",
          "description": "Sanitizar HTML - DOMPurify si se renderiza HTML de usuario",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.screen-reader-testing-probar-con-voiceover-nvda",
          "description": "Screen reader testing - Probar con VoiceOver/NVDA",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.seguir-siempre-flujo-bdd-tdd-escribir-historias-de-usuario-primero-lue",
          "description": "Seguir siempre flujo BDD->TDD (escribir historias de usuario primero, luego tests, luego código)",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.semantic-html-button-para-botones-nav-para-navegacio-n-etc",
          "description": "Semantic HTML - <button> para botones, <nav> para navegación, etc.",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.server-components-por-defecto-use-client-solo-cuando-sea-necesario-int",
          "description": "Server Components por defecto - \"use client\" solo cuando sea necesario (interactividad, hooks, event handlers)",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.shared-kernel-tipos-mi-nimos-compartidos-entre-features",
          "description": "Shared Kernel - Tipos mínimos compartidos entre features",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.siempre-responder-en-espan-ol",
          "description": "Siempre responder en español",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.snapshot-testing-con-moderacio-n-solo-para-componentes-estables",
          "description": "Snapshot testing con moderación - Solo para componentes estables",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.tailwind-css-utility-first-disen-o-consistente",
          "description": "Tailwind CSS - Utility-first, diseño consistente",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.theme-provider-next-themes-para-dark-light-mode",
          "description": "Theme provider - next-themes para dark/light mode",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.tipos-compartidos-sincronizar-con-backend-trpc-o-zod",
          "description": "Tipos compartidos - Sincronizar con backend (tRPC o Zod)",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.tokens-en-headers-authorization-bearer-token-nunca-en-urls",
          "description": "Tokens en headers - Authorization: Bearer <token>, nunca en URLs",
          "severity": "ERROR",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.type-inference-dejar-que-typescript-infiera-cuando-sea-obvio-no-sobre-",
          "description": "Type inference - Dejar que TypeScript infiera cuando sea obvio, no sobre-especificar",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.usereducer-para-lo-gica-compleja-estado-con-mu-ltiples-sub-valores-o-l",
          "description": "useReducer para lógica compleja - Estado con múltiples sub-valores o lógica compleja",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.userevent-sobre-fireevent-simula-interaccio-n-real-de-usuario",
          "description": "userEvent sobre fireEvent - Simula interacción real de usuario",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.usestate-para-estado-local-no-elevar-estado-prematuramente",
          "description": "useState para estado local - No elevar estado prematuramente",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.usetranslation-hook-no-hardcodear-strings",
          "description": "useTranslation hook - No hardcodear strings",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.utility-types-partial-pick-omit-required-record-cuando-simplifique-co-",
          "description": "Utility types - Partial, Pick, Omit, Required, Record cuando simplifique código",
          "severity": "ERROR",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.validacio-n-en-tiempo-real-feedback-inmediato-al-usuario",
          "description": "Validación en tiempo real - Feedback inmediato al usuario",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.virtual-scrolling-para-listas-largas-react-window-react-virtualized",
          "description": "Virtual scrolling - Para listas largas (react-window, react-virtualized)",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.web-vitals-monitorear-lcp-fid-cls-medir-con-lighthouse",
          "description": "Web Vitals - Monitorear LCP, FID, CLS, medir con Lighthouse",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.zod-para-schemas-type-safe-validation-inferir-tipos",
          "description": "Zod para schemas - Type-safe validation, inferir tipos",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.guideline.frontend.zustand-para-estado-global-simple-sin-boilerplate-devtools",
          "description": "Zustand para estado global - Simple, sin boilerplate, DevTools",
          "severity": "WARN",
          "platform": "frontend",
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.frontend.no-console-log",
          "description": "Disallow console.log in frontend production code.",
          "severity": "ERROR",
          "platform": "frontend",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.frontend.no-empty-catch",
          "description": "Disallow empty catch blocks in frontend runtime code.",
          "severity": "ERROR",
          "platform": "frontend",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.frontend.no-god-classes",
          "description": "Disallow god classes in frontend code.",
          "severity": "ERROR",
          "platform": "frontend",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.frontend.no-solid-violations",
          "description": "Disallow frontend SOLID violations in production code.",
          "severity": "ERROR",
          "platform": "frontend",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "frontend-guidelines",
          "sourcePath": "vendor/skills/frontend-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        }
      ]
    },
    {
      "name": "ios-concurrency-guidelines",
      "version": "1.0.0",
      "source": "file:vendor/skills/swift-concurrency/SKILL.md",
      "hash": "38629be89a118780cf411e11520b34fe1aee005a38703ef4793ff37eecd10dfa",
      "rules": [
        {
          "id": "skills.ios.guideline.ios-concurrency.async-sequences-md-asyncsequence-asyncstream-when-to-use-vs-regular-as",
          "description": "async-sequences.md - AsyncSequence, AsyncStream, when to use vs regular async methods",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-concurrency.then-use-references-actors-md-global-actors-nonisolated-isolated-param",
          "description": "Then: use references/actors.md (global actors, nonisolated, isolated parameters) and references/threading.md (default isolation)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-concurrency.then-use-references-sendable-md-and-references-threading-md-especially",
          "description": "Then: use references/sendable.md and references/threading.md (especially Swift 6.2 behavior changes)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-concurrency.use-grep-for-swiftstrictconcurrency-or-swiftdefaultactorisolation-in-p",
          "description": "Use Grep for SWIFTSTRICTCONCURRENCY or SWIFTDEFAULTACTORISOLATION in .pbxproj files",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-concurrency.use-grep-for-swiftupcomingfeature-to-find-enabled-upcoming-features",
          "description": "Use Grep for SWIFTUPCOMINGFEATURE to find enabled upcoming features",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-concurrency.use-read-on-package-swift-for-swiftpm-settings-tools-version-strict-co",
          "description": "Use Read on Package.swift for SwiftPM settings (tools version, strict concurrency flags, upcoming features)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-concurrency.use-references-core-data-md-dao-nsmanagedobjectid-default-isolation-co",
          "description": "Use references/core-data.md (DAO/NSManagedObjectID, default isolation conflicts)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-concurrency.use-references-linting-md-for-rule-intent-and-preferred-fixes-avoid-du",
          "description": "Use references/linting.md for rule intent and preferred fixes; avoid dummy awaits as “fixes”.",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-concurrency.use-references-threading-md-to-avoid-thread-centric-debugging-and-rely",
          "description": "Use references/threading.md to avoid thread-centric debugging and rely on isolation + Instruments",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-assume-isolated",
          "description": "Avoid assumeIsolated in production iOS code; prefer explicit actor isolation or await MainActor.run.",
          "severity": "ERROR",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-async-without-await",
          "description": "Avoid private async functions without await; remove async unless a protocol or override boundary requires it.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "MEDIUM",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-dispatchgroup",
          "description": "Avoid DispatchGroup in production iOS code; prefer TaskGroup.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-dispatchqueue",
          "description": "Avoid DispatchQueue in production iOS code; prefer structured concurrency.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-dispatchsemaphore",
          "description": "Avoid DispatchSemaphore in production iOS code.",
          "severity": "ERROR",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-nonisolated-unsafe",
          "description": "Avoid nonisolated(unsafe) in production iOS code without a documented safety invariant and a removal ticket.",
          "severity": "ERROR",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-operation-queue",
          "description": "Avoid OperationQueue in production iOS code unless explicitly justified.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "MEDIUM",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-preconcurrency",
          "description": "Avoid @preconcurrency in production iOS code without a documented safety invariant and a removal ticket.",
          "severity": "ERROR",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-task-detached",
          "description": "Avoid Task.detached in production iOS code without strict isolation rationale.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "MEDIUM",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-unchecked-sendable",
          "description": "Avoid @unchecked Sendable in production iOS code without strict safety invariant.",
          "severity": "ERROR",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-wait-for-expectations",
          "description": "Use references/testing.md (await fulfillment(of:) and Swift Testing patterns)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-concurrency-guidelines",
          "sourcePath": "vendor/skills/swift-concurrency/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        }
      ]
    },
    {
      "name": "ios-core-data-guidelines",
      "version": "1.0.0",
      "source": "file:vendor/skills/core-data-expert/SKILL.md",
      "hash": "a84487522605588f76e31278324b5153f2a437ba2ac56f972f24e1a7226c4365",
      "rules": [
        {
          "id": "skills.ios.no-core-data-layer-leak",
          "description": "Keep Core Data orchestration inside infrastructure or repository layers; avoid Core Data APIs in application or presentation code.",
          "severity": "ERROR",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-core-data-guidelines",
          "sourcePath": "vendor/skills/core-data-expert/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-nsmanagedobject-async-boundary",
          "description": "Avoid NSManagedObject in async function boundaries; prefer object IDs or mapped models.",
          "severity": "ERROR",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-core-data-guidelines",
          "sourcePath": "vendor/skills/core-data-expert/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-nsmanagedobject-boundary",
          "description": "Avoid NSManagedObject in shared function and property boundaries; prefer object IDs or mapped models.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "MEDIUM",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-core-data-guidelines",
          "sourcePath": "vendor/skills/core-data-expert/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-nsmanagedobject-state-leak",
          "description": "Avoid leaking context-scoped NSManagedObject instances into SwiftUI state or view models; prefer object IDs or mapped models.",
          "severity": "ERROR",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-core-data-guidelines",
          "sourcePath": "vendor/skills/core-data-expert/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-swiftdata-layer-leak",
          "description": "Keep SwiftData orchestration (ModelContext, ModelContainer, @Query, @Model) inside infrastructure or repository layers instead of application or presentation code in enterprise Clean Architecture.",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-core-data-guidelines",
          "sourcePath": "vendor/skills/core-data-expert/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        }
      ]
    },
    {
      "name": "ios-guidelines",
      "version": "1.0.0",
      "source": "file:vendor/skills/ios-enterprise-rules/SKILL.md",
      "hash": "3eb1d2a79500bce846244c510c96e83ef1b0046695eb4ff7dc506dbd94d10154",
      "rules": [
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-lazyvstack-lazyhstack-for-large-lists",
          "description": "LazyVStack/LazyHStack - Para listas grandes",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-navigationdestination-for-for-type-safe-navigation",
          "description": "navigationDestination(for:) - Destinos tipados",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-task-modifier-for-automatic-cancellation-of-async-work",
          "description": ".task/.task(id:) - Trabajos async con cancelación automática",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.accessibility-identifiers-para-localizar-elementos",
          "description": "Accessibility identifiers - Para localizar elementos",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.accessibility-labels-accessibilitylabel",
          "description": "Accessibility labels - .accessibilityLabel()",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.actor-para-estado-compartido-thread-safe",
          "description": "actor - Para estado compartido thread-safe",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.actu-a-como-un-arquitecto-de-soluciones-y-software-designer",
          "description": "Actúa como un Arquitecto de Soluciones y Software Designer",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.alamofire-prohibido-usar-urlsession-nativo",
          "description": "Alamofire - Prohibido, usar URLSession nativo",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.analizar-estructura-existente-mo-dulos-protocolos-dependencias-spm-pac",
          "description": "Analizar estructura existente - Módulos, protocolos, dependencias, SPM packages",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.any-type-erasure-usar-generics-con-protocolos-de-frontera",
          "description": "any (type erasure) - Usar generics con protocolos de frontera",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.apiendpoint-como-struct-data-driven-ocp-endpoints-en-features-no-enum-",
          "description": "APIEndpoint como struct data-driven - OCP: endpoints en features, no enum central",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.app-transport-security-ats-https-por-defecto",
          "description": "App Transport Security (ATS) - HTTPS por defecto",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.arc-automatic-reference-counting",
          "description": "ARC - Automatic Reference Counting",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.assets-en-asset-catalogs-con-soporte-para-todos-los-taman-os",
          "description": "Assets en Asset Catalogs - Con soporte para todos los tamaños",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.associated-types-generics-en-protocols",
          "description": "Associated types - Generics en protocols",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.async-await-para-operaciones-asi-ncronas",
          "description": "async/await - Para operaciones asíncronas",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.asyncsequence-y-asyncstream-para-flujos-de-datos",
          "description": "AsyncSequence y AsyncStream - Para flujos de datos",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.auto-layout-nslayoutconstraint",
          "description": "Auto Layout - NSLayoutConstraint",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.automatic-plural-handling-en-string-catalogs",
          "description": "Automatic plural handling - En String Catalogs",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.avoid-over-use-async-await-ma-s-simple-para-single-values",
          "description": "Avoid over-use - async/await más simple para single values",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.background-threads-no-bloquear-main-thread",
          "description": "Background threads - No bloquear main thread",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.bindable-para-bindings-con-observable",
          "description": "@Bindable - Para bindings con @Observable",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.bindable-para-exponer-bindings-de-un-observable-inyectado",
          "description": "@Bindable para exponer bindings de un @Observable inyectado",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.binding-para-compartir-pasar-estado-editable-a-child-views",
          "description": "@Binding para compartir - Pasar estado editable a child views",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.biometric-auth-face-id-touch-id-localauthentication",
          "description": "Biometric auth - Face ID, Touch ID (LocalAuthentication)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.cancelar-correctamente-comprobar-task-iscancelled-en-operaciones-larga",
          "description": "Cancelar correctamente - comprobar Task.isCancelled en operaciones largas",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.cancellables-almacenar-en-set-anycancellable",
          "description": "Cancellables - Almacenar en Set<AnyCancellable>",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.carthage-prohibido",
          "description": "Carthage - Prohibido",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.catch-vaci-os-prohibido-silenciar-errores-ast-common-error-emptycatch",
          "description": "catch vacíos - Prohibido silenciar errores (AST: common.error.emptycatch)",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.cero-libreri-as-de-terceros-siempre-existe-solucio-n-nativa",
          "description": "Cero librerías de terceros: siempre existe solución nativa",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.cero-strings-hardcodeadas-en-ui",
          "description": "String(localized:) y formateadores (Date/Number)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.clean-por-feature-presentation-application-domain-infrastructure-domai",
          "description": "Clean por feature - presentation → application → domain, infrastructure → domain",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.cocoapods-prohibido",
          "description": "CocoaPods - Prohibido",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.codable-para-serializacio-n-json-nunca-jsonserialization",
          "description": "Codable - Decodificación automática de JSON (nunca JSONSerialization)",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.codable-para-serializacio-n-json-plist",
          "description": "Codable - Para serialización JSON/Plist",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.color-contrast-wcag-aa-mi-nimo",
          "description": "Color contrast - WCAG AA mínimo",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.compartir-dtos-con-backend-typescript-swift-codegen-quicktype-openapi",
          "description": "Compartir DTOs con backend - TypeScript → Swift codegen (quicktype, OpenAPI)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.composicio-n-de-views-views-pequen-os-reutilizables",
          "description": "Composición de Views - Views pequeños, reutilizables",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.comprobar-que-compile-antes-de-sugerir-xcode-build-sin-errores-warning",
          "description": "Comprobar que compile ANTES de sugerir - Xcode build sin errores/warnings",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.contraste-wcag-2-1-aa-mi-nimo",
          "description": "Contraste - WCAG 2.1 AA mínimo",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.coordinator-para-navegacio-n-no-acoplamiento-entre-views",
          "description": "Coordinator para navegación - No acoplamiento entre Views",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.coordinator-pattern-para-navegacio-n-compleja",
          "description": "Coordinator pattern - Para navegación compleja",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.copy-on-write-para-structs-grandes-array-dictionary-ya-lo-hacen",
          "description": "Copy-on-write - Para structs grandes (Array, Dictionary ya lo hacen)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.core-data-solo-para-proyectos-legacy",
          "description": "Core Data - Solo para proyectos legacy",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.coverage-80-objetivo-95-en-lo-gica-cri-tica",
          "description": "Coverage >80% - Objetivo 95% en lógica crítica",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.custom-view-modifiers-reutilizar-estilos",
          "description": "Custom view modifiers - Reutilizar estilos",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.dateformatter-fechas-localizadas",
          "description": "DateFormatter - Fechas localizadas",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.ddd-entidades-value-objects-repositorios-protocolos-eventos-de-dominio",
          "description": "DDD - entidades, value objects, repositorios (protocolos), eventos de dominio",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.declarativo-describe-el-ui-no-co-mo-construirlo",
          "description": "Declarativo - Describe el UI, no cómo construirlo",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.deep-links-deben-mapear-a-rutas-del-path",
          "description": "Deep links deben mapear a rutas del Path",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.deinit-verificar-que-se-llama-cuando-debiera",
          "description": "deinit - Verificar que se llama cuando debiera",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.delegation-pattern-weak-delegates-para-evitar-retain-cycles",
          "description": "Delegation pattern - Weak delegates para evitar retain cycles",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.dependencies-en-package-swift-versiones-especi-ficas",
          "description": "Dependencies en Package.swift - Versiones específicas",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.dynamic-type-font-scaling-automa-tico",
          "description": "Dynamic Type - Font scaling automático",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.dynamic-type-fuentes-escalables-y-layouts-adaptativos",
          "description": "Dynamic Type - fuentes escalables y layouts adaptativos",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.environment-en-swiftui-para-di-moderna",
          "description": "@Environment en SwiftUI - Para DI moderna",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.environment-environmentkey-para-dependencias-globales-del-a-rbol",
          "description": "@Environment / EnvironmentKey para dependencias globales del árbol",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.environment-para-inyeccio-n-de-dependencias-y-valores-del-sistema",
          "description": "@Environment - Para inyección de dependencias y valores del sistema",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.environmentobject-solo-si-el-objeto-es-global-y-estable",
          "description": "@EnvironmentObject solo si el objeto es global y estable",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.equatable-hashable-implementar-para-comparacio-n-y-colecciones",
          "description": "Equatable, Hashable - Implementar para comparación y colecciones",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.equatable-views-para-optimizar-renders",
          "description": "Equatable Views - Para optimizar renders",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.error-handling-custom-networkerror-enum",
          "description": "Error handling - Custom NetworkError enum",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.error-handling-global-custom-error-enum",
          "description": "Error handling global - Custom Error enum",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.evitar-invalidaciones-pasar-valores-mi-nimos-y-evitar-objetos-contexto",
          "description": "Evitar invalidaciones - pasar valores mínimos y evitar objetos “contexto” enormes",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.evitar-retain-cycles-especialmente-en-closures-delegates",
          "description": "[weak self] - En closures que pueden outlive self",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.expect-y-require-assertions-de-swift-testing",
          "description": "#expect y #require - Assertions de Swift Testing",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.extensions-agrupar-por-funcionalidad-archivos-separados",
          "description": "Extensions - Agrupar por funcionalidad, archivos separados",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.factory-pattern-para-crear-dependencias-complejas",
          "description": "Factory pattern - Para crear dependencias complejas",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.fast-tests-10ms-unitarios",
          "description": "Fast tests - <10ms unitarios",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.fastlane-automatizacio-n-de-builds-tests-deployments",
          "description": "Fastlane - Automatización de builds, tests, deployments",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.feature-first-cada-feature-es-un-bounded-context-no-se-acoplan-entre-s",
          "description": "Feature-first - Cada feature es un Bounded Context, no se acoplan entre sí",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.feature-modules-orders-users-auth-como-packages",
          "description": "Feature modules - Orders, Users, Auth como packages",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.file-naming-pascalcase-para-tipos",
          "description": "File naming - PascalCase para tipos",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.filemanager-archivos-ima-genes-documents",
          "description": "FileManager - Archivos, imágenes, documents",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.generics-reutilizar-co-digo-type-safe",
          "description": "Generics - Reutilizar código type-safe",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.github-actions-bitrise-ci-cd-pipelines",
          "description": "GitHub Actions / Bitrise - CI/CD pipelines",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "stage": "CI",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.guard-clauses-evitar-pyramid-of-doom-early-returns",
          "description": "Guard clauses - Evitar pyramid of doom, early returns",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.guard-let-para-early-return-unwrap-queda-en-scope",
          "description": "guard let - Para early return, unwrap queda en scope",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.icloud-sync-entre-dispositivos-nsubiquitouskeyvaluestore-cloudkit",
          "description": "iCloud - Sync entre dispositivos (NSUbiquitousKeyValueStore, CloudKit)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.identificar-el-boundary-de-aislamiento-mainactor-actor-nonisolated",
          "description": "Identificar el boundary de aislamiento - @MainActor, actor, nonisolated",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.if-let-para-unwrap-opcional-usado-una-vez",
          "description": "if let - Para unwrap opcional usado una vez",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.ignoring-warnings-warnings-errores-futuros",
          "description": "Ignoring warnings - Warnings = errores futuros",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.image-optimization-resize-compress-cache",
          "description": "Image optimization - Resize, compress, cache",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.implicitly-unwrapped-solo-para-iboutlets-y-casos-muy-especi-ficos",
          "description": "Implicitly unwrapped (!) - Solo para IBOutlets y casos muy específicos",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.inmutabilidad-let-var-siempre-que-sea-posible",
          "description": "Inmutabilidad - let > var siempre que sea posible",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.instruments-leaks-zombies-allocations-para-profiling",
          "description": "Instruments - Leaks, Zombies, Allocations para profiling",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.instruments-time-profiler-allocations-leaks",
          "description": "Instruments - Time Profiler, Allocations, Leaks",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.jailbreak-detection-opcional-para-apps-cri-ticas",
          "description": "Jailbreak detection - Opcional para apps críticas",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.keychain-passwords-tokens-no-userdefaults",
          "description": "En producción ni un mocks ni un spies - Todo real de APIs y persistencia (Core Data, UserDefaults, Keychain)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.keychainservices-nativo-passwords-tokens-datos-sensibles-no-wrappers-d",
          "description": "KeychainServices nativo - Passwords, tokens, datos sensibles (NO wrappers de terceros)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.las-features-no-se-importan-entre-si",
          "description": "Las features no se importan entre sí",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.libreri-as-de-terceros-usar-apis-nativas",
          "description": "Librerías de terceros - Usar APIs nativas",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.local-packages-para-features-grandes",
          "description": "Local packages - Para features grandes",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.localizable-strings-deprecado-usar-string-catalogs",
          "description": "Localizable.strings - Deprecado, usar String Catalogs",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.macros-observable-preview-custom-macros",
          "description": "Macros - @Observable, #Preview, custom macros",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.magic-numbers-usar-constantes-con-nombres",
          "description": "Magic numbers - Usar constantes con nombres",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.mainactor-para-co-digo-que-debe-ejecutarse-en-el-hilo-principal",
          "description": "@MainActor - Para código que debe ejecutarse en el hilo principal",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.makesut-pattern-factory-para-system-under-test",
          "description": "makeSUT pattern - Factory para System Under Test",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.mark-organizar-co-digo-dentro-de-archivos",
          "description": "MARK: - - Organizar código dentro de archivos",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.massive-view-controllers-viewcontrollers-que-mezclan-presentacio-n-nav",
          "description": "MVC (evitar) - Massive View Controller, no escalable",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.measure-twice-cut-once-planificar-arquitectura-dependencias-y-flujo-de",
          "description": "\"Measure twice, cut once\" - Planificar arquitectura, dependencias y flujo de datos antes de implementar. Analizar impacto en memoria, performance y UX.",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.memoization-cachear-ca-lculos-costosos",
          "description": "Memoization - Cachear cálculos costosos",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.mvvm-c-coordinator-para-navegacio-n",
          "description": "MVVM-C - + Coordinator para navegación",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.mvvm-model-view-viewmodel-binding-con-combine",
          "description": "MVVM - Model-View-ViewModel, binding con Combine",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.mvvm-model-view-viewmodel-preferido-con-swiftui",
          "description": "MVVM - Model-View-ViewModel (preferido con SwiftUI)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.navegacio-n-event-driven-estilo-tca-cuando-el-modelo-lo-requiera-event",
          "description": "Navegación event-driven estilo TCA cuando el modelo lo requiera (Event Bus + Router)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.network-layer-abstrai-do-apiclient-protocol-en-domain",
          "description": "Network layer abstraído - APIClient protocol en Domain",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.network-reachability-detectar-conectividad",
          "description": "Network reachability - Detectar conectividad",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.nil-coalescing-valores-por-defecto",
          "description": "Nil coalescing (??) - Valores por defecto",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.no-loggear-pii-tokens-emails-ids-sensibles",
          "description": "No loggear PII (tokens, emails, IDs sensibles)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.no-poner-comentarios-en-el-co-digo-nombres-autodescriptivos",
          "description": "No poner comentarios en el código - Nombres autodescriptivos",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.no-singleton-usar-inyeccio-n-de-dependencias-no-compartir-instancias-g",
          "description": "No Singleton - Usar Inyección de Dependencias (NO compartir instancias globales)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.no-usar-mainactor-como-parche-justificar-el-aislamiento",
          "description": "No usar @MainActor como parche - justificar el aislamiento",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.numberformatter-formateo-de-nu-meros-monedas",
          "description": "NumberFormatter - Formateo de números, monedas",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.obfuscation-strings-sensibles-en-co-digo",
          "description": "Obfuscation - Strings sensibles en código",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.observable-state-para-estado-owned-compartido-por-el-view",
          "description": "@Observable + @State para estado owned compartido por el View",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.offline-first-opcional-sync-con-swiftdata",
          "description": "Offline-first (opcional) - Sync con SwiftData",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.opaque-types-some-view-some-publisher-cuando-sea-apropiado",
          "description": "Opaque types - some View, some Publisher cuando sea apropiado",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.operators-map-filter-flatmap-combinelatest-merge",
          "description": "Operators - map, filter, flatMap, combineLatest, merge",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.optional-chaining-cadenas-de-opcionales",
          "description": "Optional chaining (?.) - Cadenas de opcionales",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.os-logger-para-logging-estructurado",
          "description": "os.Logger para logging estructurado",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.page-object-pattern-encapsular-lo-gica-de-ui-en-objetos",
          "description": "Page Object Pattern - Encapsular lógica de UI en objetos",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.pluralizacio-n-con-tablas-de-strings",
          "description": "Pluralización con tablas de strings",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.preferencekeys-para-comunicacio-n-child-parent",
          "description": "PreferenceKeys - Para comunicación child → parent",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.preferences-comunicacio-n-child-parent",
          "description": "Preferences - Comunicación child → parent",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.programmatic-ui-no-storyboards-xibs-mejor-control-de-versiones",
          "description": "Programmatic UI - NO Storyboards/XIBs (mejor control de versiones)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.prohibido-print-y-logs-ad-hoc",
          "description": "Prohibido print() y logs ad-hoc",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.property-wrappers-state-binding-observable-custom-wrappers",
          "description": "Property wrappers - @State, @Binding, @Observable, custom wrappers",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.protocol-composition-combinar-mu-ltiples-protocols",
          "description": "Protocol composition - Combinar múltiples protocols",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.protocol-extensions-default-implementations",
          "description": "Protocol extensions - Default implementations",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.protocols-en-domain-ordersrepositoryprotocol-networkserviceprotocol",
          "description": "Protocols en domain - OrdersRepositoryProtocol, NetworkServiceProtocol",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.protocols-over-inheritance-composicio-n-de-comportamiento",
          "description": "Protocols over Inheritance - Composición de comportamiento",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.protocols-para-testability-mock-con-clases-que-conforman-protocol",
          "description": "Protocols para testability - Mock con clases que conforman protocol",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.public-api-solo-exponer-lo-necesario-public-internal-private",
          "description": "Public API - Solo exponer lo necesario (public, internal, private)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.published-en-viewmodels-para-binding-con-views",
          "description": "@Published - En ViewModels para binding con Views",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.publishers-asyncsequence-para-async-combine-para-streams-complejos",
          "description": "Publishers - AsyncSequence para async, Combine para streams complejos",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.quick-nimble-prohibido-usar-swift-testing-nativo",
          "description": "Quick/Nimble - Prohibido, usar Swift Testing nativo",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.reduce-motion-respetar-preferencia-del-sistema",
          "description": "Reduce Motion - respetar preferencia del sistema",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.reduce-motion-respetar-preferencias-del-usuario",
          "description": "Reduce motion - Respetar preferencias del usuario",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.repository-pattern-ordersrepositoryprotocol-ordersrepository",
          "description": "Repository pattern - OrdersRepositoryProtocol → OrdersRepository",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.request-response-interceptors-logging-auth-tokens",
          "description": "Request/Response interceptors - Logging, auth tokens",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.result-builders-para-dsls-swiftui-ya-lo-usa",
          "description": "Result builders - Para DSLs (SwiftUI ya lo usa)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.retain-cycles-memory-leaks",
          "description": "Retain cycles - Memory leaks",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.retry-logic-para-requests-fallidos",
          "description": "Retry logic - Para requests fallidos",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.reuse-cells-uitableview-uicollectionview",
          "description": "Reuse cells - UITableView/UICollectionView",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.rtl-support-right-to-left-para-a-rabe-hebreo",
          "description": "RTL support - Right-to-left para árabe, hebreo",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.scrollviewreader-scroll-programa-tico",
          "description": "ScrollViewReader - Scroll programático",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.secure-enclave-para-keys-criptogra-ficas",
          "description": "Secure enclave - Para keys criptográficas",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.seguir-clean-architecture-domain-application-infrastructure-presentati",
          "description": "Seguir Clean Architecture - Domain → Application → Infrastructure → Presentation",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.seguir-siempre-flujo-bdd-tdd-feature-files-specs-implementacio-n",
          "description": "Seguir siempre flujo BDD->TDD - Feature files → Specs → Implementación",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.sendable-conformance-para-tipos-thread-safe-que-cruzan-boundaries",
          "description": "Sendable conformance - Para tipos thread-safe que cruzan boundaries",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.sendable-para-tipos-que-cruzan-boundaries-de-concurrencia",
          "description": "Sendable - Para tipos que cruzan boundaries de concurrencia",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.shared-kernel-solo-tipos-mi-nimos-compartidos-entre-features",
          "description": "Shared Kernel - Solo tipos mínimos compartidos entre features",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.siempre-responder-en-espan-ol",
          "description": "Siempre responder en español",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.sincronizacio-n-nativa-actors-para-estado-compartido-osallocatedunfair",
          "description": "Sincronización nativa - actors para estado compartido; OSAllocatedUnfairLock solo si no hay alternativa async",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.singletons-dificultan-testing",
          "description": "Singletons - Dificultan testing",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.spies-mocks-verificar-comportamiento-real",
          "description": "Spies > Mocks - Verificar comportamiento real",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.spm-swift-package-manager-para-modularizacio-n-interna",
          "description": "SPM (Swift Package Manager) - Para modularización interna",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.ssl-pinning-para-apps-con-alta-seguridad",
          "description": "SSL pinning - Para apps con alta seguridad",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.ssl-pinning-prevenir-man-in-the-middle",
          "description": "SSL pinning - Prevenir man-in-the-middle",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.state-para-local-estado-privado-del-view",
          "description": "@State para local - Estado privado del view",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.state-restoration-rehidratar-path-desde-estado-persistido-si-aplica",
          "description": "State restoration: rehidratar Path desde estado persistido si aplica",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.state-solo-para-estado-local-y-privado",
          "description": "@State solo para estado local y privado",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.stateobject-viewmodel-ownership",
          "description": "@StateObject - ViewModel ownership",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.storyboards-grandes-merge-conflicts-lentitud",
          "description": "Storyboards grandes - Merge conflicts, lentitud",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.strict-concurrency-checking-activar-en-complete",
          "description": "Strict Concurrency Checking - Activar en Complete",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.string-catalogs-xcstrings",
          "description": "String Catalogs (.xcstrings)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.string-catalogs-xcstrings-sistema-moderno-de-localizacio-n-xcode-15",
          "description": "String Catalogs (.xcstrings) - Sistema moderno de localización (Xcode 15+)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.struct-por-defecto-class-solo-cuando-necesites-identity-o-herencia",
          "description": "struct por defecto - class solo cuando necesites identity o herencia",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.structured-concurrency-task-taskgroup-actor-asyncsequence-asyncstream",
          "description": "Structured Concurrency - Task, TaskGroup, actor, AsyncSequence, AsyncStream",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.subscribers-sink-assign",
          "description": "Subscribers - sink, assign",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.swift-6-2-usar-la-versio-n-actual-con-approachable-concurrency",
          "description": "Swift 6.2 - Usar la versión actual con Approachable Concurrency",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.swift-testing-ios-17-framework-de-testing-moderno-preferido",
          "description": "Swift Testing (iOS 17+) - Framework de testing moderno preferido",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.swiftdata-ios-17-persistencia-moderna-preferida",
          "description": "SwiftData (iOS 17+) - Persistencia moderna preferida",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.swiftui-primero-uikit-solo-cuando-sea-estrictamente-necesario",
          "description": "SwiftUI primero - UIKit solo cuando sea estrictamente necesario",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.swinject-prohibido-di-manual-o-environment",
          "description": "Swinject - Prohibido, DI manual o @Environment",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.task-para-lanzar-contextos-asi-ncronos-desde-co-digo-si-ncrono",
          "description": "Task {} - Para lanzar contextos asíncronos desde código síncrono",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.taskgroup-para-operaciones-paralelas",
          "description": "TaskGroup - Para operaciones paralelas",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.tca-the-composable-architecture-para-apps-grandes-funcional",
          "description": "TCA (The Composable Architecture) - Para apps grandes, funcional",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.testability-cada-package-con-sus-tests",
          "description": "Testability - Cada package con sus tests",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.testability-inyectar-protocols-no-tipos-concretos",
          "description": "Testability - Inyectar protocols, no tipos concretos",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.testflight-beta-distribution",
          "description": "TestFlight - Beta distribution",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.trackformemoryleaks-helper-para-detectar-memory-leaks-en-tests",
          "description": "trackForMemoryLeaks - Helper para detectar memory leaks en tests",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.traits-accessibilityaddtraits-isbutton",
          "description": "Traits - .accessibilityAddTraits(.isButton)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.uiviewcontroller-delgados-lo-gica-en-viewmodels",
          "description": "UIViewController delgados - Lógica en ViewModels",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.un-target-por-plataforma-cuando-sea-necesario",
          "description": "Un target por plataforma - Cuando sea necesario",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.unowned-self-solo-si-self-siempre-existe-mientras-closure-existe",
          "description": "[unowned self] - Solo si self siempre existe mientras closure existe",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.urlsession-con-async-await-nativo-obligatorio",
          "description": "URLSession con async/await - Nativo, obligatorio",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.use-cases-createorderusecase-updateorderstatususecase",
          "description": "Use Cases - CreateOrderUseCase, UpdateOrderStatusUseCase",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.userdefaults-settings-simples-no-datos-sensibles",
          "description": "UserDefaults - Settings simples, NO datos sensibles",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.validar-configuracio-n-de-concurrencia-swiftstrictconcurrency-swiftdef",
          "description": "Validar configuración de concurrencia - SWIFTSTRICTCONCURRENCY, SWIFTDEFAULTACTORISOLATION, SWIFTUPCOMINGFEATURE",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.verificar-que-no-viole-solid-srp-ocp-lsp-isp-dip",
          "description": "Verificar que NO viole SOLID (SRP, OCP, LSP, ISP, DIP)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.viewmodels-por-pantalla-orderslistviewmodel-orderdetailviewmodel",
          "description": "ViewModels por pantalla - OrdersListViewModel, OrderDetailViewModel",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.viewmodifiers-nativos-primero-antes-de-crear-custom-viewmodifiers",
          "description": "ViewModifiers nativos primero - Antes de crear custom ViewModifiers",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.viewthatfits-para-layouts-adaptativos",
          "description": "ViewThatFits - Para layouts adaptativos",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.viper-solo-si-el-equipo-lo-conoce-bien-overkill-para-apps-pequen-as",
          "description": "VIPER - Solo si el equipo lo conoce bien (overkill para apps pequeñas)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.voiceover-labels-hints-traits",
          "description": "VoiceOver - labels, hints, traits",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.voiceover-testear-con-screen-reader",
          "description": "VoiceOver - Testear con screen reader",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.wait-for-existence-xctwaiter-para-elementos-asi-ncronos",
          "description": "Wait for existence - XCTWaiter para elementos asíncronos",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.xcode-usar-la-u-ltima-versio-n-estable-disponible",
          "description": "Xcode: usar la última versión estable disponible",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.xcodebuild-cli-para-builds",
          "description": "xcodebuild - CLI para builds",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios.xcuitest-ui-testing-nativo",
          "description": "XCUITest - UI testing nativo",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-anyview",
          "description": "Disallow AnyView in production iOS code.",
          "severity": "ERROR",
          "platform": "ios",
          "confidence": "HIGH",
          "locked": true,
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-callback-style-outside-bridges",
          "description": "Disallow callback-style signatures outside approved iOS bridge layers.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "MEDIUM",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-contains-user-filter",
          "description": "localizedStandardContains() para filtros de texto de usuario",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-corner-radius",
          "description": "clipShape(.rect(cornerRadius:)) en lugar de cornerRadius()",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-dispatchqueue",
          "description": "DispatchQueue - Usar async/await",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "HIGH",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-force-cast",
          "description": "Disallow force cast in production iOS code.",
          "severity": "ERROR",
          "platform": "ios",
          "confidence": "HIGH",
          "locked": true,
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-force-try",
          "description": "Disallow force try in production iOS code.",
          "severity": "ERROR",
          "platform": "ios",
          "confidence": "HIGH",
          "locked": true,
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-force-unwrap",
          "description": "Disallow force unwrap in production iOS code.",
          "severity": "ERROR",
          "platform": "ios",
          "confidence": "HIGH",
          "locked": true,
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-foreground-color",
          "description": "foregroundStyle() en lugar de foregroundColor()",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-geometryreader",
          "description": "containerRelativeFrame - Para sizing relativo al contenedor",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-legacy-onchange",
          "description": "onChange(of:) con variante de 2 parámetros o sin parámetros",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-navigation-view",
          "description": "NavigationStack + NavigationPath - Para navegación moderna",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-observable-object",
          "description": "@Observable (iOS 17+) - Usar en vez de ObservableObject",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-on-tap-gesture",
          "description": "Button en lugar de onTapGesture() (salvo necesidad específica)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-preconcurrency",
          "description": "Usar @preconcurrency solo como medida temporal de migración",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-scrollview-shows-indicators",
          "description": "scrollIndicators(.hidden) en lugar de showsIndicators: false",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-sheet-is-presented",
          "description": ".sheet(item:) - Sheets basadas en modelo, no en flags",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-string-format",
          "description": "String(localized:) + Text format en lugar de String(format:)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-tab-item",
          "description": "Tab API en lugar de tabItem()",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-task-detached",
          "description": "Preferir concurrencia estructurada - evitar Task.detached salvo razón explícita",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-uiscreen-main-bounds",
          "description": "Evitar UIScreen.main.bounds - Preferir layout relativo",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-unchecked-sendable",
          "description": "@preconcurrency/@unchecked Sendable solo con invariante documentado y ticket de eliminación",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.prefer-swift-testing",
          "description": "XCTest - Solo para proyectos legacy o UI tests",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-guidelines",
          "sourcePath": "vendor/skills/ios-enterprise-rules/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        }
      ]
    },
    {
      "name": "ios-swift-testing-guidelines",
      "version": "1.0.0",
      "source": "file:vendor/skills/swift-testing-expert/SKILL.md",
      "hash": "48249808a0c025bb5fb16ac2e5cec4d44ac4b0634273509ee2165ad60d0fe81f",
      "rules": [
        {
          "id": "skills.ios.guideline.ios-swift-testing.keep-tests-isolated-expressive-and-aligned-with-swift-concurrency",
          "description": "Keep tests isolated, expressive, and aligned with Swift Concurrency.",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swift-testing-guidelines",
          "sourcePath": "vendor/skills/swift-testing-expert/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swift-testing.preserve-repository-specific-test-contracts-such-as-makesut-and-memory",
          "description": "Preserve repository-specific test contracts such as makeSUT() and memory-leak tracking helpers when they are mandatory.",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swift-testing-guidelines",
          "sourcePath": "vendor/skills/swift-testing-expert/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-legacy-expectation-description",
          "description": "Avoid expectation(description:) scaffolding without modern fulfillment or confirmation flow in iOS tests.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "MEDIUM",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swift-testing-guidelines",
          "sourcePath": "vendor/skills/swift-testing-expert/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-mixed-testing-frameworks",
          "description": "Avoid mixing XCTestCase suites with Swift Testing markers in the same iOS test file without explicit compatibility reason.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swift-testing-guidelines",
          "sourcePath": "vendor/skills/swift-testing-expert/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-wait-for-expectations",
          "description": "Avoid wait(for:) and waitForExpectations(timeout:) in async iOS tests; prefer await fulfillment(of:).",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swift-testing-guidelines",
          "sourcePath": "vendor/skills/swift-testing-expert/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-xctassert",
          "description": "Avoid XCTest assertion macros in modern Swift tests; prefer #expect.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swift-testing-guidelines",
          "sourcePath": "vendor/skills/swift-testing-expert/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-xctunwrap",
          "description": "Avoid XCTUnwrap in modern Swift tests; prefer #require.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swift-testing-guidelines",
          "sourcePath": "vendor/skills/swift-testing-expert/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.prefer-swift-testing",
          "description": "Prefer Swift Testing over XCTest-only unit and integration tests, including suites that can migrate to import Testing and @Test.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "MEDIUM",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swift-testing-guidelines",
          "sourcePath": "vendor/skills/swift-testing-expert/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        }
      ]
    },
    {
      "name": "ios-swiftui-expert-guidelines",
      "version": "1.0.0",
      "source": "file:vendor/skills/swiftui-expert-skill/SKILL.md",
      "hash": "d4914b86eb46b5cf0408a922c4f034789a672d95ac6c01922e94257044b8aa01",
      "rules": [
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.action-handlers-should-reference-methods-not-contain-inline-logic",
          "description": "Action handlers should reference methods, not contain inline logic",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.always-mark-state-and-stateobject-as-private-makes-dependencies-clear",
          "description": "Always mark @State and @StateObject as private (makes dependencies clear)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.avoid-inline-filtering-in-foreach-prefilter-and-cache",
          "description": "Avoid inline filtering in ForEach (prefilter and cache)",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.avoid-redundant-state-updates-in-onreceive-onchange-scroll-handlers",
          "description": "Avoid redundant state updates in onReceive, onChange, scroll handlers",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.ensure-constant-number-of-views-per-foreach-element",
          "description": "Ensure constant number of views per ForEach element",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.ensure-foreach-uses-stable-identity-see-references-list-patterns-md",
          "description": "Ensure ForEach uses stable identity (see references/list-patterns.md)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.keep-view-body-simple-and-pure-no-side-effects-or-complex-logic",
          "description": "Keep view body simple and pure (no side effects or complex logic)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.pass-only-needed-values-to-views-avoid-large-config-or-context-objects",
          "description": "Pass only needed values to views (avoid large \"config\" or \"context\" objects)",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.prefer-modifiers-over-conditional-views-for-state-changes-maintains-vi",
          "description": "Prefer modifiers over conditional views for state changes (maintains view identity)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.prefer-static-member-lookup-blue-vs-color-blue",
          "description": "Prefer static member lookup (.blue vs Color.blue)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.prefer-viewbuilder-let-content-content-over-closure-based-content-prop",
          "description": "Prefer @ViewBuilder let content: Content over closure-based content properties",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.references-state-management-md-property-wrappers-and-data-flow-prefer-",
          "description": "references/state-management.md - Property wrappers and data flow (prefer @Observable)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.sheets-should-own-their-actions-and-call-dismiss-internally",
          "description": "Sheets should own their actions and call dismiss() internally",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.suggest-image-downsampling-when-uiimage-data-is-encountered",
          "description": "Suggest image downsampling when UIImage(data:) is used (as optional optimization, see references/image-optimization.md)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-glasseffectid-with-namespace-for-morphing-transitions",
          "description": "Use glassEffectID with @Namespace for morphing transitions",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-imagerenderer-for-rendering-swiftui-views",
          "description": "Use ImageRenderer for rendering SwiftUI views",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-interactive-only-for-tappable-focusable-elements",
          "description": "Use .interactive() only for tappable/focusable elements",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-lazyvstack-lazyhstack-for-large-lists",
          "description": "Use LazyVStack/LazyHStack for large lists",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-let-for-read-only-values-var-onchange-for-reactive-reads",
          "description": "Use let for read-only values; var + .onChange() for reactive reads",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-modern-apis-no-deprecated-modifiers-or-patterns-see-references-mod",
          "description": "Use modern APIs (no deprecated modifiers or patterns, see references/modern-apis.md)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-native-glasseffect-glasseffectcontainer-and-glass-button-styles",
          "description": "Use native glassEffect, GlassEffectContainer, and glass button styles",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-navigationdestination-for-for-type-safe-navigation",
          "description": "Use navigationDestination(for:) for type-safe navigation",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-observable-for-shared-state-with-mainactor-if-not-using-default-ac",
          "description": "Use @Observable for shared state (with @MainActor if not using default actor isolation)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-relative-layout-over-hard-coded-constants",
          "description": "Use relative layout over hard-coded constants",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-scrollviewreader-for-programmatic-scrolling-with-stable-ids",
          "description": "Use ScrollViewReader for programmatic scrolling with stable IDs",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-self-printchanges-to-debug-unexpected-view-updates",
          "description": "Use Self.printChanges() to debug unexpected view updates",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-task-id-for-value-dependent-tasks",
          "description": "Use .task(id:) for value-dependent tasks",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-task-modifier-for-automatic-cancellation-of-async-work",
          "description": "Use .task modifier for automatic cancellation of async work",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.use-viewbuilder-functions-only-for-small-simple-sections",
          "description": "Use @ViewBuilder functions only for small, simple sections",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.verify-list-patterns-use-stable-identity-see-references-list-patterns-",
          "description": "Verify list patterns use stable identity (see references/list-patterns.md)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.guideline.ios-swiftui-expert.views-should-work-in-any-context-don-t-assume-screen-size-or-presentat",
          "description": "Views should work in any context (don't assume screen size or presentation style)",
          "severity": "WARN",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "DECLARATIVE",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-anyview",
          "description": "Avoid AnyView in list rows",
          "severity": "ERROR",
          "platform": "ios",
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "confidence": "MEDIUM",
          "locked": true,
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-contains-user-filter",
          "description": "Avoid contains() in user-facing filter flows; prefer localizedStandardContains() for SwiftUI search text matching.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "MEDIUM",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-corner-radius",
          "description": "Avoid cornerRadius in modern SwiftUI code; prefer clipShape(.rect(cornerRadius:)).",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-font-weight-bold",
          "description": "Avoid fontWeight(.bold) in SwiftUI text styling; prefer bold() for straightforward emphasis.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-foreach-indices",
          "description": "Avoid ForEach over .indices in dynamic SwiftUI content; prefer stable element identity or explicit stable IDs.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-foreground-color",
          "description": "Avoid foregroundColor in modern SwiftUI code; prefer foregroundStyle.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-geometryreader",
          "description": "Avoid GeometryReader in modern SwiftUI layout code when containerRelativeFrame(), visualEffect(), or simpler layout APIs are enough.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "MEDIUM",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-legacy-onchange",
          "description": "Avoid legacy single-parameter onChange in modern SwiftUI code; prefer modern overloads.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-legacy-swiftui-observable-wrapper",
          "description": "Avoid @StateObject and @ObservedObject in modern SwiftUI code paths that can adopt @Observable with @State/@Bindable.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "MEDIUM",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-navigation-view",
          "description": "Avoid NavigationView in modern iOS code; prefer NavigationStack.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-observable-object",
          "description": "Avoid ObservableObject in modern iOS code; prefer @Observable where available.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "MEDIUM",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-on-tap-gesture",
          "description": "Avoid onTapGesture for button-like interactions in production iOS code.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "MEDIUM",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-passed-value-state-wrapper",
          "description": "Avoid storing values injected from a parent as @State or @StateObject; prefer let, @Binding, or owned @State created locally.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-scrollview-shows-indicators",
          "description": "Avoid ScrollView(showsIndicators: false) in SwiftUI code; prefer scrollIndicators(.hidden).",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-sheet-is-presented",
          "description": "Avoid .sheet(isPresented:) in SwiftUI presentation flows; prefer .sheet(item:) when possible.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "MEDIUM",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-string-format",
          "description": "Avoid String(format:) in SwiftUI presentation code; prefer modern formatting APIs.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-tab-item",
          "description": "Avoid tabItem in modern SwiftUI code paths that can adopt the new Tab API.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "MEDIUM",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        },
        {
          "id": "skills.ios.no-uiscreen-main-bounds",
          "description": "Avoid UIScreen.main.bounds in SwiftUI layout code; prefer relative layout APIs.",
          "severity": "WARN",
          "platform": "ios",
          "confidence": "HIGH",
          "stage": "PRE_PUSH",
          "locked": true,
          "sourceSkill": "ios-swiftui-expert-guidelines",
          "sourcePath": "vendor/skills/swiftui-expert-skill/SKILL.md",
          "evaluationMode": "AUTO",
          "origin": "core"
        }
      ]
    }
  ]
}
