[
  {
    "package": "agents",
    "ext": ".kt",
    "methods": 5,
    "skip": "",
    "structure_score": 0.24757281553398058,
    "sore": "slot?.(defaultCapabilityId+summarize)?.ToolInvocationRequest?.ToolingRequest?.ToolInvocationResult?.(String+answer+any+assertEquals+capture+captured+every+generateText+invoke+invokeTools+promptRunner+toolProfile+verify)+?.prompt?.contains+?",
    "gbnf": "root ::= \"slot\"? (\"defaultCapabilityId\" | \"summarize\")? \"ToolInvocationRequest\"? \"ToolingRequest\"? \"ToolInvocationResult\"? (\"String\" | \"answer\" | \"any\" | \"assertEquals\" | \"capture\" | \"captured\" | \"every\" | \"generateText\" | \"invoke\" | \"invokeTools\" | \"promptRunner\" | \"toolProfile\" | \"verify\")* \"prompt\"? \"contains\"*",
    "gbnf_ok": true
  },
  {
    "package": "agents/capability/ports/src/main/kotlin/eu/corentic/springrag/agent/capability",
    "ext": ".kt",
    "methods": 5,
    "skip": "malformed_grammar",
    "structure_score": 0
  },
  {
    "package": "agents/capability/support/src/main/kotlin/eu/corentic/springrag/agent/capability/support",
    "ext": ".kt",
    "methods": 5,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/capability/support/src/test/kotlin/eu/corentic/springrag/agent/capability/support",
    "ext": ".kt",
    "methods": 6,
    "skip": "low_structure",
    "structure_score": 0.09836065573770492
  },
  {
    "package": "agents/examples/simple-rag/src/main/kotlin/eu/corentic/springrag/example/rag/simple",
    "ext": ".kt",
    "methods": 9,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/examples/simple-rag/src/test/kotlin/eu/corentic/springrag/example/rag/simple",
    "ext": ".kt",
    "methods": 14,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/rag/embabel/src/main/kotlin/eu/corentic/springrag/agent/rag/embabel",
    "ext": ".kt",
    "methods": 58,
    "skip": "low_structure",
    "structure_score": 0.041584158415841586
  },
  {
    "package": "agents/rag/embabel/src/main/kotlin/eu/corentic/springrag/agent/rag/embabel/librechat",
    "ext": ".kt",
    "methods": 13,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/rag/embabel/src/test/kotlin/eu/corentic/springrag/agent/rag/embabel",
    "ext": ".kt",
    "methods": 36,
    "skip": "malformed_grammar",
    "structure_score": 0
  },
  {
    "package": "agents/rag/embabel/src/test/kotlin/eu/corentic/springrag/testsupport",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/rag/ports/src/main/kotlin/eu/corentic/springrag/agent/rag",
    "ext": ".kt",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/rag/ports/src/test/kotlin/eu/corentic/springrag/agent/rag",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/rag/ports/src/test/kotlin/eu/corentic/springrag/model",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/rag/support/src/main/kotlin/eu/corentic/springrag/agent/rag/support",
    "ext": ".kt",
    "methods": 13,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/rag/support/src/test/kotlin/eu/corentic/springrag/agent/rag/support",
    "ext": ".kt",
    "methods": 11,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/summarizer/embabel/src/main/kotlin/eu/corentic/springrag/agent/summarizer/embabel",
    "ext": ".kt",
    "methods": 13,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/summarizer/embabel/src/test/kotlin/eu/corentic/springrag/agent/summarizer/embabel",
    "ext": ".kt",
    "methods": 14,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/tooling/agent/src/main/kotlin/eu/corentic/springrag/agent/tooling/agent",
    "ext": ".kt",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/tooling/embabel/src/main/kotlin/eu/corentic/springrag/agent/tooling/embabel",
    "ext": ".kt",
    "methods": 12,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/tooling/embabel/src/main/kotlin/eu/corentic/springrag/agent/tooling/embabel/recording",
    "ext": ".kt",
    "methods": 11,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/tooling/embabel/src/test/kotlin/eu/corentic/springrag/agent/tooling/embabel",
    "ext": ".kt",
    "methods": 6,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/wikipedia/adapters/src/main/kotlin/eu/corentic/springrag/agent/wikipedia",
    "ext": ".kt",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/wikipedia/adapters/src/test/kotlin/eu/corentic/springrag/agent/wikipedia",
    "ext": ".kt",
    "methods": 8,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/wikipedia/static/src/main/kotlin/eu/corentic/springrag/agent/wikipedia",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "agents/wikipedia/static/src/test/kotlin/eu/corentic/springrag/agent/wikipedia",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "app/src",
    "ext": ".kt",
    "methods": 6,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "app/src/e2eTest/kotlin/eu/corentic/springrag/e2e/cucumber/steps",
    "ext": ".kt",
    "methods": 17,
    "skip": "malformed_grammar",
    "structure_score": 0
  },
  {
    "package": "app/src/integrationTest/kotlin/eu/corentic/springrag/config",
    "ext": ".kt",
    "methods": 15,
    "skip": "",
    "structure_score": 0.25925925925925924,
    "sore": "(ChatModel+Driver+QdrantClient+Session+String+also+any+close+every+mockk+run+session)+?.return JobRepositoryTestUtils(jobRepository)?.defaultOptions?.JobRepositoryTestUtils?.builder+?.build+?",
    "gbnf": "root ::= (\"ChatModel\" | \"Driver\" | \"QdrantClient\" | \"Session\" | \"String\" | \"also\" | \"any\" | \"close\" | \"every\" | \"mockk\" | \"run\" | \"session\")* \"return JobRepositoryTestUtils\" \"jobRepository\"? \"defaultOptions\"? \"JobRepositoryTestUtils\"? \"builder\"* \"build\"*",
    "gbnf_ok": true
  },
  {
    "package": "app/src/integrationTest/kotlin/eu/corentic/springrag/controller",
    "ext": ".kt",
    "methods": 5,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "app/src/integrationTest/kotlin/eu/corentic/springrag/service",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "app/src/systemTest/kotlin/eu/corentic/springrag/config",
    "ext": ".kt",
    "methods": 14,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "app/src/systemTest/kotlin/eu/corentic/springrag/system",
    "ext": ".kt",
    "methods": 46,
    "skip": "malformed_grammar",
    "structure_score": 0
  },
  {
    "package": "app/src/test/kotlin/eu/corentic/springrag/architecture",
    "ext": ".kt",
    "methods": 87,
    "skip": "malformed_grammar",
    "structure_score": 0
  },
  {
    "package": "app/src/test/kotlin/eu/corentic/springrag/config",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "buildSrc/src/main/kotlin",
    "ext": ".kt",
    "methods": 8,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "buildSrc/src/test/kotlin",
    "ext": ".kt",
    "methods": 5,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "entrypoints/agent-mcp-server/src/main/kotlin/eu/corentic/springrag/mcp",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "entrypoints/agent-mcp-server/src/test/kotlin/eu/corentic/springrag/mcp",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "entrypoints/web/src/main/kotlin/eu/corentic/springrag/config",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "entrypoints/web/src/main/kotlin/eu/corentic/springrag/controller",
    "ext": ".kt",
    "methods": 58,
    "skip": "malformed_grammar",
    "structure_score": 0
  },
  {
    "package": "entrypoints/web/src/main/kotlin/eu/corentic/springrag/controller/librechat",
    "ext": ".kt",
    "methods": 29,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "entrypoints/web/src/main/kotlin/eu/corentic/springrag/controller/web",
    "ext": ".kt",
    "methods": 6,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "entrypoints/web/src/test/kotlin/eu/corentic/springrag/config",
    "ext": ".kt",
    "methods": 4,
    "skip": "",
    "structure_score": 0.6417910447761194,
    "sore": "from+?.bindToWebHandler+?.webTestClient?.post+?.WebHandler?.(OK+response+setStatusCode)+?.setComplete+?.webFilter+?.build+?.(AtomicReference+String)+?.WebFilterChain?.(assertEquals+assertNull+block+empty+filter+get+set)+?.uri+?.exchange+?.expectStatus+?.isOk?",
    "gbnf": "root ::= \"from\"* \"bindToWebHandler\"* \"webTestClient\"? \"post\"* \"WebHandler\"? (\"OK\" | \"response\" | \"setStatusCode\")* \"setComplete\"* \"webFilter\"* \"build\"* (\"AtomicReference\" | \"String\")* \"WebFilterChain\"? (\"assertEquals\" | \"assertNull\" | \"block\" | \"empty\" | \"filter\" | \"get\" | \"set\")* \"uri\"* \"exchange\"* \"expectStatus\"* \"isOk\"?",
    "gbnf_ok": true
  },
  {
    "package": "entrypoints/web/src/test/kotlin/eu/corentic/springrag/controller",
    "ext": ".kt",
    "methods": 83,
    "skip": "low_structure",
    "structure_score": 0.032667876588021776
  },
  {
    "package": "entrypoints/web/src/test/kotlin/eu/corentic/springrag/controller/auth",
    "ext": ".kt",
    "methods": 5,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "entrypoints/web/src/test/kotlin/eu/corentic/springrag/controller/librechat",
    "ext": ".kt",
    "methods": 46,
    "skip": "low_structure",
    "structure_score": 0.05930232558139535
  },
  {
    "package": "entrypoints/web/src/test/kotlin/eu/corentic/springrag/controller/web",
    "ext": ".kt",
    "methods": 10,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/ai-provider/src/main/kotlin/eu/corentic/springrag/config",
    "ext": ".kt",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/ai-provider/src/main/kotlin/eu/corentic/springrag/health",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/ai-provider/src/test/kotlin/eu/corentic/springrag/config",
    "ext": ".kt",
    "methods": 6,
    "skip": "",
    "structure_score": 0.3448275862068966,
    "sore": "assertThrows?.IllegalArgumentException?.java?.EmbabelAiHttpClientProperties?.OllamaClientProperties?.Timeout+?.(assertEquals+baseUrl+ofSeconds+readTimeout+writeTimeout)+.timeout?.connectTimeout?.read?",
    "gbnf": "root ::= \"assertThrows\"? \"IllegalArgumentException\"? \"java\"? \"EmbabelAiHttpClientProperties\"? \"OllamaClientProperties\"? \"Timeout\"* (\"assertEquals\" | \"baseUrl\" | \"ofSeconds\" | \"readTimeout\" | \"writeTimeout\")+ \"timeout\"? \"connectTimeout\"? \"read\"?",
    "gbnf_ok": true
  },
  {
    "package": "infrastructure/adapters/ai-provider/src/test/kotlin/eu/corentic/springrag/health",
    "ext": ".kt",
    "methods": 4,
    "skip": "",
    "structure_score": 0.5142857142857142,
    "sore": "`when`.listModels+.thenThrow+?.thenReturn+?.RuntimeException?.ListModelResponse+?.listOf+?.(Model+now)+?.requireNotNull+.OllamaHealthIndicator.NoOpCircuitBreakerFactory.health+.block+.assertEquals.status.code",
    "gbnf": "root ::= \"`when`\" \"listModels\"+ \"thenThrow\"* \"thenReturn\"* \"RuntimeException\"? \"ListModelResponse\"* \"listOf\"* (\"Model\" | \"now\")* \"requireNotNull\"+ \"OllamaHealthIndicator\" \"NoOpCircuitBreakerFactory\" \"health\"+ \"block\"+ \"assertEquals\" \"status\" \"code\"",
    "gbnf_ok": true
  },
  {
    "package": "infrastructure/adapters/ai-provider/src/test/kotlin/eu/corentic/springrag/service/embedding",
    "ext": ".kt",
    "methods": 5,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/ai-provider/src/test/kotlin/eu/corentic/springrag/testsupport",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/chat-memory/src/test/kotlin/eu/corentic/springrag/config",
    "ext": ".kt",
    "methods": 6,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/doc-parser/src",
    "ext": ".kt",
    "methods": 6,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/doc-parser/src/main/kotlin/eu/corentic/springrag/config",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/doc-parser/src/main/kotlin/eu/corentic/springrag/service/docling",
    "ext": ".kt",
    "methods": 21,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/doc-parser/src/systemTest/kotlin/eu/corentic/springrag/config",
    "ext": ".kt",
    "methods": 6,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/doc-parser/src/test/kotlin/eu/corentic/springrag/config",
    "ext": ".kt",
    "methods": 12,
    "skip": "",
    "structure_score": 0.39949748743718594,
    "sore": "PipelineOptions?.doclingServeApi+?.DoclingConfig?.trimIndent+?.(assertNull+concurrency+layoutBatchSize+ocrBatchSize+tableBatchSize)+?.assertNotNull+?.baseUrl?.lines+?.documentTimeout?.toString+?.(imageExportMode+includeImages+options+useS3Target)+?.(indexOfFirst+startsWith+trimStart)+?.s3Target?.(assertThat+contains+doesNotContain+isGreaterThan)+?.bucket?.assertThatThrownBy?.validateCriticalSettings+?.isInstanceOf+?.IllegalStateException?.java?.hasMessageContaining+?",
    "gbnf": "root ::= \"PipelineOptions\"? \"doclingServeApi\"* \"DoclingConfig\"? \"trimIndent\"* (\"assertNull\" | \"concurrency\" | \"layoutBatchSize\" | \"ocrBatchSize\" | \"tableBatchSize\")* \"assertNotNull\"* \"baseUrl\"? \"lines\"* \"documentTimeout\"? \"toString\"* (\"imageExportMode\" | \"includeImages\" | \"options\" | \"useS3Target\")* (\"indexOfFirst\" | \"startsWith\" | \"trimStart\")* \"s3Target\"? (\"assertThat\" | \"contains\" | \"doesNotContain\" | \"isGreaterThan\")* \"bucket\"? \"assertThatThrownBy\"? \"validateCriticalSettings\"* \"isInstanceOf\"* \"IllegalStateException\"? \"java\"? \"hasMessageContaining\"*",
    "gbnf_ok": true
  },
  {
    "package": "infrastructure/adapters/doc-parser/src/test/kotlin/eu/corentic/springrag/health",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/doc-parser/src/test/kotlin/eu/corentic/springrag/service/docling",
    "ext": ".kt",
    "methods": 10,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/doc-parser/src/test/kotlin/eu/corentic/springrag/testsupport",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/health",
    "ext": ".kt",
    "methods": 7,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/model/graph",
    "ext": ".kt",
    "methods": 9,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/repository",
    "ext": ".kt",
    "methods": 24,
    "skip": "malformed_grammar",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/agent",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/cleanup",
    "ext": ".kt",
    "methods": 4,
    "skip": "low_structure",
    "structure_score": 0.13846153846153847
  },
  {
    "package": "infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/graph",
    "ext": ".kt",
    "methods": 12,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/port/adapter",
    "ext": ".kt",
    "methods": 45,
    "skip": "malformed_grammar",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/search/src/main/kotlin/eu/corentic/springrag/service/storage",
    "ext": ".kt",
    "methods": 40,
    "skip": "malformed_grammar",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/search/src/systemTest/kotlin/eu/corentic/springrag/config",
    "ext": ".kt",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/search/src/systemTest/kotlin/eu/corentic/springrag/repository/graph",
    "ext": ".kt",
    "methods": 23,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/search/src/systemTest/kotlin/eu/corentic/springrag/system",
    "ext": ".kt",
    "methods": 6,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/config",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/health",
    "ext": ".kt",
    "methods": 6,
    "skip": "low_structure",
    "structure_score": 0.12565445026178013
  },
  {
    "package": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/model/graph",
    "ext": ".kt",
    "methods": 7,
    "skip": "",
    "structure_score": 0.47368421052631576,
    "sore": "(ImageData+PageNode)+?.(PictureElement+SectionHeaderElement)?.copy+?.assertEquals+?.assertNotEquals?.(hashCode+label)+?",
    "gbnf": "root ::= (\"ImageData\" | \"PageNode\")* (\"PictureElement\" | \"SectionHeaderElement\")? \"copy\"* \"assertEquals\"* \"assertNotEquals\"? (\"hashCode\" | \"label\")*",
    "gbnf_ok": true
  },
  {
    "package": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/repository",
    "ext": ".kt",
    "methods": 19,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/service/cleanup",
    "ext": ".kt",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/service/graph",
    "ext": ".kt",
    "methods": 30,
    "skip": "low_structure",
    "structure_score": 0.056199821587867974
  },
  {
    "package": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/service/port/adapter",
    "ext": ".kt",
    "methods": 28,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/service/storage",
    "ext": ".kt",
    "methods": 3,
    "skip": "",
    "structure_score": 0.5882352941176471,
    "sore": "assertNull?.parseS3Location.error+?.(assertEquals+bucket)+?.key?",
    "gbnf": "root ::= \"assertNull\"? \"parseS3Location\" \"error\"* (\"assertEquals\" | \"bucket\")* \"key\"?",
    "gbnf_ok": true
  },
  {
    "package": "infrastructure/adapters/search/src/test/kotlin/eu/corentic/springrag/testsupport",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/chat/src/integrationTest/kotlin/eu/corentic/springrag/service/chat",
    "ext": ".kt",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/chat/src/main/kotlin/eu/corentic/springrag/service/chat",
    "ext": ".kt",
    "methods": 6,
    "skip": "malformed_grammar",
    "structure_score": 0
  },
  {
    "package": "modules/chat/src/systemTest/kotlin/eu/corentic/springrag/config",
    "ext": ".kt",
    "methods": 15,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/chat/src/systemTest/kotlin/eu/corentic/springrag/system",
    "ext": ".kt",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/chat/src/test/kotlin/eu/corentic/springrag/service/chat",
    "ext": ".kt",
    "methods": 8,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/common/src/main/kotlin/eu/corentic/springrag/common",
    "ext": ".kt",
    "methods": 7,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/common/src/main/kotlin/eu/corentic/springrag/common/ids",
    "ext": ".kt",
    "methods": 18,
    "skip": "",
    "structure_score": 0.41860465116279066,
    "sore": "(removeSuffix+trim)+?.of+?.requireNonBlankNoWhitespace?.(DocumentId+JobId+KnowledgeBaseId+LogicalDocumentId)?.trimStart+?.requireSafeId?.return StorageUri(\"$base/$relative\")?.StorageUri?.requireNonBlank?.(contains+isNotEmpty+require)+?.return Filename(normalized)?.return BatchId(normalized)?.any+?.matches+?.Filename?.BatchId?.isWhitespace+?.return normalized?",
    "gbnf": "root ::= (\"removeSuffix\" | \"trim\")* \"of\"* \"requireNonBlankNoWhitespace\"? (\"DocumentId\" | \"JobId\" | \"KnowledgeBaseId\" | \"LogicalDocumentId\")? \"trimStart\"* \"requireSafeId\"? \"return StorageUri\" \"\\\"$base/$relative\\\"\"? \"StorageUri\"? \"requireNonBlank\"? (\"contains\" | \"isNotEmpty\" | \"require\")* \"return Filename\" \"normalized\"? \"return BatchId\" \"normalized\"? \"any\"* \"matches\"* \"Filename\"? \"BatchId\"? \"isWhitespace\"* \"return normalized\"?",
    "gbnf_ok": true
  },
  {
    "package": "modules/common/src/test/kotlin/eu/corentic/springrag/common/ids",
    "ext": ".kt",
    "methods": 8,
    "skip": "low_structure",
    "structure_score": 0.020833333333333332
  },
  {
    "package": "modules/ingestion/src/integrationTest/kotlin/eu/corentic/springrag/service/job",
    "ext": ".kt",
    "methods": 34,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch",
    "ext": ".kt",
    "methods": 16,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/listener",
    "ext": ".kt",
    "methods": 16,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/model",
    "ext": ".kt",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/partition",
    "ext": ".kt",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/reader",
    "ext": ".kt",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/batch/writer",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/config",
    "ext": ".kt",
    "methods": 26,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/service/chunk",
    "ext": ".kt",
    "methods": 18,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/service/document",
    "ext": ".kt",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/main/kotlin/eu/corentic/springrag/service/job",
    "ext": ".kt",
    "methods": 62,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch",
    "ext": ".kt",
    "methods": 17,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/listener",
    "ext": ".kt",
    "methods": 34,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/model",
    "ext": ".kt",
    "methods": 8,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/partition",
    "ext": ".kt",
    "methods": 7,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/processor",
    "ext": ".kt",
    "methods": 5,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/reader",
    "ext": ".kt",
    "methods": 12,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/batch/writer",
    "ext": ".kt",
    "methods": 14,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/service/chunk",
    "ext": ".kt",
    "methods": 8,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/ingestion/src/test/kotlin/eu/corentic/springrag/service/job",
    "ext": ".kt",
    "methods": 49,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/knowledgebase/ports/src/main/kotlin/eu/corentic/springrag/model",
    "ext": ".kt",
    "methods": 5,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/knowledgebase/src/main/kotlin/eu/corentic/springrag/service/knowledgebase",
    "ext": ".kt",
    "methods": 11,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/knowledgebase/src/test/kotlin/eu/corentic/springrag/service/knowledgebase",
    "ext": ".kt",
    "methods": 16,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/security/src/main/kotlin/eu/corentic/springrag/security/config",
    "ext": ".kt",
    "methods": 5,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/security/src/main/kotlin/eu/corentic/springrag/security/service",
    "ext": ".kt",
    "methods": 10,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/security/src/test/kotlin/eu/corentic/springrag/security/config",
    "ext": ".kt",
    "methods": 6,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "modules/security/src/test/kotlin/eu/corentic/springrag/security/service",
    "ext": ".kt",
    "methods": 15,
    "skip": "",
    "structure_score": 0.30393996247654786,
    "sore": "(encode+every+existsByUsername)+?.JwtService?.init+?.JwtProperties?.UserService?.generateToken+?.hmacShaKeyFor+?.assertFalse?.toByteArray+?.UTF_8?.builder+?.subject+?.issuedAt+?.(Date+expiration)+?.currentTimeMillis+?.signWith+?.compact+?.(Err+Outcome+PasswordPolicyViolationException+ROLE_USER+String+UserAlreadyExistsException+any+assertEquals+assertThrows+assertTrue+authorities+authority+emptyList+error+extractAuthorities+extractUsername+firstArg+getOrThrow+java+listOf+map+match+parseToken+password+registerUser+role+save+username+validateToken+verify)+?.JwtValidationError?.errorCode?.(Expired+InvalidSignature+Malformed)?",
    "gbnf": "root ::= (\"encode\" | \"every\" | \"existsByUsername\")* \"JwtService\"? \"init\"* \"JwtProperties\"? \"UserService\"? \"generateToken\"* \"hmacShaKeyFor\"* \"assertFalse\"? \"toByteArray\"* \"UTF_8\"? \"builder\"* \"subject\"* \"issuedAt\"* (\"Date\" | \"expiration\")* \"currentTimeMillis\"* \"signWith\"* \"compact\"* (\"Err\" | \"Outcome\" | \"PasswordPolicyViolationException\" | \"ROLE_USER\" | \"String\" | \"UserAlreadyExistsException\" | \"any\" | \"assertEquals\" | \"assertThrows\" | \"assertTrue\" | \"authorities\" | \"authority\" | \"emptyList\" | \"error\" | \"extractAuthorities\" | \"extractUsername\" | \"firstArg\" | \"getOrThrow\" | \"java\" | \"listOf\" | \"map\" | \"match\" | \"parseToken\" | \"password\" | \"registerUser\" | \"role\" | \"save\" | \"username\" | \"validateToken\" | \"verify\")* \"JwtValidationError\"? \"errorCode\"? (\"Expired\" | \"InvalidSignature\" | \"Malformed\")?",
    "gbnf_ok": true
  },
  {
    "package": "platform/test-support/src/main/kotlin/eu/corentic/springrag/testcontainers",
    "ext": ".kt",
    "methods": 13,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "platform/test-support/src/test/kotlin/eu/corentic/springrag/testcontainers",
    "ext": ".kt",
    "methods": 5,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "(other)",
    "ext": ".kt",
    "methods": 6,
    "skip": "",
    "structure_score": 0
  },
  {
    "package": "compose/patches",
    "ext": ".js",
    "methods": 17,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "testing/steps",
    "ext": ".js",
    "methods": 68,
    "skip": "low_structure",
    "structure_score": 0.07984790874524714
  },
  {
    "package": "testing/support",
    "ext": ".js",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "(other)",
    "ext": ".js",
    "methods": 1,
    "skip": "",
    "structure_score": 0
  },
  {
    "package": "tools/setup-ui",
    "ext": ".go",
    "methods": 44,
    "skip": "low_structure",
    "structure_score": 0.0482573726541555
  }
]