{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "stack": "android",
  "description": "Android / Jetpack Compose / Kotlin test gap rules. Sources in *.kt; tests under app/src/test/ or app/src/androidTest/.",
  "sourceExtensions": [".kt", ".java"],
  "testPathSuffixes": ["Test.kt", "Tests.kt", "Test.java"],
  "testPathContains": ["/src/test/", "/src/androidTest/", "/test/", "/tests/"],
  "excludePathGlobs": ["build/", ".gradle/", "generated/", "**/BuildConfig.java", "**/R.java"],
  "publicApiPatterns": [
    { "id": "open_class", "regex": "\\bopen\\s+class\\s+([A-Z][A-Za-z0-9_]*)" },
    { "id": "open_fun", "regex": "\\bopen\\s+fun\\s+([a-z_][A-Za-z0-9_]*)" },
    { "id": "public_fun", "regex": "^\\s*(?:public\\s+)?fun\\s+([a-z_][A-Za-z0-9_]*)" },
    { "id": "public_class", "regex": "^\\s*(?:public\\s+)?class\\s+([A-Z][A-Za-z0-9_]*)" },
    { "id": "jvmstatic", "regex": "@JvmStatic\\b" },
    { "id": "interface", "regex": "^\\s*(?:public\\s+)?interface\\s+([A-Z][A-Za-z0-9_]*)" }
  ],
  "composablePatterns": [
    {
      "id": "composable_fun",
      "regex": "@Composable\\s+(?:public\\s+|internal\\s+)?fun\\s+([A-Z][A-Za-z0-9_]*)"
    }
  ],
  "expectedTestKindsForComposable": ["compose-ui-test"],
  "hint": "Cover @Composable functions with createComposeRule() + onNodeWithText/Tag/ContentDescription assertions; ViewModels with runTest + Turbine."
}
