From 8a05f297245a9a1cc531dc454a1870654230b305 Mon Sep 17 00:00:00 2001
From: Amit Kumar
Date: Wed, 13 May 2026 04:18:28 +0000
Subject: [PATCH 1/3] =?UTF-8?q?feat:=20Phase=206=20cutover=20=E2=80=94=20d?=
=?UTF-8?q?elete=20Java=20reference,=20ship=20v1.0.0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This commit is the destructive cutover finalizing the Java→Go port.
~133k lines deleted, ~720 added (docs + security.yml retarget).
## Deleted
- `src/` (Java + frontend + test trees: ~640 files, ~133k LoC)
- `pom.xml`, `spotbugs-exclude.xml` (Maven + SpotBugs config)
- `.github/workflows/ci-java.yml` — Java compile + unit-test gate
- `.github/workflows/release-java.yml` — Java release flow
- `.github/workflows/beta-java.yml` — Java beta release flow
- `.github/workflows/go-parity.yml` — Java↔Go parity test (Java jar
build that fed it is gone)
## Updated
- `.gitignore` — stripped Java/Maven/frontend patterns, kept Go +
cross-cutting (env, secrets, OS, IDE, codeiq runtime artifacts).
- `.github/workflows/security.yml` — OSV-Scanner now reads
`go/go.mod`; Semgrep swapped `p/java` → `p/golang`; jscpd retargeted
to `go/cmd go/internal` with Go-tuned ignore patterns.
- `README.md` — Go-native rewrite: install via pre-built binary or
Homebrew tap, Cosign verify recipe, CLI reference for the Go
command set, MCP integration snippet for `.mcp.json`.
- `CLAUDE.md` — full rewrite (43 KB → ~16 KB). Go module layout,
detector authoring contract (with detectors_register.go choke-point
warning), Kuzu v0.7.1 quirks, MCP SDK v1.6 API shape, RE2-vs-Java
regex gotchas, perf war stories.
- `PROJECT_SUMMARY.md` — refreshed for Go-only entrypoints + directory
map; updated `Where to look next` links.
- `CHANGELOG.md` — added `[v1.0.0] - 2026-05-13` entry summarizing
Phase 1-5 surface + Phase 6 removal.
## Migration notes for anyone needing Java history
The pre-cutover Java state is preserved on `origin/main` at commit
`c363727` (the squash-merge that landed the Go port). Recovery:
git show c363727:src/main/java/ # one file
git checkout c363727 -- src/main/java/ # restore files
## Test plan
- [x] `cd go && CGO_ENABLED=1 go test ./... -count=1` → 828 pass
- [x] yaml-lint on the modified workflow + the goreleaser config
- [x] `git status --short` clean after stage
- [ ] CI green on the cutover PR (go-ci, perf-gate, security,
CodeQL, Scorecard, Socket)
- [ ] After merge: `git tag -s v1.0.0` triggers release-go.yml and
produces a draft GitHub Release with multi-arch archives +
SBOMs + Cosign-signed checksums.
Co-Authored-By: Claude Opus 4.7 (1M context)
---
.github/workflows/beta-java.yml | 72 -
.github/workflows/ci-java.yml | 54 -
.github/workflows/go-parity.yml | 101 -
.github/workflows/release-java.yml | 106 -
.github/workflows/security.yml | 96 +-
.gitignore | 64 +-
CHANGELOG.md | 43 +
CLAUDE.md | 806 ++--
PROJECT_SUMMARY.md | 236 +-
README.md | 392 +-
pom.xml | 643 ---
spotbugs-exclude.xml | 93 -
src/assembly/source-bundle.xml | 58 -
src/main/antlr4/imports/UnicodeClasses.g4 | 1656 -------
.../iq/grammar/cpp/CPP14Lexer.g4 | 398 --
.../iq/grammar/cpp/CPP14Parser.g4 | 1076 -----
.../iq/grammar/csharp/CSharpLexer.g4 | 1059 -----
.../iq/grammar/csharp/CSharpParser.g4 | 1325 ------
.../csharp/CSharpPreprocessorParser.g4 | 48 -
.../iq/grammar/golang/GoLexer.g4 | 223 -
.../iq/grammar/golang/GoParser.g4 | 541 ---
.../iq/grammar/javascript/JavaScriptLexer.g4 | 285 --
.../iq/grammar/javascript/JavaScriptParser.g4 | 584 ---
.../iq/grammar/kotlin/KotlinLexer.g4 | 450 --
.../iq/grammar/kotlin/KotlinParser.g4 | 893 ----
.../iq/grammar/kotlin/UnicodeClasses.g4 | 1656 -------
.../iq/grammar/python/Python3Lexer.g4 | 313 --
.../iq/grammar/python/Python3Parser.g4 | 694 ---
.../iq/grammar/rust/RustLexer.g4 | 270 --
.../iq/grammar/rust/RustParser.g4 | 1198 ------
.../randomcodespace/iq/grammar/scala/Scala.g4 | 1383 ------
.../iq/grammar/typescript/TypeScriptLexer.g4 | 315 --
.../iq/grammar/typescript/TypeScriptParser.g4 | 984 -----
src/main/frontend/.gitignore | 4 -
src/main/frontend/index.html | 14 -
src/main/frontend/package-lock.json | 2077 ---------
src/main/frontend/package.json | 35 -
...d6e968bcc3e3f9fb8eaecdf7ea2f3d2ab41deb.png | Bin 72307 -> 0 bytes
...e22f62153becae158a32a0ef8aa8037da1508.webm | Bin 158252 -> 0 bytes
...c72b585fa3d6ad6b85b44878d2427a335bdf9de.md | 432 --
...2072c8aa5cd97f91093ec8cad3e5f7b48b55c66.md | 222 -
...d00512fbfc05f51c50987f6e805c0156f31b2d.png | Bin 13387 -> 0 bytes
...b10ff67df8fe6b39c93a7519699a0d4e67b55.webm | Bin 234633 -> 0 bytes
.../frontend/playwright-report/index.html | 90 -
src/main/frontend/playwright.config.ts | 104 -
src/main/frontend/public/favicon.svg | 4 -
src/main/frontend/src/App.tsx | 14 -
.../frontend/src/components/AppLayout.tsx | 88 -
src/main/frontend/src/components/Icons.tsx | 27 -
.../frontend/src/context/ThemeContext.tsx | 24 -
src/main/frontend/src/env.d.ts | 1 -
src/main/frontend/src/hooks/useApi.ts | 42 -
src/main/frontend/src/index.css | 134 -
src/main/frontend/src/lib/api.ts | 114 -
src/main/frontend/src/lib/mcp-tools.ts | 333 --
src/main/frontend/src/main.tsx | 19 -
src/main/frontend/src/pages/Dashboard.tsx | 485 ---
src/main/frontend/src/types/api.ts | 156 -
src/main/frontend/test-results/.last-run.json | 4 -
.../frontend/tests/e2e/accessibility.spec.ts | 210 -
.../frontend/tests/e2e/edge-cases.spec.ts | 240 --
src/main/frontend/tests/e2e/file-tree.spec.ts | 260 --
src/main/frontend/tests/e2e/graph.spec.ts | 217 -
.../frontend/tests/e2e/mcp-console.spec.ts | 221 -
.../frontend/tests/e2e/navigation.spec.ts | 196 -
.../frontend/tests/e2e/performance.spec.ts | 143 -
.../frontend/tests/e2e/responsive.spec.ts | 175 -
src/main/frontend/tests/e2e/search.spec.ts | 193 -
src/main/frontend/tests/utils/test-helpers.ts | 227 -
src/main/frontend/tsconfig.json | 25 -
src/main/frontend/tsconfig.test.json | 11 -
src/main/frontend/vite.config.ts | 33 -
.../randomcodespace/iq/CodeIqApplication.java | 168 -
.../iq/analyzer/AnalysisResult.java | 44 -
.../randomcodespace/iq/analyzer/Analyzer.java | 1844 --------
.../analyzer/ArchitectureKeywordFilter.java | 129 -
.../iq/analyzer/ConfigScanner.java | 543 ---
.../iq/analyzer/DiscoveredFile.java | 16 -
.../iq/analyzer/FileClassifier.java | 139 -
.../iq/analyzer/FileDiscovery.java | 251 --
.../iq/analyzer/GraphBuilder.java | 227 -
.../iq/analyzer/InfraEndpoint.java | 40 -
.../iq/analyzer/InfrastructureRegistry.java | 90 -
.../iq/analyzer/LayerClassifier.java | 180 -
.../iq/analyzer/ServiceDetector.java | 589 ---
.../iq/analyzer/StructuredParser.java | 203 -
.../iq/analyzer/linker/EntityLinker.java | 100 -
.../iq/analyzer/linker/GuardLinker.java | 92 -
.../iq/analyzer/linker/LinkResult.java | 23 -
.../iq/analyzer/linker/Linker.java | 23 -
.../linker/ModuleContainmentLinker.java | 98 -
.../iq/analyzer/linker/TopicLinker.java | 116 -
.../iq/api/FlowController.java | 139 -
.../iq/api/GlobalExceptionHandler.java | 71 -
.../iq/api/GraphController.java | 395 --
.../iq/api/IntelligenceController.java | 158 -
.../iq/api/SafeFileReader.java | 77 -
.../iq/api/TopologyController.java | 106 -
.../iq/cache/AnalysisCache.java | 960 -----
.../randomcodespace/iq/cache/FileHasher.java | 57 -
.../iq/cli/AnalyzeCommand.java | 113 -
.../randomcodespace/iq/cli/BundleCommand.java | 553 ---
.../randomcodespace/iq/cli/CacheCommand.java | 132 -
.../randomcodespace/iq/cli/CliOutput.java | 176 -
.../randomcodespace/iq/cli/CodeIqCli.java | 42 -
.../randomcodespace/iq/cli/ConfigCommand.java | 34 -
.../iq/cli/ConfigExplainSubcommand.java | 152 -
.../iq/cli/ConfigValidateSubcommand.java | 104 -
.../randomcodespace/iq/cli/CypherCommand.java | 42 -
.../randomcodespace/iq/cli/EnrichCommand.java | 558 ---
.../randomcodespace/iq/cli/FindCommand.java | 124 -
.../randomcodespace/iq/cli/FlowCommand.java | 130 -
.../randomcodespace/iq/cli/GraphCommand.java | 197 -
.../randomcodespace/iq/cli/IndexCommand.java | 143 -
.../iq/cli/PluginsCommand.java | 577 ---
.../randomcodespace/iq/cli/QueryCommand.java | 163 -
.../randomcodespace/iq/cli/ServeCommand.java | 151 -
.../randomcodespace/iq/cli/StatsCommand.java | 413 --
.../iq/cli/TopologyCommand.java | 167 -
.../iq/cli/VersionCommand.java | 73 -
.../iq/config/CliStartupConfigOverrides.java | 71 -
.../iq/config/CodeIqConfig.java | 166 -
.../randomcodespace/iq/config/CorsConfig.java | 86 -
.../iq/config/GraphBootstrapper.java | 122 -
.../iq/config/JacksonConfig.java | 27 -
.../iq/config/MapToJsonConverter.java | 47 -
.../iq/config/Neo4jConfig.java | 86 -
.../iq/config/ProjectConfigLoader.java | 46 -
.../iq/config/UnifiedConfigAdapter.java | 73 -
.../iq/config/UnifiedConfigBeans.java | 103 -
.../iq/config/security/BearerAuthFilter.java | 176 -
.../iq/config/security/RateLimitFilter.java | 171 -
.../iq/config/security/RequestIdFilter.java | 81 -
.../iq/config/security/SecurityConfig.java | 94 -
.../security/SecurityHeadersFilter.java | 59 -
.../iq/config/security/TokenResolver.java | 120 -
.../config/unified/CodeIqUnifiedConfig.java | 28 -
.../iq/config/unified/ConfigDefaults.java | 56 -
.../iq/config/unified/ConfigError.java | 3 -
.../iq/config/unified/ConfigLayer.java | 8 -
.../config/unified/ConfigLoadException.java | 6 -
.../iq/config/unified/ConfigMerger.java | 140 -
.../iq/config/unified/ConfigProvenance.java | 3 -
.../iq/config/unified/ConfigResolver.java | 46 -
.../iq/config/unified/ConfigValidator.java | 118 -
.../iq/config/unified/DetectorOverride.java | 4 -
.../iq/config/unified/DetectorsConfig.java | 26 -
.../iq/config/unified/EnvVarOverlay.java | 109 -
.../iq/config/unified/IndexingConfig.java | 29 -
.../iq/config/unified/McpAuthConfig.java | 33 -
.../iq/config/unified/McpConfig.java | 7 -
.../iq/config/unified/McpLimitsConfig.java | 25 -
.../iq/config/unified/McpToolsConfig.java | 5 -
.../iq/config/unified/MergedConfig.java | 5 -
.../iq/config/unified/ModuleConfig.java | 2 -
.../iq/config/unified/Neo4jConfig.java | 4 -
.../config/unified/ObservabilityConfig.java | 4 -
.../iq/config/unified/ProjectConfig.java | 5 -
.../iq/config/unified/ServingConfig.java | 4 -
.../config/unified/UnifiedConfigLoader.java | 262 --
.../iq/detector/AbstractAntlrDetector.java | 143 -
.../iq/detector/AbstractRegexDetector.java | 94 -
.../detector/AbstractStructuredDetector.java | 142 -
.../randomcodespace/iq/detector/Detector.java | 28 -
.../iq/detector/DetectorContext.java | 63 -
.../iq/detector/DetectorDbHelper.java | 72 -
.../iq/detector/DetectorEmissionDefaults.java | 61 -
.../iq/detector/DetectorInfo.java | 23 -
.../iq/detector/DetectorRegistry.java | 195 -
.../iq/detector/DetectorResult.java | 21 -
.../iq/detector/DetectorUtils.java | 213 -
.../iq/detector/ParserType.java | 11 -
.../iq/detector/StructuresDetectorHelper.java | 68 -
.../auth/CertificateAuthDetector.java | 169 -
.../iq/detector/auth/LdapAuthDetector.java | 124 -
.../auth/SessionHeaderAuthDetector.java | 151 -
.../detector/csharp/CSharpEfcoreDetector.java | 142 -
.../csharp/CSharpMinimalApisDetector.java | 126 -
.../csharp/CSharpStructuresDetector.java | 255 --
.../frontend/AngularComponentDetector.java | 137 -
.../frontend/FrontendDetectorHelper.java | 44 -
.../frontend/FrontendRouteDetector.java | 193 -
.../frontend/ReactComponentDetector.java | 144 -
.../frontend/SvelteComponentDetector.java | 105 -
.../frontend/VueComponentDetector.java | 131 -
.../generic/GenericImportsDetector.java | 206 -
.../iq/detector/go/GoOrmDetector.java | 206 -
.../iq/detector/go/GoStructuresDetector.java | 190 -
.../iq/detector/go/GoWebDetector.java | 157 -
.../iq/detector/iac/BicepDetector.java | 93 -
.../iq/detector/iac/DockerfileDetector.java | 138 -
.../iq/detector/iac/TerraformDetector.java | 144 -
.../java/AbstractJavaMessagingDetector.java | 61 -
.../jvm/java/AbstractJavaParserDetector.java | 65 -
.../detector/jvm/java/ActiveMqDetector.java | 287 --
.../jvm/java/AzureFunctionsDetector.java | 219 -
.../jvm/java/AzureMessagingDetector.java | 216 -
.../jvm/java/ClassHierarchyDetector.java | 472 --
.../detector/jvm/java/ConfigDefDetector.java | 247 --
.../detector/jvm/java/CosmosDbDetector.java | 122 -
.../jvm/java/GraphqlResolverDetector.java | 169 -
.../jvm/java/GrpcServiceDetector.java | 139 -
.../iq/detector/jvm/java/IbmMqDetector.java | 147 -
.../iq/detector/jvm/java/JaxrsDetector.java | 159 -
.../iq/detector/jvm/java/JdbcDetector.java | 201 -
.../iq/detector/jvm/java/JmsDetector.java | 110 -
.../detector/jvm/java/JpaEntityDetector.java | 403 --
.../iq/detector/jvm/java/KafkaDetector.java | 156 -
.../jvm/java/KafkaProtocolDetector.java | 88 -
.../detector/jvm/java/MicronautDetector.java | 250 --
.../detector/jvm/java/ModuleDepsDetector.java | 235 -
.../detector/jvm/java/PublicApiDetector.java | 210 -
.../iq/detector/jvm/java/QuarkusDetector.java | 153 -
.../detector/jvm/java/RabbitmqDetector.java | 144 -
.../iq/detector/jvm/java/RawSqlDetector.java | 142 -
.../detector/jvm/java/RepositoryDetector.java | 234 -
.../iq/detector/jvm/java/RmiDetector.java | 155 -
.../jvm/java/SpringEventsDetector.java | 158 -
.../detector/jvm/java/SpringRestDetector.java | 548 ---
.../jvm/java/SpringSecurityDetector.java | 299 --
.../detector/jvm/java/TibcoEmsDetector.java | 180 -
.../detector/jvm/java/WebSocketDetector.java | 196 -
.../jvm/kotlin/KotlinStructuresDetector.java | 104 -
.../jvm/kotlin/KtorRouteDetector.java | 147 -
.../jvm/scala/ScalaStructuresDetector.java | 106 -
.../markup/MarkdownStructureDetector.java | 111 -
.../proto/ProtoStructureDetector.java | 134 -
.../python/AbstractPythonAntlrDetector.java | 62 -
.../python/AbstractPythonDbDetector.java | 42 -
.../detector/python/CeleryTaskDetector.java | 213 -
.../detector/python/DjangoAuthDetector.java | 231 -
.../detector/python/DjangoModelDetector.java | 295 --
.../detector/python/DjangoViewDetector.java | 141 -
.../detector/python/FastAPIAuthDetector.java | 220 -
.../detector/python/FastAPIRouteDetector.java | 180 -
.../detector/python/FlaskRouteDetector.java | 207 -
.../detector/python/KafkaPythonDetector.java | 222 -
.../python/PydanticModelDetector.java | 215 -
.../python/PythonStructuresDetector.java | 466 --
.../python/SQLAlchemyModelDetector.java | 172 -
.../detector/script/shell/BashDetector.java | 108 -
.../script/shell/PowerShellDetector.java | 98 -
.../iq/detector/sql/SqlMigrationDetector.java | 550 ---
.../iq/detector/sql/package-info.java | 8 -
.../structured/BatchStructureDetector.java | 136 -
.../structured/CloudFormationDetector.java | 211 -
.../structured/DockerComposeDetector.java | 242 --
.../structured/GitHubActionsDetector.java | 193 -
.../detector/structured/GitLabCiDetector.java | 247 --
.../structured/HelmChartDetector.java | 202 -
.../structured/IniStructureDetector.java | 116 -
.../structured/JsonStructureDetector.java | 75 -
.../structured/KubernetesDetector.java | 357 --
.../structured/KubernetesRbacDetector.java | 234 -
.../detector/structured/OpenApiDetector.java | 214 -
.../structured/PackageJsonDetector.java | 135 -
.../structured/PropertiesDetector.java | 166 -
.../structured/PyprojectTomlDetector.java | 182 -
.../structured/SqlStructureDetector.java | 159 -
.../structured/TomlStructureDetector.java | 98 -
.../structured/TsconfigJsonDetector.java | 142 -
.../structured/YamlStructureDetector.java | 88 -
.../systems/cpp/CppStructuresDetector.java | 153 -
.../systems/rust/ActixWebDetector.java | 196 -
.../systems/rust/RustStructuresDetector.java | 146 -
.../AbstractTypeScriptDetector.java | 18 -
.../typescript/ExpressRouteDetector.java | 71 -
.../typescript/FastifyRouteDetector.java | 189 -
.../typescript/GraphQLResolverDetector.java | 128 -
.../detector/typescript/KafkaJSDetector.java | 184 -
.../typescript/MongooseORMDetector.java | 187 -
.../typescript/NestJSControllerDetector.java | 212 -
.../typescript/NestJSGuardsDetector.java | 173 -
.../typescript/PassportJwtDetector.java | 156 -
.../typescript/PrismaORMDetector.java | 130 -
.../typescript/RemixRouteDetector.java | 177 -
.../typescript/SequelizeORMDetector.java | 165 -
.../typescript/TypeORMEntityDetector.java | 123 -
.../TypeScriptStructuresDetector.java | 413 --
.../iq/flow/CacheFlowDataSource.java | 35 -
.../iq/flow/FlowDataSource.java | 19 -
.../randomcodespace/iq/flow/FlowEngine.java | 125 -
.../randomcodespace/iq/flow/FlowModels.java | 154 -
.../randomcodespace/iq/flow/FlowRenderer.java | 188 -
.../randomcodespace/iq/flow/FlowViews.java | 579 ---
.../iq/grammar/AntlrParserFactory.java | 228 -
.../iq/grammar/cpp/CPP14ParserBase.java | 28 -
.../iq/grammar/csharp/CSharpLexerBase.java | 105 -
.../iq/grammar/csharp/CSharpParserBase.java | 24 -
.../csharp/CSharpPreprocessorParserBase.java | 205 -
.../iq/grammar/golang/GoParserBase.java | 195 -
.../javascript/JavaScriptLexerBase.java | 167 -
.../javascript/JavaScriptParserBase.java | 99 -
.../iq/grammar/python/Python3LexerBase.java | 154 -
.../iq/grammar/python/Python3ParserBase.java | 21 -
.../iq/grammar/rust/RustLexerBase.java | 102 -
.../iq/grammar/rust/RustParserBase.java | 17 -
.../typescript/TypeScriptLexerBase.java | 167 -
.../typescript/TypeScriptParserBase.java | 124 -
.../iq/graph/GraphRepository.java | 88 -
.../randomcodespace/iq/graph/GraphStore.java | 1318 ------
.../iq/health/GraphHealthIndicator.java | 103 -
.../iq/intelligence/ArtifactManifest.java | 80 -
.../iq/intelligence/CapabilityLevel.java | 16 -
.../iq/intelligence/FileClassification.java | 18 -
.../iq/intelligence/FileEntry.java | 61 -
.../iq/intelligence/FileInventory.java | 72 -
.../iq/intelligence/Provenance.java | 65 -
.../iq/intelligence/RepositoryIdentity.java | 60 -
.../intelligence/evidence/EvidencePack.java | 41 -
.../evidence/EvidencePackAssembler.java | 267 --
.../evidence/EvidencePackRequest.java | 21 -
.../extractor/LanguageEnricher.java | 252 --
.../extractor/LanguageExtractionResult.java | 34 -
.../extractor/LanguageExtractor.java | 37 -
.../extractor/go/GoLanguageExtractor.java | 199 -
.../extractor/java/JavaLanguageExtractor.java | 150 -
.../python/PythonLanguageExtractor.java | 168 -
.../TypeScriptLanguageExtractor.java | 144 -
.../iq/intelligence/lexical/CodeSnippet.java | 22 -
.../lexical/DocCommentExtractor.java | 193 -
.../intelligence/lexical/LexicalEnricher.java | 134 -
.../lexical/LexicalQueryService.java | 107 -
.../intelligence/lexical/LexicalResult.java | 27 -
.../iq/intelligence/lexical/SnippetStore.java | 106 -
.../provenance/ArtifactMetadata.java | 53 -
.../provenance/ArtifactMetadataProvider.java | 71 -
.../query/CapabilityDimension.java | 26 -
.../intelligence/query/CapabilityMatrix.java | 294 --
.../iq/intelligence/query/QueryPlan.java | 43 -
.../iq/intelligence/query/QueryPlanner.java | 142 -
.../iq/intelligence/query/QueryRoute.java | 28 -
.../iq/intelligence/query/QueryType.java | 20 -
.../intelligence/resolver/EmptyResolved.java | 34 -
.../resolver/ResolutionException.java | 48 -
.../iq/intelligence/resolver/Resolved.java | 38 -
.../resolver/ResolverRegistry.java | 107 -
.../intelligence/resolver/SymbolResolver.java | 77 -
.../resolver/java/JavaResolved.java | 32 -
.../java/JavaSourceRootDiscovery.java | 137 -
.../resolver/java/JavaSymbolResolver.java | 143 -
.../randomcodespace/iq/mcp/McpTools.java | 735 ----
.../randomcodespace/iq/model/CodeEdge.java | 153 -
.../randomcodespace/iq/model/CodeNode.java | 242 --
.../randomcodespace/iq/model/Confidence.java | 59 -
.../iq/model/ConfidenceConverter.java | 24 -
.../randomcodespace/iq/model/EdgeKind.java | 71 -
.../iq/model/EdgeKindConverter.java | 22 -
.../randomcodespace/iq/model/NodeKind.java | 77 -
.../iq/model/NodeKindConverter.java | 22 -
.../iq/query/QueryService.java | 654 ---
.../iq/query/StatsService.java | 392 --
.../iq/query/TopologyService.java | 569 ---
.../iq/query/TopologySnapshotProvider.java | 119 -
.../randomcodespace/iq/web/SpaController.java | 47 -
src/main/resources/application.yml | 187 -
src/main/resources/logback-spring.xml | 85 -
...BricolageGrotesque-Variable-C5Lc8Qmc.woff2 | Bin 131548 -> 0 bytes
.../assets/GeistMono-Variable-BNLlm6Cd.woff2 | Bin 71004 -> 0 bytes
.../PlusJakartaSans-Variable-eXO_dkmS.woff2 | Bin 27348 -> 0 bytes
.../static/assets/design-system-BIHI7g3E.js | 1 -
.../static/assets/design-system-Df6KNeSA.js | 1 -
.../static/assets/tesselator-D_j4OGEy.js | 1916 ---------
src/main/resources/static/css/explorer.css | 1 -
src/main/resources/static/favicon.svg | 4 -
.../static/js/vendor/cytoscape-dagre.min.js | 8 -
.../static/js/vendor/cytoscape.min.js | 32 -
.../resources/static/js/vendor/dagre.min.js | 3809 -----------------
.../resources/templates/flow/interactive.html | 252 --
.../iq/CodeIqApplicationArgParsingTest.java | 52 -
.../iq/CodeIqApplicationTest.java | 52 -
.../analyzer/AnalyzerBoundedExecutorTest.java | 113 -
.../analyzer/AnalyzerResolverWiringTest.java | 230 -
.../iq/analyzer/AnalyzerTest.java | 206 -
.../ArchitectureKeywordFilterTest.java | 274 --
.../iq/analyzer/BatchedStreamingTest.java | 184 -
.../iq/analyzer/ConfigScannerTest.java | 371 --
.../iq/analyzer/FileDiscoveryTest.java | 287 --
.../analyzer/FullAnalysisIntegrationTest.java | 389 --
.../iq/analyzer/GraphBuilderTest.java | 142 -
.../analyzer/InfrastructureRegistryTest.java | 130 -
.../iq/analyzer/LayerClassifierTest.java | 451 --
.../iq/analyzer/ServiceDetectorTest.java | 563 ---
.../iq/analyzer/SmartIndexTest.java | 305 --
.../iq/analyzer/StructuredParserTest.java | 198 -
.../iq/analyzer/linker/EntityLinkerTest.java | 113 -
.../iq/analyzer/linker/GuardLinkerTest.java | 145 -
.../analyzer/linker/LinkersCoverageTest.java | 377 --
.../linker/ModuleContainmentLinkerTest.java | 118 -
.../iq/analyzer/linker/TopicLinkerTest.java | 379 --
.../iq/api/FlowControllerTest.java | 127 -
.../iq/api/GlobalExceptionHandlerTest.java | 83 -
.../iq/api/GraphControllerTest.java | 701 ---
.../iq/api/IntelligenceControllerTest.java | 155 -
.../iq/api/SafeFileReaderTest.java | 68 -
.../api/TopologyControllerExtendedTest.java | 363 --
.../iq/api/TopologyControllerTest.java | 102 -
.../iq/api/TopologyEndpointTest.java | 240 --
.../iq/benchmark/AnalysisBenchmarkTest.java | 188 -
.../cache/AnalysisCacheBatchReplaceTest.java | 229 -
.../iq/cache/AnalysisCacheConfidenceTest.java | 207 -
.../iq/cache/AnalysisCacheTest.java | 168 -
.../iq/cache/CacheCoverageTest.java | 244 --
.../iq/cache/FileHasherTest.java | 62 -
.../iq/cli/AnalyzeCommandTest.java | 159 -
.../iq/cli/BundleCommandExtendedTest.java | 260 --
.../iq/cli/BundleCommandTest.java | 224 -
.../iq/cli/CacheCommandTest.java | 103 -
.../iq/cli/CliExtendedTest.java | 487 ---
.../randomcodespace/iq/cli/CodeIqCliTest.java | 53 -
.../iq/cli/ConfigExplainSubcommandTest.java | 223 -
.../iq/cli/ConfigValidateSubcommandTest.java | 153 -
.../iq/cli/CypherCommandTest.java | 42 -
.../iq/cli/EnrichCommandTest.java | 159 -
.../iq/cli/FindCommandTest.java | 51 -
.../iq/cli/FlowCommandExtendedTest.java | 166 -
.../iq/cli/FlowCommandTest.java | 152 -
.../iq/cli/GraphCommandTest.java | 123 -
.../iq/cli/IndexCommandTest.java | 145 -
.../iq/cli/PluginsCommandTest.java | 226 -
.../iq/cli/QueryCommandTest.java | 97 -
.../iq/cli/ServeCommandTest.java | 109 -
.../iq/cli/StatsCommandTest.java | 244 --
.../iq/cli/TopologyCommandExtendedTest.java | 269 --
.../iq/cli/TopologyCommandTest.java | 67 -
.../iq/cli/VersionCommandTest.java | 57 -
.../config/CliStartupConfigOverridesTest.java | 104 -
.../iq/config/CodeIqConfigTest.java | 187 -
.../iq/config/CodeIqConfigTestSupport.java | 54 -
.../iq/config/CorsConfigTest.java | 143 -
.../iq/config/GraphBootstrapperTest.java | 154 -
.../iq/config/JacksonConfigTest.java | 25 -
.../iq/config/MapToJsonConverterTest.java | 79 -
.../iq/config/ProjectConfigLoaderTest.java | 26 -
.../iq/config/UnifiedConfigAdapterTest.java | 190 -
.../iq/config/UnifiedConfigBeansTest.java | 122 -
.../config/security/BearerAuthFilterTest.java | 239 --
.../config/security/RateLimitFilterTest.java | 161 -
.../config/security/RequestIdFilterTest.java | 160 -
.../security/SecurityHeadersFilterTest.java | 62 -
.../security/ServingChainIntegrationTest.java | 215 -
.../iq/config/security/TokenResolverTest.java | 137 -
.../unified/CodeIqUnifiedConfigTest.java | 17 -
.../iq/config/unified/ConfigDefaultsTest.java | 38 -
.../iq/config/unified/ConfigMergerTest.java | 113 -
.../iq/config/unified/ConfigResolverTest.java | 50 -
.../config/unified/ConfigValidatorTest.java | 68 -
.../unified/EnvVarOverlayExtendedTest.java | 264 --
.../iq/config/unified/EnvVarOverlayTest.java | 90 -
.../unified/UnifiedConfigLoaderTest.java | 327 --
.../deploy/AksLaunchScriptSentinelTest.java | 132 -
.../AbstractAntlrDetectorHelperTest.java | 156 -
.../detector/AbstractRegexDetectorTest.java | 123 -
.../AbstractStructuredDetectorTest.java | 181 -
.../iq/detector/AntlrInfrastructureTest.java | 289 --
.../detector/DetectorContextResolvedTest.java | 140 -
.../iq/detector/DetectorContextTest.java | 39 -
.../DetectorEmissionDefaultsTest.java | 253 --
.../detector/DetectorInfoAnnotationTest.java | 114 -
.../iq/detector/DetectorRegistryTest.java | 202 -
.../iq/detector/DetectorResultTest.java | 56 -
.../iq/detector/DetectorTestUtils.java | 64 -
.../iq/detector/DetectorUtilsTest.java | 203 -
.../iq/detector/LanguageMappingTest.java | 108 -
.../auth/AuthDetectorsCoverageTest.java | 471 --
.../auth/CertificateAuthDetectorTest.java | 31 -
.../detector/auth/LdapAuthDetectorTest.java | 30 -
.../auth/SessionHeaderAuthDetectorTest.java | 30 -
.../csharp/CSharpDetectorsCoverageTest.java | 413 --
.../csharp/CSharpDetectorsExtendedTest.java | 199 -
.../csharp/CSharpEfcoreDetectorTest.java | 11 -
.../csharp/CSharpMinimalApisDetectorTest.java | 11 -
.../csharp/CSharpStructuresDetectorTest.java | 11 -
.../AngularComponentDetectorTest.java | 12 -
.../FrontendDetectorsCoverageTest.java | 570 ---
.../FrontendDetectorsExtendedTest.java | 384 --
.../frontend/FrontendRouteDetectorTest.java | 14 -
.../frontend/ReactComponentDetectorTest.java | 135 -
.../frontend/SvelteComponentDetectorTest.java | 11 -
.../frontend/VueComponentDetectorTest.java | 14 -
.../generic/GenericImportsDetectorTest.java | 11 -
.../generic/GenericImportsExtendedTest.java | 125 -
.../detector/go/GoDetectorsExtendedTest.java | 231 -
.../iq/detector/go/GoOrmDetectorTest.java | 164 -
.../detector/go/GoStructuresDetectorTest.java | 183 -
.../iq/detector/go/GoWebDetectorTest.java | 158 -
.../iq/detector/iac/BicepDetectorTest.java | 11 -
.../detector/iac/DockerfileDetectorTest.java | 11 -
.../iac/IacDetectorsExtendedTest.java | 215 -
.../detector/iac/TerraformDetectorTest.java | 11 -
.../jvm/java/ActiveMqDetectorTest.java | 323 --
.../jvm/java/AzureFunctionsDetectorTest.java | 306 --
.../jvm/java/AzureMessagingDetectorTest.java | 388 --
.../ClassHierarchyDetectorExtendedTest.java | 424 --
.../ClassHierarchyDetectorResolvedTest.java | 223 -
.../jvm/java/ConfigDefDetectorTest.java | 351 --
.../java/JavaDetectorsBranchCoverageTest.java | 1546 -------
.../jvm/java/JavaDetectorsCoverageTest.java | 1808 --------
.../jvm/java/JavaDetectorsExtendedTest.java | 938 ----
.../detector/jvm/java/JavaDetectorsTest.java | 1056 -----
.../java/JpaEntityDetectorExtendedTest.java | 570 ---
.../java/JpaEntityDetectorResolvedTest.java | 293 --
.../jvm/java/ModuleDepsDetectorTest.java | 390 --
.../jvm/java/PublicApiDetectorTest.java | 549 ---
.../java/RepositoryDetectorResolvedTest.java | 225 -
.../java/SpringRestDetectorExtendedTest.java | 488 ---
.../java/SpringRestDetectorResolvedTest.java | 226 -
.../SpringSecurityDetectorExtendedTest.java | 506 ---
.../kotlin/KotlinStructuresDetectorTest.java | 141 -
.../jvm/kotlin/KtorRouteDetectorTest.java | 148 -
.../scala/ScalaStructuresDetectorTest.java | 130 -
.../markup/MarkdownStructureDetectorTest.java | 144 -
.../proto/ProtoStructureDetectorTest.java | 181 -
.../CeleryTaskDetectorExtendedTest.java | 413 --
.../python/CeleryTaskDetectorTest.java | 285 --
.../python/DjangoAuthDetectorTest.java | 314 --
.../DjangoModelDetectorExtendedTest.java | 367 --
.../python/DjangoModelDetectorTest.java | 304 --
.../python/DjangoViewDetectorTest.java | 286 --
.../FastAPIAuthDetectorExtendedTest.java | 318 --
.../python/FastAPIAuthDetectorTest.java | 275 --
.../python/FastAPIRouteDetectorTest.java | 281 --
.../python/FlaskRouteDetectorTest.java | 257 --
.../python/KafkaPythonDetectorTest.java | 70 -
.../PydanticModelDetectorExtendedTest.java | 408 --
.../python/PydanticModelDetectorTest.java | 311 --
.../PythonStructuresDetectorExtendedTest.java | 466 --
.../python/PythonStructuresDetectorTest.java | 411 --
.../SQLAlchemyModelDetectorExtendedTest.java | 369 --
.../python/SQLAlchemyModelDetectorTest.java | 283 --
.../script/shell/BashDetectorTest.java | 170 -
.../script/shell/PowerShellDetectorTest.java | 127 -
.../sql/SqlMigrationDetectorTest.java | 405 --
.../BatchStructureDetectorTest.java | 57 -
.../CloudFormationDetectorTest.java | 80 -
.../ConfigDetectorsExtendedTest.java | 232 -
.../structured/DockerComposeDetectorTest.java | 77 -
.../structured/GitHubActionsDetectorTest.java | 82 -
.../structured/GitLabCiDetectorTest.java | 83 -
.../structured/HelmChartDetectorTest.java | 83 -
.../structured/IniStructureDetectorTest.java | 56 -
.../structured/JsonStructureDetectorTest.java | 50 -
.../KubernetesDetectorExpandedTest.java | 449 --
.../structured/KubernetesDetectorTest.java | 94 -
.../KubernetesRbacDetectorTest.java | 71 -
.../structured/OpenApiDetectorTest.java | 93 -
.../structured/PackageJsonDetectorTest.java | 59 -
.../structured/PropertiesDetectorTest.java | 122 -
.../structured/PyprojectTomlDetectorTest.java | 69 -
.../structured/SqlStructureDetectorTest.java | 68 -
.../structured/TomlStructureDetectorTest.java | 56 -
.../structured/TsconfigJsonDetectorTest.java | 65 -
.../structured/YamlStructureDetectorTest.java | 66 -
.../cpp/CppStructuresDetectorTest.java | 128 -
.../systems/rust/ActixWebDetectorTest.java | 153 -
.../rust/RustDetectorsExtendedTest.java | 158 -
.../rust/RustStructuresDetectorTest.java | 144 -
.../ExpressRouteDetectorExtendedTest.java | 268 --
.../typescript/ExpressRouteDetectorTest.java | 151 -
.../typescript/FastifyRouteDetectorTest.java | 181 -
.../GraphQLResolverDetectorTest.java | 180 -
.../typescript/KafkaJSDetectorTest.java | 163 -
.../typescript/MongooseORMDetectorTest.java | 176 -
.../NestJSControllerDetectorTest.java | 232 -
.../typescript/NestJSGuardsDetectorTest.java | 204 -
.../typescript/PassportJwtDetectorTest.java | 157 -
.../typescript/PrismaORMDetectorTest.java | 171 -
.../typescript/RemixRouteDetectorTest.java | 189 -
.../typescript/SequelizeORMDetectorTest.java | 164 -
.../typescript/TypeORMEntityDetectorTest.java | 206 -
.../TypeScriptDetectorsExtendedTest.java | 153 -
.../TypeScriptStructuresDetectorTest.java | 232 -
.../iq/e2e/E2EQualityTest.java | 751 ----
.../iq/e2e/IntegrationSmokeTest.java | 237 -
.../iq/flow/CacheFlowDataSourceTest.java | 79 -
.../iq/flow/FlowEngineExtendedTest.java | 256 --
.../iq/flow/FlowEngineTest.java | 244 --
.../iq/flow/FlowRendererTest.java | 210 -
.../iq/flow/FlowViewsTest.java | 568 ---
.../graph/GraphStoreAggregateStatsTest.java | 342 --
.../GraphStoreConfidenceRoundTripTest.java | 340 --
.../iq/graph/GraphStoreExtendedTest.java | 335 --
.../iq/graph/GraphStoreTest.java | 151 -
.../graph/GraphStoreTopologyAndStatsTest.java | 747 ----
.../iq/health/GraphHealthIndicatorTest.java | 77 -
.../iq/intelligence/ArtifactManifestTest.java | 64 -
.../iq/intelligence/FileInventoryTest.java | 109 -
.../intelligence/ProvenanceEdgeCasesTest.java | 210 -
.../ProvenanceIntegrationTest.java | 100 -
.../ProvenanceNeo4jRoundTripTest.java | 162 -
.../iq/intelligence/ProvenanceTest.java | 81 -
.../intelligence/RepositoryIdentityTest.java | 210 -
.../EvidencePackAssemblerExtendedTest.java | 441 --
.../evidence/EvidencePackAssemblerTest.java | 127 -
.../LanguageEnricherExtendedTest.java | 377 --
.../extractor/LanguageEnricherTest.java | 224 -
.../extractor/go/GoLanguageExtractorTest.java | 268 --
.../java/JavaLanguageExtractorTest.java | 167 -
.../python/PythonLanguageExtractorTest.java | 182 -
.../TypeScriptLanguageExtractorTest.java | 139 -
.../lexical/DocCommentExtractorTest.java | 125 -
.../lexical/LexicalCrossLanguageTest.java | 272 --
.../lexical/LexicalEnricherTest.java | 110 -
.../lexical/LexicalQueryServiceTest.java | 203 -
.../lexical/SnippetStoreTest.java | 118 -
.../ArtifactMetadataProviderTest.java | 47 -
.../provenance/ArtifactMetadataTest.java | 98 -
.../query/CapabilityMatrixTest.java | 167 -
.../query/QueryIntelligenceCoverageTest.java | 295 --
.../intelligence/query/QueryPlannerTest.java | 212 -
.../resolver/ResolutionExceptionTest.java | 55 -
.../resolver/ResolvedContractTest.java | 68 -
.../resolver/ResolverRegistryTest.java | 206 -
.../resolver/SymbolResolverContractTest.java | 126 -
.../java/E2EResolverPetclinicTest.java | 96 -
.../resolver/java/JavaResolvedTest.java | 73 -
.../java/JavaSourceRootDiscoveryTest.java | 241 --
.../JavaSymbolResolverAdversarialTest.java | Bin 5880 -> 0 bytes
.../JavaSymbolResolverConcurrencyTest.java | 196 -
.../JavaSymbolResolverDeterminismTest.java | 187 -
.../JavaSymbolResolverLayer1ExtendedTest.java | 261 --
.../JavaSymbolResolverPathologicalTest.java | 104 -
.../JavaSymbolResolverRandomizedTest.java | 143 -
.../resolver/java/JavaSymbolResolverTest.java | 326 --
.../iq/mcp/McpToolsEvidenceTest.java | 118 -
.../iq/mcp/McpToolsExpandedTest.java | 622 ---
.../randomcodespace/iq/mcp/McpToolsTest.java | 621 ---
.../iq/model/CodeEdgeConfidenceTest.java | 60 -
.../iq/model/CodeNodeConfidenceTest.java | 56 -
.../iq/model/CodeNodeEdgeExtendedTest.java | 146 -
.../iq/model/ConfidenceTest.java | 40 -
.../iq/model/EdgeKindTest.java | 42 -
.../iq/model/KindConverterTest.java | 120 -
.../iq/model/ModelCoverageTest.java | 649 ---
.../iq/model/NodeKindTest.java | 43 -
.../iq/query/QueryServiceTest.java | 846 ----
.../iq/query/StatsServiceTest.java | 435 --
.../iq/query/TopologyServiceTest.java | 230 -
.../iq/web/SpaControllerConditionalTest.java | 84 -
.../iq/web/SpaControllerMockMvcTest.java | 75 -
src/test/resources/application-test.yml | 10 -
src/test/resources/config-unified/full.yml | 56 -
.../resources/config-unified/malformed.yml | 4 -
src/test/resources/config-unified/minimal.yml | 4 -
.../resources/e2e/ground-truth-petclinic.json | 44 -
.../e2e/ground-truth-realworld-express.json | 17 -
646 files changed, 719 insertions(+), 133132 deletions(-)
delete mode 100644 .github/workflows/beta-java.yml
delete mode 100644 .github/workflows/ci-java.yml
delete mode 100644 .github/workflows/go-parity.yml
delete mode 100644 .github/workflows/release-java.yml
delete mode 100644 pom.xml
delete mode 100644 spotbugs-exclude.xml
delete mode 100644 src/assembly/source-bundle.xml
delete mode 100644 src/main/antlr4/imports/UnicodeClasses.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/cpp/CPP14Lexer.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/cpp/CPP14Parser.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/csharp/CSharpLexer.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/csharp/CSharpParser.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/csharp/CSharpPreprocessorParser.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/golang/GoLexer.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/golang/GoParser.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/javascript/JavaScriptLexer.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/javascript/JavaScriptParser.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/kotlin/KotlinLexer.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/kotlin/KotlinParser.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/kotlin/UnicodeClasses.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/python/Python3Lexer.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/python/Python3Parser.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/rust/RustLexer.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/rust/RustParser.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/scala/Scala.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/typescript/TypeScriptLexer.g4
delete mode 100644 src/main/antlr4/io/github/randomcodespace/iq/grammar/typescript/TypeScriptParser.g4
delete mode 100644 src/main/frontend/.gitignore
delete mode 100644 src/main/frontend/index.html
delete mode 100644 src/main/frontend/package-lock.json
delete mode 100644 src/main/frontend/package.json
delete mode 100644 src/main/frontend/playwright-report/data/52d6e968bcc3e3f9fb8eaecdf7ea2f3d2ab41deb.png
delete mode 100644 src/main/frontend/playwright-report/data/813e22f62153becae158a32a0ef8aa8037da1508.webm
delete mode 100644 src/main/frontend/playwright-report/data/8c72b585fa3d6ad6b85b44878d2427a335bdf9de.md
delete mode 100644 src/main/frontend/playwright-report/data/b2072c8aa5cd97f91093ec8cad3e5f7b48b55c66.md
delete mode 100644 src/main/frontend/playwright-report/data/f1d00512fbfc05f51c50987f6e805c0156f31b2d.png
delete mode 100644 src/main/frontend/playwright-report/data/f6eb10ff67df8fe6b39c93a7519699a0d4e67b55.webm
delete mode 100644 src/main/frontend/playwright-report/index.html
delete mode 100644 src/main/frontend/playwright.config.ts
delete mode 100644 src/main/frontend/public/favicon.svg
delete mode 100644 src/main/frontend/src/App.tsx
delete mode 100644 src/main/frontend/src/components/AppLayout.tsx
delete mode 100644 src/main/frontend/src/components/Icons.tsx
delete mode 100644 src/main/frontend/src/context/ThemeContext.tsx
delete mode 100644 src/main/frontend/src/env.d.ts
delete mode 100644 src/main/frontend/src/hooks/useApi.ts
delete mode 100644 src/main/frontend/src/index.css
delete mode 100644 src/main/frontend/src/lib/api.ts
delete mode 100644 src/main/frontend/src/lib/mcp-tools.ts
delete mode 100644 src/main/frontend/src/main.tsx
delete mode 100644 src/main/frontend/src/pages/Dashboard.tsx
delete mode 100644 src/main/frontend/src/types/api.ts
delete mode 100644 src/main/frontend/test-results/.last-run.json
delete mode 100644 src/main/frontend/tests/e2e/accessibility.spec.ts
delete mode 100644 src/main/frontend/tests/e2e/edge-cases.spec.ts
delete mode 100644 src/main/frontend/tests/e2e/file-tree.spec.ts
delete mode 100644 src/main/frontend/tests/e2e/graph.spec.ts
delete mode 100644 src/main/frontend/tests/e2e/mcp-console.spec.ts
delete mode 100644 src/main/frontend/tests/e2e/navigation.spec.ts
delete mode 100644 src/main/frontend/tests/e2e/performance.spec.ts
delete mode 100644 src/main/frontend/tests/e2e/responsive.spec.ts
delete mode 100644 src/main/frontend/tests/e2e/search.spec.ts
delete mode 100644 src/main/frontend/tests/utils/test-helpers.ts
delete mode 100644 src/main/frontend/tsconfig.json
delete mode 100644 src/main/frontend/tsconfig.test.json
delete mode 100644 src/main/frontend/vite.config.ts
delete mode 100644 src/main/java/io/github/randomcodespace/iq/CodeIqApplication.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/AnalysisResult.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/Analyzer.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/ArchitectureKeywordFilter.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/ConfigScanner.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/DiscoveredFile.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/FileClassifier.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/FileDiscovery.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/GraphBuilder.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/InfraEndpoint.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/InfrastructureRegistry.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/LayerClassifier.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/ServiceDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/StructuredParser.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/linker/EntityLinker.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/linker/GuardLinker.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/linker/LinkResult.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/linker/Linker.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/linker/ModuleContainmentLinker.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/analyzer/linker/TopicLinker.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/api/FlowController.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/api/GlobalExceptionHandler.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/api/GraphController.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/api/IntelligenceController.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/api/SafeFileReader.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/api/TopologyController.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cache/AnalysisCache.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cache/FileHasher.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/AnalyzeCommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/BundleCommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/CacheCommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/CliOutput.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/CodeIqCli.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/ConfigCommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/ConfigExplainSubcommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/ConfigValidateSubcommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/CypherCommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/EnrichCommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/FindCommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/FlowCommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/GraphCommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/IndexCommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/PluginsCommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/QueryCommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/ServeCommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/StatsCommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/TopologyCommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/cli/VersionCommand.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/CliStartupConfigOverrides.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/CodeIqConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/CorsConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/GraphBootstrapper.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/JacksonConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/MapToJsonConverter.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/Neo4jConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/ProjectConfigLoader.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/UnifiedConfigAdapter.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/UnifiedConfigBeans.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/security/BearerAuthFilter.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/security/RateLimitFilter.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/security/RequestIdFilter.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/security/SecurityConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/security/SecurityHeadersFilter.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/security/TokenResolver.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/CodeIqUnifiedConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/ConfigDefaults.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/ConfigError.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/ConfigLayer.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/ConfigLoadException.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/ConfigMerger.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/ConfigProvenance.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/ConfigResolver.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/ConfigValidator.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/DetectorOverride.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/DetectorsConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/EnvVarOverlay.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/IndexingConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/McpAuthConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/McpConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/McpLimitsConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/McpToolsConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/MergedConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/ModuleConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/Neo4jConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/ObservabilityConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/ProjectConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/ServingConfig.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/config/unified/UnifiedConfigLoader.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/AbstractAntlrDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/AbstractRegexDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/AbstractStructuredDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/Detector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/DetectorContext.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/DetectorDbHelper.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/DetectorEmissionDefaults.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/DetectorInfo.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/DetectorRegistry.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/DetectorResult.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/DetectorUtils.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/ParserType.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/StructuresDetectorHelper.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/auth/CertificateAuthDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/auth/LdapAuthDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/auth/SessionHeaderAuthDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/csharp/CSharpEfcoreDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/csharp/CSharpMinimalApisDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/csharp/CSharpStructuresDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/frontend/AngularComponentDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/frontend/FrontendDetectorHelper.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/frontend/FrontendRouteDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/frontend/ReactComponentDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/frontend/SvelteComponentDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/frontend/VueComponentDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/generic/GenericImportsDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/go/GoOrmDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/go/GoStructuresDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/go/GoWebDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/iac/BicepDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/iac/DockerfileDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/iac/TerraformDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/AbstractJavaMessagingDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/AbstractJavaParserDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/ActiveMqDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/AzureFunctionsDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/AzureMessagingDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/ClassHierarchyDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/ConfigDefDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/CosmosDbDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/GraphqlResolverDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/GrpcServiceDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/IbmMqDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/JaxrsDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/JdbcDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/JmsDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/JpaEntityDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/KafkaDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/KafkaProtocolDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/MicronautDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/ModuleDepsDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/PublicApiDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/QuarkusDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/RabbitmqDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/RawSqlDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/RepositoryDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/RmiDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/SpringEventsDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/SpringRestDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/SpringSecurityDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/TibcoEmsDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/java/WebSocketDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/kotlin/KotlinStructuresDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/kotlin/KtorRouteDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/jvm/scala/ScalaStructuresDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/markup/MarkdownStructureDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/proto/ProtoStructureDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/python/AbstractPythonAntlrDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/python/AbstractPythonDbDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/python/CeleryTaskDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/python/DjangoAuthDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/python/DjangoModelDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/python/DjangoViewDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/python/FastAPIAuthDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/python/FastAPIRouteDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/python/FlaskRouteDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/python/KafkaPythonDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/python/PydanticModelDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/python/PythonStructuresDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/python/SQLAlchemyModelDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/script/shell/BashDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/script/shell/PowerShellDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/sql/SqlMigrationDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/sql/package-info.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/BatchStructureDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/CloudFormationDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/DockerComposeDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/GitHubActionsDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/GitLabCiDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/HelmChartDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/IniStructureDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/JsonStructureDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/KubernetesDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/KubernetesRbacDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/OpenApiDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/PackageJsonDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/PropertiesDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/PyprojectTomlDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/SqlStructureDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/TomlStructureDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/TsconfigJsonDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/structured/YamlStructureDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/systems/cpp/CppStructuresDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/systems/rust/ActixWebDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/systems/rust/RustStructuresDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/typescript/AbstractTypeScriptDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/typescript/ExpressRouteDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/typescript/FastifyRouteDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/typescript/GraphQLResolverDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/typescript/KafkaJSDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/typescript/MongooseORMDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/typescript/NestJSControllerDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/typescript/NestJSGuardsDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/typescript/PassportJwtDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/typescript/PrismaORMDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/typescript/RemixRouteDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/typescript/SequelizeORMDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/typescript/TypeORMEntityDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/detector/typescript/TypeScriptStructuresDetector.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/flow/CacheFlowDataSource.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/flow/FlowDataSource.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/flow/FlowEngine.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/flow/FlowModels.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/flow/FlowRenderer.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/flow/FlowViews.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/grammar/AntlrParserFactory.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/grammar/cpp/CPP14ParserBase.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/grammar/csharp/CSharpLexerBase.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/grammar/csharp/CSharpParserBase.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/grammar/csharp/CSharpPreprocessorParserBase.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/grammar/golang/GoParserBase.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/grammar/javascript/JavaScriptLexerBase.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/grammar/javascript/JavaScriptParserBase.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/grammar/python/Python3LexerBase.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/grammar/python/Python3ParserBase.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/grammar/rust/RustLexerBase.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/grammar/rust/RustParserBase.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/grammar/typescript/TypeScriptLexerBase.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/grammar/typescript/TypeScriptParserBase.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/graph/GraphRepository.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/graph/GraphStore.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/health/GraphHealthIndicator.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/ArtifactManifest.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/CapabilityLevel.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/FileClassification.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/FileEntry.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/FileInventory.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/Provenance.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/RepositoryIdentity.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/evidence/EvidencePack.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/evidence/EvidencePackAssembler.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/evidence/EvidencePackRequest.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/extractor/LanguageEnricher.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/extractor/LanguageExtractionResult.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/extractor/LanguageExtractor.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/extractor/go/GoLanguageExtractor.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/extractor/java/JavaLanguageExtractor.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/extractor/python/PythonLanguageExtractor.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/extractor/typescript/TypeScriptLanguageExtractor.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/lexical/CodeSnippet.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/lexical/DocCommentExtractor.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/lexical/LexicalEnricher.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/lexical/LexicalQueryService.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/lexical/LexicalResult.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/lexical/SnippetStore.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/provenance/ArtifactMetadata.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/provenance/ArtifactMetadataProvider.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/query/CapabilityDimension.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/query/CapabilityMatrix.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/query/QueryPlan.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/query/QueryPlanner.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/query/QueryRoute.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/query/QueryType.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/resolver/EmptyResolved.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/resolver/ResolutionException.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/resolver/Resolved.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/resolver/ResolverRegistry.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/resolver/SymbolResolver.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/resolver/java/JavaResolved.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/resolver/java/JavaSourceRootDiscovery.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/intelligence/resolver/java/JavaSymbolResolver.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/mcp/McpTools.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/model/CodeEdge.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/model/CodeNode.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/model/Confidence.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/model/ConfidenceConverter.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/model/EdgeKind.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/model/EdgeKindConverter.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/model/NodeKind.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/model/NodeKindConverter.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/query/QueryService.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/query/StatsService.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/query/TopologyService.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/query/TopologySnapshotProvider.java
delete mode 100644 src/main/java/io/github/randomcodespace/iq/web/SpaController.java
delete mode 100644 src/main/resources/application.yml
delete mode 100644 src/main/resources/logback-spring.xml
delete mode 100644 src/main/resources/static/assets/BricolageGrotesque-Variable-C5Lc8Qmc.woff2
delete mode 100644 src/main/resources/static/assets/GeistMono-Variable-BNLlm6Cd.woff2
delete mode 100644 src/main/resources/static/assets/PlusJakartaSans-Variable-eXO_dkmS.woff2
delete mode 100644 src/main/resources/static/assets/design-system-BIHI7g3E.js
delete mode 100644 src/main/resources/static/assets/design-system-Df6KNeSA.js
delete mode 100644 src/main/resources/static/assets/tesselator-D_j4OGEy.js
delete mode 100644 src/main/resources/static/css/explorer.css
delete mode 100644 src/main/resources/static/favicon.svg
delete mode 100644 src/main/resources/static/js/vendor/cytoscape-dagre.min.js
delete mode 100644 src/main/resources/static/js/vendor/cytoscape.min.js
delete mode 100644 src/main/resources/static/js/vendor/dagre.min.js
delete mode 100644 src/main/resources/templates/flow/interactive.html
delete mode 100644 src/test/java/io/github/randomcodespace/iq/CodeIqApplicationArgParsingTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/CodeIqApplicationTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/AnalyzerBoundedExecutorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/AnalyzerResolverWiringTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/AnalyzerTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/ArchitectureKeywordFilterTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/BatchedStreamingTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/ConfigScannerTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/FileDiscoveryTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/FullAnalysisIntegrationTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/GraphBuilderTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/InfrastructureRegistryTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/LayerClassifierTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/ServiceDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/SmartIndexTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/StructuredParserTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/linker/EntityLinkerTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/linker/GuardLinkerTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/linker/LinkersCoverageTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/linker/ModuleContainmentLinkerTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/analyzer/linker/TopicLinkerTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/api/FlowControllerTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/api/GlobalExceptionHandlerTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/api/GraphControllerTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/api/IntelligenceControllerTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/api/SafeFileReaderTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/api/TopologyControllerExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/api/TopologyControllerTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/api/TopologyEndpointTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/benchmark/AnalysisBenchmarkTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cache/AnalysisCacheBatchReplaceTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cache/AnalysisCacheConfidenceTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cache/AnalysisCacheTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cache/CacheCoverageTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cache/FileHasherTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/AnalyzeCommandTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/BundleCommandExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/BundleCommandTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/CacheCommandTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/CliExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/CodeIqCliTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/ConfigExplainSubcommandTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/ConfigValidateSubcommandTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/CypherCommandTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/EnrichCommandTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/FindCommandTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/FlowCommandExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/FlowCommandTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/GraphCommandTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/IndexCommandTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/PluginsCommandTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/QueryCommandTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/ServeCommandTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/StatsCommandTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/TopologyCommandExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/TopologyCommandTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/cli/VersionCommandTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/CliStartupConfigOverridesTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/CodeIqConfigTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/CodeIqConfigTestSupport.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/CorsConfigTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/GraphBootstrapperTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/JacksonConfigTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/MapToJsonConverterTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/ProjectConfigLoaderTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/UnifiedConfigAdapterTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/UnifiedConfigBeansTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/security/BearerAuthFilterTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/security/RateLimitFilterTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/security/RequestIdFilterTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/security/SecurityHeadersFilterTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/security/ServingChainIntegrationTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/security/TokenResolverTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/unified/CodeIqUnifiedConfigTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/unified/ConfigDefaultsTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/unified/ConfigMergerTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/unified/ConfigResolverTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/unified/ConfigValidatorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/unified/EnvVarOverlayExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/unified/EnvVarOverlayTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/config/unified/UnifiedConfigLoaderTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/deploy/AksLaunchScriptSentinelTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/AbstractAntlrDetectorHelperTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/AbstractRegexDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/AbstractStructuredDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/AntlrInfrastructureTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/DetectorContextResolvedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/DetectorContextTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/DetectorEmissionDefaultsTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/DetectorInfoAnnotationTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/DetectorRegistryTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/DetectorResultTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/DetectorTestUtils.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/DetectorUtilsTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/LanguageMappingTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/auth/AuthDetectorsCoverageTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/auth/CertificateAuthDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/auth/LdapAuthDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/auth/SessionHeaderAuthDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/csharp/CSharpDetectorsCoverageTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/csharp/CSharpDetectorsExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/csharp/CSharpEfcoreDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/csharp/CSharpMinimalApisDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/csharp/CSharpStructuresDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/frontend/AngularComponentDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/frontend/FrontendDetectorsCoverageTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/frontend/FrontendDetectorsExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/frontend/FrontendRouteDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/frontend/ReactComponentDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/frontend/SvelteComponentDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/frontend/VueComponentDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/generic/GenericImportsDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/generic/GenericImportsExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/go/GoDetectorsExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/go/GoOrmDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/go/GoStructuresDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/go/GoWebDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/iac/BicepDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/iac/DockerfileDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/iac/IacDetectorsExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/iac/TerraformDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/ActiveMqDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/AzureFunctionsDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/AzureMessagingDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/ClassHierarchyDetectorExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/ClassHierarchyDetectorResolvedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/ConfigDefDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/JavaDetectorsBranchCoverageTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/JavaDetectorsCoverageTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/JavaDetectorsExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/JavaDetectorsTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/JpaEntityDetectorExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/JpaEntityDetectorResolvedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/ModuleDepsDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/PublicApiDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/RepositoryDetectorResolvedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/SpringRestDetectorExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/SpringRestDetectorResolvedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/java/SpringSecurityDetectorExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/kotlin/KotlinStructuresDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/kotlin/KtorRouteDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/jvm/scala/ScalaStructuresDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/markup/MarkdownStructureDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/proto/ProtoStructureDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/python/CeleryTaskDetectorExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/python/CeleryTaskDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/python/DjangoAuthDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/python/DjangoModelDetectorExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/python/DjangoModelDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/python/DjangoViewDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/python/FastAPIAuthDetectorExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/python/FastAPIAuthDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/python/FastAPIRouteDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/python/FlaskRouteDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/python/KafkaPythonDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/python/PydanticModelDetectorExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/python/PydanticModelDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/python/PythonStructuresDetectorExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/python/PythonStructuresDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/python/SQLAlchemyModelDetectorExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/python/SQLAlchemyModelDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/script/shell/BashDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/script/shell/PowerShellDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/sql/SqlMigrationDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/BatchStructureDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/CloudFormationDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/ConfigDetectorsExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/DockerComposeDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/GitHubActionsDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/GitLabCiDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/HelmChartDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/IniStructureDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/JsonStructureDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/KubernetesDetectorExpandedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/KubernetesDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/KubernetesRbacDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/OpenApiDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/PackageJsonDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/PropertiesDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/PyprojectTomlDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/SqlStructureDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/TomlStructureDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/TsconfigJsonDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/structured/YamlStructureDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/systems/cpp/CppStructuresDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/systems/rust/ActixWebDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/systems/rust/RustDetectorsExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/systems/rust/RustStructuresDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/typescript/ExpressRouteDetectorExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/typescript/ExpressRouteDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/typescript/FastifyRouteDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/typescript/GraphQLResolverDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/typescript/KafkaJSDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/typescript/MongooseORMDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/typescript/NestJSControllerDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/typescript/NestJSGuardsDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/typescript/PassportJwtDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/typescript/PrismaORMDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/typescript/RemixRouteDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/typescript/SequelizeORMDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/typescript/TypeORMEntityDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/typescript/TypeScriptDetectorsExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/detector/typescript/TypeScriptStructuresDetectorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/e2e/E2EQualityTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/e2e/IntegrationSmokeTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/flow/CacheFlowDataSourceTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/flow/FlowEngineExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/flow/FlowEngineTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/flow/FlowRendererTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/flow/FlowViewsTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/graph/GraphStoreAggregateStatsTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/graph/GraphStoreConfidenceRoundTripTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/graph/GraphStoreExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/graph/GraphStoreTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/graph/GraphStoreTopologyAndStatsTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/health/GraphHealthIndicatorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/ArtifactManifestTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/FileInventoryTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/ProvenanceEdgeCasesTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/ProvenanceIntegrationTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/ProvenanceNeo4jRoundTripTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/ProvenanceTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/RepositoryIdentityTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/evidence/EvidencePackAssemblerExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/evidence/EvidencePackAssemblerTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/extractor/LanguageEnricherExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/extractor/LanguageEnricherTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/extractor/go/GoLanguageExtractorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/extractor/java/JavaLanguageExtractorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/extractor/python/PythonLanguageExtractorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/extractor/typescript/TypeScriptLanguageExtractorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/lexical/DocCommentExtractorTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/lexical/LexicalCrossLanguageTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/lexical/LexicalEnricherTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/lexical/LexicalQueryServiceTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/lexical/SnippetStoreTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/provenance/ArtifactMetadataProviderTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/provenance/ArtifactMetadataTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/query/CapabilityMatrixTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/query/QueryIntelligenceCoverageTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/query/QueryPlannerTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/resolver/ResolutionExceptionTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/resolver/ResolvedContractTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/resolver/ResolverRegistryTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/resolver/SymbolResolverContractTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/resolver/java/E2EResolverPetclinicTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/resolver/java/JavaResolvedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/resolver/java/JavaSourceRootDiscoveryTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/resolver/java/JavaSymbolResolverAdversarialTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/resolver/java/JavaSymbolResolverConcurrencyTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/resolver/java/JavaSymbolResolverDeterminismTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/resolver/java/JavaSymbolResolverLayer1ExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/resolver/java/JavaSymbolResolverPathologicalTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/resolver/java/JavaSymbolResolverRandomizedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/intelligence/resolver/java/JavaSymbolResolverTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/mcp/McpToolsEvidenceTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/mcp/McpToolsExpandedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/mcp/McpToolsTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/model/CodeEdgeConfidenceTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/model/CodeNodeConfidenceTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/model/CodeNodeEdgeExtendedTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/model/ConfidenceTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/model/EdgeKindTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/model/KindConverterTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/model/ModelCoverageTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/model/NodeKindTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/query/QueryServiceTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/query/StatsServiceTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/query/TopologyServiceTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/web/SpaControllerConditionalTest.java
delete mode 100644 src/test/java/io/github/randomcodespace/iq/web/SpaControllerMockMvcTest.java
delete mode 100644 src/test/resources/application-test.yml
delete mode 100644 src/test/resources/config-unified/full.yml
delete mode 100644 src/test/resources/config-unified/malformed.yml
delete mode 100644 src/test/resources/config-unified/minimal.yml
delete mode 100644 src/test/resources/e2e/ground-truth-petclinic.json
delete mode 100644 src/test/resources/e2e/ground-truth-realworld-express.json
diff --git a/.github/workflows/beta-java.yml b/.github/workflows/beta-java.yml
deleted file mode 100644
index 74214911..00000000
--- a/.github/workflows/beta-java.yml
+++ /dev/null
@@ -1,72 +0,0 @@
-name: Beta Release (Java)
-on:
- workflow_dispatch: # Manual trigger ONLY
-
-permissions: read-all
-
-jobs:
- beta:
- runs-on: ubuntu-latest
- permissions:
- contents: write
- packages: write
- steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4.2.2
- with:
- fetch-depth: 0
-
- - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v4.7.1
- with:
- distribution: 'temurin'
- java-version: '25'
- cache: 'maven'
- server-id: central
- server-username: MAVEN_USERNAME
- server-password: MAVEN_PASSWORD
- gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }}
- gpg-passphrase: MAVEN_GPG_PASSPHRASE
-
- - name: Determine beta version
- id: version
- run: |
- LATEST_BETA=$(git tag -l 'v0.0.1-beta.*' | sort -V | tail -1)
- if [ -z "$LATEST_BETA" ]; then
- NEXT_NUM=0
- else
- CURRENT_NUM=$(echo "$LATEST_BETA" | grep -oP 'beta\.\K[0-9]+')
- NEXT_NUM=$((CURRENT_NUM + 1))
- fi
- VERSION="0.0.1-beta.${NEXT_NUM}"
- echo "version=$VERSION" >> $GITHUB_OUTPUT
- echo "tag=v$VERSION" >> $GITHUB_OUTPUT
- echo "Next beta version: $VERSION"
-
- - name: Set version in pom.xml
- run: mvn versions:set -DnewVersion=${{ steps.version.outputs.version }} -B
-
- - name: Build and test
- run: mvn clean verify -B
-
- - name: Deploy to Maven Central
- env:
- MAVEN_USERNAME: ${{ secrets.OSS_NEXUS_USER }}
- MAVEN_PASSWORD: ${{ secrets.OSS_NEXUS_PASS }}
- MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
- run: mvn deploy -P release -DskipTests -B
-
- - name: Create git tag
- run: |
- git config user.name "github-actions[bot]"
- git config user.email "github-actions[bot]@users.noreply.github.com"
- git tag -a ${{ steps.version.outputs.tag }} -m "Beta release ${{ steps.version.outputs.version }}"
- git push origin ${{ steps.version.outputs.tag }}
-
- - name: Create GitHub Release
- uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
- with:
- tag_name: ${{ steps.version.outputs.tag }}
- name: "Beta ${{ steps.version.outputs.version }}"
- prerelease: true
- generate_release_notes: true
- files: |
- target/code-iq-*-cli.jar
diff --git a/.github/workflows/ci-java.yml b/.github/workflows/ci-java.yml
deleted file mode 100644
index 523e6dcd..00000000
--- a/.github/workflows/ci-java.yml
+++ /dev/null
@@ -1,54 +0,0 @@
-name: Java CI
-
-# Lean Java CI — fast compile + unit-test gate on the Java reference side.
-# Pairs with go-parity.yml: this workflow proves the Java jar still builds
-# on every PR; go-parity.yml then uses the same build to diff against the
-# Go port.
-#
-# Heavier checks (jacoco coverage, SpotBugs, OWASP dependency-check) live
-# under workflow_dispatch via release-java.yml — they're not in the per-PR
-# loop because they slow the Go port's PRs without adding signal.
-#
-# Disappears in Phase 6 cutover along with the rest of the Java tree.
-
-on:
- push:
- branches: [main]
- pull_request:
- branches: [main]
- # NOTE: no `paths:` filter. The `build` job name is a required check
- # on main's branch protection, and a `paths:` filter would cause the
- # check to be skipped on PRs that don't touch Java — leaving the
- # required check stuck at "Waiting for status to be reported", which
- # blocks merge of every non-Java PR (e.g. PR #131 phase 5 release infra).
- # Java compile is ~1 minute; the cost is worth the always-on signal
- # until Phase 6 cutover deletes the Java tree entirely.
-
-permissions: read-all
-
-jobs:
- build:
- name: build
- runs-on: ubuntu-latest
- permissions:
- contents: read
- steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4.2.2
- with:
- fetch-depth: 0
- - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v4.7.1
- with:
- distribution: 'temurin'
- java-version: '25'
- cache: 'maven'
- - name: Compile + unit tests (skip frontend)
- # -Dfrontend.skip=true so the npm step doesn't run — CI image
- # doesn't carry node 20 by default and the frontend is owned by
- # a separate workflow. -B (batch) + -ntp (no transfer progress)
- # for quiet logs.
- run: mvn -B -ntp -Dfrontend.skip=true verify
- - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v4.6.2
- if: always()
- with:
- name: java-test-results
- path: target/surefire-reports/
diff --git a/.github/workflows/go-parity.yml b/.github/workflows/go-parity.yml
deleted file mode 100644
index 54f87666..00000000
--- a/.github/workflows/go-parity.yml
+++ /dev/null
@@ -1,101 +0,0 @@
-name: go-parity
-
-# Java vs Go parity test for fixture-minimal. Validates that the Go port
-# produces the same canonical graph shape as the Java reference until
-# Phase 6 cutover deletes the Java tree. Runs on PRs that touch the Go
-# tree, the Java tree, the parity harness, or this workflow.
-#
-# The Java side ships a JSON graph via `codeiq graph -f json` from the
-# `serving` profile (Neo4j-backed). A small jq filter
-# (go/parity/java-normalize.jq) rewrites that into the same per-file
-# canonical shape that the Go-side parity.Normalize emits. The two
-# normalized JSON blobs are then diff'd by the `parity` build tag in
-# go/parity/parity_test.go, with expected-divergence.json holding the
-# allow-list of intentional drift.
-
-on:
- pull_request:
- branches: [main]
- paths:
- - 'go/**'
- - 'src/**'
- - 'pom.xml'
- - '.github/workflows/go-parity.yml'
- workflow_dispatch:
-
-permissions:
- contents: read
-
-jobs:
- parity:
- name: Java vs Go parity (fixture-minimal)
- runs-on: ubuntu-latest
- env:
- CGO_ENABLED: "1"
- steps:
- - uses: actions/checkout@v4
- - uses: actions/setup-java@v4
- with:
- distribution: temurin
- java-version: '25'
- cache: maven
- - uses: actions/setup-go@v5
- with:
- # Pin to 1.25.x — 1.26+ isn't on enough developer machines yet.
- go-version: '1.25.10'
- cache: true
- cache-dependency-path: go/go.sum
- - name: Install C toolchain
- run: sudo apt-get update -y && sudo apt-get install -y build-essential jq
-
- # ---- Java side ----------------------------------------------------
- - name: Build Java jar (skip frontend)
- run: mvn -B -q -DskipTests -Dfrontend.skip=true package
- - name: Stage Java fixture (separate copy so caches don't collide)
- run: cp -r go/testdata/fixture-minimal /tmp/fm-java
- - name: Java index → H2 cache
- run: java -jar target/code-iq-*-cli.jar index /tmp/fm-java
- - name: Java enrich → Neo4j (serving profile)
- # `graph -f json` reads from Neo4j under the serving profile, not
- # H2. Need to enrich first or the export prints "No graph data
- # found. Run 'codeiq analyze' first."
- run: |
- java -Dspring.profiles.active=serving \
- -jar target/code-iq-*-cli.jar enrich /tmp/fm-java
- - name: Java graph → normalized JSON
- # Run from inside the fixture so Neo4j path resolution finds the
- # store enrich wrote. java-normalize.jq pivots the Java
- # {nodes:[...]} shape into the per-file array shape
- # parity.Normalize uses on the Go side.
- #
- # The Java CLI prints Logback JSON log lines to stdout BEFORE the
- # graph JSON, so we capture everything then awk to the first line
- # that is exactly "{" — that's the pretty-printed graph object.
- run: |
- cd /tmp/fm-java
- java -Dspring.profiles.active=serving \
- -jar "$GITHUB_WORKSPACE"/target/code-iq-*-cli.jar graph . -f json \
- > /tmp/java-raw-with-logs.json
- awk '/^\{$/ {f=1} f' /tmp/java-raw-with-logs.json > /tmp/java-raw.json
- jq -f "$GITHUB_WORKSPACE"/go/parity/java-normalize.jq /tmp/java-raw.json \
- > /tmp/java-normalized.json
-
- # ---- Go side ------------------------------------------------------
- - name: Build Go binary
- working-directory: go
- run: go build -o codeiq ./cmd/codeiq
- - name: Go parity test (diff vs normalized Java output)
- working-directory: go
- env:
- TEST_JAVA_NORMALIZED: /tmp/java-normalized.json
- run: go test -tags=parity ./parity/... -v
-
- # ---- Failure artifact --------------------------------------------
- - name: Upload normalized JSON on failure
- if: failure()
- uses: actions/upload-artifact@v4
- with:
- name: parity-diff
- path: |
- /tmp/java-normalized.json
- /tmp/java-raw.json
diff --git a/.github/workflows/release-java.yml b/.github/workflows/release-java.yml
deleted file mode 100644
index d2c0b409..00000000
--- a/.github/workflows/release-java.yml
+++ /dev/null
@@ -1,106 +0,0 @@
-name: Release to Maven Central
-on:
- workflow_dispatch:
- inputs:
- version:
- description: 'Release version (e.g., 0.1.0)'
- required: true
-
-permissions: read-all
-
-jobs:
- release:
- runs-on: ubuntu-latest
- permissions:
- contents: write
- steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4.2.2
- - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v4.7.1
- with:
- distribution: 'temurin'
- java-version: '25'
- cache: 'maven'
- server-id: central
- server-username: MAVEN_USERNAME
- server-password: MAVEN_PASSWORD
- gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }}
- gpg-passphrase: MAVEN_GPG_PASSPHRASE
- - name: Configure git identity and non-interactive GPG for signed commit/tag
- run: |
- git config user.email "github-actions[bot]@users.noreply.github.com"
- git config user.name "github-actions[bot]"
- # Use the GPG key imported by setup-java (MAVEN_GPG_PRIVATE_KEY) for
- # both commit and tag signing — same trust path as the artifact.
- KEYID=$(gpg --list-secret-keys --with-colons | awk -F: '/^sec:/ {print $5; exit}')
- if [ -z "$KEYID" ]; then
- echo "no GPG secret key in agent — release-java.yml needs MAVEN_GPG_PRIVATE_KEY" >&2
- exit 1
- fi
- git config user.signingkey "$KEYID"
- git config gpg.format openpgp
- git config commit.gpgsign true
- git config tag.gpgsign true
- # Reviewer finding cf64b44d (RAN-47, R5-1):
- # `git commit -S` / `git tag -s` invoke gpg interactively by default
- # and fail in non-interactive Actions shells when the imported key
- # has a passphrase. setup-java only wires the passphrase for Maven
- # signing (via MAVEN_GPG_PASSPHRASE in settings.xml); git itself
- # has no equivalent autoconfig. Configure the gpg-agent for loopback
- # pinentry, point gpg.program at a thin wrapper that injects
- # --batch / --pinentry-mode loopback / --passphrase from
- # MAVEN_GPG_PASSPHRASE, so signing succeeds non-interactively.
- mkdir -p "$HOME/.gnupg"
- chmod 700 "$HOME/.gnupg"
- printf '%s\n' 'use-agent' 'pinentry-mode loopback' > "$HOME/.gnupg/gpg.conf"
- printf '%s\n' 'allow-loopback-pinentry' > "$HOME/.gnupg/gpg-agent.conf"
- gpgconf --kill gpg-agent || true
- # Wrapper script: git invokes this with the same flags as gpg.
- # We exec into gpg with --batch + loopback + the passphrase from
- # the env (MAVEN_GPG_PASSPHRASE is set on each step that signs).
- cat > "$HOME/.gnupg/gpg-loopback.sh" <<'WRAPPER'
- #!/usr/bin/env bash
- # Non-interactive gpg wrapper for `git commit -S` / `git tag -s`.
- # MAVEN_GPG_PASSPHRASE is set on the workflow step that signs.
- exec gpg --batch --yes --pinentry-mode loopback \
- --passphrase "${MAVEN_GPG_PASSPHRASE:-}" "$@"
- WRAPPER
- chmod +x "$HOME/.gnupg/gpg-loopback.sh"
- git config gpg.program "$HOME/.gnupg/gpg-loopback.sh"
- - name: Set release version and create signed release commit
- env:
- RELEASE_VERSION: ${{ inputs.version }}
- # Picked up by the gpg-loopback wrapper script for `git commit -S`.
- MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
- # Commit the version bump on a detached HEAD off the workflow's
- # checkout. The commit is reachable only via the tag created below —
- # no push to `main`, so this works under branch protection.
- # The commit captures the exact source tree that the deploy step
- # will build from, fixing the prior "tag diverges from released
- # artifact" gap (Reviewer finding 47b718b9).
- run: |
- mvn -B -ntp versions:set -DnewVersion="$RELEASE_VERSION" -DgenerateBackupPoms=false
- git add pom.xml
- git commit -S -m "chore(release): ${RELEASE_VERSION}"
- - name: Deploy to Maven Central
- env:
- MAVEN_USERNAME: ${{ secrets.OSS_NEXUS_USER }}
- MAVEN_PASSWORD: ${{ secrets.OSS_NEXUS_PASS }}
- MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
- run: mvn -B -ntp -P release clean deploy
- - name: Create signed annotated tag and push
- env:
- RELEASE_VERSION: ${{ inputs.version }}
- MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
- # Annotated + GPG-signed tag pointing at the release commit (the
- # current HEAD after the commit step above). Push only the tag —
- # the release commit lives only as a tag-reachable object so we
- # never need to update `main`, and branch protection stays clean.
- run: |
- git tag -s "v${RELEASE_VERSION}" -m "codeiq ${RELEASE_VERSION}"
- git push origin "refs/tags/v${RELEASE_VERSION}"
- - uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
- with:
- tag_name: v${{ inputs.version }}
- generate_release_notes: true
- files: |
- target/code-iq-*-cli.jar
diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml
index a0d96850..d030363a 100644
--- a/.github/workflows/security.yml
+++ b/.github/workflows/security.yml
@@ -43,27 +43,14 @@ jobs:
mv osv-scanner_linux_amd64 osv-scanner
chmod +x osv-scanner
./osv-scanner --version
- - name: Run osv-scanner (npm lockfile)
- # Scoped to the npm lockfile by design:
- #
- # - osv-scanner v2's `transitivedependency/pomxml` plugin resolves
- # Maven transitive deps via the `deps.dev` gRPC service. That
- # service is intermittently `Unavailable` in GitHub-hosted CI
- # (observed on PR #91 5th-pass), causing the scanner to exit
- # non-zero even when zero vulnerabilities are found.
- # - Maven coverage is already provided by Trivy (filesystem scan,
- # this same workflow) plus Dependabot security updates against
- # `pom.xml`. The OSV.dev advisory feed pulls from GHSA, which
- # Dependabot also consumes — there is no SCA gap.
- # - The npm lockfile is where osv-scanner adds unique value
- # (deeper transitive resolution + ecosystem-specific advisories
- # than Trivy provides for Node).
- #
- # AC §3 ("Zero High/Critical CVEs in dependency tree") is satisfied
- # by the union of OSV-Scanner (npm) + Trivy (Maven, OS, container)
- # + Dependabot (cross-ecosystem) — no single tool gates every
- # ecosystem.
- run: ./osv-scanner --lockfile=src/main/frontend/package-lock.json
+ - name: Run osv-scanner (Go module graph)
+ # Phase 6 cutover: project is Go-only. osv-scanner reads go.mod
+ # (the entire module graph including transitive deps) and emits
+ # any matching advisories from OSV.dev / GHSA. govulncheck (in
+ # go-ci.yml) is the call-graph-aware companion that filters to
+ # *reachable* vulns — keeping both gives both "have we got it"
+ # AND "are we exposed".
+ run: ./osv-scanner --lockfile=go/go.mod
trivy:
name: Trivy (filesystem + container scan)
@@ -97,13 +84,16 @@ jobs:
# — setup-python@v6 ships a current vendored pip, and the Scorecard
# rule fires only on user-installed packages.
run: python -m pip install --quiet 'semgrep==1.161.0'
- - name: Run semgrep (security-audit + owasp-top-ten + java)
+ - name: Run semgrep (security-audit + owasp-top-ten + golang)
+ # Phase 6 cutover: project is Go-only. p/java replaced with
+ # p/golang. p/security-audit + p/owasp-top-ten stay (both
+ # language-agnostic rule sets).
run: |
semgrep scan \
--error \
--config p/security-audit \
--config p/owasp-top-ten \
- --config p/java \
+ --config p/golang \
--severity ERROR \
--metrics off
@@ -145,52 +135,32 @@ jobs:
with:
node-version: '20'
- run: |
- # Scope jscpd to production code only:
- # - src/main/java — Java production code
- # - src/main/frontend/src — React/TS production code
- # Tests (Java unit/integration, TS unit, Playwright e2e specs)
- # share fixture/assertion shape by design — that parallelism is a
- # feature for catching contract regressions, not a refactoring
- # target. Scanning ./ as the AC originally proposed produces
- # ~12.83% duplication driven by *.spec.ts e2e parallelism +
- # *LanguageExtractorTest.java parallel-shape tests; both are
- # intentional. AC §3 wording "duplication < 3% on new code" —
- # interpreting "new code" as production code, gated per-PR via
- # this scoped scan.
+ # Scope jscpd to Go production code only:
+ # - go/cmd — main entry point
+ # - go/internal — production code (100 detectors + pipeline + MCP)
+ # Tests share fixture/assertion shape by design (parallelism for
+ # catching contract regressions, not a refactoring target).
#
- # `*LanguageExtractor.java` files (one per language under
- # intelligence/extractor/{java,typescript,python,go}) implement
- # the same template-method shape against per-language ASTs by
- # design — collapsing them into a base class would couple
- # unrelated grammars and erase the per-language readability that
- # makes them reviewable. Excluded from jscpd; cleanup-via-base-class
- # is a separate board call, not a CI gate.
- # `--min-tokens 200` is calibrated to Java's verbosity floor.
- # A 97-detector codebase has, by definition, 97 file headers
- # consisting of `package` + 8–15 imports + `@Component public class`
- # + interface-implementation scaffold + a few constants — that's
- # 150–180 tokens of identical structural boilerplate per file, with
- # zero refactor surface (the imports differ by detector concern,
- # the type names differ by node kind, but the *shape* is shared
- # template-method conformance). At the jscpd default of 50, those
- # headers produce ~400 trivial clones; at 100 they still produce
- # ~130. 200 tokens roughly corresponds to a meaningful method body
- # or a non-trivial code block — i.e. real duplicate logic, not
- # language scaffolding. Threshold (3%) and the production-only
- # scope are unchanged.
+ # `*language_extractor.go` (one per language under
+ # intelligence/extractor/{java,typescript,python,golang}) and
+ # `structures.go` (kotlin/scala/cpp/rust) implement the same
+ # template-method shape against per-language ASTs by design;
+ # collapsing into a base would couple unrelated grammars and
+ # erase per-language readability. Excluded.
#
- # `*StructuresDetector.java` (Kotlin/Scala/Cpp/Rust) implement the
- # same template-method shape against per-language ASTs by design,
- # same as the LanguageExtractors above. Excluded for the same
- # reason — collapsing into a base class would couple unrelated
- # grammars and obscure per-language readability.
+ # --min-tokens 200 calibrated to Go's verbosity floor: each
+ # detector file's package decl + imports + Type/init/Name/
+ # SupportedLanguages/DefaultConfidence/Detect scaffold is
+ # ~150-180 tokens of identical structural boilerplate across
+ # 100 detectors. 200 tokens is the floor for "real duplicate
+ # logic" rather than language scaffolding.
npx --yes jscpd@4 \
--threshold 3 \
--min-tokens 200 \
--reporters consoleFull \
- --format "java,javascript,typescript" \
- --ignore "**/target/**,**/node_modules/**,**/grammar/**,**/generated-sources/**,**/dist/**,**/build/**,**/coverage/**,**/intelligence/extractor/**/*LanguageExtractor.java,**/detector/**/*StructuresDetector.java" \
- src/main/java src/main/frontend/src
+ --format "go" \
+ --ignore "**/vendor/**,**/testdata/**,**/grammar/**,**/generated/**,**/dist/**,**/coverage/**,**/intelligence/extractor/**/language_extractor.go,**/detector/**/structures.go" \
+ go/cmd go/internal
sbom:
name: SBOM (SPDX + CycloneDX)
diff --git a/.gitignore b/.gitignore
index 752155b1..ced6b991 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,13 +1,12 @@
-# Java build
-target/
-*.class
-*.jar
-!src/main/resources/static/js/vendor/*.js
-.classpath
-.project
-.settings/
-.factorypath
-*.iml
+# Go build
+go/codeiq
+go/dist/
+
+# Go test artifacts
+*.test
+*.out
+coverage.out
+coverage.html
# IDE
.idea/
@@ -23,20 +22,23 @@ target/
.DS_Store
Thumbs.db
-# Project runtime data
+# Project runtime data — the embedded Kuzu graph + SQLite analysis cache
+# both land under .codeiq/ when codeiq runs against a target repo. Never
+# commit either; they're per-repo and per-machine.
.codeiq/
*.db
*.db-wal
*.db-shm
-*.mv.db
+# Stray Kuzu temp files
+*.wal
+*.kuzu-tmp
# Environment & secrets
# Broad .env* glob catches .env, .env.local, .env.prod, .env.test, .env.* — all
-# variants. Pre-PR-3 we only excluded the first two and several .env.
-# variants would have committed silently.
+# variants.
.env
.env.*
-# Java keystores & PKCS#12 archives — high-value secrets that have shown up in
+# Keystores / PKCS#12 archives — high-value secrets that have shown up in
# audits; never commit, even encrypted.
*.jks
*.p12
@@ -63,27 +65,12 @@ secrets.yaml
# Logs
*.log
-# Frontend
-src/main/frontend/node_modules/
-src/main/frontend/node/
-src/main/frontend/dist/
-src/main/frontend/tsconfig.tsbuildinfo
-playwright-report/
-test-results/
-# Generated explorer CSS (rebuild via: cd src/main/frontend && npm run build:explorer-css)
-src/main/resources/static/css/explorer.css
-# Frontend build output copied into Spring static resources
-src/main/resources/static/index.html
-src/main/resources/static/assets/CodeGraphView-*.js
-src/main/resources/static/assets/index-*.js
-src/main/resources/static/assets/index-*.css
-src/main/resources/static/assets/vendor-*.js
-
-# Distribution
+# Distribution / release artifacts
*.tar.gz
*.zip
+dist/
-# Python (legacy — removed from project)
+# Python tooling that codeiq sometimes shells out to (linters, etc.)
__pycache__/
*.py[cod]
*.egg-info/
@@ -93,8 +80,6 @@ __pycache__/
.pytest_cache/
pytest-of-*/
htmlcov/
-dist/
-build/
*.whl
pyproject.toml
!go/testdata/**/pyproject.toml
@@ -107,14 +92,12 @@ venv/
docs/superpowers/*
!docs/superpowers/baselines/
-# Docker & Helm (bundled separately)
+# Docker & Helm (bundled separately by the release flow if/when needed)
Dockerfile
docker-compose.yml
helm/
-# Neo4j embedded data
-neo4j-data/
-graph.db/
+# Worktrees
.worktrees/
# Phase A baseline
@@ -122,5 +105,6 @@ graph.db/
docs/superpowers/baselines/**/raw/**
# Agent-generated plans / scratch (not project deliverables)
-go-port-phase4-plan.md
phase*-plan.md
+*-plan.md
+!docs/superpowers/plans/*.md
diff --git a/CHANGELOG.md b/CHANGELOG.md
index af1bd15d..b7980b50 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,49 @@ for that specific tag for the per-commit details.
## [Unreleased]
+## [v1.0.0] - 2026-05-13
+
+### Changed
+
+- **Phase 6 cutover — Java reference deleted, Go is the only
+ implementation.** Single static binary released from `go/cmd/codeiq`.
+ Deletes `src/`, `pom.xml`, `spotbugs-exclude.xml`,
+ `.github/workflows/{ci-java,beta-java,release-java,go-parity}.yml`.
+ ~8.9 MB / ~1500 files removed.
+
+### v1.0.0 surface
+
+What ships in v1.0.0 (carrying forward from the c363727 squash + c630245 release infra):
+
+- 100 detectors across 35+ languages.
+- Deterministic graph with confidence-aware NodeMerger and canonical
+ `(src, tgt, kind)` edge dedup; phantom-drop visibility.
+- 6 consolidated mode-driven MCP tools + `run_cypher` escape hatch +
+ `review_changes`. The deprecated 34 narrow tools remain wired for
+ back-compat in this release; targeted for removal in v1.1.0.
+- `codeiq review` CLI + `review_changes` MCP tool with Ollama (local
+ or Cloud) for LLM-driven PR review against graph evidence.
+- Goreleaser cross-platform binaries (linux/amd64, linux/arm64,
+ darwin/arm64), SPDX SBOMs, Cosign keyless signatures via GitHub
+ OIDC + Sigstore Rekor.
+- Optional Homebrew tap publish (`RandomCodeSpace/homebrew-codeiq`).
+- Per-PR perf-regression gate (`perf-gate.yml`).
+
+### Removed
+
+- `src/main/java/`, `src/test/java/`, `src/main/frontend/`,
+ `src/main/resources/`, `pom.xml`, `spotbugs-exclude.xml`.
+- `.github/workflows/ci-java.yml`, `release-java.yml`, `beta-java.yml`,
+ `go-parity.yml` (the last needed the Java jar build that's gone).
+
+### Migration notes
+
+Pre-cutover Java-side history is preserved in the squash-merge commit
+`c363727` and on `origin/main`. Anyone needing to recover Java files
+can `git show c363727:` or `git checkout c363727 -- `.
+
+[v1.0.0]: https://github.com/RandomCodeSpace/codeiq/releases/tag/v1.0.0
+
### Added
- **Phase 5 release infrastructure for the Go binary** —
diff --git a/CLAUDE.md b/CLAUDE.md
index 484e2ac8..29c00150 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -1,498 +1,440 @@
-# codeiq (Java) -- Project Instructions
+# codeiq (Go) — Project Instructions
## What This Project Is
-**codeiq** -- a CLI tool + server that scans codebases to build a deterministic code knowledge graph. No AI, no external APIs -- pure static analysis. 99 detectors, 35+ languages, Neo4j Embedded graph database, Spring AI MCP server, REST API, web UI.
+**codeiq** — a CLI tool + MCP server that scans codebases to build a
+deterministic code knowledge graph. No AI, no external APIs — pure
+static analysis. 100 detectors, 35+ languages, Kuzu embedded graph
+database, MCP stdio server, single static Go binary.
-- **Maven coordinates:** `io.github.randomcodespace.iq:code-iq` (artifactId intentionally unchanged)
-- **CLI command:** `codeiq` (via `java -jar`; JAR filename remains `code-iq-*-cli.jar`)
-- **Java package:** `io.github.randomcodespace.iq` (under `src/main/java/`)
-- **GitHub repo:** `RandomCodeSpace/codeiq` (branch: `main`)
-- **Cache directory on disk:** `.codeiq/cache` (H2 analysis cache)
-- **Neo4j directory on disk:** `.codeiq/graph/graph.db` (enriched graph)
-- **Config file:** `codeiq.yml` (project-level overrides)
+- **CLI command**: `codeiq` (single binary from `go/cmd/codeiq/main.go`)
+- **Go module**: `github.com/randomcodespace/codeiq/go`
+- **Go directive**: `go 1.25.0` (dep-mandated by `modelcontextprotocol/go-sdk`); `toolchain go1.25.10`
+- **GitHub repo**: `RandomCodeSpace/codeiq` (default branch: `main`)
+- **Cache on disk**: `.codeiq/cache/codeiq.sqlite` (SQLite analysis cache)
+- **Graph on disk**: `.codeiq/graph/codeiq.kuzu` (Kuzu embedded graph)
+- **Config file**: `codeiq.yml` (project-level overrides)
+
+The Java/Spring Boot reference that seeded this codebase was deleted
+in Phase 6 cutover (v1.0.0). For history, see commits `c363727` (port
+landing) and `c630245` (release infra).
## Tech Stack
-> **Source of truth:** `pom.xml` and `src/main/frontend/package.json`. Update
-> these pins together — when `pom.xml` bumps, this list moves with it as part
-> of the same PR. Pre-PR-5 the list had drifted (Spring Boot 4.0.5,
-> Neo4j 2026.02.3, Spring AI 2.0.0-M3); PR 5 brought it back in sync.
-
-- Java 25 (virtual threads, pattern matching, records, sealed classes)
-- Spring Boot 4.0.6 (parent POM ``)
-- Neo4j Embedded 2026.04.0 (Community Edition, no external server)
-- Spring AI 2.0.0-M4 (MCP server, `@McpTool` annotations, streamable HTTP)
-- Bucket4j 8.18.0 (`bucket4j_jdk17-core`, in-process token-bucket rate limiter)
-- logstash-logback-encoder 9.0 (JSON-structured logging in `serving` profile)
-- micrometer-registry-prometheus (`/actuator/prometheus`, version managed by Boot BOM)
-- JavaParser 3.28.0 (Java AST analysis)
-- ANTLR 4.13.2 (TypeScript/JavaScript, Python, Go, C#, Rust, C++ grammars)
-- Picocli 4.7.7 (CLI framework, integrated with Spring Boot)
-- React 18 + TypeScript + Vite 6 + Ant Design v5 + ECharts v5 (web UI)
-- H2 (incremental analysis cache)
+> Source of truth: `go/go.mod` + `go/go.sum`. Update pins there; this
+> list moves with them in the same commit.
+
+- **Go 1.25.10** — toolchain pin; module min is 1.25.0 (clamped by the
+ MCP SDK's own `go` directive).
+- **Kuzu 0.7.1** (`github.com/kuzudb/go-kuzu`) — embedded graph DB.
+ CGO. v0.7.1 quirks documented in `## Gotchas` below.
+- **`mattn/go-sqlite3` 1.14.22** — SQLite analysis cache. CGO.
+- **`smacker/go-tree-sitter`** — AST parsing for Java / Python /
+ TypeScript / Go.
+- **`modelcontextprotocol/go-sdk` v1.6** — stdio MCP server. v1.6 API
+ shape: `Server.Serve(ctx, mcpsdk.Transport)`; no `NewStdioTransport`
+ helper.
+- **`spf13/cobra`** — CLI framework. Subcommand registration via
+ `internal/cli` blank imports.
+- **`golang-jwt/jwt/v5`** — token validation surface (kept from a
+ serve-mode prototype; serve isn't fully ported yet).
## Architecture
-### Deployment Model
+### Pipeline
```
-Developer machine:
- codeiq index /repo → H2 cache (.codeiq/cache/)
- codeiq enrich /repo → Neo4j (.codeiq/graph/graph.db)
- codeiq bundle /repo → bundle.zip (graph + source snapshot)
-
-Remote server (or local):
- codeiq serve /repo → read-only API + MCP + UI (from Neo4j)
+index: FileDiscovery → Parsers → Detectors (goroutine pool) → GraphBuilder → SQLite cache
+enrich: SQLite → Linkers → LayerClassifier → LexicalEnricher → LanguageEnricher → ServiceDetector → Kuzu (COPY FROM)
+serve: (deferred — not ported in v1.0.0)
+mcp: Kuzu → QueryService → 6 consolidated MCP tools + run_cypher escape hatch + review_changes
```
-**Key principle:** MCP and API are strictly **read-only**. No data manipulation from the serving layer. Analysis happens only via CLI (`index`/`enrich`). The remote server may not have source code access (bundle deployment model).
-
-### Pipeline
+### Pipeline components
+
+- **`internal/analyzer/file_discovery.go`** — `git ls-files` first,
+ dir-walk fallback. Maps extension → `parser.Language` via
+ `LanguageFromExtension` in `internal/parser/parser.go`.
+- **`internal/parser`** — tree-sitter wrappers + a structured parser
+ for YAML/JSON/TOML/INI/properties. Falls back to regex-only when
+ parse fails (matches Java's per-file try/catch).
+- **`internal/detector`** — `@Component` analogue is Go's `init()`
+ blank-import pattern; every detector registers itself with
+ `detector.Default`. Auto-discovery via `internal/cli/detectors_register.go`
+ (this file is the choke point — every detector package leaf must
+ blank-import here or the binary won't fire it).
+- **`internal/analyzer/graph_builder.go`** — buffers detector results.
+ Confidence-aware node merge (`mergeNode`), canonical
+ `(source, target, kind)` edge dedup, deterministic Snapshot with
+ dangling-edge drop. Surfaces dedup/drop counts on `Stats`.
+- **`internal/analyzer/linker/`** — TopicLinker, EntityLinker,
+ ModuleContainmentLinker. Each emits `Result{Nodes, Edges}` that's
+ `.Sorted()` at the call site (Phase 1 §1.4).
+- **`internal/graph`** — Kuzu wrapper. Read-only via `OpenReadOnly`
+ (mutation gate in `cypher.go`).
+- **`internal/mcp`** — 6 consolidated mode-driven tools (`graph_summary`,
+ `find_in_graph`, `inspect_node`, `trace_relationships`,
+ `analyze_impact`, `topology_view`), `run_cypher` escape hatch, the
+ 34 deprecated narrow tools, plus `review_changes`.
+- **`internal/review`** — diff parser, Ollama-compatible chat client,
+ ReviewService orchestrator. Default endpoint = local Ollama;
+ `OLLAMA_API_KEY` flips to Ollama Cloud.
+
+### Package layout
```
-index: FileDiscovery → Parsers → Detectors (virtual threads) → GraphBuilder → H2 cache
-enrich: H2 → Linkers → LayerClassifier → LexicalEnricher → LanguageEnricher → ServiceDetector → Neo4j (UNWIND bulk-load)
-serve: Neo4j → GraphStore → QueryService → REST API / MCP / Web UI
+go/
+├── cmd/codeiq/ # main package — single binary entrypoint
+├── internal/
+│ ├── analyzer/ # pipeline orchestration
+│ │ └── linker/ # cross-file enrichers
+│ ├── buildinfo/ # version/commit/date from -ldflags
+│ ├── cache/ # SQLite analysis cache
+│ ├── cli/ # cobra subcommands + detector registrations
+│ ├── detector/ # 100 detectors organized by category
+│ │ ├── auth/
+│ │ ├── base/ # AbstractDetector analogues + helpers
+│ │ ├── csharp/
+│ │ ├── frontend/ # React, Vue, Svelte, Angular, frontend routes
+│ │ ├── generic/
+│ │ ├── golang/
+│ │ ├── iac/ # Terraform, Bicep, Dockerfile, CloudFormation
+│ │ ├── jvm/
+│ │ │ ├── java/ # ~37 Java detectors
+│ │ │ ├── kotlin/
+│ │ │ └── scala/
+│ │ ├── markup/ # Markdown
+│ │ ├── proto/
+│ │ ├── python/
+│ │ ├── script/shell/ # PowerShell, Bash
+│ │ ├── sql/ # SqlMigration
+│ │ ├── structured/ # YAML, JSON, TOML, K8s, Helm, OpenAPI, …
+│ │ ├── systems/{cpp,rust}/
+│ │ └── typescript/
+│ ├── flow/ # architecture-flow diagram engine
+│ ├── graph/ # Kuzu facade
+│ ├── intelligence/ # Lexical + language extractors + evidence + query planner
+│ ├── mcp/ # MCP server + tool definitions
+│ ├── model/ # CodeNode, CodeEdge, NodeKind, EdgeKind, Confidence, Layer
+│ ├── parser/ # tree-sitter + structured parsers
+│ ├── query/ # service / topology / stats
+│ └── review/ # PR-review pipeline (diff + LLM)
+├── parity/ # parity harness (build tag `parity`)
+├── testdata/ # fixtures
+├── go.mod
+└── go.sum
```
-### Pipeline Components
-- **FileDiscovery** -- discovers files via `git ls-files` or directory walk, maps extensions to languages
-- **StructuredParser** -- routes files to JavaParser (Java), ANTLR (TS/Py/Go/C#/Rust/C++), or raw text
-- **Detectors** -- 97 concrete detector beans (Spring `@Component`), auto-discovered via classpath scan
-- **GraphBuilder** -- buffers all nodes and edges, flushes nodes first then edges (determinism guarantee)
-- **Linkers** -- run after all detectors: `TopicLinker`, `EntityLinker`, `ModuleContainmentLinker`
-- **LayerClassifier** -- sets `layer` property on every node using node kind, framework, and path heuristics
-- **ServiceDetector** -- scans filesystem for build files (30+ build systems), creates SERVICE nodes with CONTAINS edges
-- **GraphStore** -- facade over Neo4j, UNWIND-based bulk save, Cypher reads (no SDN for reads)
-- **AnalysisCache** -- H2-backed file hash cache for incremental analysis
+## Critical Rules
-### Spring Profiles
-- **`indexing`** -- active during CLI index/analyze/stats/graph/query/find/flow/bundle/cache/plugins commands. No Neo4j.
-- **`serving`** -- active during `serve` command. Starts Neo4j Embedded, REST API, MCP server, web UI.
+### Read-Only MCP
-## Package Structure
+The MCP server is **strictly read-only** — no data mutation from tool
+calls. `run_cypher` rejects mutation keywords at the gate
+(`internal/graph/cypher.go`). `review_changes` reads the graph and
+shells out to `git`; it never writes to `.codeiq/`.
-```
-io.github.randomcodespace.iq
- |-- CodeIqApplication.java # Spring Boot main class
- |-- analyzer/ # Pipeline: Analyzer, FileDiscovery, GraphBuilder, LayerClassifier, ServiceDetector
- | |-- linker/ # Cross-file linkers: TopicLinker, EntityLinker, ModuleContainmentLinker
- |-- api/ # REST controllers: GraphController (read-only), FlowController, TopologyController
- |-- cache/ # AnalysisCache (H2), FileHasher
- |-- cli/ # Picocli commands: index, enrich, serve, analyze, stats, etc.
- |-- config/ # Spring config: Neo4jConfig, CodeIqConfig, JacksonConfig
- |-- detector/ # Detector interface + 97 concrete detectors
- | |-- auth/ # LDAP, certificate, session/header auth (cross-cutting)
- | |-- csharp/ # EF Core, Minimal APIs, C# structures
- | |-- frontend/ # React, Vue, Angular, Svelte, frontend routes
- | |-- generic/ # Generic imports
- | |-- go/ # Go web, ORM, structures
- | |-- iac/ # Terraform, Dockerfile, Bicep
- | |-- jvm/ # JVM-family languages
- | | |-- java/ # 27 Java detectors (Spring, JPA, Kafka, gRPC, etc.)
- | | |-- kotlin/ # Ktor, Kotlin structures
- | | |-- scala/ # Scala structures
- | |-- markup/ # Markdown structure (renamed from docs/)
- | |-- proto/ # Proto structures
- | |-- python/ # Django, FastAPI, Flask, SQLAlchemy, Celery, etc.
- | |-- script/ # Scripting languages
- | | |-- shell/ # Bash, PowerShell
- | |-- sql/ # (placeholder — follow-up #48)
- | |-- structured/ # YAML, JSON, TOML, INI, properties, K8s, Helm, GHA, etc. (renamed from config/)
- | |-- systems/ # Systems languages
- | | |-- cpp/ # C++ structures
- | | |-- rust/ # Actix-web, Rust structures
- | |-- typescript/ # Express, NestJS, Fastify, Prisma, TypeORM, etc.
- |-- flow/ # FlowEngine, FlowRenderer, FlowViews, FlowModels
- |-- grammar/ # ANTLR parser factory + generated parsers
- |-- graph/ # GraphStore (Neo4j facade), GraphRepository (SDN, writes only)
- |-- health/ # GraphHealthIndicator (Spring Actuator)
- |-- mcp/ # McpTools (34 @McpTool methods, read-only, includes intelligence tools)
- |-- model/ # CodeNode, CodeEdge, NodeKind (34), EdgeKind (28), Confidence
- |-- intelligence/ # Intelligence enrichment (Phase 2-5)
- | |-- lexical/ # LexicalEnricher, LexicalQueryService, DocCommentExtractor, SnippetStore
- | |-- extractor/ # LanguageEnricher, LanguageExtractor, LanguageExtractionResult
- | | |-- java/ # JavaLanguageExtractor
- | | |-- typescript/ # TypeScriptLanguageExtractor
- | | |-- python/ # PythonLanguageExtractor
- | | |-- go/ # GoLanguageExtractor
- | |-- evidence/ # EvidencePack, EvidencePackAssembler
- | |-- query/ # QueryPlanner, QueryRoute, QueryPlan
- |-- query/ # QueryService, StatsService (categorized), TopologyService
- |-- web/ # Static resource serving (React SPA)
-```
+Analysis/enrichment happens only via the CLI commands `index` /
+`enrich`.
-## Critical Rules
+### Determinism
+
+- Same input MUST produce same output. Every run.
+- No `map` iteration without sorting first (every range loop over a
+ map sorts keys before emit).
+- `GraphBuilder.Snapshot` sorts nodes + edges by ID.
+- Linker outputs go through `Result.Sorted()` at the boundary.
+- All detectors are stateless — no mutable struct fields. Stateless
+ methods only. The single shared instance per detector type is
+ registered with `detector.Default` at package init.
+
+### Detector dispatch is choke-pointed
-### Read-Only Serving Layer
-- MCP and API are **strictly read-only** -- no data manipulation
-- Analysis/enrichment happens only via CLI (`index`, `enrich`)
-- Remote servers may not have source code access (bundle deployment)
-- No `POST /api/analyze` or `analyze_codebase` MCP tool
-
-### Determinism is Non-Negotiable
-- Same input MUST produce same output, every time
-- No `Set` iteration without sorting first (`TreeSet` or `stream().sorted()`)
-- No dependency on thread completion order (GraphBuilder uses indexed result slots)
-- All detectors must be stateless -- no mutable instance fields, use method-local state only
-
-### Generic Detection -- Not Example-Specific
-- Every feature must work for ALL languages and architectures, not just the example given
-- Framework detectors must have discriminator guards (e.g., Quarkus detector requires `io.quarkus` import)
-- ServiceDetector supports 30+ build systems across all ecosystems, not just Maven
-- Never fix for one language and forget others
-
-### Virtual Thread Safety
-- All file I/O and Neo4j operations run on virtual threads
-- The H2 analysis cache uses `synchronized` blocks for thread safety
-- Detectors MUST be stateless -- Spring `@Component` beans are singletons
+Adding a new detector package under `internal/detector//` is NOT
+enough. The package must be blank-imported in
+[`internal/cli/detectors_register.go`](go/internal/cli/detectors_register.go).
+Without that line, the package's `init()` never runs and the binary
+ships without your detector. The Phase 4 benchmark exposed this bug
+when 15 language families silently produced 0 nodes — see commit
+`04098be` for the fix.
+
+### Goroutine safety
+
+- File I/O and SQLite writes run on a bounded worker pool
+ (`Analyzer.opts.Workers`, default 2× GOMAXPROCS).
+- Detectors must be stateless. Method-local state only.
+- Kuzu reads use the embedded API; one query at a time per
+ `Store.Cypher` call. The store internal mutex serializes.
## CLI Commands
-| Command | Description |
-|---------|-------------|
-| `index [path]` | Memory-efficient batched scanning to H2 (preferred for large codebases) |
-| `enrich [path]` | Load H2 into Neo4j, run linkers, classify layers, detect services |
-| `serve [path]` | Start read-only web UI + REST API + MCP server (requires enrich first) |
-| `analyze [path]` | Legacy in-memory scan (use index+enrich for large codebases) |
-| `stats [path]` | Show rich categorized statistics from analyzed graph |
-| `graph [path]` | Export graph (JSON, YAML, Mermaid, DOT) |
-| `query [path]` | Query graph relationships (consumers, producers, callers) |
-| `find [what] [path]` | Preset queries (endpoints, guards, entities, topics, etc.) |
-| `cypher [query]` | Execute raw Cypher queries against Neo4j |
-| `flow [path]` | Generate architecture flow diagrams |
-| `bundle [path]` | Package graph + source into distributable ZIP |
-| `cache [action]` | Manage analysis cache |
-| `plugins [action]` | List and inspect detectors |
-| `topology [path]` | Show service topology map |
-| `version` | Show version info |
-
-### Standard Pipeline
+| Command | Purpose |
+|---|---|
+| `index [path]` | Scan files → SQLite analysis cache. |
+| `enrich [path]` | Load cache → Kuzu graph; run linkers + LayerClassifier + intelligence. |
+| `mcp [path]` | Stdio MCP server (Claude / Cursor). |
+| `stats [path]` | Categorized statistics from the enriched graph. |
+| `query [path]` | consumers/producers/callers/dependencies/dependents/shortest-path/cycles/dead-code. |
+| `find [path]` | endpoints, entities, services, … |
+| `cypher [path]` | Raw Cypher (read-only) against Kuzu. |
+| `flow [path]` | Architecture-flow diagrams (mermaid/dot/yaml). |
+| `graph [path]` | Export graph in json / yaml / mermaid / dot. |
+| `topology [path]` | Service-topology projection. |
+| `review [path]` | LLM-driven PR review (Ollama by default). |
+| `cache ` | Inspect / clear the SQLite cache. |
+| `plugins ` | List + describe registered detectors. |
+| `config ` | Validate / explain `codeiq.yml`. |
+| `version` | `--version` long form. |
+
+### Standard pipeline
```bash
-# For large codebases (44K+ files):
-codeiq index /path/to/repo # ~220s for 44K files, writes to H2
-codeiq enrich /path/to/repo # loads H2 → Neo4j with linkers/layers/services
-codeiq serve /path/to/repo # read-only server
-
-# For small codebases:
-codeiq analyze /path/to/repo # in-memory, all-in-one
-codeiq serve /path/to/repo # needs enrich if using index
+codeiq index /path/to/repo
+codeiq enrich /path/to/repo
+codeiq stats /path/to/repo
+codeiq mcp /path/to/repo # for Claude / Cursor wiring
```
-## Server Endpoints (all read-only)
-
-### REST API (`/api`) -- 37 endpoints
-
-**GraphController** (`/api`):
-- `GET /api/stats` -- Rich categorized statistics (graph, languages, frameworks, infra, connections, auth, architecture)
-- `GET /api/stats/detailed?category=` -- Single category stats
-- `GET /api/kinds` -- Node kinds with counts
-- `GET /api/kinds/{kind}` -- Paginated nodes by kind
-- `GET /api/nodes` -- Paginated node queries
-- `GET /api/nodes/{id}/detail` -- Full node detail with edges
-- `GET /api/nodes/{id}/neighbors` -- Neighbor traversal
-- `GET /api/edges` -- Paginated edge queries
-- `GET /api/ego/{center}` -- Ego subgraph
-- `GET /api/query/cycles` -- Cycle detection
-- `GET /api/query/shortest-path` -- Shortest path between nodes
-- `GET /api/query/consumers/{id}`, `/producers/{id}`, `/callers/{id}`, `/dependencies/{id}`, `/dependents/{id}`
-- `GET /api/query/dead-code` -- Dead code detection (semantic edge filtering, excludes entry points)
-- `GET /api/triage/component?file=` -- Agentic triage by file
-- `GET /api/triage/impact/{id}` -- Impact trace
-- `GET /api/search?q=` -- Free-text search
-- `GET /api/file?path=` -- Source files (path traversal protected)
-
-**TopologyController** (`/api/topology`):
-- `GET /api/topology` -- Service topology map
-- `GET /api/topology/services/{name}` -- Service detail
-- `GET /api/topology/services/{name}/deps` -- Service dependencies
-- `GET /api/topology/services/{name}/dependents` -- Service dependents
-- `GET /api/topology/blast-radius/{nodeId}` -- Blast radius analysis
-- `GET /api/topology/path` -- Find path between services
-- `GET /api/topology/bottlenecks` -- Find bottleneck services
-- `GET /api/topology/circular` -- Circular dependency detection
-- `GET /api/topology/dead` -- Dead service detection
-
-**FlowController** (`/api/flow`):
-- `GET /api/flow` -- List available flow views
-- `GET /api/flow/{view}` -- Flow diagram for specific view
-- `GET /api/flow/{view}/{nodeId}/children` -- Node children in flow
-- `GET /api/flow/{view}/{nodeId}/parent` -- Node parent in flow
-
-**IntelligenceController** (`/api/intelligence`):
-- `GET /api/intelligence/evidence` -- Evidence pack for a node
-- `GET /api/intelligence/manifest` -- Artifact manifest
-- `GET /api/intelligence/capabilities` -- Capability matrix
-
-### MCP Tools (34, via `@McpTool` annotation)
-`get_stats`, `get_detailed_stats`, `query_nodes`, `query_edges`, `get_node_neighbors`, `get_ego_graph`, `find_cycles`, `find_shortest_path`, `find_consumers`, `find_producers`, `find_callers`, `find_dependencies`, `find_dependents`, `find_dead_code`, `generate_flow`, `run_cypher`, `find_component_by_file`, `trace_impact`, `find_related_endpoints`, `search_graph`, `read_file`, `get_topology`, `service_detail`, `service_dependencies`, `service_dependents`, `blast_radius`, `find_path`, `find_bottlenecks`, `find_circular_deps`, `find_dead_services`, `find_node`, `get_evidence_pack`, `get_artifact_metadata`, `get_capabilities`
+## MCP Tools
+
+The MCP server registers 6 consolidated mode-driven tools + `run_cypher`
++ `review_changes`. The 34 narrow tools from the Java side stay wired
+for one release (v1.0.x) for back-compat with agents pinned to old
+names; they'll be removed in v1.1.0.
+
+| Consolidated tool | mode dispatch |
+|---|---|
+| `graph_summary` | `overview` / `categories` / `capabilities` / `provenance` |
+| `find_in_graph` | `nodes` / `edges` / `text` / `fuzzy` / `by_file` / `by_endpoint` |
+| `inspect_node` | `neighbors` / `ego` / `evidence` / `source` |
+| `trace_relationships` | `callers` / `consumers` / `producers` / `dependencies` / `dependents` / `shortest_path` |
+| `analyze_impact` | `blast_radius` / `trace` / `cycles` / `circular_deps` / `dead_code` / `dead_services` / `bottlenecks` |
+| `topology_view` | `summary` / `service` / `service_deps` / `service_dependents` / `flow` |
+| `run_cypher` | (escape hatch — mutation-rejected) |
+| `review_changes` | (Ollama-driven PR review) |
## Adding a New Detector
-1. Create file in `detector//MyDetector.java`
-2. Implement the `Detector` interface:
- ```java
- @Component
- public class MyDetector implements Detector {
- @Override public String getName() { return "my_detector"; }
- @Override public Set getSupportedLanguages() { return Set.of("java"); }
- @Override public DetectorResult detect(DetectorContext ctx) {
- DetectorResult result = new DetectorResult();
- // Your detection logic here
- return result;
- }
- }
- ```
-3. **No registry changes needed** -- auto-discovered via Spring classpath scan
-4. **Framework-specific detectors MUST have discriminator guards** -- require framework-specific imports before detecting (e.g., Quarkus requires `io.quarkus`, Fastify requires `fastify` import)
-5. For Java files needing AST access, extend `AbstractJavaParserDetector`
-6. For multi-language support via ANTLR, extend `AbstractAntlrDetector`
-7. For regex-only detection, extend `AbstractRegexDetector`
-8. Create test in `src/test/java/.../detector//MyDetectorTest.java`
-9. Include a determinism test (run twice, assert identical output)
-10. Run `mvn test` -- all tests must pass
-
-### Detector Base Classes
-| Class | Use Case |
-|-------|----------|
-| `Detector` | Interface -- implement directly for simple detectors |
-| `AbstractRegexDetector` | Regex-based pattern matching (most detectors) |
-| `AbstractJavaParserDetector` | Java AST via JavaParser (Spring, JPA, etc.) |
-| `AbstractAntlrDetector` | ANTLR grammar-based (TS, Python, Go, C#, Rust, C++) |
-| `AbstractStructuredDetector` | Structured file parsing (YAML, JSON, TOML, etc.) |
-| `AbstractPythonAntlrDetector` | Python ANTLR detectors (shared parse, getBaseClassesText, extractClassBody) |
-| `AbstractPythonDbDetector` | Python ORM detectors (adds ensureDbNode/addDbEdge via DetectorDbHelper) |
-| `AbstractTypeScriptDetector` | TypeScript regex detectors (shared getSupportedLanguages, detect→detectWithRegex) |
-| `AbstractJavaMessagingDetector` | Java messaging detectors (shared CLASS_RE, extractClassName, addMessagingEdge) |
-
-### Shared Detector Helpers
-| Class | Purpose |
-|-------|---------|
-| `DetectorDbHelper` | Static ensureDbNode/addDbEdge for any detector emitting DATABASE_CONNECTION nodes |
-| `FrontendDetectorHelper` | Static createComponentNode/lineAt for Angular, React, Vue detectors |
-| `StructuresDetectorHelper` | Static addImportEdge/createStructureNode for Scala/Kotlin structures |
+1. Create file in `go/internal/detector//my_detector.go`.
+2. Implement the `detector.Detector` interface:
-## Testing
+ ```go
+ package mycategory
-```bash
-# Run all tests (~3219 tests)
-mvn test
+ import (
+ "github.com/randomcodespace/codeiq/go/internal/detector"
+ "github.com/randomcodespace/codeiq/go/internal/detector/base"
+ "github.com/randomcodespace/codeiq/go/internal/model"
+ )
-# Run a specific test class
-mvn test -Dtest=SpringRestDetectorTest
+ type MyDetector struct{}
-# Run E2E quality tests (requires cloned test repo)
-E2E_PETCLINIC_DIR=/path/to/spring-petclinic mvn test -Dtest=E2EQualityTest
+ func NewMyDetector() *MyDetector { return &MyDetector{} }
-# Run with verbose output
-mvn test -Dsurefire.useFile=false
-```
+ func (MyDetector) Name() string { return "my_detector" }
+ func (MyDetector) SupportedLanguages() []string { return []string{"java"} }
+ func (MyDetector) DefaultConfidence() model.Confidence { return base.RegexDetectorDefaultConfidence }
-- Every detector needs: positive match test, negative match test, determinism test
-- Server tests use standalone MockMvc (no Spring context needed)
-- MCP tools tested by calling `McpTools` methods directly
-- E2E quality tests validate against Context7-sourced ground truth (21 tests for petclinic)
-- Use `@ActiveProfiles("test")` for any `@SpringBootTest` to avoid Neo4j startup
+ func init() { detector.RegisterDefault(NewMyDetector()) }
-### E2E Quality Testing Strategy (mandatory for detection changes)
-1. Build ground truth using Context7 for well-known repos
-2. Clone official repo, run full pipeline (index → enrich → serve)
-3. Query ALL API endpoints, validate against ground truth
-4. Fix findings in loop with parallel agents until 95%+ pass rate
-5. Ground truth files: `src/test/resources/e2e/ground-truth-*.json`
+ func (MyDetector) Detect(ctx *detector.Context) *detector.Result {
+ // … pattern matching → return detector.ResultOf(nodes, edges)
+ return detector.EmptyResult()
+ }
+ ```
-## Build Commands
+3. **CRITICAL** — if the package is a NEW directory under
+ `internal/detector/`, blank-import it in
+ `go/internal/cli/detectors_register.go`. Existing directories
+ already covered.
+4. Add a test file at the same path (`my_detector_test.go`). Include
+ positive match, negative match, determinism (run twice, assert
+ identical output).
+5. `cd go && CGO_ENABLED=1 go test ./internal/detector//...
+ -count=1`.
-```bash
-# Build (skip tests)
-mvn clean package -DskipTests
+### Detector base helpers
-# Build + test
-mvn clean package
+| File | Purpose |
+|---|---|
+| `base/regex.go` | `FindLineNumber`, `RegexDetectorDefaultConfidence`. |
+| `base/imports_helpers.go` | `EnsureFileAnchor`, `EnsureExternalAnchor` — emit anchor nodes so imports/depends_on edges survive `Snapshot`'s phantom filter. |
+| `base/component.go` | `CreateComponentNode` for React/Vue/Angular component detectors. |
+| `base/structures.go` | `AddImportEdge`, `CreateStructureNode` for Scala/Kotlin/etc structure detectors. |
-# Run pipeline
-java -jar target/code-iq-*-cli.jar index /path/to/repo
-java -jar target/code-iq-*-cli.jar enrich /path/to/repo
-java -jar target/code-iq-*-cli.jar serve /path/to/repo
+## Configuration
-# SpotBugs static analysis
-mvn spotbugs:check
+`codeiq.yml` at the repo root. Resolution order (last wins):
-# OWASP dependency vulnerability check
-mvn dependency-check:check
-```
+1. Built-in defaults
+2. `~/.codeiq/config.yml`
+3. `./codeiq.yml`
+4. `CODEIQ__` env vars
+5. CLI flags
-## Key Files
+`codeiq config validate` + `codeiq config explain`.
-| File | Purpose |
-|------|---------|
-| `CodeIqApplication.java` | Spring Boot main class |
-| `analyzer/Analyzer.java` | Pipeline orchestrator (discovery -> detect -> build -> link -> classify) |
-| `analyzer/FileDiscovery.java` | File discovery via git ls-files or directory walk |
-| `analyzer/GraphBuilder.java` | Buffered graph construction (nodes first, then edges) |
-| `analyzer/LayerClassifier.java` | Deterministic layer classification (kind + framework + path heuristics) |
-| `analyzer/ServiceDetector.java` | Service boundary detection from build files (30+ build systems) |
-| `analyzer/linker/*.java` | Cross-file linkers: TopicLinker, EntityLinker, ModuleContainmentLinker |
-| `detector/Detector.java` | Detector interface |
-| `model/NodeKind.java` | 34 node types enum |
-| `model/EdgeKind.java` | 28 edge types enum |
-| `model/CodeNode.java` | Graph node entity |
-| `model/CodeEdge.java` | Graph edge entity |
-| `graph/GraphStore.java` | Neo4j facade (UNWIND bulk save, Cypher reads, indexes) |
-| `config/Neo4jConfig.java` | Embedded Neo4j configuration |
-| `config/CodeIqConfig.java` | Application configuration properties |
-| `config/JacksonConfig.java` | Jackson config (FAIL_ON_UNKNOWN_PROPERTIES disabled for MCP compat) |
-| `cache/AnalysisCache.java` | H2 incremental cache |
-| `api/GraphController.java` | REST API endpoints (read-only) |
-| `mcp/McpTools.java` | 34 MCP tool definitions (`@McpTool`, read-only) |
-| `query/QueryService.java` | Graph query operations with Spring caching |
-| `query/StatsService.java` | Rich categorized statistics (7 categories) |
-| `query/TopologyService.java` | Service topology queries |
-| `cli/IndexCommand.java` | Memory-efficient batched indexing to H2 |
-| `cli/EnrichCommand.java` | H2 → Neo4j with linkers, layers, services |
-| `cli/ServeCommand.java` | Read-only server startup |
-| `intelligence/extractor/LanguageEnricher.java` | Language-specific enrichment orchestrator (Phase 5) |
-| `intelligence/extractor/LanguageExtractor.java` | Language extractor interface |
-| `intelligence/evidence/EvidencePackAssembler.java` | Evidence pack generation |
-| `intelligence/query/QueryPlanner.java` | Intelligent query routing |
-| `intelligence/lexical/LexicalEnricher.java` | Doc comment + snippet enrichment |
+## Testing
-## Code Conventions
+```bash
+cd go
-- Java 25+ features: records, sealed classes, pattern matching, virtual threads
-- Spring Boot 4 conventions: constructor injection, `@Component` beans, profile activation
-- Spring AI 2.0: `@McpTool`/`@McpToolParam` annotations (not `@Tool`/`@ToolParam`)
-- Picocli for CLI with Spring integration (`picocli-spring-boot-starter`)
-- Detectors are `@Component` beans -- stateless, thread-safe, auto-discovered
-- Framework detectors require discriminator guards (framework-specific imports)
-- ID format: `"{prefix}:{filepath}:{type}:{identifier}"` for cross-file uniqueness
-- Properties map for detector-specific metadata (`auth_type`, `framework`, `roles`, etc.)
-- Spring detectors set `framework: "spring_boot"` on their nodes
-- `layer` property on every node: `frontend | backend | infra | shared | unknown`
-- Neo4j reads use embedded API (no SDN hydration). Writes use SDN or UNWIND Cypher.
-- Neo4j properties round-trip via `prop_*` prefix (written by `bulkSave`, read by `nodeFromNeo4j`)
-- Jackson `FAIL_ON_UNKNOWN_PROPERTIES` disabled globally for MCP protocol compatibility
-- UTF-8 encoding everywhere (explicit `StandardCharsets.UTF_8`)
-- Property key constants: `private static final String PROP_FRAMEWORK = "framework"` — extract when a string literal appears 3+ times in a file
+# Full suite
+CGO_ENABLED=1 go test ./... -count=1
-## Configuration
+# Race detector
+CGO_ENABLED=1 go test ./... -race -count=1
-Single source of truth: **`codeiq.yml`** at the repo root. See
-`docs/codeiq.yml.example` for the full schema (snake_case throughout;
-camelCase accepted as a deprecated alias for one release). Resolution order
-(last wins):
+# Single package
+CGO_ENABLED=1 go test ./internal/detector/jvm/java/...
-1. Built-in defaults (`ConfigDefaults.builtIn()`)
-2. `~/.codeiq/config.yml` (user-global)
-3. `./codeiq.yml` (project)
-4. `CODEIQ__` env vars (e.g. `CODEIQ_SERVING_PORT=9090`)
-5. CLI flags on `codeiq `
+# Verbose
+CGO_ENABLED=1 go test ./... -v
+```
-Validate and introspect with:
+828+ tests. Every detector ships with positive, negative, and
+determinism tests.
+
+## Build Commands
```bash
-codeiq config validate
-codeiq config explain
-```
+cd go
-### Spring-owned keys (stay in `application.yml`)
+# Build
+CGO_ENABLED=1 go build -o /usr/local/bin/codeiq ./cmd/codeiq
-A small set of keys still lives in `src/main/resources/application.yml`
-because they drive Spring's `@ConditionalOnProperty` / `@Value` wiring and
-have not been migrated into `codeiq.yml`:
+# Build with version info (release-go.yml does this with goreleaser):
+CGO_ENABLED=1 go build \
+ -ldflags "-X 'github.com/randomcodespace/codeiq/go/internal/buildinfo.Version=v1.0.0' \
+ -X 'github.com/randomcodespace/codeiq/go/internal/buildinfo.Commit=$(git rev-parse --short HEAD)' \
+ -X 'github.com/randomcodespace/codeiq/go/internal/buildinfo.Date=$(date -u +%Y-%m-%dT%H:%M:%SZ)'" \
+ -o /usr/local/bin/codeiq ./cmd/codeiq
+```
+
+Release pipeline:
+[`shared/runbooks/release-go.md`](shared/runbooks/release-go.md).
-- `codeiq.neo4j.enabled` -- profile-conditional toggle (`false` in the
- `indexing` profile, `true` in `serving`).
-- `codeiq.neo4j.bolt.port` -- embedded Neo4j Bolt listener port.
-- `codeiq.cors.allowed-origin-patterns` -- CORS allow-list for the REST API.
-- `codeiq.ui.enabled` -- toggles the React SPA static resource handler.
+## Code Conventions
-`UnifiedConfigBeans` bridges the unified config to the legacy `CodeIqConfig`
-bean for code paths that haven't been ported yet.
+- Go 1.25+ idioms — generics where they reduce repetition, `slices.`
+ and `maps.` over hand-rolled loops, `min`/`max` builtins.
+- `model.Confidence` and `Source` are mandatory on every `CodeNode` /
+ `CodeEdge`. Base classes stamp the per-detector floor at the
+ orchestration boundary (LEXICAL for regex bases, SYNTACTIC for
+ AST/structured bases).
+- Property union semantics: in `mergeNode`, donor only fills keys the
+ survivor doesn't already have. Don't clobber a high-confidence
+ detector's framework/auth_type stamping.
+- ID format: `:::` — keep prefixes
+ stable; the GraphBuilder dedup map relies on them.
+- File-anchor / external-anchor IDs:
+ - `:file:` for the file-as-module
+ - `:external:` for imported packages
+ This pattern saves imports edges from phantom drop.
+- Detectors with framework guards: require a framework-specific
+ import before emitting (e.g. Quarkus requires `io.quarkus`).
+- UTF-8 everywhere — explicit `[]byte` only when interfacing with
+ Kuzu or SQLite.
## Gotchas & Lessons Learned
-- **Pipeline is index → enrich → serve**: Don't put analysis/enrichment in serve. Serve is read-only.
-- **MCP/API is read-only**: No data manipulation from serving layer. Remote servers may lack source code.
-- **Framework false positives**: Quarkus/Micronaut/Fastify detectors matched generic patterns (router.get, @Transactional). Always add discriminator guards requiring framework-specific imports.
-- **Neo4j property round-trip**: Properties stored as `prop_*` keys in Neo4j. `nodeFromNeo4j()` must restore them. Verify properties survive write→read.
-- **Edge persistence**: Edges must be attached to source nodes before `bulkSave()`. MATCH silently returns 0 rows for missing nodes -- pre-validate IDs.
-- **ServiceDetector must scan filesystem**: Don't rely on node file paths for build file detection. Many build files (pom.xml) don't produce CodeNodes. Walk the filesystem directly.
-- **Generic, not example-specific**: Every feature must work for ALL architectures. Don't fix for the specific example given and forget other ecosystems.
-- **Neo4j indexes**: Created by `enrich` on `id`, `kind`, `layer`, `module`, `filePath`, `label_lower`, `fqn_lower`, plus two fulltext indexes (`search_index` over `[label_lower, fqn_lower]` and `lexical_index` over `[prop_lex_comment, prop_lex_config_keys]`). Critical for query performance and free-text search on large graphs.
-- **Default batch size is 500**: Performs better than 1000 for indexing.
-- **Spring Boot startup overhead**: 8-16s for embedded Neo4j + Spring context init.
-- **Virtual thread concurrency on the H2 cache**: JDK 25 + JEP 491 means neither `synchronized` nor `java.util.concurrent.locks.*` pin virtual-thread carriers, so the lock primitive is no longer the constraint. `AnalysisCache` uses a `ReentrantReadWriteLock` so virtual threads can read in parallel while writes stay serialized — this is what prevents `ClosedChannelException` from concurrent writes against H2's MVStore file channel. Do not regress to coarse `synchronized` methods "for virtual-thread safety"; that advice is stale.
-- **ANTLR generated sources**: Generated during `mvn generate-sources` from `.g4` files. Do not edit.
-- **`@ActiveProfiles("test")`**: Required on any `@SpringBootTest` to avoid Neo4j startup conflicts.
-- **Dead code detection**: Must filter by semantic edges only (calls, imports, depends_on). Exclude structural edges (contains, defines) and entry points (endpoints, config files).
-- **H2 reserved words**: `key`, `value`, `order` are reserved in H2 SQL. Use `meta_key`, `meta_value` etc. in CREATE TABLE statements.
-- **Cache versioning**: `AnalysisCache` has a `CACHE_VERSION` constant (currently `5`, bumped from `4` for the resolver `confidence` + `source` schema). Bump it when changing the hash algorithm, H2 schema, or any field that becomes mandatory on cached nodes/edges so stale caches are auto-cleared on next run.
-- **Symbol resolver runs at index-time only.** `Analyzer.bootstrapResolvers()` and `Analyzer.resolveFor()` are wired into `run` / `runBatchedIndex` / `runSmartIndex` paths only — never at `serve`. The resolver SPI lives under `intelligence/resolver/`. If you find yourself reaching for `ResolverRegistry` from a serve-mode code path, stop — the graph is the source of truth at serve.
-- **`Confidence` + `source` are mandatory on every `CodeNode` / `CodeEdge`.** `DetectorEmissionDefaults.applyDefaults` stamps the per-detector floor (`LEXICAL` for regex bases, `SYNTACTIC` for AST/JavaParser/structured bases) at the orchestration boundary; detectors that consume `ctx.resolved()` upgrade to `Confidence.RESOLVED` and attach a `target_fqn` property. Reading legacy data without these fields is non-throwing — they read back as `LEXICAL` / null.
-- **`JavaSymbolResolver.resolve()` allocates a fresh `JavaParser` per call.** JavaParser instances aren't thread-safe and `resolve()` is invoked from virtual threads concurrently. Per-call allocation is intentional, not a perf bug — don't "optimize" by sharing one parser across calls.
-- **`JavaSymbolResolver.resolve(String)` enforces strict parse-success.** When JavaParser flags any problem (`!parseResult.isSuccessful()`), the resolver returns `EmptyResolved.INSTANCE` rather than a partial-CU `JavaResolved`. This prevents silent simple-name-only edges from broken parses that look like RESOLVED-tier coverage. Detectors must treat `ctx.resolved()` returning `EmptyResolved` as "lexical fallback" — never assume RESOLVED edges land for every Java file.
-- **`JavaSymbolResolver` fields are `volatile`.** `combined` and `solver` are written by `bootstrap()` and read by `resolve()` + the public accessors from arbitrary virtual-thread carriers. The JLS Thread Start Rule covers the `executor.submit()` path; `volatile` covers post-bootstrap callers on other threads. Don't drop the keyword.
-- **FileHasher uses SHA-256**: Changed from MD5. Hash output is 64 hex chars (not 32). Tests must expect 64-char hashes.
-- **SnakeYAML parses `on` as Boolean.TRUE**: In YAML files, bare `on` key becomes `Boolean.TRUE`. Use `String.valueOf(key)` comparisons, not `Boolean.TRUE.equals(key)` (SonarCloud S2159).
-- **Regex possessive quantifiers**: Use `*+` instead of `*` for nested quantifiers like `([^"\\]*(?:\\.[^"\\]*)*)` → `([^"\\]*+(?:\\.[^"\\]*+)*+)` to prevent stack overflow (SonarCloud S5998).
-- **Parallel agent conflicts**: Don't dispatch multiple agents editing the same files concurrently. Use worktree isolation or sequential execution.
-- **SonarCloud project key**: `RandomCodeSpace_codeiq`, org: `randomcodespace`
-- **CI workflow**: Single `ci-java.yml` runs build + SonarCloud analysis. No cross-platform builds needed (JVM).
-- **Spring Security only loads in the `serving` profile.** `application.yml` excludes `SecurityAutoConfiguration` + `SecurityFilterAutoConfiguration` + `UserDetailsServiceAutoConfiguration` at the **default** level so adding `spring-boot-starter-security` doesn't break ~3000 MockMvc tests by activating a default HTTP Basic chain. The `serving` profile re-enables them by listing only `UserDetailsServiceAutoConfiguration` (suppresses the auto user/password printout); the chain itself is built by `config/security/SecurityConfig`. **Don't** drop the default exclude — non-serving contexts (CLI, tests) must have no Spring Security wiring at all.
-- **`BearerAuthFilter.shouldNotFilter` and `SecurityConfig.permitAll()` paths must stay in sync.** The filter runs before Spring's `AuthorizationFilter`, so if a path is in `permitAll()` but NOT in `shouldNotFilter`, the filter rejects it with 401 before Spring's chain can permit it. Open paths today: `/`, `/index.html`, `/favicon.ico`, `/assets/**`, `/static/**`, `/error`, `/actuator/health`, `/actuator/health/liveness`, `/actuator/health/readiness`. Adding any new permit-all endpoint requires updating BOTH places.
-- **Constant-time bearer-token compare uses SHA-256 pre-hash.** Both the provided and expected token are hashed with SHA-256 before `MessageDigest.isEqual`. SHA-256 always produces 32-byte digests, so `isEqual` runs over fixed-size arrays — defeats the length oracle that makes raw `isEqual` unsafe across mismatched-length inputs. **Don't** "optimize" by removing the hash and comparing raw token bytes; that re-introduces the oracle.
-- **Never log the `Authorization` header.** `BearerAuthFilter` deliberately never passes the header value to a logger, even at DEBUG. The rejection log line carries only `method` and `requestURI`. There's a regression test (`tokenValueNeverAppearsInLogs`) that captures all log lines for the filter and asserts the secret substring is absent.
-- **`mode=none` + active `serving` profile = startup failure** unless `codeiq.mcp.auth.allow_unauthenticated=true` is **explicitly** set. This is by design — operators must opt into permissive mode deliberately. `mode=mtls` is reserved and currently throws "not yet implemented" (better than silently passing through).
-- **`server.error.include-stacktrace: never`** is set in the serving profile as defense-in-depth alongside `GlobalExceptionHandler`. Don't enable it for "easier debugging" — stack frames in the response body leak class names + paths (CWE-209). Use the `request_id` in the envelope to correlate to the WARN log line where the full stack is captured.
-- **Cypher transaction wall-clock cap is configured at the DBMS level**, not per-call. `Neo4jConfig.databaseManagementService(...)` sets `GraphDatabaseSettings.transaction_timeout = 30s` so every transaction gets the cap automatically. Don't reach for `graphDb.beginTx(timeout, unit)` overload in tool code — the test suite mocks `beginTx()` with no args and the overload changes the matcher signature, breaking the existing stubs across `McpToolsTest` / `McpToolsExpandedTest` / `McpToolsEvidenceTest`.
-- **`McpTools.runCypher` row cap is enforced in the iteration loop, not via `LIMIT`.** After `maxResults` rows are accumulated the loop breaks and the response carries `truncated: true` + `max_results: N`. Don't try to inject `LIMIT N` into the user-supplied query string — that would require parsing the query (and the user's query may already have its own LIMIT).
-- **`McpTools.getCachedData()` 60-second TTL snapshot is a bridge fix.** It's NOT the proper solution — the proper solution is to rewrite each topology MCP tool to use a targeted Cypher query so the full graph never needs to live on heap. The cache caps peak memory under concurrent calls but the snapshot itself is still multi-GB on large graphs. When that refactor lands, the `AtomicReference` and `getCachedData()` itself can be deleted.
-- **`RateLimitFilter` keys by `sha256(Authorization)`** — the raw token NEVER goes into the bucket key map. The 16-hex-char digest is enough collision resistance for keying. Falls back to `X-Forwarded-For` (first hop) → `RemoteAddr` when no auth header is present. Buckets live in a `ConcurrentHashMap` — bounded in practice by `num_distinct_clients`, which for the single-tenant pod shape is small. Swap to a Caffeine cache with a max-size eviction if multi-tenant exposure is ever added.
-- **Filter chain order in `serving` profile**: `SecurityHeadersFilter` → `RateLimitFilter` → `BearerAuthFilter` → ... → controller. Each `addFilterBefore(X, UsernamePasswordAuthenticationFilter.class)` inserts X immediately before UPAFilter, pushing the previously-inserted filter farther from the target — so the **registration order in `SecurityConfig.servingFilterChain` IS the chain order**. Don't shuffle without re-reasoning about it: if `RateLimitFilter` ran AFTER `BearerAuthFilter`, an unauthenticated brute-force attempt would never get throttled (would just see 401 over and over, hitting the slow path).
-- **`Files.probeContentType` is best-effort** — JDK 25 on Linux uses `/etc/mime.types` + magic-byte fallback. It returns `null` if the type can't be determined; treat that as "let it through" (the byte cap in `SafeFileReader` still bounds size). The allowlist for `/api/file` is `text/*` + `application/{json,xml,x-yaml,javascript}` — extending requires adding to the explicit list in `GraphController.readFile`.
-- **Sanitize user-controlled values before logging.** `BearerAuthFilter.sanitizeForLog(String)` strips `\p{Cntrl}` and truncates at 256 chars. Use it on anything tainted by `request.getRequestURI()`, `request.getMethod()`, headers, etc. before passing to a logger. CodeQL `java/log-injection` will flag direct `log.warn("... {} ...", request.getRequestURI())` as a vuln.
-- **`mcp.limits.max_depth` is a NEW field on `McpLimitsConfig`** (default 10). Audit #10 / C3 — the original audit assumed it existed but it didn't. When adding new MCP traversal tools, cap depth via `Math.min(callerSupplied, maxDepth)` before passing to Cypher. The REST endpoint already had this guard via `config.getMaxDepth()` from `CodeIqConfig`; the MCP path now mirrors it via `McpLimitsConfig.maxDepth()`.
-- **`codeiq bundle` writes `checksums.sha256` LAST and excludes itself.** `BundleCommand#writeChecksumsManifest` runs after every other entry has been written, then the digests collected in `LinkedHashMap checksums` are emitted as ` \n` per line — exactly GNU coreutils `sha256sum` format, so receivers verify with `sha256sum -c checksums.sha256`. The manifest itself is intentionally NOT in the digest list (would be circular); to verify `checksums.sha256` against tampering, sign the bundle.zip out-of-band (Sigstore, GPG, or compare to the GitHub Release SHA-256). Don't try to "fix" the circular omission by hashing checksums.sha256 into the manifest — that turns into a cat-and-mouse loop.
-- **`writeFileHashed` reads each file once, feeding both the SHA-256 and the ZIP stream.** Hundreds-of-MB graph DBs / CLI JARs can't be double-read for a separate hash pass. The 8KB chunk size in `BundleCommand` is small enough to keep memory flat regardless of file size; do NOT collect bytes into a `byte[]` and then split for "convenience".
-- **`serve.sh` and `serve.bat` MUST NOT contain network calls.** Audit RAN-46 §3 — air-gapped deploy model. Pre-PR-3 these scripts had `curl -fL https://repo1.maven.org/...` to download the CLI JAR on first run; that's gone. Receivers must `--include-jar` when bundling or stage the JAR from an internal mirror. There's a regression test in `BundleCommandTest#bundleCreatesZipWithCorrectStructure` that asserts `serve.sh` contains neither `curl` nor `maven.org` — keep that test green.
-- **`.dockerignore` does NOT inherit `.gitignore`.** Docker resolves COPY against the build context, which includes uncommitted/untracked working-tree files. `.gitignore` only stops things being staged; it has no effect on what `docker build` sees. Mirror the secret-pattern globs explicitly in `.dockerignore` (`.env*`, `*.jks`, `id_rsa`, `credentials.{json,yaml}`, etc.). Pre-PR-3 the `.dockerignore` was 9 lines and would have shipped a `.env.prod` straight into a published image.
-- **Semgrep is pinned to `semgrep==1.161.0`** in `.github/workflows/security.yml`. Bumps go through Dependabot's pip ecosystem on a documented cadence — `pip install --upgrade semgrep` (floating) was previously flagged by Scorecard `Pinned-Dependencies`. Don't unpin to "always get latest"; a CI-time auto-bump on a security-scanner can break the build silently when the new release adds rules.
-- **`RequestIdFilter` MUST stay outermost in the security chain.** Filter chain order (set in `SecurityConfig#servingFilterChain`): RequestIdFilter → SecurityHeadersFilter → RateLimitFilter → BearerAuthFilter. If you reorder and put RequestIdFilter inside, the rate-limit reject and auth-reject log lines will fire BEFORE MDC is populated, and clients won't get a correlated `X-Request-Id` response header on 401/429. The filter is registered LAST in the `addFilterBefore(..., UPAFilter.class)` sequence because each `addFilterBefore` pushes the previously-inserted filter further from the target — so the LAST registration is the OUTERMOST in the actual chain.
-- **Inbound `X-Request-Id` is allow-list validated, NOT escaped.** `RequestIdFilter` accepts only `[A-Za-z0-9_-]{8,64}`; anything else is replaced with a generated UUID. Don't try to "be helpful" by lowercasing/trimming — the allow-list is the defense, not the sanitizer. CWE-117 log-forging via `X-Request-Id: \nINFO: granted access` is impossible because the value never reaches a logger before validation.
-- **MDC must be cleared in finally — even on throw.** `RequestIdFilter.doFilterInternal` puts MDC.request_id, runs the chain in a try-block, and clears in finally. There's a regression test (`RequestIdFilterTest#clearsMdcEvenWhenChainThrows`) that asserts the clear runs when the chain throws. Tomcat's NIO worker pool and virtual-thread carriers both reuse threads; a leaked MDC entry from request N is visible to request N+1 if you skip the finally.
-- **`GraphHealthIndicator` is on the readiness probe ONLY.** Configured via `management.endpoint.health.group.{liveness,readiness}` in `application.yml`. Liveness = "JVM up; restart on fail". Readiness = "graph loaded; route traffic only when up". Putting `graphHealthIndicator` on the liveness probe means a graph-down event flaps the pod (k8s killing it) instead of just routing away. If you add another HealthIndicator that's about app health (not infra dependencies), it goes on liveness; if it's about a specific dependency (DB, message bus), it goes on readiness.
-- **Logback `serving` profile uses JSON, others use plaintext.** `logback-spring.xml` defines a `JSON` appender (LogstashEncoder) used only by the `` block. CLI / indexing / default profiles use the `CONSOLE` (plaintext `%msg%n`) appender so that `codeiq index` doesn't dump JSON-shaped log lines into the user's terminal. Don't switch the global default appender to JSON — the CLI is interactive and the project deliberately uses `System.out` for status messages alongside the logger.
-- **MCP errors return a structured envelope `{code, message, request_id, error}`.** `McpTools#errorEnvelope(code, exception)` is the canonical wrapper. Codes: `INTERNAL_ERROR` (catch-all), `INVALID_INPUT` (IllegalArgumentException), `FILE_READ_FAILED` (file IO), `SERIALIZATION_FAILED` (Jackson). The legacy `error` field is preserved for backwards-compat with older MCP clients reading `error` directly — DON'T remove it without grepping for clients in this org first. Full exception always logged server-side at WARN with request_id; only sanitized envelope reaches the client.
-- **`/actuator/prometheus` is bearer-authenticated, NOT permitAll.** It matches the `/actuator/**` rule in `SecurityConfig`. Don't add `prometheus` to the permitAll list "for the scraper" — Prometheus's `bearer_token_file` config field exists for exactly this case. Anonymous metric scraping is reconnaissance data (request rates, error counts, JVM internals). The application tag `codeiq` is set via `management.metrics.tags.application` so multi-pod ingestion is filterable.
-
-## Supply-chain observability (OpenSSF)
-
-Two OpenSSF signals are published. **`shared/runbooks/engineering-standards.md` §1 + §5 is the SSoT for the security stack** — this section is the operator-level summary.
-
-### Best Practices badge
-
-- Project: https://www.bestpractices.dev/projects/12650 — registered 2026-04-25 by the board.
-- Manifest: `.bestpractices.json` at repo root (project_id, evidence map, audit dates).
-- **Hard gate per the board: badge level `passing`.** The final `in_progress` → `passing` flip happens in the bestpractices.dev admin UI (board-owned). Repo-side criteria (CHANGELOG, SECURITY.md, signed commits, OSS-CLI security stack, Scorecard wiring, dependency updates) are evidenced via the manifest above.
-
-### Scorecard baseline + target
-
-- Workflow: [`.github/workflows/scorecard.yml`](.github/workflows/scorecard.yml) — push to `main`, weekly cron (Mondays 06:00 UTC), `workflow_dispatch`. SARIF lands on the Security tab; results also publish to https://api.securityscorecards.dev/projects/github.com/RandomCodeSpace/codeiq.
-- **Baseline (RAN-52 close, 2026-04-26):** read live from the Scorecard project page above; no static checked-in score (it would rot).
-- **Target:** ≥ **8.0 / 10** stretch, with these checks at max: `Pinned-Dependencies`, `Token-Permissions`, `Branch-Protection`, `Code-Review`, `Maintained`, `License`, `SAST`, `Vulnerabilities`. Scorecard is observational; the `passing` Best Practices badge is the only hard gate per the board.
-- **Known floor reductions:** `Webhooks` (no public webhook surface — N/A); `Signed-Releases` (release-java workflow signs the GA commit; we are not yet signing every release artifact via Sigstore — tracked under follow-up).
-
-### OSS-CLI security stack (path B board ruling — RAN-46 AC §3)
-
-[`.github/workflows/security.yml`](.github/workflows/security.yml) runs six gate-blocking jobs: **OSV-Scanner** (SCA on the npm lockfile), **Trivy** (filesystem + Maven + OS scan), **Semgrep** (SAST: `p/security-audit` + `p/owasp-top-ten` + `p/java`), **Gitleaks** (secret scan, full git history), **jscpd** (duplication < 3% on production code), and **`anchore/sbom-action`** (SPDX + CycloneDX SBOM, artifact-only). Push + PR + weekly cron. Per the path-B board ruling, **do not re-introduce SonarCloud, CodeQL, or any NVD-direct tool (e.g. OWASP Dependency-Check)** without an explicit board reversal — see engineering-standards.md §5.1.
-
-## Deploy
-
-codeiq's deploy surface is **Maven Central + GitHub Releases** (per RAN-46 AC #10 ruling, option a). The single Java JAR (with the React UI bundled inside) is published via two `workflow_dispatch`-only workflows: `.github/workflows/beta-java.yml` (manual beta cut → Sonatype Central beta + GitHub pre-release) and `.github/workflows/release-java.yml` (manual GA cut with a `version` input → the workflow builds a GPG-signed release commit on a detached HEAD, deploys from that exact tree, then creates and pushes a GPG-signed annotated `vX.Y.Z` tag pointing at the release commit + a GitHub Release). There is no static-CDN frontend, no hosted backend, no VPS — codeiq runs on the developer's machine. See [`shared/runbooks/release.md`](shared/runbooks/release.md) and [`shared/runbooks/engineering-standards.md`](shared/runbooks/engineering-standards.md) §7.1.
+### Pipeline
+
+- **Pipeline is `index → enrich → (mcp|stats|query)`.** Don't put
+ analysis in MCP. MCP is read-only.
+- **Detector registration choke point** (`internal/cli/detectors_register.go`).
+ Forgetting the blank import ships an empty registry for that
+ language. Caught by the polyglot benchmark — 15 language families
+ silently produced 0 nodes pre-fix. Test: `codeiq plugins` lists
+ every detector by name; new ones must appear.
+
+### Kuzu v0.7.1 quirks
+
+- FTS extension not bundled, not downloadable offline. `INSTALL fts`
+ errors with "fts is not an official extension". `CreateIndexes()`
+ no-ops FTS; `SearchByLabel` / `SearchLexical` use case-insensitive
+ `CONTAINS` predicates.
+- LIMIT / SKIP can't be parameterized. Inline as literals;
+ parameterize the needle only.
+- Uses `lower()` (SQL) not `toLower()` (openCypher).
+- `RETURN DISTINCT` scope tighter than openCypher; `ORDER BY` must
+ reference the projected alias, not the bound variable.
+- List comprehension binder rejects out-of-scope variables. Use
+ `properties(nodes(p), 'id')` instead of `[n IN nodes(p) | n.id]`.
+- `EXISTS { … }` subquery doesn't see outer-scope `$param`. Inline
+ static lists as rel-pattern alternations.
+- Go binding's `goValueToKuzuValue` accepts `[]any` only. Added
+ `stringsToAny` widener for `IN $param` use cases.
+- Multi-label rel alternation + kleene-star in the same recursive
+ pattern breaks the binder. BlastRadius uses an anonymous recursive
+ pattern.
+
+### MCP SDK v1.6
+
+- No `NewStdioTransport(in, out)` helper. `StdioTransport{}`
+ zero-value bound to `os.Stdin`/`os.Stdout`. Tests use
+ `NewInMemoryTransports()`.
+- `Server.AddTool(t *Tool, h ToolHandler)` — two args, not aggregate.
+- `CallToolRequest.Params` is `*CallToolParamsRaw{Arguments
+ json.RawMessage}`. Wrapper unmarshals once, hands raw JSON to the
+ handler.
+- ToolHandler JSON-marshals returned values. Special-case `string`
+ in `mcp/tool.go` for the `generate_flow` rendered output —
+ otherwise the Mermaid/DOT string gets double-encoded.
+
+### Go RE2 vs Java regex
+
+- No lookahead / lookbehind. Plan-spec patterns like
+ `CALL\s+(?!db\.)` won't compile. Rewrites: two-stage match (collect
+ every CALL site, then allow-list each procedure name).
+- No possessive quantifiers (`*+`). RE2 doesn't need them — its NFA
+ doesn't backtrack. Strip them when porting Java regex.
+- No DOTALL — use `(?s)` prefix.
+
+### Detector authoring traps
+
+- **Phantom edges**: emit edges with anchor nodes on both ends
+ (`base.EnsureFileAnchor` + `base.EnsureExternalAnchor`). Without
+ anchors, the edge drops at Snapshot.
+- **Discriminator guards**: framework detectors must require a
+ framework-specific import or annotation before emitting. Without a
+ guard, generic patterns (e.g. `@Transactional`) match across
+ unrelated frameworks and produce false positives.
+- **Determinism**: never iterate a Go `map` without sorting keys
+ first. Run the determinism test twice with `count=1` to catch this.
+
+### Filesystem & paths
+
+- File discovery dir-walk fallback ingests `node_modules/`,
+ `vendor/`, `target/`, etc. — see `DefaultExcludeDirs` in
+ `analyzer/file_discovery.go`. Add new ignored dirs there.
+- `Files.probeContentType` is best-effort on Linux (JDK note from the
+ Java side — replaced in Go by `net/http.DetectContentType` plus an
+ explicit allowlist in `mcp/read_file.go`).
+
+### Performance
+
+- CertificateAuthDetector once consumed 99% of indexing CPU on
+ C#-heavy projects because its pre-screen included `.cert` / `.crt`
+ / `.pem` substrings that match `using
+ System.Security.Cryptography.X509Certificates;`. Use a STRICT
+ keyword list (high-signal markers only — not path extensions) in
+ any cross-language regex pre-screen.
+
+### Release / signing
+
+- Release tag must be `v*.*.*`; pre-releases use the
+ `vX.Y.Z-rc.N` form (Goreleaser `prerelease: auto` honors it).
+- Cosign keyless via GitHub OIDC — no long-lived key on the runner.
+ Verification needs the cert + sig + the OIDC identity regex (see
+ `shared/runbooks/release-go.md`).
+- Homebrew tap publish is opt-in via `HOMEBREW_TAP_GITHUB_TOKEN`.
+ Forks leave the secret unset and the brew step skips silently.
## Updating This File
-After significant changes (new detectors, new endpoints, architectural decisions, conventions learned), update this CLAUDE.md to reflect the current state. Keep it concise and actionable.
+After significant changes (new detectors, new MCP tools, architectural
+decisions, conventions learned), update this file. Keep it concise.
+The full pre-cutover Java-side history of these notes is on the
+squash-merge `c363727`; reach for that via `git show` when you need
+context.
diff --git a/PROJECT_SUMMARY.md b/PROJECT_SUMMARY.md
index f718c8a2..065b5003 100644
--- a/PROJECT_SUMMARY.md
+++ b/PROJECT_SUMMARY.md
@@ -1,162 +1,154 @@
# Project Summary: codeiq
-> Generated by `project-summarizer` on 2026-04-27. Audience: AI agents (and humans) who need to understand and modify this codebase. Every claim should be checkable; items marked `[inferred]` were not directly verified.
+> Refreshed 2026-05-13 after Phase 6 cutover (v1.0.0). Audience: AI
+> agents (and humans) who need to understand and modify this codebase.
>
-> **Canonical depth lives in [`CLAUDE.md`](CLAUDE.md)** (~28 KB, agent-oriented, hand-maintained). This file is a thin entry point that summarizes and links into [`CLAUDE.md`](CLAUDE.md), the runbooks under [`shared/runbooks/`](shared/runbooks/), and the deep-dives under [`docs/project/`](docs/project/). Treat `CLAUDE.md` as the source of truth where they overlap.
+> **Canonical depth lives in [`CLAUDE.md`](CLAUDE.md)** (~16 KB,
+> agent-oriented, hand-maintained). This file is a thin entry point
+> that links into `CLAUDE.md`, the runbooks under
+> [`shared/runbooks/`](shared/runbooks/), and the deep-dives under
+> [`docs/project/`](docs/project/).
## Identity
-- **What it is:** CLI tool + read-only server that scans codebases and builds a deterministic code knowledge graph (no AI, no external APIs — pure static analysis) with a Spring AI MCP server, REST API, and React UI on top of an embedded Neo4j graph. See [`README.md`](README.md), [`CLAUDE.md`](CLAUDE.md) §"What This Project Is".
-- **Type:** monorepo (Java backend + React SPA bundled into one JAR) — combined CLI + library + read-only web service.
-- **Status:** **active** — 30+ commits in the last 7 days on `main` (mostly RAN-46/52/57 supply-chain work). Last non-checkpoint commit `92c6e00` on 2026-04-26. Several `checkpoint: pre-yolo` auto-commits are noise from a session hook, not real activity.
-- **Maven coordinates:** `io.github.randomcodespace.iq:code-iq` (see `` / `` in `pom.xml`). CLI command: `codeiq` (via `java -jar code-iq-*-cli.jar`).
-- **Primary languages:** Java 25 (server, CLI, all detectors); TypeScript 5.7 + React 18 (SPA at `src/main/frontend/`).
+- **What it is**: a CLI + MCP server that scans a codebase and emits a
+ deterministic code knowledge graph — services, endpoints, entities,
+ infrastructure, auth patterns, framework usage. No AI, pure static
+ analysis. LLM is opt-in via `codeiq review`.
+- **Type**: CLI tool + MCP stdio server, single static binary.
+- **Status**: v1.0.0 (Phase 6 cutover landed 2026-05-13). Active.
+- **Primary language**: Go 1.25.10. CGO required.
## Tech stack
-Read directly from the `pom.xml` `` block and `src/main/frontend/package.json`.
-
-| Layer | Tech | Source |
-|-------|------|--------|
-| Runtime | Java 25 | `pom.xml` `25` |
-| Web/DI | Spring Boot 4.0.5 | `pom.xml` (parent `spring-boot-starter-parent`) |
-| Graph DB | Neo4j Embedded 2026.02.3 (Community) | `pom.xml` `` |
-| MCP | Spring AI 2.0.0-M3 (`spring-ai-starter-mcp-server-webmvc`) | `pom.xml` `` |
-| CLI | Picocli 4.7.7 (`picocli-spring-boot-starter`) | `pom.xml` `` |
-| AST + symbols (Java) | JavaParser 3.28.0 + `javaparser-symbol-solver-core` 3.28.0 (Apache-2.0) | `pom.xml` `javaparser` deps; `intelligence/resolver/java/JavaSymbolResolver.java` |
-| Parsers (35+ langs) | ANTLR 4.13.2 (TS/JS, Python, Go, C#, Rust, C++) | `[CLAUDE.md]` |
-| Cache | H2 in embedded mode (incremental analysis cache) | `src/main/java/io/github/randomcodespace/iq/cache/AnalysisCache.java` |
-| Frontend | React 18.3 + AntD 5.24 + ECharts 5.6 + react-router 7 | `src/main/frontend/package.json` |
-| Frontend build | Vite 6.4 + TS 5.7 → bundled into `src/main/resources/static/` | `src/main/frontend/vite.config.ts` |
-| Tests | JUnit (236 test files), Playwright for SPA E2E | `find src/test/java -name '*.java' \| wc -l` = 236 |
-| Static analysis | SpotBugs 4.9.8.3, Jacoco 0.8.14, Checkstyle 3.6.0 | `pom.xml` `` / `` / `` |
-| Security gates | OSV-Scanner, Trivy, Semgrep, Gitleaks, jscpd, SBOM | `.github/workflows/security.yml` |
-| Supply chain | OpenSSF Scorecard + Best Practices (project_id 12650) | `.github/workflows/scorecard.yml`, `.bestpractices.json` |
-
-**Pinned security overrides** (bumps inside Spring Boot 4.0.5's BOM): Tomcat 11.0.21 (CVE-2026-34483/34487/34500), Jackson 3.1.1 (GHSA-2m67-wjpj-xhg9). Revert when Spring Boot 4.0.6+ catches up. See the `` and `` properties + comments in `pom.xml`.
+- **Go 1.25.10** — toolchain pin in `go/go.mod` (module min 1.25.0,
+ clamped by `modelcontextprotocol/go-sdk`).
+- **Kuzu 0.7.1** (`github.com/kuzudb/go-kuzu`) — embedded graph DB.
+- **`mattn/go-sqlite3` 1.14.22** — SQLite analysis cache.
+- **`smacker/go-tree-sitter`** — AST parsing (Java / Python / TS / Go).
+- **`modelcontextprotocol/go-sdk` v1.6** — stdio MCP server.
+- **`spf13/cobra`** — CLI framework.
+- Manifest files read: `go/go.mod`, `go/go.sum`.
## Entry points
| Entrypoint | File | Purpose |
|---|---|---|
-| CLI / Spring Boot main | `src/main/java/io/github/randomcodespace/iq/CodeIqApplication.java` | Boots Spring, picks `serving` vs `indexing` profile from the first arg, hands control to Picocli |
-| CLI dispatcher | `src/main/java/io/github/randomcodespace/iq/cli/CodeIqCli.java` | Top-level Picocli `@Command` with 14 subcommands |
-| 14 subcommands | `src/main/java/io/github/randomcodespace/iq/cli/{Index,Enrich,Serve,Analyze,Stats,Graph,Query,Find,Cypher,Topology,Flow,Bundle,Cache,Plugins,Version,Config}Command.java` | One file per CLI command (20 files including subcommands and helpers) |
-| REST API (5 controllers) | `src/main/java/io/github/randomcodespace/iq/api/{Graph,Flow,Topology,Intelligence}Controller.java` + `SafeFileReader.java` (helper) | 37 read-only endpoints on `/api/**`, `@Profile("serving")` |
-| MCP tools (34 tools) | `src/main/java/io/github/randomcodespace/iq/mcp/McpTools.java` | `@McpTool` methods, auto-registered by Spring AI starter |
-| SPA entry | `src/main/frontend/src/main.tsx` → `App.tsx` | React 18 + react-router 7, 4 pages |
+| CLI / MCP server | `go/cmd/codeiq/main.go` | The only binary. All subcommands live in `internal/cli`. |
+| Subcommand registry | `internal/cli/root.go` | Sets up cobra root + registers per-subcommand inits. |
+| Detector registry | `internal/cli/detectors_register.go` | Blank-imports every detector package leaf. **Choke point** — forget it and detectors silently no-op. |
+| Stdio MCP | `internal/cli/mcp.go` + `internal/mcp/server.go` | Wires consolidated tools + the deprecated 34 + `review_changes`. |
+| Analyzer pipeline | `internal/analyzer/analyzer.go` | FileDiscovery → parser → detectors (pool) → GraphBuilder → SQLite. |
+| Enrich pipeline | `internal/analyzer/enrich.go` | SQLite → Kuzu + linkers + layer classifier + intelligence. |
## Directory map
```
codeiq/
-├── pom.xml — Maven build (single module, JAR)
-├── CLAUDE.md — canonical agent-oriented internals doc
-├── README.md — human-facing intro + quick start
-├── AGENTS.md — repo-root agent entry pointer
-├── CHANGELOG.md — Keep-a-Changelog
-├── SECURITY.md — vuln disclosure policy
-├── LICENSE — Apache-2.0
-├── .bestpractices.json — OpenSSF Best Practices manifest
-├── spotbugs-exclude.xml — SpotBugs suppressions
-├── codeiq.yml — (optional, per-project config)
-├── .github/
-│ ├── workflows/ — 5 workflows: beta-java, ci-java,
-│ │ release-java, scorecard, security
-│ └── dependabot.yml — Maven + GHA + npm, weekly grouped
-├── src/
-│ ├── main/
-│ │ ├── java/io/github/randomcodespace/iq/ — Java sources (see CLAUDE.md "Package Structure")
-│ │ ├── frontend/ — React SPA (Vite, builds into resources/static/)
-│ │ └── resources/
-│ │ ├── application.yml — Spring config (profile-conditional)
-│ │ └── static/ — Vite-built SPA assets (gitignored)
-│ └── test/java/ — 236 test files (unit + E2E quality)
-├── docs/
-│ ├── codeiq.yml.example — full unified-config schema
-│ └── superpowers/baselines/ — phase exit-gate snapshots
-├── shared/runbooks/ — engineering-standards, release, rollback,
-│ first-time-setup, test-strategy
-├── scripts/ — repo-local helpers (e.g. signing setup)
-└── .codeiq/ — created at runtime: cache/ (H2) + graph/ (Neo4j)
+├── go/ — Go module (will move to repo root post-v1)
+│ ├── cmd/codeiq/ — main package
+│ ├── internal/
+│ │ ├── analyzer/ — pipeline orchestration + linkers
+│ │ ├── buildinfo/ — version metadata
+│ │ ├── cache/ — SQLite analysis cache
+│ │ ├── cli/ — cobra subcommands
+│ │ ├── detector/ — 100 detectors organized by category
+│ │ ├── flow/ — architecture-flow diagram engine
+│ │ ├── graph/ — Kuzu facade (read-only on serve path)
+│ │ ├── intelligence/ — lexical + language extractors + evidence + planner
+│ │ ├── mcp/ — MCP server + tool definitions
+│ │ ├── model/ — CodeNode, CodeEdge, kinds, Confidence
+│ │ ├── parser/ — tree-sitter + structured parsers
+│ │ ├── query/ — service / topology / stats
+│ │ └── review/ — PR-review pipeline (diff + Ollama)
+│ ├── parity/ — parity harness (build tag `parity`)
+│ ├── testdata/ — fixtures (fixture-minimal, fixture-multi-lang)
+│ ├── go.mod
+│ └── go.sum
+├── .github/workflows/ — go-ci, perf-gate, release-go, security, scorecard
+├── docs/project/ — architecture + conventions + flows deep-dives
+├── shared/runbooks/ — release-go.md + engineering-standards.md
+├── CHANGELOG.md
+├── CLAUDE.md — SSoT internals doc
+├── PROJECT_SUMMARY.md — this file
+├── README.md — user-facing entry doc
+├── SECURITY.md
+└── .goreleaser.yml — Goreleaser config (CGO multi-arch)
```
-Skipped from the map: `target/`, `.git/`, `.classpath`, `.factorypath`, `.project`, `.settings/`, `node_modules/`, `.dockerignore` — generated, IDE, or noise.
-
## Run, build, test
-Verified against `.github/workflows/ci-java.yml` (the actual CI gate) and `pom.xml`.
+Commands taken from `go/go.mod`, `Makefile` (none — pure `go` tooling),
+and `.github/workflows/go-ci.yml`:
```bash
-# Build (skipping tests, fastest)
-mvn clean package -DskipTests
-
-# Build + test + spotbugs + dependency-check (the CI gate)
-mvn verify
+# Install deps (vendored via go module cache; no extra step)
+cd go
-# Build skipping the npm/Vite frontend (backend-only contributors)
-mvn test -Dfrontend.skip=true
+# Run unit tests
+CGO_ENABLED=1 go test ./... -count=1
-# Skip the OWASP NVD download (~1 GB) on first local run
-mvn verify -Ddependency-check.skip=true
+# Race detector
+CGO_ENABLED=1 go test ./... -race -count=1
-# Run a specific test class
-mvn test -Dtest=SpringRestDetectorTest
+# Static analysis (mirrors CI)
+go install honnef.co/go/tools/cmd/staticcheck@2025.1.1
+staticcheck ./...
+go install github.com/securego/gosec/v2/cmd/gosec@v2.22.0
+gosec -quiet -exclude=G104,G115,G202,G204,G301,G304,G306,G401,G404,G501 ./...
+go install golang.org/x/vuln/cmd/govulncheck@latest
+govulncheck ./...
-# Run the pipeline against your code
-java -jar target/code-iq-*-cli.jar index /path/to/repo
-java -jar target/code-iq-*-cli.jar enrich /path/to/repo
-java -jar target/code-iq-*-cli.jar serve /path/to/repo # → http://localhost:8080
+# Build (local)
+CGO_ENABLED=1 go build -o /usr/local/bin/codeiq ./cmd/codeiq
```
-CI gate is `mvn verify` — runs unit + integration tests **plus** SpotBugs and OWASP dependency-check executions bound to the `verify` phase (`pom.xml`). `mvn test` alone skips the security gate. See `.github/workflows/ci-java.yml`.
-
-**Required env / external services:** none. codeiq is offline-first by design — Neo4j and H2 are embedded; no external server, no network calls at runtime. Air-gapped install: `git clone` + Maven mirror + `mvn package`. See [`shared/runbooks/first-time-setup.md`](shared/runbooks/first-time-setup.md).
-
-**Cache + graph dirs at runtime** (created in your scanned repo):
-- `.codeiq/cache/` — H2 incremental analysis cache (`CACHE_VERSION=5` constant near the top of `cache/AnalysisCache.java`; bumped from 4 for the resolver `confidence` + `source` schema, so stale v4 caches drop and rebuild on first run after upgrade)
-- `.codeiq/graph/graph.db/` — Neo4j Embedded data dir
+**Required env / external services**: none for build. At run-time the
+binary reads `OLLAMA_API_KEY` (optional) and `HOMEBREW_TAP_GITHUB_TOKEN`
+(release-side only).
## Conventions an agent must respect
-(Top 7. Full list in [`docs/project/conventions.md`](docs/project/conventions.md) and [`CLAUDE.md`](CLAUDE.md) §"Critical Rules" / §"Code Conventions".)
-
-1. **Serving layer is read-only.** No POST/PUT/DELETE on `/api`, no MCP tool that mutates state. All ingestion happens via CLI (`index`, `enrich`). See `api/GraphController.java` (only `@GetMapping`s) and `mcp/McpTools.java`.
-2. **Determinism is non-negotiable.** Same input → byte-identical graph. Sort `Set` iterations (`TreeSet` or `stream().sorted()`); detectors must be stateless `@Component` beans; `GraphBuilder` flushes nodes before edges. See `analyzer/GraphBuilder.java`.
-3. **Generic detection, not example-specific.** Every detector must work for all languages/frameworks in its scope. Framework detectors (Quarkus, Fastify, etc.) **must** carry discriminator guards requiring framework-specific imports.
-4. **Detectors are auto-discovered Spring `@Component` beans** — no registry edits needed. Drop a class in `detector//`, implement `Detector` (or extend an `Abstract*Detector` base class), add a unit test + a determinism test.
-5. **Property keys ≥ 3 occurrences become constants.** `private static final String PROP_FRAMEWORK = "framework";` etc. — see existing detectors.
-6. **Configuration hierarchy:** built-in defaults → `~/.codeiq/config.yml` → `./codeiq.yml` → `CODEIQ__` env → CLI flags. Single source of truth: `codeiq.yml`. Spring-owned keys (e.g. `codeiq.neo4j.enabled`) stay in `application.yml`. See [`docs/codeiq.yml.example`](docs/codeiq.yml.example) and `CLAUDE.md` §"Configuration".
-7. **Air-gapped build target.** No public-internet calls at runtime, all assets bundled local, vendored where possible. Per-org rule in [`shared/runbooks/engineering-standards.md`](shared/runbooks/engineering-standards.md) §7 and [`~/.claude/rules/build.md`](~/.claude/rules/build.md).
+- **Detector blank-import**: new package under `internal/detector//`
+ must be added to `internal/cli/detectors_register.go`. The polyglot
+ benchmark caught 15 missing imports (commit `04098be`).
+- **Determinism**: never iterate a Go `map` without sorting keys. Run
+ the determinism test twice with the same fixture and assert byte
+ equality.
+- **Anchor nodes for cross-file edges**: use
+ `base.EnsureFileAnchor` + `base.EnsureExternalAnchor`. Otherwise
+ imports/depends_on edges drop at Snapshot's phantom filter.
+- **Read-only MCP**: every MCP tool reads. `run_cypher` rejects
+ mutation keywords. `review_changes` reads the graph + shells `git`
+ read-only.
+- **Confidence + Source mandatory**: every emitted `CodeNode` and
+ `CodeEdge`. Base classes stamp the floor at the orchestration
+ boundary; detectors override only when they have higher-confidence
+ evidence.
+
+Full set in [`CLAUDE.md` §Code Conventions](CLAUDE.md#code-conventions)
+and [`docs/project/conventions.md`](docs/project/conventions.md).
## Gotchas
-(Top items. Full list in [`CLAUDE.md`](CLAUDE.md) §"Gotchas & Lessons Learned" — that section is canonical and longer; cross-reference to it.)
-
-- **Pipeline order is `index → enrich → serve`.** Don't put analysis in `serve`; it's read-only. `serve` requires a prior `enrich` for a populated Neo4j directory.
-- **Neo4j property round-trip uses `prop_*` keys.** Properties are written by `bulkSave` (UNWIND Cypher) with a `prop_` prefix and restored by `nodeFromNeo4j()` in `graph/GraphStore.java`. If you add a new property, verify it survives write→read.
-- **Edges must be attached to source nodes before `bulkSave()`.** Cypher `MATCH` silently returns 0 rows for missing source IDs — pre-validate.
-- **`@ActiveProfiles("test")` is required on every `@SpringBootTest`** to avoid Neo4j auto-startup conflicts.
-- **`AnalysisCache` uses a `ReentrantReadWriteLock`** (not `synchronized`). JEP 491 (Java 25) means lock primitives no longer pin virtual-thread carriers; the read/write lock is what prevents `ClosedChannelException` on H2's MVStore under concurrent virtual-thread access. Don't "simplify" to `synchronized`.
-- **Bump `CACHE_VERSION` in `cache/AnalysisCache.java`** (top of file) when you change the file-hash algorithm or H2 schema. Stale caches auto-clear on next run. Currently `5` (bumped from 4 for the resolver `confidence` + `source` schema).
-- **Symbol resolver is index-time only.** `Analyzer.bootstrapResolvers()` is reached from `run` / `runBatchedIndex` / `runSmartIndex` only — never at `serve`. The SPI lives at `intelligence/resolver/`; the Java backend wraps `javaparser-symbol-solver-core`. RESOLVED-tier edges and `target_fqn` properties land at index-time and are then served read-only from Neo4j.
-- **`JavaSymbolResolver.resolve(String)` enforces strict parse-success.** Partial-CU outputs from JavaParser problems are converted to `EmptyResolved` so the graph never carries phantom RESOLVED edges from broken parses. Detectors must handle `EmptyResolved` as "lexical fallback".
-- **SnakeYAML parses bare `on` as `Boolean.TRUE`.** Compare YAML keys with `String.valueOf(key)`, not `Boolean.TRUE.equals(key)` (SonarCloud S2159).
-- **Determinism gate:** every new detector needs a determinism test (run twice, assert equal output) — see existing `*DetectorTest.java` for the pattern.
-- **First `mvn verify` downloads ~1 GB NVD database** for OWASP dependency-check. Override locally with `-Ddependency-check.skip=true`.
-- **Live counts (verified 2026-04-27):** **99 concrete detectors** (excluding `Abstract*` and `*Helper*`), **34 `NodeKind` values**, **28 `EdgeKind` values**, **236 test files / 3,270 test methods**. `CLAUDE.md`, `README.md`, and the source javadocs are in sync. When adding a `NodeKind` / `EdgeKind` / detector, update the count in the source javadoc, `CLAUDE.md` (intro + package summary + key-files table), `README.md` (intro + mermaid subgraph), and this file in the same PR — drift is the default if you don't.
-- **Don't merge anything that fails `mvn verify`.** SpotBugs + dependency-check + tests are bound to `verify`, not `test`.
+- **Kuzu v0.7.1 binder limitations** — no FTS, no parameterized
+ LIMIT/SKIP, `lower()` not `toLower()`, no negative lookahead, list
+ comprehensions reject out-of-scope variables. See
+ [`CLAUDE.md` §Kuzu v0.7.1 quirks](CLAUDE.md#kuzu-v071-quirks).
+- **Go RE2 vs Java regex** — no lookahead, no possessive quantifiers.
+ Strip `*+` when porting; use two-stage matchers for lookahead.
+- **MCP SDK v1.6** — `Server.AddTool(t, h)` (two args, not aggregate).
+ `StdioTransport{}` zero-value, no factory. JSON marshal of string
+ returns needs special casing in `mcp/tool.go`.
+- **`detectors_register.go` is a choke point** — see above.
+- **gosec @v2.21.4 fails to build under Go 1.25** — pinned to v2.22.0.
+- **GO-2026-4918 (HTTP/2 SETTINGS DoS)** reachable from
+ `review.Client.Review` — fixed in Go 1.25.10 (our toolchain pin).
## Where to look next
-- **Architecture & components** → [`docs/project/architecture.md`](docs/project/architecture.md)
-- **Data model (Node/Edge kinds, Neo4j schema, H2 cache)** → [`docs/project/data-model.md`](docs/project/data-model.md)
-- **UI (React SPA, Vite, page hierarchy)** → [`docs/project/ui.md`](docs/project/ui.md)
-- **Key flows (index→enrich→serve, MCP tool lifecycle)** → [`docs/project/flows.md`](docs/project/flows.md)
-- **Conventions (full)** → [`docs/project/conventions.md`](docs/project/conventions.md)
-- **Build & run details (Maven phases, ANTLR codegen, frontend embed)** → [`docs/project/build-and-run.md`](docs/project/build-and-run.md)
-- **Active design specs (in-flight architectural work)** → [`docs/specs/`](docs/specs/) — currently: sub-project 1 (resolver SPI + Java pilot + confidence schema)
-- **Internal canonical reference (hand-maintained)** → [`CLAUDE.md`](CLAUDE.md)
-- **Engineering standards / release / rollback** → [`shared/runbooks/`](shared/runbooks/)
-
-(Skipped: `docs/project/integrations.md` — codeiq makes no runtime calls to external APIs / queues. The `docs/codeiq.yml.example` schema and `shared/runbooks/release.md` cover what little external surface exists at build/release time.)
+- Architecture & components → [`docs/project/architecture.md`](docs/project/architecture.md)
+- Conventions (full) → [`docs/project/conventions.md`](docs/project/conventions.md)
+- Build & release → [`shared/runbooks/release-go.md`](shared/runbooks/release-go.md)
+- MCP integration → [`README.md#mcp-integration`](README.md#mcp-integration)
+- Internal SSoT → [`CLAUDE.md`](CLAUDE.md)
diff --git a/README.md b/README.md
index 0528bd1d..656f3a5d 100644
--- a/README.md
+++ b/README.md
@@ -1,311 +1,181 @@
codeiq
- Deterministic code knowledge graph -- scans codebases to map services, endpoints, entities, infrastructure, auth patterns, and framework usage. No AI, pure static analysis.
+ Deterministic code knowledge graph — scans codebases to map services, endpoints, entities, infrastructure, auth patterns, and framework usage. No AI, pure static analysis. Single static Go binary; MCP server included.
-
-
-
-
-
+
+
+
+
+
-
+
---
-## Development — Go Port (Phase 1)
+## What it is
-An in-progress Go port lives in [`go/`](./go/). Phase 1 ships `codeiq index`
-over 5 detectors with byte-level parity against the Java side on
-`go/testdata/fixture-minimal`. Phases 2-6 land enrich, MCP, the remaining 94
-detectors, release infra, and Java cutover (see
-[`docs/superpowers/specs/2026-05-11-codeiq-go-port-design.md`](docs/superpowers/specs/2026-05-11-codeiq-go-port-design.md)).
+codeiq scans a codebase and produces a deterministic graph of its
+services, endpoints, entities, infrastructure, auth patterns, and
+framework usage. Same input ⇒ same output, every time.
-Build and run:
+- **Single static binary** — built from the `go/` tree. No JVM, no
+ Spring Boot start time. ~30 MB. CGO enabled (Kuzu graph + SQLite
+ cache).
+- **100 detectors** across 35+ languages — Java, Kotlin, Scala, Python,
+ TypeScript/JavaScript, Go, Rust, C#, C++, Terraform, Bicep, Helm,
+ Kubernetes, Docker, GitHub Actions, GitLab CI, …
+- **MCP server included** — `codeiq mcp` runs an MCP stdio server with
+ 6 consolidated mode-driven tools (plus 34 deprecated narrow tools for
+ back-compat) so Claude / Cursor / any MCP-aware agent can query the
+ graph directly.
+- **LLM-driven PR review** — `codeiq review` walks the diff, queries
+ the indexed graph for evidence, and asks Ollama (Cloud or local) for
+ review comments.
-```bash
-cd go
-CGO_ENABLED=1 go build -o codeiq ./cmd/codeiq
-./codeiq index .
-./codeiq --version
-```
+## Install
-The Go binary writes to the same `.codeiq/cache/` location the Java side
-uses, but `CACHE_VERSION` is bumped to 6 so the first run triggers a clean
-rebuild. Phase 1 is parity-only — use the Java side for production runs.
+### Pre-built binary
-## Quick Start
+Grab from
+[Releases](https://github.com/RandomCodeSpace/codeiq/releases/latest):
```bash
-# Build from source (requires Java 25+, Maven 3.9+)
-git clone https://github.com/RandomCodeSpace/codeiq.git
-cd codeiq
-mvn clean package -DskipTests
-
-# Analyze a codebase
-java -jar target/code-iq-*-cli.jar analyze /path/to/repo
-
-# Start server (REST API + MCP + React UI)
-java -jar target/code-iq-*-cli.jar serve /path/to/repo
-# Open http://localhost:8080
+curl -L https://github.com/RandomCodeSpace/codeiq/releases/latest/download/codeiq_$(uname -s | tr A-Z a-z)_$(uname -m | sed s/x86_64/amd64/).tar.gz | tar xz
+sudo install codeiq /usr/local/bin/
+codeiq --version
```
-## How It Works
-
-codeiq scans source files using 99 detectors across 35+ languages, builds a knowledge graph of code relationships, and serves it via REST API, MCP server, and React UI.
-
-```mermaid
-graph TD
- subgraph "1. Index"
- A[File Discovery] -->|git ls-files| B[Parsing Layer]
- B -->|JavaParser / ANTLR / Regex| C[99 Detectors]
- C -->|Virtual Threads| D[Graph Builder]
- D --> E[(H2 Cache)]
- end
-
- subgraph "2. Enrich"
- E --> F[Neo4j Bulk Load]
- F --> G[Cross-file Linkers]
- G --> H[Layer Classifier]
- H --> I[Service Detector]
- I --> J[(Neo4j Graph)]
- end
-
- subgraph "3. Serve"
- J --> K[REST API - 37 endpoints]
- J --> L[MCP Server - 34 tools]
- J --> M[React UI - 4 pages]
- end
-```
-
-### Three-Command Pipeline
-
-For large codebases or memory-constrained environments:
+Verify (Sigstore keyless):
```bash
-# 1. Index: batched H2 streaming, low memory (~1-2GB for 20K files)
-java -jar code-iq-*-cli.jar index /path/to/repo --batch-size 500
-
-# 2. Enrich: load H2 into Neo4j, run linkers + classifier + topology
-java -jar code-iq-*-cli.jar enrich /path/to/repo
-
-# 3. Serve: REST API + MCP + React UI
-java -jar code-iq-*-cli.jar serve /path/to/repo
+sha256sum -c checksums.sha256
+cosign verify-blob \
+ --certificate checksums.sha256.pem \
+ --signature checksums.sha256.sig \
+ --certificate-identity-regexp 'https://github.com/RandomCodeSpace/codeiq/.github/workflows/release-go.yml@.*' \
+ --certificate-oidc-issuer https://token.actions.githubusercontent.com \
+ checksums.sha256
```
-For small codebases, `analyze` does everything in one step:
+### Homebrew
```bash
-java -jar code-iq-*-cli.jar analyze /path/to/repo
+brew tap RandomCodeSpace/codeiq
+brew install codeiq
```
-## CLI Commands
-
-| Command | Description |
-|---------|-------------|
-| `analyze [path]` | Scan and build knowledge graph (in-memory, all-in-one) |
-| `index [path]` | Memory-efficient batched indexing to H2 |
-| `enrich [path]` | Load H2 into Neo4j with linkers + classifier + topology |
-| `serve [path]` | Start React UI + REST API + MCP server |
-| `stats [path]` | Rich categorized statistics |
-| `graph [path]` | Export graph (JSON, YAML, Mermaid, DOT) |
-| `query [path]` | Query relationships (consumers, producers, callers) |
-| `find [what] [path]` | Preset queries (endpoints, guards, entities, topics) |
-| `cypher [query]` | Execute raw Cypher queries against Neo4j |
-| `topology [path]` | Service topology (blast radius, circular deps, bottlenecks) |
-| `flow [path]` | Architecture flow diagrams |
-| `bundle [path]` | Package graph + source into distributable ZIP |
-| `cache [action]` | Manage analysis cache |
-| `plugins [action]` | List/inspect detectors, suggest config |
-| `version` | Show version info |
-
-## Server
+### Build from source
-```bash
-java -jar target/code-iq-*-cli.jar serve /path/to/repo --port 8080
-```
-
-```mermaid
-graph LR
- subgraph "http://localhost:8080"
- A["/ React UI"] --- B["/api REST API"]
- B --- C["/mcp MCP Server"]
- end
-```
-
-| Interface | Description |
-|-----------|-------------|
-| **React UI** (`/`) | Dashboard (stats + charts), Codebase Map (ECharts treemap), Explorer (node browser), MCP Console (tool invocationgrams, MCP Console, API Docs |
-| **REST API** (`/api`) | 37 endpoints -- stats, nodes, edges, topology, triage, search, flow |
-| **MCP Server** (`/mcp`) | 34 tools via Spring AI streamable HTTP for AI-powered code triage |
-
-## Supported Frameworks
-
-| Language | Frameworks & Patterns |
-|----------|----------------------|
-| **Java** | Spring REST, Spring Security, JPA/Hibernate, Kafka, RabbitMQ, JMS, gRPC, JAX-RS, WebSocket, Quarkus, Micronaut |
-| **Python** | Flask, Django (views + models + auth), FastAPI (routes + auth), SQLAlchemy, Celery, Pydantic |
-| **TypeScript** | Express, NestJS, Fastify, Remix, GraphQL, TypeORM, Prisma, Sequelize, Mongoose, KafkaJS, Passport/JWT |
-| **Frontend** | React, Vue, Angular, Svelte components and routes |
-| **Go** | Gin, Echo, Chi, gorilla/mux, net/http, GORM, sqlx |
-| **C#** | Entity Framework Core, Minimal APIs, ASP.NET Core |
-| **Rust** | Actix-web, Axum |
-| **Kotlin** | Ktor routes |
-| **Infra** | Terraform, Kubernetes, Docker Compose, Dockerfile, Bicep, Helm, GitHub Actions, GitLab CI, CloudFormation |
-| **Auth** | Spring Security, Django Auth, FastAPI Auth, NestJS Guards, Passport/JWT, K8s RBAC, LDAP |
-
-## Service Topology
-
-AppDynamics-style service topology from static code analysis:
+Requires Go 1.25.10+ and a C toolchain (CGO).
```bash
-# View service topology
-java -jar code-iq-*-cli.jar topology /path/to/monorepo
-
-# Blast radius analysis
-java -jar code-iq-*-cli.jar topology /path/to/repo --blast-radius service-name
-
-# Multi-repo support
-java -jar code-iq-*-cli.jar index /repo1 --graph /shared --service-name frontend
-java -jar code-iq-*-cli.jar index /repo2 --graph /shared --service-name backend
-java -jar code-iq-*-cli.jar serve /shared
+git clone https://github.com/RandomCodeSpace/codeiq.git
+cd codeiq/go
+CGO_ENABLED=1 go build -o /usr/local/bin/codeiq ./cmd/codeiq
+codeiq --version
```
-## Configuration
-
-codeiq is configured by a single YAML file at the repo root: **`codeiq.yml`**.
-Every field is optional; omitted fields fall back to the in-code defaults
-(`ConfigDefaults.builtIn()`). See
-[`docs/codeiq.yml.example`](docs/codeiq.yml.example) for the full reference
-with inline documentation. All keys are **snake_case**; camelCase spellings
-are accepted as deprecated aliases for one release and log a WARN on load.
-
-### Resolution order (last wins)
-
-1. Built-in defaults
-2. `~/.codeiq/config.yml` (user-global)
-3. `./codeiq.yml` (project)
-4. Environment variables: `CODEIQ__` (e.g. `CODEIQ_SERVING_PORT=9090`,
- `CODEIQ_MCP_AUTH_MODE=bearer`, `CODEIQ_INDEXING_BATCH_SIZE=1000`). Nested
- keys are flattened with underscores; values parse as YAML scalars.
-5. CLI flags on `codeiq `
-
-### Commands
+## Quickstart
```bash
-codeiq config validate # Validate ./codeiq.yml, exit 1 on error
-codeiq config validate -p custom.yml
-codeiq config explain # Print each effective value + its source layer
-```
+# Index a repository → SQLite analysis cache.
+codeiq index /path/to/repo
-### Minimal example
+# Enrich → Kuzu graph at .codeiq/graph/codeiq.kuzu.
+codeiq enrich /path/to/repo
-```yaml
-project:
- name: my-service
- root: .
+# Query.
+codeiq stats /path/to/repo
+codeiq find endpoints /path/to/repo
+codeiq query consumers /path/to/repo
+codeiq topology /path/to/repo
+codeiq flow /path/to/repo --view overview --format mermaid
-indexing:
- exclude: ['**/node_modules/**', '**/build/**', '**/dist/**']
- cache_dir: .codeiq/cache
- batch_size: 500
-
-serving:
- port: 8080
- bind_address: 0.0.0.0
-
-mcp:
- enabled: true
- transport: http
+# LLM PR review (local Ollama; OLLAMA_API_KEY → Cloud).
+codeiq review --base origin/main --head HEAD /path/to/repo
```
-### Spring-owned keys (stay in `application.yml`)
-
-A handful of keys drive Spring's `@ConditionalOnProperty` / `@Value` wiring
-and have not been migrated into `codeiq.yml`. Keep them in
-`src/main/resources/application.yml`:
-
-- `codeiq.neo4j.enabled` -- profile-conditional Neo4j toggle (`false` under
- the `indexing` profile, `true` under `serving`).
-- `codeiq.neo4j.bolt.port` -- embedded Neo4j Bolt listener port.
-- `codeiq.cors.allowed-origin-patterns` -- CORS allow-list for the REST API.
-- `codeiq.ui.enabled` -- toggles the React SPA static resource handler.
-
-Everything else belongs in `codeiq.yml`. `UnifiedConfigBeans` bridges the
-two worlds for values that exist in both.
-
-See `docs/codeiq.yml.example` for the full schema.
-
-## Graph Model
-
-```mermaid
-graph LR
- subgraph "Node Types (34)"
- direction TB
- N1[service] --- N2[endpoint]
- N2 --- N3[class]
- N3 --- N4[method]
- N4 --- N5[entity]
- N5 --- N6[topic / queue]
- N6 --- N7[guard / middleware]
- N7 --- N8[config_file]
- end
-
- subgraph "Edge Types (28)"
- direction TB
- E1[calls] --- E2[imports]
- E2 --- E3[depends_on]
- E3 --- E4[produces / consumes]
- E4 --- E5[queries / connects_to]
- E5 --- E6[extends / implements]
- E6 --- E7[protects / contains]
- end
-```
-
-## Benchmarks
-
-| Project | Files | Nodes | Edges | Time |
-|---------|-------|-------|-------|------|
-| kubernetes | 20,240 | 193,391 | 349,707 | 9s |
-| kafka | 6,919 | 62,692 | 120,422 | 50s |
-| django | 3,467 | 51,402 | 99,086 | 54s |
-| spring-boot | 10,524 | 27,993 | 39,776 | 27s |
-| fastapi | 2,740 | 25,475 | 30,430 | 10s |
-| nest | 2,037 | 5,757 | 11,904 | 1s |
+## MCP integration
-All results are 100% deterministic across runs.
+Add to your MCP client config (e.g. `.mcp.json` at the project root):
-## Development
-
-```bash
-git clone https://github.com/RandomCodeSpace/codeiq.git
-cd codeiq
-mvn clean package # Build + test (3,270 tests across 236 files)
-mvn test # Tests only
+```json
+{
+ "mcpServers": {
+ "code-mcp": {
+ "command": "codeiq",
+ "args": ["mcp"]
+ }
+ }
+}
```
-### Maven Dependency
-
-```xml
-
- io.github.randomcodespace.iq
- code-iq
- 0.0.1-beta.0
-
-```
+Six mode-driven tools (`graph_summary`, `find_in_graph`, `inspect_node`,
+`trace_relationships`, `analyze_impact`, `topology_view`) plus
+`run_cypher` (escape hatch) and `review_changes` (in-agent PR review).
+The deprecated 34 narrow tools remain wired for one release for
+back-compat.
+
+## CLI reference
+
+| Command | Purpose |
+|---|---|
+| `index [path]` | Scan files → SQLite analysis cache. |
+| `enrich [path]` | Load cache → Kuzu graph; run linkers + layer classifier. |
+| `mcp [path]` | Stdio MCP server (Claude / Cursor). |
+| `stats [path]` | Categorized statistics. |
+| `query [path]` | consumers / producers / callers / dependencies / dependents / shortest-path / cycles / dead-code. |
+| `find [path]` | endpoints, entities, services, … |
+| `cypher [path]` | Raw Cypher against Kuzu (read-only). |
+| `flow [path]` | Mermaid / dot / yaml flow diagrams. |
+| `graph [path]` | Export graph: json / yaml / mermaid / dot. |
+| `topology [path]` | Service-topology projection. |
+| `review [path]` | LLM-driven PR review. |
+| `cache ` | Inspect / clear the analysis cache. |
+| `plugins ` | List + describe registered detectors. |
+| `config ` | Validate / explain `codeiq.yml`. |
+| `version` | Build info. |
+
+`codeiq --help` for full flag listing.
+
+## Design
+
+The graph is canonical and deterministic — `GraphBuilder` deduplicates
+nodes by ID (confidence-aware merge) and edges by canonical
+`(source, target, kind)` tuple. Phantom edges (endpoint missing from
+the graph) are dropped at snapshot. Every run prints a
+"Deduped: N nodes, M edges Dropped: K phantom edges" line so graph
+hygiene is visible.
+
+See [`docs/project/architecture.md`](docs/project/architecture.md) for
+the pipeline (FileDiscovery → tree-sitter / regex → detectors →
+GraphBuilder → linkers → LayerClassifier → Kuzu) and
+[`docs/project/conventions.md`](docs/project/conventions.md) for the
+detector authoring contract.
+
+## Releases
+
+Tag `vX.Y.Z` → `.github/workflows/release-go.yml` builds linux/amd64,
+linux/arm64, darwin/arm64 archives with SPDX SBOMs (Syft); the
+checksum manifest is keyless-signed via Cosign + GitHub OIDC
+(Sigstore Rekor). Runbook:
+[`shared/runbooks/release-go.md`](shared/runbooks/release-go.md).
+
+## Security
+
+See [SECURITY.md](SECURITY.md). Supply-chain stack: OpenSSF Best
+Practices [12650](https://www.bestpractices.dev/projects/12650),
+OpenSSF Scorecard, and the OSS-CLI workflow
+([`security.yml`](.github/workflows/security.yml)) running OSV-Scanner,
+Trivy, Semgrep, Gitleaks, jscpd, and `anchore/sbom-action` on every PR.
## License
-MIT License. See [LICENSE](LICENSE) for details.
-
----
-
-
- Built with intelligence. No AI required.
-
+See [LICENSE](LICENSE).
diff --git a/pom.xml b/pom.xml
deleted file mode 100644
index a5867da9..00000000
--- a/pom.xml
+++ /dev/null
@@ -1,643 +0,0 @@
-
-
- 4.0.0
-
-
- org.springframework.boot
- spring-boot-starter-parent
- 4.0.6
-
-
-
- io.github.randomcodespace.iq
- code-iq
- 0.1.0-SNAPSHOT
- jar
-
- codeiq
- CLI tool and server that scans codebases to build a deterministic code knowledge graph
- https://github.com/RandomCodeSpace/codeiq
-
-
- 25
- 2026.04.0
- 2.0.0-M4
- 4.7.7
- 0.8.14
- 4.9.8.3
- 3.6.0
-
-
- false
-
-
- 11.0.21
- 3.1.1
-
-
-
-
-
- org.springframework.ai
- spring-ai-bom
- ${spring-ai.version}
- pom
- import
-
-
-
-
- org.apache.logging.log4j
- log4j-core
- 2.25.4
-
-
- org.apache.logging.log4j
- log4j-api
- 2.25.4
-
-
- org.apache.logging.log4j
- log4j-layout-template-json
- 2.25.4
-
-
- org.apache.shiro
- shiro-core
- 2.1.0
-
-
- io.modelcontextprotocol.sdk
- mcp-core
- 1.1.2
-
-
-
-
- tools.jackson.core
- jackson-core
- 3.1.2
-
-
- tools.jackson.core
- jackson-databind
- 3.1.2
-
-
- tools.jackson.core
- jackson-annotations
- 3.1.1
-
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
- org.springframework.boot
- spring-boot-starter-data-neo4j
-
-
- org.springframework.boot
- spring-boot-starter-cache
-
-
- org.springframework.boot
- spring-boot-starter-actuator
-
-
- org.springframework.boot
- spring-boot-starter-security
-
-
-
-
- com.bucket4j
- bucket4j_jdk17-core
- 8.18.0
-
-
-
-
- com.github.ben-manes.caffeine
- caffeine
-
-
-
-
- net.logstash.logback
- logstash-logback-encoder
- 9.0
-
-
-
-
- io.micrometer
- micrometer-registry-prometheus
-
-
-
-
- org.neo4j
- neo4j
- ${neo4j.version}
-
-
-
- org.neo4j
- neo4j-slf4j-provider
-
-
-
-
-
-
- org.springframework.ai
- spring-ai-starter-mcp-server-webmvc
-
-
-
-
- info.picocli
- picocli-spring-boot-starter
- ${picocli.version}
-
-
- info.picocli
- picocli
- ${picocli.version}
-
-
-
-
- com.github.javaparser
- javaparser-core
- 3.28.0
-
-
-
-
- com.github.javaparser
- javaparser-symbol-solver-core
- 3.28.0
-
-
-
-
- org.antlr
- antlr4-runtime
- 4.13.2
-
-
-
-
- com.h2database
- h2
-
-
-
-
- org.springdoc
- springdoc-openapi-starter-webmvc-ui
- 3.0.3
-
-
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
-
-
-
- MIT License
- https://opensource.org/licenses/MIT
-
-
-
-
-
- RandomCodeSpace
- https://github.com/RandomCodeSpace
-
-
-
-
- scm:git:git://github.com/RandomCodeSpace/codeiq.git
- scm:git:ssh://github.com:RandomCodeSpace/codeiq.git
- https://github.com/RandomCodeSpace/codeiq/tree/main
-
-
-
-
-
-
- com.github.eirslett
- frontend-maven-plugin
- 2.0.0
-
- src/main/frontend
-
- v22.12.0
- ${frontend.skip}
-
-
-
- install-node-npm
- install-node-and-npm
-
-
- npm-install
- npm
-
- install
-
-
-
- npm-build
- npm
-
- run build
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
- cli
-
-
-
-
- build-info
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- ${java.version}
-
-
-
-
- org.antlr
- antlr4-maven-plugin
- 4.13.2
-
-
- antlr4
-
-
-
- true
- true
- false
-
-
-
-
- org.apache.maven.plugins
- maven-enforcer-plugin
-
-
- enforce-java
-
- enforce
-
-
-
-
- [25,)
- Java 25 or later is required.
-
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
- -XX:+EnableDynamicAgentLoading @{argLine}
-
- **/benchmark/**
-
-
-
-
-
- org.apache.maven.plugins
- maven-failsafe-plugin
-
- -XX:+EnableDynamicAgentLoading @{argLine}
-
-
-
-
- integration-test
- verify
-
-
-
-
-
-
- org.jacoco
- jacoco-maven-plugin
- ${jacoco.version}
-
-
-
- io/github/randomcodespace/iq/grammar/**
-
-
-
-
- prepare-agent
-
- prepare-agent
-
-
-
- report
- test
-
- report
-
-
-
- check
- verify
-
- check
-
-
-
-
- BUNDLE
-
-
- LINE
- COVEREDRATIO
- 0.85
-
-
-
-
-
-
-
-
-
-
- com.github.spotbugs
- spotbugs-maven-plugin
- ${spotbugs.version}
-
- spotbugs-exclude.xml
-
- High
- true
-
-
-
-
- spotbugs-check-on-verify
- verify
-
- check
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-checkstyle-plugin
- ${checkstyle-plugin.version}
-
- google_checks.xml
-
-
-
-
-
- org.apache.maven.plugins
- maven-assembly-plugin
-
-
- src/assembly/source-bundle.xml
-
- ${project.artifactId}-${project.version}
- true
-
-
-
- create-source-bundle
- package
-
- single
-
-
-
-
-
-
-
-
-
-
-
- mutation
-
-
-
- org.pitest
- pitest-maven
- 1.18.0
-
-
- io.github.randomcodespace.iq.intelligence.resolver.*
- io.github.randomcodespace.iq.intelligence.resolver.java.*
- io.github.randomcodespace.iq.model.Confidence
-
-
- io.github.randomcodespace.iq.intelligence.resolver.*
- io.github.randomcodespace.iq.intelligence.resolver.java.*
- io.github.randomcodespace.iq.model.ConfidenceTest
-
-
- HTML
- XML
-
- false
-
-
-
-
-
-
- release
-
-
-
-
- org.sonatype.central
- central-publishing-maven-plugin
- 0.10.0
- true
-
- central
- true
-
-
-
- org.apache.maven.plugins
- maven-source-plugin
-
-
- attach-sources
-
- jar-no-fork
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
-
- none
-
-
-
- attach-javadocs
-
- jar
-
-
-
-
-
- org.apache.maven.plugins
- maven-gpg-plugin
- 3.2.8
-
-
- sign-artifacts
- verify
-
- sign
-
-
-
-
-
-
-
-
-
diff --git a/spotbugs-exclude.xml b/spotbugs-exclude.xml
deleted file mode 100644
index b97f611d..00000000
--- a/spotbugs-exclude.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/assembly/source-bundle.xml b/src/assembly/source-bundle.xml
deleted file mode 100644
index a06dd699..00000000
--- a/src/assembly/source-bundle.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
- source-bundle
-
- zip
- tar.gz
-
-
- true
- ${project.artifactId}-${project.version}
-
-
-
-
- ${project.basedir}
- /
-
- pom.xml
- README.md
- CLAUDE.md
- LICENSE
- .gitignore
- sonar-project.properties
-
-
-
-
-
- ${project.basedir}/src
- /src
-
- **/*
-
-
-
- main/frontend/node_modules/**
- main/frontend/node/**
- main/frontend/dist/**
- main/frontend/.cache/**
- main/frontend/tsconfig.tsbuildinfo
-
- **/grammar/**/generated/**
-
-
-
-
-
- ${project.basedir}/.github
- /.github
-
- **/*
-
-
-
-
-
diff --git a/src/main/antlr4/imports/UnicodeClasses.g4 b/src/main/antlr4/imports/UnicodeClasses.g4
deleted file mode 100644
index 642a8b79..00000000
--- a/src/main/antlr4/imports/UnicodeClasses.g4
+++ /dev/null
@@ -1,1656 +0,0 @@
-/**
- * Taken from http://www.antlr3.org/grammar/1345144569663/AntlrUnicode.txt
- */
-
-// $antlr-format alignTrailingComments true, columnLimit 150, maxEmptyLinesToKeep 1, reflowComments false, useTab false
-// $antlr-format allowShortRulesOnASingleLine true, allowShortBlocksOnASingleLine true, minEmptyLines 0, alignSemicolons ownLine
-// $antlr-format alignColons trailing, singleLineOverrulesHangingColon true, alignLexerCommands true, alignLabels true, alignTrailers true
-
-lexer grammar UnicodeClasses;
-
-UNICODE_CLASS_LL:
- '\u0061' ..'\u007A'
- | '\u00B5'
- | '\u00DF' ..'\u00F6'
- | '\u00F8' ..'\u00FF'
- | '\u0101'
- | '\u0103'
- | '\u0105'
- | '\u0107'
- | '\u0109'
- | '\u010B'
- | '\u010D'
- | '\u010F'
- | '\u0111'
- | '\u0113'
- | '\u0115'
- | '\u0117'
- | '\u0119'
- | '\u011B'
- | '\u011D'
- | '\u011F'
- | '\u0121'
- | '\u0123'
- | '\u0125'
- | '\u0127'
- | '\u0129'
- | '\u012B'
- | '\u012D'
- | '\u012F'
- | '\u0131'
- | '\u0133'
- | '\u0135'
- | '\u0137'
- | '\u0138'
- | '\u013A'
- | '\u013C'
- | '\u013E'
- | '\u0140'
- | '\u0142'
- | '\u0144'
- | '\u0146'
- | '\u0148'
- | '\u0149'
- | '\u014B'
- | '\u014D'
- | '\u014F'
- | '\u0151'
- | '\u0153'
- | '\u0155'
- | '\u0157'
- | '\u0159'
- | '\u015B'
- | '\u015D'
- | '\u015F'
- | '\u0161'
- | '\u0163'
- | '\u0165'
- | '\u0167'
- | '\u0169'
- | '\u016B'
- | '\u016D'
- | '\u016F'
- | '\u0171'
- | '\u0173'
- | '\u0175'
- | '\u0177'
- | '\u017A'
- | '\u017C'
- | '\u017E' ..'\u0180'
- | '\u0183'
- | '\u0185'
- | '\u0188'
- | '\u018C'
- | '\u018D'
- | '\u0192'
- | '\u0195'
- | '\u0199' ..'\u019B'
- | '\u019E'
- | '\u01A1'
- | '\u01A3'
- | '\u01A5'
- | '\u01A8'
- | '\u01AA'
- | '\u01AB'
- | '\u01AD'
- | '\u01B0'
- | '\u01B4'
- | '\u01B6'
- | '\u01B9'
- | '\u01BA'
- | '\u01BD' ..'\u01BF'
- | '\u01C6'
- | '\u01C9'
- | '\u01CC'
- | '\u01CE'
- | '\u01D0'
- | '\u01D2'
- | '\u01D4'
- | '\u01D6'
- | '\u01D8'
- | '\u01DA'
- | '\u01DC'
- | '\u01DD'
- | '\u01DF'
- | '\u01E1'
- | '\u01E3'
- | '\u01E5'
- | '\u01E7'
- | '\u01E9'
- | '\u01EB'
- | '\u01ED'
- | '\u01EF'
- | '\u01F0'
- | '\u01F3'
- | '\u01F5'
- | '\u01F9'
- | '\u01FB'
- | '\u01FD'
- | '\u01FF'
- | '\u0201'
- | '\u0203'
- | '\u0205'
- | '\u0207'
- | '\u0209'
- | '\u020B'
- | '\u020D'
- | '\u020F'
- | '\u0211'
- | '\u0213'
- | '\u0215'
- | '\u0217'
- | '\u0219'
- | '\u021B'
- | '\u021D'
- | '\u021F'
- | '\u0221'
- | '\u0223'
- | '\u0225'
- | '\u0227'
- | '\u0229'
- | '\u022B'
- | '\u022D'
- | '\u022F'
- | '\u0231'
- | '\u0233' ..'\u0239'
- | '\u023C'
- | '\u023F'
- | '\u0240'
- | '\u0242'
- | '\u0247'
- | '\u0249'
- | '\u024B'
- | '\u024D'
- | '\u024F' ..'\u0293'
- | '\u0295' ..'\u02AF'
- | '\u0371'
- | '\u0373'
- | '\u0377'
- | '\u037B' ..'\u037D'
- | '\u0390'
- | '\u03AC' ..'\u03CE'
- | '\u03D0'
- | '\u03D1'
- | '\u03D5' ..'\u03D7'
- | '\u03D9'
- | '\u03DB'
- | '\u03DD'
- | '\u03DF'
- | '\u03E1'
- | '\u03E3'
- | '\u03E5'
- | '\u03E7'
- | '\u03E9'
- | '\u03EB'
- | '\u03ED'
- | '\u03EF' ..'\u03F3'
- | '\u03F5'
- | '\u03F8'
- | '\u03FB'
- | '\u03FC'
- | '\u0430' ..'\u045F'
- | '\u0461'
- | '\u0463'
- | '\u0465'
- | '\u0467'
- | '\u0469'
- | '\u046B'
- | '\u046D'
- | '\u046F'
- | '\u0471'
- | '\u0473'
- | '\u0475'
- | '\u0477'
- | '\u0479'
- | '\u047B'
- | '\u047D'
- | '\u047F'
- | '\u0481'
- | '\u048B'
- | '\u048D'
- | '\u048F'
- | '\u0491'
- | '\u0493'
- | '\u0495'
- | '\u0497'
- | '\u0499'
- | '\u049B'
- | '\u049D'
- | '\u049F'
- | '\u04A1'
- | '\u04A3'
- | '\u04A5'
- | '\u04A7'
- | '\u04A9'
- | '\u04AB'
- | '\u04AD'
- | '\u04AF'
- | '\u04B1'
- | '\u04B3'
- | '\u04B5'
- | '\u04B7'
- | '\u04B9'
- | '\u04BB'
- | '\u04BD'
- | '\u04BF'
- | '\u04C2'
- | '\u04C4'
- | '\u04C6'
- | '\u04C8'
- | '\u04CA'
- | '\u04CC'
- | '\u04CE'
- | '\u04CF'
- | '\u04D1'
- | '\u04D3'
- | '\u04D5'
- | '\u04D7'
- | '\u04D9'
- | '\u04DB'
- | '\u04DD'
- | '\u04DF'
- | '\u04E1'
- | '\u04E3'
- | '\u04E5'
- | '\u04E7'
- | '\u04E9'
- | '\u04EB'
- | '\u04ED'
- | '\u04EF'
- | '\u04F1'
- | '\u04F3'
- | '\u04F5'
- | '\u04F7'
- | '\u04F9'
- | '\u04FB'
- | '\u04FD'
- | '\u04FF'
- | '\u0501'
- | '\u0503'
- | '\u0505'
- | '\u0507'
- | '\u0509'
- | '\u050B'
- | '\u050D'
- | '\u050F'
- | '\u0511'
- | '\u0513'
- | '\u0515'
- | '\u0517'
- | '\u0519'
- | '\u051B'
- | '\u051D'
- | '\u051F'
- | '\u0521'
- | '\u0523'
- | '\u0525'
- | '\u0527'
- | '\u0561' ..'\u0587'
- | '\u1D00' ..'\u1D2B'
- | '\u1D6B' ..'\u1D77'
- | '\u1D79' ..'\u1D9A'
- | '\u1E01'
- | '\u1E03'
- | '\u1E05'
- | '\u1E07'
- | '\u1E09'
- | '\u1E0B'
- | '\u1E0D'
- | '\u1E0F'
- | '\u1E11'
- | '\u1E13'
- | '\u1E15'
- | '\u1E17'
- | '\u1E19'
- | '\u1E1B'
- | '\u1E1D'
- | '\u1E1F'
- | '\u1E21'
- | '\u1E23'
- | '\u1E25'
- | '\u1E27'
- | '\u1E29'
- | '\u1E2B'
- | '\u1E2D'
- | '\u1E2F'
- | '\u1E31'
- | '\u1E33'
- | '\u1E35'
- | '\u1E37'
- | '\u1E39'
- | '\u1E3B'
- | '\u1E3D'
- | '\u1E3F'
- | '\u1E41'
- | '\u1E43'
- | '\u1E45'
- | '\u1E47'
- | '\u1E49'
- | '\u1E4B'
- | '\u1E4D'
- | '\u1E4F'
- | '\u1E51'
- | '\u1E53'
- | '\u1E55'
- | '\u1E57'
- | '\u1E59'
- | '\u1E5B'
- | '\u1E5D'
- | '\u1E5F'
- | '\u1E61'
- | '\u1E63'
- | '\u1E65'
- | '\u1E67'
- | '\u1E69'
- | '\u1E6B'
- | '\u1E6D'
- | '\u1E6F'
- | '\u1E71'
- | '\u1E73'
- | '\u1E75'
- | '\u1E77'
- | '\u1E79'
- | '\u1E7B'
- | '\u1E7D'
- | '\u1E7F'
- | '\u1E81'
- | '\u1E83'
- | '\u1E85'
- | '\u1E87'
- | '\u1E89'
- | '\u1E8B'
- | '\u1E8D'
- | '\u1E8F'
- | '\u1E91'
- | '\u1E93'
- | '\u1E95' ..'\u1E9D'
- | '\u1E9F'
- | '\u1EA1'
- | '\u1EA3'
- | '\u1EA5'
- | '\u1EA7'
- | '\u1EA9'
- | '\u1EAB'
- | '\u1EAD'
- | '\u1EAF'
- | '\u1EB1'
- | '\u1EB3'
- | '\u1EB5'
- | '\u1EB7'
- | '\u1EB9'
- | '\u1EBB'
- | '\u1EBD'
- | '\u1EBF'
- | '\u1EC1'
- | '\u1EC3'
- | '\u1EC5'
- | '\u1EC7'
- | '\u1EC9'
- | '\u1ECB'
- | '\u1ECD'
- | '\u1ECF'
- | '\u1ED1'
- | '\u1ED3'
- | '\u1ED5'
- | '\u1ED7'
- | '\u1ED9'
- | '\u1EDB'
- | '\u1EDD'
- | '\u1EDF'
- | '\u1EE1'
- | '\u1EE3'
- | '\u1EE5'
- | '\u1EE7'
- | '\u1EE9'
- | '\u1EEB'
- | '\u1EED'
- | '\u1EEF'
- | '\u1EF1'
- | '\u1EF3'
- | '\u1EF5'
- | '\u1EF7'
- | '\u1EF9'
- | '\u1EFB'
- | '\u1EFD'
- | '\u1EFF' ..'\u1F07'
- | '\u1F10' ..'\u1F15'
- | '\u1F20' ..'\u1F27'
- | '\u1F30' ..'\u1F37'
- | '\u1F40' ..'\u1F45'
- | '\u1F50' ..'\u1F57'
- | '\u1F60' ..'\u1F67'
- | '\u1F70' ..'\u1F7D'
- | '\u1F80' ..'\u1F87'
- | '\u1F90' ..'\u1F97'
- | '\u1FA0' ..'\u1FA7'
- | '\u1FB0' ..'\u1FB4'
- | '\u1FB6'
- | '\u1FB7'
- | '\u1FBE'
- | '\u1FC2' ..'\u1FC4'
- | '\u1FC6'
- | '\u1FC7'
- | '\u1FD0' ..'\u1FD3'
- | '\u1FD6'
- | '\u1FD7'
- | '\u1FE0' ..'\u1FE7'
- | '\u1FF2' ..'\u1FF4'
- | '\u1FF6'
- | '\u1FF7'
- | '\u210A'
- | '\u210E'
- | '\u210F'
- | '\u2113'
- | '\u212F'
- | '\u2134'
- | '\u2139'
- | '\u213C'
- | '\u213D'
- | '\u2146' ..'\u2149'
- | '\u214E'
- | '\u2184'
- | '\u2C30' ..'\u2C5E'
- | '\u2C61'
- | '\u2C65'
- | '\u2C66'
- | '\u2C68'
- | '\u2C6A'
- | '\u2C6C'
- | '\u2C71'
- | '\u2C73'
- | '\u2C74'
- | '\u2C76' ..'\u2C7B'
- | '\u2C81'
- | '\u2C83'
- | '\u2C85'
- | '\u2C87'
- | '\u2C89'
- | '\u2C8B'
- | '\u2C8D'
- | '\u2C8F'
- | '\u2C91'
- | '\u2C93'
- | '\u2C95'
- | '\u2C97'
- | '\u2C99'
- | '\u2C9B'
- | '\u2C9D'
- | '\u2C9F'
- | '\u2CA1'
- | '\u2CA3'
- | '\u2CA5'
- | '\u2CA7'
- | '\u2CA9'
- | '\u2CAB'
- | '\u2CAD'
- | '\u2CAF'
- | '\u2CB1'
- | '\u2CB3'
- | '\u2CB5'
- | '\u2CB7'
- | '\u2CB9'
- | '\u2CBB'
- | '\u2CBD'
- | '\u2CBF'
- | '\u2CC1'
- | '\u2CC3'
- | '\u2CC5'
- | '\u2CC7'
- | '\u2CC9'
- | '\u2CCB'
- | '\u2CCD'
- | '\u2CCF'
- | '\u2CD1'
- | '\u2CD3'
- | '\u2CD5'
- | '\u2CD7'
- | '\u2CD9'
- | '\u2CDB'
- | '\u2CDD'
- | '\u2CDF'
- | '\u2CE1'
- | '\u2CE3'
- | '\u2CE4'
- | '\u2CEC'
- | '\u2CEE'
- | '\u2CF3'
- | '\u2D00' ..'\u2D25'
- | '\u2D27'
- | '\u2D2D'
- | '\uA641'
- | '\uA643'
- | '\uA645'
- | '\uA647'
- | '\uA649'
- | '\uA64B'
- | '\uA64D'
- | '\uA64F'
- | '\uA651'
- | '\uA653'
- | '\uA655'
- | '\uA657'
- | '\uA659'
- | '\uA65B'
- | '\uA65D'
- | '\uA65F'
- | '\uA661'
- | '\uA663'
- | '\uA665'
- | '\uA667'
- | '\uA669'
- | '\uA66B'
- | '\uA66D'
- | '\uA681'
- | '\uA683'
- | '\uA685'
- | '\uA687'
- | '\uA689'
- | '\uA68B'
- | '\uA68D'
- | '\uA68F'
- | '\uA691'
- | '\uA693'
- | '\uA695'
- | '\uA697'
- | '\uA723'
- | '\uA725'
- | '\uA727'
- | '\uA729'
- | '\uA72B'
- | '\uA72D'
- | '\uA72F' ..'\uA731'
- | '\uA733'
- | '\uA735'
- | '\uA737'
- | '\uA739'
- | '\uA73B'
- | '\uA73D'
- | '\uA73F'
- | '\uA741'
- | '\uA743'
- | '\uA745'
- | '\uA747'
- | '\uA749'
- | '\uA74B'
- | '\uA74D'
- | '\uA74F'
- | '\uA751'
- | '\uA753'
- | '\uA755'
- | '\uA757'
- | '\uA759'
- | '\uA75B'
- | '\uA75D'
- | '\uA75F'
- | '\uA761'
- | '\uA763'
- | '\uA765'
- | '\uA767'
- | '\uA769'
- | '\uA76B'
- | '\uA76D'
- | '\uA76F'
- | '\uA771' ..'\uA778'
- | '\uA77A'
- | '\uA77C'
- | '\uA77F'
- | '\uA781'
- | '\uA783'
- | '\uA785'
- | '\uA787'
- | '\uA78C'
- | '\uA78E'
- | '\uA791'
- | '\uA793'
- | '\uA7A1'
- | '\uA7A3'
- | '\uA7A5'
- | '\uA7A7'
- | '\uA7A9'
- | '\uA7FA'
- | '\uFB00' ..'\uFB06'
- | '\uFB13' ..'\uFB17'
- | '\uFF41' ..'\uFF5A'
-;
-
-UNICODE_CLASS_LM:
- '\u02B0' ..'\u02C1'
- | '\u02C6' ..'\u02D1'
- | '\u02E0' ..'\u02E4'
- | '\u02EC'
- | '\u02EE'
- | '\u0374'
- | '\u037A'
- | '\u0559'
- | '\u0640'
- | '\u06E5'
- | '\u06E6'
- | '\u07F4'
- | '\u07F5'
- | '\u07FA'
- | '\u081A'
- | '\u0824'
- | '\u0828'
- | '\u0971'
- | '\u0E46'
- | '\u0EC6'
- | '\u10FC'
- | '\u17D7'
- | '\u1843'
- | '\u1AA7'
- | '\u1C78' ..'\u1C7D'
- | '\u1D2C' ..'\u1D6A'
- | '\u1D78'
- | '\u1D9B' ..'\u1DBF'
- | '\u2071'
- | '\u207F'
- | '\u2090' ..'\u209C'
- | '\u2C7C'
- | '\u2C7D'
- | '\u2D6F'
- | '\u2E2F'
- | '\u3005'
- | '\u3031' ..'\u3035'
- | '\u303B'
- | '\u309D'
- | '\u309E'
- | '\u30FC' ..'\u30FE'
- | '\uA015'
- | '\uA4F8' ..'\uA4FD'
- | '\uA60C'
- | '\uA67F'
- | '\uA717' ..'\uA71F'
- | '\uA770'
- | '\uA788'
- | '\uA7F8'
- | '\uA7F9'
- | '\uA9CF'
- | '\uAA70'
- | '\uAADD'
- | '\uAAF3'
- | '\uAAF4'
- | '\uFF70'
- | '\uFF9E'
- | '\uFF9F'
-;
-
-UNICODE_CLASS_LO:
- '\u00AA'
- | '\u00BA'
- | '\u01BB'
- | '\u01C0' ..'\u01C3'
- | '\u0294'
- | '\u05D0' ..'\u05EA'
- | '\u05F0' ..'\u05F2'
- | '\u0620' ..'\u063F'
- | '\u0641' ..'\u064A'
- | '\u066E'
- | '\u066F'
- | '\u0671' ..'\u06D3'
- | '\u06D5'
- | '\u06EE'
- | '\u06EF'
- | '\u06FA' ..'\u06FC'
- | '\u06FF'
- | '\u0710'
- | '\u0712' ..'\u072F'
- | '\u074D' ..'\u07A5'
- | '\u07B1'
- | '\u07CA' ..'\u07EA'
- | '\u0800' ..'\u0815'
- | '\u0840' ..'\u0858'
- | '\u08A0'
- | '\u08A2' ..'\u08AC'
- | '\u0904' ..'\u0939'
- | '\u093D'
- | '\u0950'
- | '\u0958' ..'\u0961'
- | '\u0972' ..'\u0977'
- | '\u0979' ..'\u097F'
- | '\u0985' ..'\u098C'
- | '\u098F'
- | '\u0990'
- | '\u0993' ..'\u09A8'
- | '\u09AA' ..'\u09B0'
- | '\u09B2'
- | '\u09B6' ..'\u09B9'
- | '\u09BD'
- | '\u09CE'
- | '\u09DC'
- | '\u09DD'
- | '\u09DF' ..'\u09E1'
- | '\u09F0'
- | '\u09F1'
- | '\u0A05' ..'\u0A0A'
- | '\u0A0F'
- | '\u0A10'
- | '\u0A13' ..'\u0A28'
- | '\u0A2A' ..'\u0A30'
- | '\u0A32'
- | '\u0A33'
- | '\u0A35'
- | '\u0A36'
- | '\u0A38'
- | '\u0A39'
- | '\u0A59' ..'\u0A5C'
- | '\u0A5E'
- | '\u0A72' ..'\u0A74'
- | '\u0A85' ..'\u0A8D'
- | '\u0A8F' ..'\u0A91'
- | '\u0A93' ..'\u0AA8'
- | '\u0AAA' ..'\u0AB0'
- | '\u0AB2'
- | '\u0AB3'
- | '\u0AB5' ..'\u0AB9'
- | '\u0ABD'
- | '\u0AD0'
- | '\u0AE0'
- | '\u0AE1'
- | '\u0B05' ..'\u0B0C'
- | '\u0B0F'
- | '\u0B10'
- | '\u0B13' ..'\u0B28'
- | '\u0B2A' ..'\u0B30'
- | '\u0B32'
- | '\u0B33'
- | '\u0B35' ..'\u0B39'
- | '\u0B3D'
- | '\u0B5C'
- | '\u0B5D'
- | '\u0B5F' ..'\u0B61'
- | '\u0B71'
- | '\u0B83'
- | '\u0B85' ..'\u0B8A'
- | '\u0B8E' ..'\u0B90'
- | '\u0B92' ..'\u0B95'
- | '\u0B99'
- | '\u0B9A'
- | '\u0B9C'
- | '\u0B9E'
- | '\u0B9F'
- | '\u0BA3'
- | '\u0BA4'
- | '\u0BA8' ..'\u0BAA'
- | '\u0BAE' ..'\u0BB9'
- | '\u0BD0'
- | '\u0C05' ..'\u0C0C'
- | '\u0C0E' ..'\u0C10'
- | '\u0C12' ..'\u0C28'
- | '\u0C2A' ..'\u0C33'
- | '\u0C35' ..'\u0C39'
- | '\u0C3D'
- | '\u0C58'
- | '\u0C59'
- | '\u0C60'
- | '\u0C61'
- | '\u0C85' ..'\u0C8C'
- | '\u0C8E' ..'\u0C90'
- | '\u0C92' ..'\u0CA8'
- | '\u0CAA' ..'\u0CB3'
- | '\u0CB5' ..'\u0CB9'
- | '\u0CBD'
- | '\u0CDE'
- | '\u0CE0'
- | '\u0CE1'
- | '\u0CF1'
- | '\u0CF2'
- | '\u0D05' ..'\u0D0C'
- | '\u0D0E' ..'\u0D10'
- | '\u0D12' ..'\u0D3A'
- | '\u0D3D'
- | '\u0D4E'
- | '\u0D60'
- | '\u0D61'
- | '\u0D7A' ..'\u0D7F'
- | '\u0D85' ..'\u0D96'
- | '\u0D9A' ..'\u0DB1'
- | '\u0DB3' ..'\u0DBB'
- | '\u0DBD'
- | '\u0DC0' ..'\u0DC6'
- | '\u0E01' ..'\u0E30'
- | '\u0E32'
- | '\u0E33'
- | '\u0E40' ..'\u0E45'
- | '\u0E81'
- | '\u0E82'
- | '\u0E84'
- | '\u0E87'
- | '\u0E88'
- | '\u0E8A'
- | '\u0E8D'
- | '\u0E94' ..'\u0E97'
- | '\u0E99' ..'\u0E9F'
- | '\u0EA1' ..'\u0EA3'
- | '\u0EA5'
- | '\u0EA7'
- | '\u0EAA'
- | '\u0EAB'
- | '\u0EAD' ..'\u0EB0'
- | '\u0EB2'
- | '\u0EB3'
- | '\u0EBD'
- | '\u0EC0' ..'\u0EC4'
- | '\u0EDC' ..'\u0EDF'
- | '\u0F00'
- | '\u0F40' ..'\u0F47'
- | '\u0F49' ..'\u0F6C'
- | '\u0F88' ..'\u0F8C'
- | '\u1000' ..'\u102A'
- | '\u103F'
- | '\u1050' ..'\u1055'
- | '\u105A' ..'\u105D'
- | '\u1061'
- | '\u1065'
- | '\u1066'
- | '\u106E' ..'\u1070'
- | '\u1075' ..'\u1081'
- | '\u108E'
- | '\u10D0' ..'\u10FA'
- | '\u10FD' ..'\u1248'
- | '\u124A' ..'\u124D'
- | '\u1250' ..'\u1256'
- | '\u1258'
- | '\u125A' ..'\u125D'
- | '\u1260' ..'\u1288'
- | '\u128A' ..'\u128D'
- | '\u1290' ..'\u12B0'
- | '\u12B2' ..'\u12B5'
- | '\u12B8' ..'\u12BE'
- | '\u12C0'
- | '\u12C2' ..'\u12C5'
- | '\u12C8' ..'\u12D6'
- | '\u12D8' ..'\u1310'
- | '\u1312' ..'\u1315'
- | '\u1318' ..'\u135A'
- | '\u1380' ..'\u138F'
- | '\u13A0' ..'\u13F4'
- | '\u1401' ..'\u166C'
- | '\u166F' ..'\u167F'
- | '\u1681' ..'\u169A'
- | '\u16A0' ..'\u16EA'
- | '\u1700' ..'\u170C'
- | '\u170E' ..'\u1711'
- | '\u1720' ..'\u1731'
- | '\u1740' ..'\u1751'
- | '\u1760' ..'\u176C'
- | '\u176E' ..'\u1770'
- | '\u1780' ..'\u17B3'
- | '\u17DC'
- | '\u1820' ..'\u1842'
- | '\u1844' ..'\u1877'
- | '\u1880' ..'\u18A8'
- | '\u18AA'
- | '\u18B0' ..'\u18F5'
- | '\u1900' ..'\u191C'
- | '\u1950' ..'\u196D'
- | '\u1970' ..'\u1974'
- | '\u1980' ..'\u19AB'
- | '\u19C1' ..'\u19C7'
- | '\u1A00' ..'\u1A16'
- | '\u1A20' ..'\u1A54'
- | '\u1B05' ..'\u1B33'
- | '\u1B45' ..'\u1B4B'
- | '\u1B83' ..'\u1BA0'
- | '\u1BAE'
- | '\u1BAF'
- | '\u1BBA' ..'\u1BE5'
- | '\u1C00' ..'\u1C23'
- | '\u1C4D' ..'\u1C4F'
- | '\u1C5A' ..'\u1C77'
- | '\u1CE9' ..'\u1CEC'
- | '\u1CEE' ..'\u1CF1'
- | '\u1CF5'
- | '\u1CF6'
- | '\u2135' ..'\u2138'
- | '\u2D30' ..'\u2D67'
- | '\u2D80' ..'\u2D96'
- | '\u2DA0' ..'\u2DA6'
- | '\u2DA8' ..'\u2DAE'
- | '\u2DB0' ..'\u2DB6'
- | '\u2DB8' ..'\u2DBE'
- | '\u2DC0' ..'\u2DC6'
- | '\u2DC8' ..'\u2DCE'
- | '\u2DD0' ..'\u2DD6'
- | '\u2DD8' ..'\u2DDE'
- | '\u3006'
- | '\u303C'
- | '\u3041' ..'\u3096'
- | '\u309F'
- | '\u30A1' ..'\u30FA'
- | '\u30FF'
- | '\u3105' ..'\u312D'
- | '\u3131' ..'\u318E'
- | '\u31A0' ..'\u31BA'
- | '\u31F0' ..'\u31FF'
- | '\u3400' ..'\u4DB5'
- | '\u4E00' ..'\u9FCC'
- | '\uA000' ..'\uA014'
- | '\uA016' ..'\uA48C'
- | '\uA4D0' ..'\uA4F7'
- | '\uA500' ..'\uA60B'
- | '\uA610' ..'\uA61F'
- | '\uA62A'
- | '\uA62B'
- | '\uA66E'
- | '\uA6A0' ..'\uA6E5'
- | '\uA7FB' ..'\uA801'
- | '\uA803' ..'\uA805'
- | '\uA807' ..'\uA80A'
- | '\uA80C' ..'\uA822'
- | '\uA840' ..'\uA873'
- | '\uA882' ..'\uA8B3'
- | '\uA8F2' ..'\uA8F7'
- | '\uA8FB'
- | '\uA90A' ..'\uA925'
- | '\uA930' ..'\uA946'
- | '\uA960' ..'\uA97C'
- | '\uA984' ..'\uA9B2'
- | '\uAA00' ..'\uAA28'
- | '\uAA40' ..'\uAA42'
- | '\uAA44' ..'\uAA4B'
- | '\uAA60' ..'\uAA6F'
- | '\uAA71' ..'\uAA76'
- | '\uAA7A'
- | '\uAA80' ..'\uAAAF'
- | '\uAAB1'
- | '\uAAB5'
- | '\uAAB6'
- | '\uAAB9' ..'\uAABD'
- | '\uAAC0'
- | '\uAAC2'
- | '\uAADB'
- | '\uAADC'
- | '\uAAE0' ..'\uAAEA'
- | '\uAAF2'
- | '\uAB01' ..'\uAB06'
- | '\uAB09' ..'\uAB0E'
- | '\uAB11' ..'\uAB16'
- | '\uAB20' ..'\uAB26'
- | '\uAB28' ..'\uAB2E'
- | '\uABC0' ..'\uABE2'
- | '\uAC00'
- | '\uD7A3'
- | '\uD7B0' ..'\uD7C6'
- | '\uD7CB' ..'\uD7FB'
- | '\uF900' ..'\uFA6D'
- | '\uFA70' ..'\uFAD9'
- | '\uFB1D'
- | '\uFB1F' ..'\uFB28'
- | '\uFB2A' ..'\uFB36'
- | '\uFB38' ..'\uFB3C'
- | '\uFB3E'
- | '\uFB40'
- | '\uFB41'
- | '\uFB43'
- | '\uFB44'
- | '\uFB46' ..'\uFBB1'
- | '\uFBD3' ..'\uFD3D'
- | '\uFD50' ..'\uFD8F'
- | '\uFD92' ..'\uFDC7'
- | '\uFDF0' ..'\uFDFB'
- | '\uFE70' ..'\uFE74'
- | '\uFE76' ..'\uFEFC'
- | '\uFF66' ..'\uFF6F'
- | '\uFF71' ..'\uFF9D'
- | '\uFFA0' ..'\uFFBE'
- | '\uFFC2' ..'\uFFC7'
- | '\uFFCA' ..'\uFFCF'
- | '\uFFD2' ..'\uFFD7'
- | '\uFFDA' ..'\uFFDC'
-;
-
-UNICODE_CLASS_LT:
- '\u01C5'
- | '\u01C8'
- | '\u01CB'
- | '\u01F2'
- | '\u1F88' ..'\u1F8F'
- | '\u1F98' ..'\u1F9F'
- | '\u1FA8' ..'\u1FAF'
- | '\u1FBC'
- | '\u1FCC'
- | '\u1FFC'
-;
-
-UNICODE_CLASS_LU:
- '\u0041' ..'\u005A'
- | '\u00C0' ..'\u00D6'
- | '\u00D8' ..'\u00DE'
- | '\u0100'
- | '\u0102'
- | '\u0104'
- | '\u0106'
- | '\u0108'
- | '\u010A'
- | '\u010C'
- | '\u010E'
- | '\u0110'
- | '\u0112'
- | '\u0114'
- | '\u0116'
- | '\u0118'
- | '\u011A'
- | '\u011C'
- | '\u011E'
- | '\u0120'
- | '\u0122'
- | '\u0124'
- | '\u0126'
- | '\u0128'
- | '\u012A'
- | '\u012C'
- | '\u012E'
- | '\u0130'
- | '\u0132'
- | '\u0134'
- | '\u0136'
- | '\u0139'
- | '\u013B'
- | '\u013D'
- | '\u013F'
- | '\u0141'
- | '\u0143'
- | '\u0145'
- | '\u0147'
- | '\u014A'
- | '\u014C'
- | '\u014E'
- | '\u0150'
- | '\u0152'
- | '\u0154'
- | '\u0156'
- | '\u0158'
- | '\u015A'
- | '\u015C'
- | '\u015E'
- | '\u0160'
- | '\u0162'
- | '\u0164'
- | '\u0166'
- | '\u0168'
- | '\u016A'
- | '\u016C'
- | '\u016E'
- | '\u0170'
- | '\u0172'
- | '\u0174'
- | '\u0176'
- | '\u0178'
- | '\u0179'
- | '\u017B'
- | '\u017D'
- | '\u0181'
- | '\u0182'
- | '\u0184'
- | '\u0186'
- | '\u0187'
- | '\u0189' ..'\u018B'
- | '\u018E' ..'\u0191'
- | '\u0193'
- | '\u0194'
- | '\u0196' ..'\u0198'
- | '\u019C'
- | '\u019D'
- | '\u019F'
- | '\u01A0'
- | '\u01A2'
- | '\u01A4'
- | '\u01A6'
- | '\u01A7'
- | '\u01A9'
- | '\u01AC'
- | '\u01AE'
- | '\u01AF'
- | '\u01B1' ..'\u01B3'
- | '\u01B5'
- | '\u01B7'
- | '\u01B8'
- | '\u01BC'
- | '\u01C4'
- | '\u01C7'
- | '\u01CA'
- | '\u01CD'
- | '\u01CF'
- | '\u01D1'
- | '\u01D3'
- | '\u01D5'
- | '\u01D7'
- | '\u01D9'
- | '\u01DB'
- | '\u01DE'
- | '\u01E0'
- | '\u01E2'
- | '\u01E4'
- | '\u01E6'
- | '\u01E8'
- | '\u01EA'
- | '\u01EC'
- | '\u01EE'
- | '\u01F1'
- | '\u01F4'
- | '\u01F6' ..'\u01F8'
- | '\u01FA'
- | '\u01FC'
- | '\u01FE'
- | '\u0200'
- | '\u0202'
- | '\u0204'
- | '\u0206'
- | '\u0208'
- | '\u020A'
- | '\u020C'
- | '\u020E'
- | '\u0210'
- | '\u0212'
- | '\u0214'
- | '\u0216'
- | '\u0218'
- | '\u021A'
- | '\u021C'
- | '\u021E'
- | '\u0220'
- | '\u0222'
- | '\u0224'
- | '\u0226'
- | '\u0228'
- | '\u022A'
- | '\u022C'
- | '\u022E'
- | '\u0230'
- | '\u0232'
- | '\u023A'
- | '\u023B'
- | '\u023D'
- | '\u023E'
- | '\u0241'
- | '\u0243' ..'\u0246'
- | '\u0248'
- | '\u024A'
- | '\u024C'
- | '\u024E'
- | '\u0370'
- | '\u0372'
- | '\u0376'
- | '\u0386'
- | '\u0388' ..'\u038A'
- | '\u038C'
- | '\u038E'
- | '\u038F'
- | '\u0391' ..'\u03A1'
- | '\u03A3' ..'\u03AB'
- | '\u03CF'
- | '\u03D2' ..'\u03D4'
- | '\u03D8'
- | '\u03DA'
- | '\u03DC'
- | '\u03DE'
- | '\u03E0'
- | '\u03E2'
- | '\u03E4'
- | '\u03E6'
- | '\u03E8'
- | '\u03EA'
- | '\u03EC'
- | '\u03EE'
- | '\u03F4'
- | '\u03F7'
- | '\u03F9'
- | '\u03FA'
- | '\u03FD' ..'\u042F'
- | '\u0460'
- | '\u0462'
- | '\u0464'
- | '\u0466'
- | '\u0468'
- | '\u046A'
- | '\u046C'
- | '\u046E'
- | '\u0470'
- | '\u0472'
- | '\u0474'
- | '\u0476'
- | '\u0478'
- | '\u047A'
- | '\u047C'
- | '\u047E'
- | '\u0480'
- | '\u048A'
- | '\u048C'
- | '\u048E'
- | '\u0490'
- | '\u0492'
- | '\u0494'
- | '\u0496'
- | '\u0498'
- | '\u049A'
- | '\u049C'
- | '\u049E'
- | '\u04A0'
- | '\u04A2'
- | '\u04A4'
- | '\u04A6'
- | '\u04A8'
- | '\u04AA'
- | '\u04AC'
- | '\u04AE'
- | '\u04B0'
- | '\u04B2'
- | '\u04B4'
- | '\u04B6'
- | '\u04B8'
- | '\u04BA'
- | '\u04BC'
- | '\u04BE'
- | '\u04C0'
- | '\u04C1'
- | '\u04C3'
- | '\u04C5'
- | '\u04C7'
- | '\u04C9'
- | '\u04CB'
- | '\u04CD'
- | '\u04D0'
- | '\u04D2'
- | '\u04D4'
- | '\u04D6'
- | '\u04D8'
- | '\u04DA'
- | '\u04DC'
- | '\u04DE'
- | '\u04E0'
- | '\u04E2'
- | '\u04E4'
- | '\u04E6'
- | '\u04E8'
- | '\u04EA'
- | '\u04EC'
- | '\u04EE'
- | '\u04F0'
- | '\u04F2'
- | '\u04F4'
- | '\u04F6'
- | '\u04F8'
- | '\u04FA'
- | '\u04FC'
- | '\u04FE'
- | '\u0500'
- | '\u0502'
- | '\u0504'
- | '\u0506'
- | '\u0508'
- | '\u050A'
- | '\u050C'
- | '\u050E'
- | '\u0510'
- | '\u0512'
- | '\u0514'
- | '\u0516'
- | '\u0518'
- | '\u051A'
- | '\u051C'
- | '\u051E'
- | '\u0520'
- | '\u0522'
- | '\u0524'
- | '\u0526'
- | '\u0531' ..'\u0556'
- | '\u10A0' ..'\u10C5'
- | '\u10C7'
- | '\u10CD'
- | '\u1E00'
- | '\u1E02'
- | '\u1E04'
- | '\u1E06'
- | '\u1E08'
- | '\u1E0A'
- | '\u1E0C'
- | '\u1E0E'
- | '\u1E10'
- | '\u1E12'
- | '\u1E14'
- | '\u1E16'
- | '\u1E18'
- | '\u1E1A'
- | '\u1E1C'
- | '\u1E1E'
- | '\u1E20'
- | '\u1E22'
- | '\u1E24'
- | '\u1E26'
- | '\u1E28'
- | '\u1E2A'
- | '\u1E2C'
- | '\u1E2E'
- | '\u1E30'
- | '\u1E32'
- | '\u1E34'
- | '\u1E36'
- | '\u1E38'
- | '\u1E3A'
- | '\u1E3C'
- | '\u1E3E'
- | '\u1E40'
- | '\u1E42'
- | '\u1E44'
- | '\u1E46'
- | '\u1E48'
- | '\u1E4A'
- | '\u1E4C'
- | '\u1E4E'
- | '\u1E50'
- | '\u1E52'
- | '\u1E54'
- | '\u1E56'
- | '\u1E58'
- | '\u1E5A'
- | '\u1E5C'
- | '\u1E5E'
- | '\u1E60'
- | '\u1E62'
- | '\u1E64'
- | '\u1E66'
- | '\u1E68'
- | '\u1E6A'
- | '\u1E6C'
- | '\u1E6E'
- | '\u1E70'
- | '\u1E72'
- | '\u1E74'
- | '\u1E76'
- | '\u1E78'
- | '\u1E7A'
- | '\u1E7C'
- | '\u1E7E'
- | '\u1E80'
- | '\u1E82'
- | '\u1E84'
- | '\u1E86'
- | '\u1E88'
- | '\u1E8A'
- | '\u1E8C'
- | '\u1E8E'
- | '\u1E90'
- | '\u1E92'
- | '\u1E94'
- | '\u1E9E'
- | '\u1EA0'
- | '\u1EA2'
- | '\u1EA4'
- | '\u1EA6'
- | '\u1EA8'
- | '\u1EAA'
- | '\u1EAC'
- | '\u1EAE'
- | '\u1EB0'
- | '\u1EB2'
- | '\u1EB4'
- | '\u1EB6'
- | '\u1EB8'
- | '\u1EBA'
- | '\u1EBC'
- | '\u1EBE'
- | '\u1EC0'
- | '\u1EC2'
- | '\u1EC4'
- | '\u1EC6'
- | '\u1EC8'
- | '\u1ECA'
- | '\u1ECC'
- | '\u1ECE'
- | '\u1ED0'
- | '\u1ED2'
- | '\u1ED4'
- | '\u1ED6'
- | '\u1ED8'
- | '\u1EDA'
- | '\u1EDC'
- | '\u1EDE'
- | '\u1EE0'
- | '\u1EE2'
- | '\u1EE4'
- | '\u1EE6'
- | '\u1EE8'
- | '\u1EEA'
- | '\u1EEC'
- | '\u1EEE'
- | '\u1EF0'
- | '\u1EF2'
- | '\u1EF4'
- | '\u1EF6'
- | '\u1EF8'
- | '\u1EFA'
- | '\u1EFC'
- | '\u1EFE'
- | '\u1F08' ..'\u1F0F'
- | '\u1F18' ..'\u1F1D'
- | '\u1F28' ..'\u1F2F'
- | '\u1F38' ..'\u1F3F'
- | '\u1F48' ..'\u1F4D'
- | '\u1F59'
- | '\u1F5B'
- | '\u1F5D'
- | '\u1F5F'
- | '\u1F68' ..'\u1F6F'
- | '\u1FB8' ..'\u1FBB'
- | '\u1FC8' ..'\u1FCB'
- | '\u1FD8' ..'\u1FDB'
- | '\u1FE8' ..'\u1FEC'
- | '\u1FF8' ..'\u1FFB'
- | '\u2102'
- | '\u2107'
- | '\u210B' ..'\u210D'
- | '\u2110' ..'\u2112'
- | '\u2115'
- | '\u2119' ..'\u211D'
- | '\u2124'
- | '\u2126'
- | '\u2128'
- | '\u212A' ..'\u212D'
- | '\u2130' ..'\u2133'
- | '\u213E'
- | '\u213F'
- | '\u2145'
- | '\u2183'
- | '\u2C00' ..'\u2C2E'
- | '\u2C60'
- | '\u2C62' ..'\u2C64'
- | '\u2C67'
- | '\u2C69'
- | '\u2C6B'
- | '\u2C6D' ..'\u2C70'
- | '\u2C72'
- | '\u2C75'
- | '\u2C7E' ..'\u2C80'
- | '\u2C82'
- | '\u2C84'
- | '\u2C86'
- | '\u2C88'
- | '\u2C8A'
- | '\u2C8C'
- | '\u2C8E'
- | '\u2C90'
- | '\u2C92'
- | '\u2C94'
- | '\u2C96'
- | '\u2C98'
- | '\u2C9A'
- | '\u2C9C'
- | '\u2C9E'
- | '\u2CA0'
- | '\u2CA2'
- | '\u2CA4'
- | '\u2CA6'
- | '\u2CA8'
- | '\u2CAA'
- | '\u2CAC'
- | '\u2CAE'
- | '\u2CB0'
- | '\u2CB2'
- | '\u2CB4'
- | '\u2CB6'
- | '\u2CB8'
- | '\u2CBA'
- | '\u2CBC'
- | '\u2CBE'
- | '\u2CC0'
- | '\u2CC2'
- | '\u2CC4'
- | '\u2CC6'
- | '\u2CC8'
- | '\u2CCA'
- | '\u2CCC'
- | '\u2CCE'
- | '\u2CD0'
- | '\u2CD2'
- | '\u2CD4'
- | '\u2CD6'
- | '\u2CD8'
- | '\u2CDA'
- | '\u2CDC'
- | '\u2CDE'
- | '\u2CE0'
- | '\u2CE2'
- | '\u2CEB'
- | '\u2CED'
- | '\u2CF2'
- | '\uA640'
- | '\uA642'
- | '\uA644'
- | '\uA646'
- | '\uA648'
- | '\uA64A'
- | '\uA64C'
- | '\uA64E'
- | '\uA650'
- | '\uA652'
- | '\uA654'
- | '\uA656'
- | '\uA658'
- | '\uA65A'
- | '\uA65C'
- | '\uA65E'
- | '\uA660'
- | '\uA662'
- | '\uA664'
- | '\uA666'
- | '\uA668'
- | '\uA66A'
- | '\uA66C'
- | '\uA680'
- | '\uA682'
- | '\uA684'
- | '\uA686'
- | '\uA688'
- | '\uA68A'
- | '\uA68C'
- | '\uA68E'
- | '\uA690'
- | '\uA692'
- | '\uA694'
- | '\uA696'
- | '\uA722'
- | '\uA724'
- | '\uA726'
- | '\uA728'
- | '\uA72A'
- | '\uA72C'
- | '\uA72E'
- | '\uA732'
- | '\uA734'
- | '\uA736'
- | '\uA738'
- | '\uA73A'
- | '\uA73C'
- | '\uA73E'
- | '\uA740'
- | '\uA742'
- | '\uA744'
- | '\uA746'
- | '\uA748'
- | '\uA74A'
- | '\uA74C'
- | '\uA74E'
- | '\uA750'
- | '\uA752'
- | '\uA754'
- | '\uA756'
- | '\uA758'
- | '\uA75A'
- | '\uA75C'
- | '\uA75E'
- | '\uA760'
- | '\uA762'
- | '\uA764'
- | '\uA766'
- | '\uA768'
- | '\uA76A'
- | '\uA76C'
- | '\uA76E'
- | '\uA779'
- | '\uA77B'
- | '\uA77D'
- | '\uA77E'
- | '\uA780'
- | '\uA782'
- | '\uA784'
- | '\uA786'
- | '\uA78B'
- | '\uA78D'
- | '\uA790'
- | '\uA792'
- | '\uA7A0'
- | '\uA7A2'
- | '\uA7A4'
- | '\uA7A6'
- | '\uA7A8'
- | '\uA7AA'
- | '\uFF21' ..'\uFF3A'
-;
-
-UNICODE_CLASS_ND:
- '\u0030' ..'\u0039'
- | '\u0660' ..'\u0669'
- | '\u06F0' ..'\u06F9'
- | '\u07C0' ..'\u07C9'
- | '\u0966' ..'\u096F'
- | '\u09E6' ..'\u09EF'
- | '\u0A66' ..'\u0A6F'
- | '\u0AE6' ..'\u0AEF'
- | '\u0B66' ..'\u0B6F'
- | '\u0BE6' ..'\u0BEF'
- | '\u0C66' ..'\u0C6F'
- | '\u0CE6' ..'\u0CEF'
- | '\u0D66' ..'\u0D6F'
- | '\u0E50' ..'\u0E59'
- | '\u0ED0' ..'\u0ED9'
- | '\u0F20' ..'\u0F29'
- | '\u1040' ..'\u1049'
- | '\u1090' ..'\u1099'
- | '\u17E0' ..'\u17E9'
- | '\u1810' ..'\u1819'
- | '\u1946' ..'\u194F'
- | '\u19D0' ..'\u19D9'
- | '\u1A80' ..'\u1A89'
- | '\u1A90' ..'\u1A99'
- | '\u1B50' ..'\u1B59'
- | '\u1BB0' ..'\u1BB9'
- | '\u1C40' ..'\u1C49'
- | '\u1C50' ..'\u1C59'
- | '\uA620' ..'\uA629'
- | '\uA8D0' ..'\uA8D9'
- | '\uA900' ..'\uA909'
- | '\uA9D0' ..'\uA9D9'
- | '\uAA50' ..'\uAA59'
- | '\uABF0' ..'\uABF9'
- | '\uFF10' ..'\uFF19'
-;
-
-UNICODE_CLASS_NL:
- '\u16EE' ..'\u16F0'
- | '\u2160' ..'\u2182'
- | '\u2185' ..'\u2188'
- | '\u3007'
- | '\u3021' ..'\u3029'
- | '\u3038' ..'\u303A'
- | '\uA6E6' ..'\uA6EF'
-;
\ No newline at end of file
diff --git a/src/main/antlr4/io/github/randomcodespace/iq/grammar/cpp/CPP14Lexer.g4 b/src/main/antlr4/io/github/randomcodespace/iq/grammar/cpp/CPP14Lexer.g4
deleted file mode 100644
index 1c646393..00000000
--- a/src/main/antlr4/io/github/randomcodespace/iq/grammar/cpp/CPP14Lexer.g4
+++ /dev/null
@@ -1,398 +0,0 @@
-// $antlr-format alignTrailingComments true, columnLimit 150, maxEmptyLinesToKeep 1, reflowComments false, useTab false
-// $antlr-format allowShortRulesOnASingleLine true, allowShortBlocksOnASingleLine true, minEmptyLines 0, alignSemicolons ownLine
-// $antlr-format alignColons trailing, singleLineOverrulesHangingColon true, alignLexerCommands true, alignLabels true, alignTrailers true
-
-lexer grammar CPP14Lexer;
-
-IntegerLiteral:
- DecimalLiteral Integersuffix?
- | OctalLiteral Integersuffix?
- | HexadecimalLiteral Integersuffix?
- | BinaryLiteral Integersuffix?
-;
-
-CharacterLiteral: ('u' | 'U' | 'L')? '\'' Cchar+ '\'';
-
-FloatingLiteral:
- Fractionalconstant Exponentpart? Floatingsuffix?
- | Digitsequence Exponentpart Floatingsuffix?
-;
-
-StringLiteral: Encodingprefix? (Rawstring | '"' Schar* '"');
-
-BooleanLiteral: False_ | True_;
-
-PointerLiteral: Nullptr;
-
-UserDefinedLiteral:
- UserDefinedIntegerLiteral
- | UserDefinedFloatingLiteral
- | UserDefinedStringLiteral
- | UserDefinedCharacterLiteral
-;
-
-MultiLineMacro: '#' (~[\n]*? '\\' '\r'? '\n')+ ~ [\n]+ -> channel (HIDDEN);
-
-Directive: '#' ~ [\n]* -> channel (HIDDEN);
-/*Keywords*/
-
-Alignas: 'alignas';
-
-Alignof: 'alignof';
-
-Asm: 'asm';
-
-Auto: 'auto';
-
-Bool: 'bool';
-
-Break: 'break';
-
-Case: 'case';
-
-Catch: 'catch';
-
-Char: 'char';
-
-Char16: 'char16_t';
-
-Char32: 'char32_t';
-
-Class: 'class';
-
-Const: 'const';
-
-Constexpr: 'constexpr';
-
-Const_cast: 'const_cast';
-
-Continue: 'continue';
-
-Decltype: 'decltype';
-
-Default: 'default';
-
-Delete: 'delete';
-
-Do: 'do';
-
-Double: 'double';
-
-Dynamic_cast: 'dynamic_cast';
-
-Else: 'else';
-
-Enum: 'enum';
-
-Explicit: 'explicit';
-
-Export: 'export';
-
-Extern: 'extern';
-
-//DO NOT RENAME - PYTHON NEEDS True and False
-False_: 'false';
-
-Final: 'final';
-
-Float: 'float';
-
-For: 'for';
-
-Friend: 'friend';
-
-Goto: 'goto';
-
-If: 'if';
-
-Inline: 'inline';
-
-Int: 'int';
-
-Long: 'long';
-
-Mutable: 'mutable';
-
-Namespace: 'namespace';
-
-New: 'new';
-
-Noexcept: 'noexcept';
-
-Nullptr: 'nullptr';
-
-Operator: 'operator';
-
-Override: 'override';
-
-Private: 'private';
-
-Protected: 'protected';
-
-Public: 'public';
-
-Register: 'register';
-
-Reinterpret_cast: 'reinterpret_cast';
-
-Return: 'return';
-
-Short: 'short';
-
-Signed: 'signed';
-
-Sizeof: 'sizeof';
-
-Static: 'static';
-
-Static_assert: 'static_assert';
-
-Static_cast: 'static_cast';
-
-Struct: 'struct';
-
-Switch: 'switch';
-
-Template: 'template';
-
-This: 'this';
-
-Thread_local: 'thread_local';
-
-Throw: 'throw';
-
-//DO NOT RENAME - PYTHON NEEDS True and False
-True_: 'true';
-
-Try: 'try';
-
-Typedef: 'typedef';
-
-Typeid_: 'typeid';
-
-Typename_: 'typename';
-
-Union: 'union';
-
-Unsigned: 'unsigned';
-
-Using: 'using';
-
-Virtual: 'virtual';
-
-Void: 'void';
-
-Volatile: 'volatile';
-
-Wchar: 'wchar_t';
-
-While: 'while';
-/*Operators*/
-
-LeftParen: '(';
-
-RightParen: ')';
-
-LeftBracket: '[';
-
-RightBracket: ']';
-
-LeftBrace: '{';
-
-RightBrace: '}';
-
-Plus: '+';
-
-Minus: '-';
-
-Star: '*';
-
-Div: '/';
-
-Mod: '%';
-
-Caret: '^';
-
-And: '&';
-
-Or: '|';
-
-Tilde: '~';
-
-Not: '!' | 'not';
-
-Assign: '=';
-
-Less: '<';
-
-Greater: '>';
-
-PlusAssign: '+=';
-
-MinusAssign: '-=';
-
-StarAssign: '*=';
-
-DivAssign: '/=';
-
-ModAssign: '%=';
-
-XorAssign: '^=';
-
-AndAssign: '&=';
-
-OrAssign: '|=';
-
-LeftShiftAssign: '<<=';
-
-RightShiftAssign: '>>=';
-
-Equal: '==';
-
-NotEqual: '!=';
-
-LessEqual: '<=';
-
-GreaterEqual: '>=';
-
-AndAnd: '&&' | 'and';
-
-OrOr: '||' | 'or';
-
-PlusPlus: '++';
-
-MinusMinus: '--';
-
-Comma: ',';
-
-ArrowStar: '->*';
-
-Arrow: '->';
-
-Question: '?';
-
-Colon: ':';
-
-Doublecolon: '::';
-
-Semi: ';';
-
-Dot: '.';
-
-DotStar: '.*';
-
-Ellipsis: '...';
-
-fragment Hexquad: HEXADECIMALDIGIT HEXADECIMALDIGIT HEXADECIMALDIGIT HEXADECIMALDIGIT;
-
-fragment Universalcharactername: '\\u' Hexquad | '\\U' Hexquad Hexquad;
-
-Identifier:
- /*
- Identifiernondigit | Identifier Identifiernondigit | Identifier DIGIT
- */ Identifiernondigit (Identifiernondigit | DIGIT)*
-;
-
-fragment Identifiernondigit: NONDIGIT | Universalcharactername;
-
-fragment NONDIGIT: [a-zA-Z_];
-
-fragment DIGIT: [0-9];
-
-DecimalLiteral: NONZERODIGIT ('\''? DIGIT)*;
-
-OctalLiteral: '0' ('\''? OCTALDIGIT)*;
-
-HexadecimalLiteral: ('0x' | '0X') HEXADECIMALDIGIT ( '\''? HEXADECIMALDIGIT)*;
-
-BinaryLiteral: ('0b' | '0B') BINARYDIGIT ('\''? BINARYDIGIT)*;
-
-fragment NONZERODIGIT: [1-9];
-
-fragment OCTALDIGIT: [0-7];
-
-fragment HEXADECIMALDIGIT: [0-9a-fA-F];
-
-fragment BINARYDIGIT: [01];
-
-Integersuffix:
- Unsignedsuffix Longsuffix?
- | Unsignedsuffix Longlongsuffix?
- | Longsuffix Unsignedsuffix?
- | Longlongsuffix Unsignedsuffix?
-;
-
-fragment Unsignedsuffix: [uU];
-
-fragment Longsuffix: [lL];
-
-fragment Longlongsuffix: 'll' | 'LL';
-
-fragment Cchar: ~ ['\\\r\n] | Escapesequence | Universalcharactername;
-
-fragment Escapesequence: Simpleescapesequence | Octalescapesequence | Hexadecimalescapesequence;
-
-fragment Simpleescapesequence:
- '\\\''
- | '\\"'
- | '\\?'
- | '\\\\'
- | '\\a'
- | '\\b'
- | '\\f'
- | '\\n'
- | '\\r'
- | '\\' ('\r' '\n'? | '\n')
- | '\\t'
- | '\\v'
-;
-
-fragment Octalescapesequence:
- '\\' OCTALDIGIT
- | '\\' OCTALDIGIT OCTALDIGIT
- | '\\' OCTALDIGIT OCTALDIGIT OCTALDIGIT
-;
-
-fragment Hexadecimalescapesequence: '\\x' HEXADECIMALDIGIT+;
-
-fragment Fractionalconstant: Digitsequence? '.' Digitsequence | Digitsequence '.';
-
-fragment Exponentpart: 'e' SIGN? Digitsequence | 'E' SIGN? Digitsequence;
-
-fragment SIGN: [+-];
-
-fragment Digitsequence: DIGIT ('\''? DIGIT)*;
-
-fragment Floatingsuffix: [flFL];
-
-fragment Encodingprefix: 'u8' | 'u' | 'U' | 'L';
-
-fragment Schar: ~ ["\\\r\n] | Escapesequence | Universalcharactername;
-
-fragment Rawstring: 'R"' ( '\\' ["()] | ~[\r\n (])*? '(' ~[)]*? ')' ( '\\' ["()] | ~[\r\n "])*? '"';
-
-UserDefinedIntegerLiteral:
- DecimalLiteral Udsuffix
- | OctalLiteral Udsuffix
- | HexadecimalLiteral Udsuffix
- | BinaryLiteral Udsuffix
-;
-
-UserDefinedFloatingLiteral:
- Fractionalconstant Exponentpart? Udsuffix
- | Digitsequence Exponentpart Udsuffix
-;
-
-UserDefinedStringLiteral: StringLiteral Udsuffix;
-
-UserDefinedCharacterLiteral: CharacterLiteral Udsuffix;
-
-fragment Udsuffix: Identifier;
-
-Whitespace: [ \t]+ -> skip;
-
-Newline: ('\r' '\n'? | '\n') -> skip;
-
-BlockComment: '/*' .*? '*/' -> skip;
-
-LineComment: '//' ~ [\r\n]* -> skip;
diff --git a/src/main/antlr4/io/github/randomcodespace/iq/grammar/cpp/CPP14Parser.g4 b/src/main/antlr4/io/github/randomcodespace/iq/grammar/cpp/CPP14Parser.g4
deleted file mode 100644
index c21e1837..00000000
--- a/src/main/antlr4/io/github/randomcodespace/iq/grammar/cpp/CPP14Parser.g4
+++ /dev/null
@@ -1,1076 +0,0 @@
-/*******************************************************************************
- * The MIT License (MIT)
- *
- * Copyright (c) 2015 Camilo Sanchez (Camiloasc1) 2020 Martin Mirchev (Marti2203)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
- * associated documentation files (the "Software"), to deal in the Software without restriction,
- * including without limitation the rights to use, copy, modify, merge, publish, distribute,
- * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all copies or
- * substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * ****************************************************************************
- */
-
-// $antlr-format alignTrailingComments true, columnLimit 150, minEmptyLines 1, maxEmptyLinesToKeep 1, reflowComments false, useTab false
-// $antlr-format allowShortRulesOnASingleLine false, allowShortBlocksOnASingleLine true, alignSemicolons hanging, alignColons hanging
-
-parser grammar CPP14Parser;
-
-options {
- superClass = CPP14ParserBase;
- tokenVocab = CPP14Lexer;
-}
-
-// Insert here @header for C++ parser.
-
-/*Basic concepts*/
-
-translationUnit
- : declarationSeq? EOF
- ;
-
-/*Expressions*/
-
-primaryExpression
- : literal+
- | This
- | LeftParen expression RightParen
- | idExpression
- | lambdaExpression
- ;
-
-idExpression
- : unqualifiedId
- | qualifiedId
- ;
-
-unqualifiedId
- : Identifier
- | operatorFunctionId
- | conversionFunctionId
- | literalOperatorId
- | Tilde (className | decltypeSpecifier)
- | templateId
- ;
-
-qualifiedId
- : nestedNameSpecifier Template? unqualifiedId
- ;
-
-nestedNameSpecifier
- : (theTypeName | namespaceName | decltypeSpecifier)? Doublecolon
- | nestedNameSpecifier ( Identifier | Template? simpleTemplateId) Doublecolon
- ;
-
-lambdaExpression
- : lambdaIntroducer lambdaDeclarator? compoundStatement
- ;
-
-lambdaIntroducer
- : LeftBracket lambdaCapture? RightBracket
- ;
-
-lambdaCapture
- : captureList
- | captureDefault (Comma captureList)?
- ;
-
-captureDefault
- : And
- | Assign
- ;
-
-captureList
- : capture (Comma capture)* Ellipsis?
- ;
-
-capture
- : simpleCapture
- | initCapture
- ;
-
-simpleCapture
- : And? Identifier
- | This
- ;
-
-initCapture
- : And? Identifier initializer
- ;
-
-lambdaDeclarator
- : LeftParen parameterDeclarationClause? RightParen Mutable? exceptionSpecification? attributeSpecifierSeq? trailingReturnType?
- ;
-
-postfixExpression
- : primaryExpression
- | postfixExpression LeftBracket (expression | bracedInitList) RightBracket
- | postfixExpression LeftParen expressionList? RightParen
- | (simpleTypeSpecifier | typeNameSpecifier) (
- LeftParen expressionList? RightParen
- | bracedInitList
- )
- | postfixExpression (Dot | Arrow) (Template? idExpression | pseudoDestructorName)
- | postfixExpression (PlusPlus | MinusMinus)
- | (Dynamic_cast | Static_cast | Reinterpret_cast | Const_cast) Less theTypeId Greater LeftParen expression RightParen
- | typeIdOfTheTypeId LeftParen (expression | theTypeId) RightParen
- ;
-
-/*
- add a middle layer to eliminate duplicated function declarations
- */
-
-typeIdOfTheTypeId
- : Typeid_
- ;
-
-expressionList
- : initializerList
- ;
-
-pseudoDestructorName
- : nestedNameSpecifier? (theTypeName Doublecolon)? Tilde theTypeName
- | nestedNameSpecifier Template simpleTemplateId Doublecolon Tilde theTypeName
- | Tilde decltypeSpecifier
- ;
-
-unaryExpression
- : postfixExpression
- | (PlusPlus | MinusMinus | unaryOperator | Sizeof) unaryExpression
- | Sizeof (LeftParen theTypeId RightParen | Ellipsis LeftParen Identifier RightParen)
- | Alignof LeftParen theTypeId RightParen
- | noExceptExpression
- | newExpression_
- | deleteExpression
- ;
-
-unaryOperator
- : Or
- | Star
- | And
- | Plus
- | Tilde
- | Minus
- | Not
- ;
-
-newExpression_
- : Doublecolon? New newPlacement? (newTypeId | LeftParen theTypeId RightParen) newInitializer_?
- ;
-
-newPlacement
- : LeftParen expressionList RightParen
- ;
-
-newTypeId
- : typeSpecifierSeq newDeclarator_?
- ;
-
-newDeclarator_
- : pointerOperator newDeclarator_?
- | noPointerNewDeclarator
- ;
-
-noPointerNewDeclarator
- : LeftBracket expression RightBracket attributeSpecifierSeq?
- | noPointerNewDeclarator LeftBracket constantExpression RightBracket attributeSpecifierSeq?
- ;
-
-newInitializer_
- : LeftParen expressionList? RightParen
- | bracedInitList
- ;
-
-deleteExpression
- : Doublecolon? Delete (LeftBracket RightBracket)? castExpression
- ;
-
-noExceptExpression
- : Noexcept LeftParen expression RightParen
- ;
-
-castExpression
- : unaryExpression
- | LeftParen theTypeId RightParen castExpression
- ;
-
-pointerMemberExpression
- : castExpression ((DotStar | ArrowStar) castExpression)*
- ;
-
-multiplicativeExpression
- : pointerMemberExpression ((Star | Div | Mod) pointerMemberExpression)*
- ;
-
-additiveExpression
- : multiplicativeExpression ((Plus | Minus) multiplicativeExpression)*
- ;
-
-shiftExpression
- : additiveExpression (shiftOperator additiveExpression)*
- ;
-
-shiftOperator
- : Greater Greater
- | Less Less
- ;
-
-relationalExpression
- : shiftExpression ((Less | Greater | LessEqual | GreaterEqual) shiftExpression)*
- ;
-
-equalityExpression
- : relationalExpression ((Equal | NotEqual) relationalExpression)*
- ;
-
-andExpression
- : equalityExpression (And equalityExpression)*
- ;
-
-exclusiveOrExpression
- : andExpression (Caret andExpression)*
- ;
-
-inclusiveOrExpression
- : exclusiveOrExpression (Or exclusiveOrExpression)*
- ;
-
-logicalAndExpression
- : inclusiveOrExpression (AndAnd inclusiveOrExpression)*
- ;
-
-logicalOrExpression
- : logicalAndExpression (OrOr logicalAndExpression)*
- ;
-
-conditionalExpression
- : logicalOrExpression (Question expression Colon assignmentExpression)?
- ;
-
-assignmentExpression
- : conditionalExpression
- | logicalOrExpression assignmentOperator initializerClause
- | throwExpression
- ;
-
-assignmentOperator
- : Assign
- | StarAssign
- | DivAssign
- | ModAssign
- | PlusAssign
- | MinusAssign
- | RightShiftAssign
- | LeftShiftAssign
- | AndAssign
- | XorAssign
- | OrAssign
- ;
-
-expression
- : assignmentExpression (Comma assignmentExpression)*
- ;
-
-constantExpression
- : conditionalExpression
- ;
-
-/*Statements*/
-
-statement
- : labeledStatement
- | declarationStatement
- | attributeSpecifierSeq? (
- expressionStatement
- | compoundStatement
- | selectionStatement
- | iterationStatement
- | jumpStatement
- | tryBlock
- )
- ;
-
-labeledStatement
- : attributeSpecifierSeq? (Identifier | Case constantExpression | Default) Colon statement
- ;
-
-expressionStatement
- : expression? Semi
- ;
-
-compoundStatement
- : LeftBrace statementSeq? RightBrace
- ;
-
-statementSeq
- : statement+
- ;
-
-selectionStatement
- : If LeftParen condition RightParen statement (Else statement)?
- | Switch LeftParen condition RightParen statement
- ;
-
-condition
- : expression
- | attributeSpecifierSeq? declSpecifierSeq declarator (
- Assign initializerClause
- | bracedInitList
- )
- ;
-
-iterationStatement
- : While LeftParen condition RightParen statement
- | Do statement While LeftParen expression RightParen Semi
- | For LeftParen (
- forInitStatement condition? Semi expression?
- | forRangeDeclaration Colon forRangeInitializer
- ) RightParen statement
- ;
-
-forInitStatement
- : expressionStatement
- | simpleDeclaration
- ;
-
-forRangeDeclaration
- : attributeSpecifierSeq? declSpecifierSeq declarator
- ;
-
-forRangeInitializer
- : expression
- | bracedInitList
- ;
-
-jumpStatement
- : (Break | Continue | Return (expression | bracedInitList)? | Goto Identifier) Semi
- ;
-
-declarationStatement
- : blockDeclaration
- ;
-
-/*Declarations*/
-
-declarationSeq
- : declaration+
- ;
-
-declaration
- : blockDeclaration
- | functionDefinition
- | templateDeclaration
- | explicitInstantiation
- | explicitSpecialization
- | linkageSpecification
- | namespaceDefinition
- | emptyDeclaration_
- | attributeDeclaration
- ;
-
-blockDeclaration
- : simpleDeclaration
- | asmDefinition
- | namespaceAliasDefinition
- | usingDeclaration
- | usingDirective
- | staticAssertDeclaration
- | aliasDeclaration
- | opaqueEnumDeclaration
- ;
-
-aliasDeclaration
- : Using Identifier attributeSpecifierSeq? Assign theTypeId Semi
- ;
-
-simpleDeclaration
- : declSpecifierSeq? initDeclaratorList? Semi
- | attributeSpecifierSeq declSpecifierSeq? initDeclaratorList Semi
- ;
-
-staticAssertDeclaration
- : Static_assert LeftParen constantExpression Comma StringLiteral RightParen Semi
- ;
-
-emptyDeclaration_
- : Semi
- ;
-
-attributeDeclaration
- : attributeSpecifierSeq Semi
- ;
-
-declSpecifier
- : storageClassSpecifier
- | typeSpecifier
- | functionSpecifier
- | Friend
- | Typedef
- | Constexpr
- ;
-
-declSpecifierSeq
- : declSpecifier+? attributeSpecifierSeq?
- ;
-
-storageClassSpecifier
- : Register
- | Static
- | Thread_local
- | Extern
- | Mutable
- ;
-
-functionSpecifier
- : Inline
- | Virtual
- | Explicit
- ;
-
-typedefName
- : Identifier
- ;
-
-typeSpecifier
- : trailingTypeSpecifier
- | classSpecifier
- | enumSpecifier
- ;
-
-trailingTypeSpecifier
- : simpleTypeSpecifier
- | elaboratedTypeSpecifier
- | typeNameSpecifier
- | cvQualifier
- ;
-
-typeSpecifierSeq
- : typeSpecifier+ attributeSpecifierSeq?
- ;
-
-trailingTypeSpecifierSeq
- : trailingTypeSpecifier+ attributeSpecifierSeq?
- ;
-
-simpleTypeLengthModifier
- : Short
- | Long
- ;
-
-simpleTypeSignednessModifier
- : Unsigned
- | Signed
- ;
-
-simpleTypeSpecifier
- : nestedNameSpecifier? theTypeName
- | nestedNameSpecifier Template simpleTemplateId
- | Char
- | Char16
- | Char32
- | Wchar
- | Bool
- | Short
- | Int
- | Long
- | Float
- | Signed
- | Unsigned
- | Float
- | Double
- | Void
- | Auto
- | decltypeSpecifier
- ;
-
-theTypeName
- : className
- | enumName
- | typedefName
- | simpleTemplateId
- ;
-
-decltypeSpecifier
- : Decltype LeftParen (expression | Auto) RightParen
- ;
-
-elaboratedTypeSpecifier
- : classKey (
- attributeSpecifierSeq? nestedNameSpecifier? Identifier
- | simpleTemplateId
- | nestedNameSpecifier Template? simpleTemplateId
- )
- | Enum nestedNameSpecifier? Identifier
- ;
-
-enumName
- : Identifier
- ;
-
-enumSpecifier
- : enumHead LeftBrace (enumeratorList Comma?)? RightBrace
- ;
-
-enumHead
- : enumKey attributeSpecifierSeq? (nestedNameSpecifier? Identifier)? enumBase?
- ;
-
-opaqueEnumDeclaration
- : enumKey attributeSpecifierSeq? Identifier enumBase? Semi
- ;
-
-enumKey
- : Enum (Class | Struct)?
- ;
-
-enumBase
- : Colon typeSpecifierSeq
- ;
-
-enumeratorList
- : enumeratorDefinition (Comma enumeratorDefinition)*
- ;
-
-enumeratorDefinition
- : enumerator (Assign constantExpression)?
- ;
-
-enumerator
- : Identifier
- ;
-
-namespaceName
- : originalNamespaceName
- | namespaceAlias
- ;
-
-originalNamespaceName
- : Identifier
- ;
-
-namespaceDefinition
- : Inline? Namespace (Identifier | originalNamespaceName)? LeftBrace namespaceBody = declarationSeq? RightBrace
- ;
-
-namespaceAlias
- : Identifier
- ;
-
-namespaceAliasDefinition
- : Namespace Identifier Assign qualifiedNamespaceSpecifier Semi
- ;
-
-qualifiedNamespaceSpecifier
- : nestedNameSpecifier? namespaceName
- ;
-
-usingDeclaration
- : Using (Typename_? nestedNameSpecifier | Doublecolon) unqualifiedId Semi
- ;
-
-usingDirective
- : attributeSpecifierSeq? Using Namespace nestedNameSpecifier? namespaceName Semi
- ;
-
-asmDefinition
- : Asm LeftParen StringLiteral RightParen Semi
- ;
-
-linkageSpecification
- : Extern StringLiteral (LeftBrace declarationSeq? RightBrace | declaration)
- ;
-
-attributeSpecifierSeq
- : attributeSpecifier+
- ;
-
-attributeSpecifier
- : LeftBracket LeftBracket attributeList? RightBracket RightBracket
- | alignmentSpecifier
- ;
-
-alignmentSpecifier
- : Alignas LeftParen (theTypeId | constantExpression) Ellipsis? RightParen
- ;
-
-attributeList
- : attribute (Comma attribute)* Ellipsis?
- ;
-
-attribute
- : (attributeNamespace Doublecolon)? Identifier attributeArgumentClause?
- ;
-
-attributeNamespace
- : Identifier
- ;
-
-attributeArgumentClause
- : LeftParen balancedTokenSeq? RightParen
- ;
-
-balancedTokenSeq
- : balancedToken+
- ;
-
-balancedToken
- : LeftParen balancedTokenSeq RightParen
- | LeftBracket balancedTokenSeq RightBracket
- | LeftBrace balancedTokenSeq RightBrace
- | ~(LeftParen | RightParen | LeftBrace | RightBrace | LeftBracket | RightBracket)+
- ;
-
-/*Declarators*/
-
-initDeclaratorList
- : initDeclarator (Comma initDeclarator)*
- ;
-
-initDeclarator
- : declarator initializer?
- ;
-
-declarator
- : pointerDeclarator
- | noPointerDeclarator parametersAndQualifiers trailingReturnType
- ;
-
-pointerDeclarator
- : (pointerOperator Const?)* noPointerDeclarator
- ;
-
-noPointerDeclarator
- : declaratorId attributeSpecifierSeq?
- | noPointerDeclarator (
- parametersAndQualifiers
- | LeftBracket constantExpression? RightBracket attributeSpecifierSeq?
- )
- | LeftParen pointerDeclarator RightParen
- ;
-
-parametersAndQualifiers
- : LeftParen parameterDeclarationClause? RightParen cvQualifierSeq? refQualifier? exceptionSpecification? attributeSpecifierSeq?
- ;
-
-trailingReturnType
- : Arrow trailingTypeSpecifierSeq abstractDeclarator?
- ;
-
-pointerOperator
- : (And | AndAnd) attributeSpecifierSeq?
- | nestedNameSpecifier? Star attributeSpecifierSeq? cvQualifierSeq?
- ;
-
-cvQualifierSeq
- : cvQualifier+
- ;
-
-cvQualifier
- : Const
- | Volatile
- ;
-
-refQualifier
- : And
- | AndAnd
- ;
-
-declaratorId
- : Ellipsis? idExpression
- ;
-
-theTypeId
- : typeSpecifierSeq abstractDeclarator?
- ;
-
-abstractDeclarator
- : pointerAbstractDeclarator
- | noPointerAbstractDeclarator? parametersAndQualifiers trailingReturnType
- | abstractPackDeclarator
- ;
-
-pointerAbstractDeclarator
- : pointerOperator* (noPointerAbstractDeclarator | pointerOperator)
- ;
-
-noPointerAbstractDeclarator
- : (parametersAndQualifiers | LeftParen pointerAbstractDeclarator RightParen) (
- parametersAndQualifiers
- | LeftBracket constantExpression? RightBracket attributeSpecifierSeq?
- )*
- ;
-
-abstractPackDeclarator
- : pointerOperator* noPointerAbstractPackDeclarator
- ;
-
-noPointerAbstractPackDeclarator
- : Ellipsis (
- parametersAndQualifiers
- | LeftBracket constantExpression? RightBracket attributeSpecifierSeq?
- )*
- ;
-
-parameterDeclarationClause
- : parameterDeclarationList (Comma? Ellipsis)?
- ;
-
-parameterDeclarationList
- : parameterDeclaration (Comma parameterDeclaration)*
- ;
-
-parameterDeclaration
- : attributeSpecifierSeq? declSpecifierSeq (declarator | abstractDeclarator?) (
- Assign initializerClause
- )?
- ;
-
-functionDefinition
- : attributeSpecifierSeq? declSpecifierSeq? declarator virtualSpecifierSeq? functionBody
- ;
-
-functionBody
- : constructorInitializer? compoundStatement
- | functionTryBlock
- | Assign (Default | Delete) Semi
- ;
-
-initializer
- : braceOrEqualInitializer
- | LeftParen expressionList RightParen
- ;
-
-braceOrEqualInitializer
- : Assign initializerClause
- | bracedInitList
- ;
-
-initializerClause
- : assignmentExpression
- | bracedInitList
- ;
-
-initializerList
- : initializerClause Ellipsis? (Comma initializerClause Ellipsis?)*
- ;
-
-bracedInitList
- : LeftBrace (initializerList Comma?)? RightBrace
- ;
-
-/*Classes*/
-
-className
- : Identifier
- | simpleTemplateId
- ;
-
-classSpecifier
- : classHead LeftBrace memberSpecification? RightBrace
- ;
-
-classHead
- : classKey attributeSpecifierSeq? (classHeadName classVirtSpecifier?)? baseClause?
- | Union attributeSpecifierSeq? ( classHeadName classVirtSpecifier?)?
- ;
-
-classHeadName
- : nestedNameSpecifier? className
- ;
-
-classVirtSpecifier
- : Final
- ;
-
-classKey
- : Class
- | Struct
- ;
-
-memberSpecification
- : (memberDeclaration | accessSpecifier Colon)+
- ;
-
-memberDeclaration
- : attributeSpecifierSeq? declSpecifierSeq? memberDeclaratorList? Semi
- | functionDefinition
- | usingDeclaration
- | staticAssertDeclaration
- | templateDeclaration
- | aliasDeclaration
- | emptyDeclaration_
- ;
-
-memberDeclaratorList
- : memberDeclarator (Comma memberDeclarator)*
- ;
-
-memberDeclarator
- : declarator (
- virtualSpecifierSeq
- | { this.IsPureSpecifierAllowed() }? pureSpecifier
- | { this.IsPureSpecifierAllowed() }? virtualSpecifierSeq pureSpecifier
- | braceOrEqualInitializer
- )
- | declarator
- | Identifier? attributeSpecifierSeq? Colon constantExpression
- ;
-
-virtualSpecifierSeq
- : virtualSpecifier+
- ;
-
-virtualSpecifier
- : Override
- | Final
- ;
-
-/*
- purespecifier: Assign '0'//Conflicts with the lexer ;
- */
-
-pureSpecifier
- : Assign IntegerLiteral
- ;
-
-/*Derived classes*/
-
-baseClause
- : Colon baseSpecifierList
- ;
-
-baseSpecifierList
- : baseSpecifier Ellipsis? (Comma baseSpecifier Ellipsis?)*
- ;
-
-baseSpecifier
- : attributeSpecifierSeq? (
- baseTypeSpecifier
- | Virtual accessSpecifier? baseTypeSpecifier
- | accessSpecifier Virtual? baseTypeSpecifier
- )
- ;
-
-classOrDeclType
- : nestedNameSpecifier? className
- | decltypeSpecifier
- ;
-
-baseTypeSpecifier
- : classOrDeclType
- ;
-
-accessSpecifier
- : Private
- | Protected
- | Public
- ;
-
-/*Special member functions*/
-
-conversionFunctionId
- : Operator conversionTypeId
- ;
-
-conversionTypeId
- : typeSpecifierSeq conversionDeclarator?
- ;
-
-conversionDeclarator
- : pointerOperator conversionDeclarator?
- ;
-
-constructorInitializer
- : Colon memInitializerList
- ;
-
-memInitializerList
- : memInitializer Ellipsis? (Comma memInitializer Ellipsis?)*
- ;
-
-memInitializer
- : memInitializerId (LeftParen expressionList? RightParen | bracedInitList)
- ;
-
-memInitializerId
- : classOrDeclType
- | Identifier
- ;
-
-/*Overloading*/
-
-operatorFunctionId
- : Operator theOperator
- ;
-
-literalOperatorId
- : Operator (StringLiteral Identifier | UserDefinedStringLiteral)
- ;
-
-/*Templates*/
-
-templateDeclaration
- : Template Less templateParameterList Greater declaration
- ;
-
-templateParameterList
- : templateParameter (Comma templateParameter)*
- ;
-
-templateParameter
- : typeParameter
- | parameterDeclaration
- ;
-
-typeParameter
- : ((Template Less templateParameterList Greater)? Class | Typename_) (
- Ellipsis? Identifier?
- | Identifier? Assign theTypeId
- )
- ;
-
-simpleTemplateId
- : templateName Less templateArgumentList? Greater
- ;
-
-templateId
- : simpleTemplateId
- | (operatorFunctionId | literalOperatorId) Less templateArgumentList? Greater
- ;
-
-templateName
- : Identifier
- ;
-
-templateArgumentList
- : templateArgument Ellipsis? (Comma templateArgument Ellipsis?)*
- ;
-
-templateArgument
- : theTypeId
- | constantExpression
- | idExpression
- ;
-
-typeNameSpecifier
- : Typename_ nestedNameSpecifier (Identifier | Template? simpleTemplateId)
- ;
-
-explicitInstantiation
- : Extern? Template declaration
- ;
-
-explicitSpecialization
- : Template Less Greater declaration
- ;
-
-/*Exception handling*/
-
-tryBlock
- : Try compoundStatement handlerSeq
- ;
-
-functionTryBlock
- : Try constructorInitializer? compoundStatement handlerSeq
- ;
-
-handlerSeq
- : handler+
- ;
-
-handler
- : Catch LeftParen exceptionDeclaration RightParen compoundStatement
- ;
-
-exceptionDeclaration
- : attributeSpecifierSeq? typeSpecifierSeq (declarator | abstractDeclarator)?
- | Ellipsis
- ;
-
-throwExpression
- : Throw assignmentExpression?
- ;
-
-exceptionSpecification
- : dynamicExceptionSpecification
- | noExceptSpecification
- ;
-
-dynamicExceptionSpecification
- : Throw LeftParen typeIdList? RightParen
- ;
-
-typeIdList
- : theTypeId Ellipsis? (Comma theTypeId Ellipsis?)*
- ;
-
-noExceptSpecification
- : Noexcept LeftParen constantExpression RightParen
- | Noexcept
- ;
-
-/*Preprocessing directives*/
-
-/*Lexer*/
-
-theOperator
- : New (LeftBracket RightBracket)?
- | Delete (LeftBracket RightBracket)?
- | Plus
- | Minus
- | Star
- | Div
- | Mod
- | Caret
- | And
- | Or
- | Tilde
- | Not
- | Assign
- | Greater
- | Less
- | GreaterEqual
- | PlusAssign
- | MinusAssign
- | StarAssign
- | ModAssign
- | XorAssign
- | AndAssign
- | OrAssign
- | Less Less
- | Greater Greater
- | RightShiftAssign
- | LeftShiftAssign
- | Equal
- | NotEqual
- | LessEqual
- | AndAnd
- | OrOr
- | PlusPlus
- | MinusMinus
- | Comma
- | ArrowStar
- | Arrow
- | LeftParen RightParen
- | LeftBracket RightBracket
- ;
-
-literal
- : IntegerLiteral
- | CharacterLiteral
- | FloatingLiteral
- | StringLiteral
- | BooleanLiteral
- | PointerLiteral
- | UserDefinedLiteral
- ;
-
diff --git a/src/main/antlr4/io/github/randomcodespace/iq/grammar/csharp/CSharpLexer.g4 b/src/main/antlr4/io/github/randomcodespace/iq/grammar/csharp/CSharpLexer.g4
deleted file mode 100644
index 8ec5d774..00000000
--- a/src/main/antlr4/io/github/randomcodespace/iq/grammar/csharp/CSharpLexer.g4
+++ /dev/null
@@ -1,1059 +0,0 @@
-// Eclipse Public License - v 1.0, http://www.eclipse.org/legal/epl-v10.html
-// Copyright (c) 2013, Christian Wulf (chwchw@gmx.de)
-// Copyright (c) 2016-2017, Ivan Kochurkin (kvanttt@gmail.com), Positive Technologies.
-
-// $antlr-format alignTrailingComments true, columnLimit 150, maxEmptyLinesToKeep 1, reflowComments false, useTab false
-// $antlr-format allowShortRulesOnASingleLine true, allowShortBlocksOnASingleLine true, minEmptyLines 0, alignSemicolons ownLine
-// $antlr-format alignColons trailing, singleLineOverrulesHangingColon true, alignLexerCommands true, alignLabels true, alignTrailers true
-
-lexer grammar CSharpLexer;
-
-channels {
- COMMENTS_CHANNEL,
- DIRECTIVE
-}
-
-options {
- superClass = CSharpLexerBase;
-}
-
-BYTE_ORDER_MARK: '\u00EF\u00BB\u00BF';
-
-SINGLE_LINE_DOC_COMMENT : '///' InputCharacter* -> channel(COMMENTS_CHANNEL);
-EMPTY_DELIMITED_DOC_COMMENT : '/***/' -> channel(COMMENTS_CHANNEL);
-DELIMITED_DOC_COMMENT : '/**' ~'/' .*? '*/' -> channel(COMMENTS_CHANNEL);
-SINGLE_LINE_COMMENT : '//' InputCharacter* -> channel(COMMENTS_CHANNEL);
-DELIMITED_COMMENT : '/*' .*? '*/' -> channel(COMMENTS_CHANNEL);
-WHITESPACES : (Whitespace | NewLine)+ -> channel(HIDDEN);
-SHARP : '#' -> mode(DIRECTIVE_MODE), skip;
-
-ABSTRACT : 'abstract';
-ADD : 'add';
-ALIAS : 'alias';
-ARGLIST : '__arglist';
-AS : 'as';
-ASCENDING : 'ascending';
-ASYNC : 'async';
-AWAIT : 'await';
-BASE : 'base';
-BOOL : 'bool';
-BREAK : 'break';
-BY : 'by';
-BYTE : 'byte';
-CASE : 'case';
-CATCH : 'catch';
-CHAR : 'char';
-CHECKED : 'checked';
-CLASS : 'class';
-CONST : 'const';
-CONTINUE : 'continue';
-DECIMAL : 'decimal';
-DEFAULT : 'default';
-DELEGATE : 'delegate';
-DESCENDING : 'descending';
-DO : 'do';
-DOUBLE : 'double';
-DYNAMIC : 'dynamic';
-ELSE : 'else';
-ENUM : 'enum';
-EQUALS : 'equals';
-EVENT : 'event';
-EXPLICIT : 'explicit';
-EXTERN : 'extern';
-FALSE : 'false';
-FINALLY : 'finally';
-FIXED : 'fixed';
-FLOAT : 'float';
-FOR : 'for';
-FOREACH : 'foreach';
-FROM : 'from';
-GET : 'get';
-GOTO : 'goto';
-GROUP : 'group';
-IF : 'if';
-IMPLICIT : 'implicit';
-IN : 'in';
-INT : 'int';
-INTERFACE : 'interface';
-INTERNAL : 'internal';
-INTO : 'into';
-IS : 'is';
-JOIN : 'join';
-LET : 'let';
-LOCK : 'lock';
-LONG : 'long';
-NAMEOF : 'nameof';
-NAMESPACE : 'namespace';
-NEW : 'new';
-NULL_ : 'null';
-OBJECT : 'object';
-ON : 'on';
-OPERATOR : 'operator';
-ORDERBY : 'orderby';
-OUT : 'out';
-OVERRIDE : 'override';
-PARAMS : 'params';
-PARTIAL : 'partial';
-PRIVATE : 'private';
-PROTECTED : 'protected';
-PUBLIC : 'public';
-READONLY : 'readonly';
-REF : 'ref';
-REMOVE : 'remove';
-RETURN : 'return';
-SBYTE : 'sbyte';
-SEALED : 'sealed';
-SELECT : 'select';
-SET : 'set';
-SHORT : 'short';
-SIZEOF : 'sizeof';
-STACKALLOC : 'stackalloc';
-STATIC : 'static';
-STRING : 'string';
-STRUCT : 'struct';
-SWITCH : 'switch';
-THIS : 'this';
-THROW : 'throw';
-TRUE : 'true';
-TRY : 'try';
-TYPEOF : 'typeof';
-UINT : 'uint';
-ULONG : 'ulong';
-UNCHECKED : 'unchecked';
-UNMANAGED : 'unmanaged';
-UNSAFE : 'unsafe';
-USHORT : 'ushort';
-USING : 'using';
-VAR : 'var';
-VIRTUAL : 'virtual';
-VOID : 'void';
-VOLATILE : 'volatile';
-WHEN : 'when';
-WHERE : 'where';
-WHILE : 'while';
-YIELD : 'yield';
-
-//B.1.6 Identifiers
-// must be defined after all keywords so the first branch (Available_identifier) does not match keywords
-// https://msdn.microsoft.com/en-us/library/aa664670(v=vs.71).aspx
-IDENTIFIER: '@'? IdentifierOrKeyword;
-
-//B.1.8 Literals
-// 0.Equals() would be parsed as an invalid real (1. branch) causing a lexer error
-// Note: '_'* digit separators in numeric literals: C# 7.0
-LITERAL_ACCESS : [0-9] ('_'* [0-9])* IntegerTypeSuffix? '.' '@'? IdentifierOrKeyword;
-INTEGER_LITERAL : [0-9] ('_'* [0-9])* IntegerTypeSuffix?;
-HEX_INTEGER_LITERAL : '0' [xX] ('_'* HexDigit)+ IntegerTypeSuffix?;
-BIN_INTEGER_LITERAL : '0' [bB] ('_'* [01])+ IntegerTypeSuffix?; // C# 7.0
-REAL_LITERAL:
- ([0-9] ('_'* [0-9])*)? '.' [0-9] ('_'* [0-9])* ExponentPart? [FfDdMm]?
- | [0-9] ('_'* [0-9])* ([FfDdMm] | ExponentPart [FfDdMm]?)
-;
-
-CHARACTER_LITERAL : '\'' (~['\\\r\n\u0085\u2028\u2029] | CommonCharacter) '\'';
-REGULAR_STRING : '"' (~["\\\r\n\u0085\u2028\u2029] | CommonCharacter)* '"';
-VERBATIUM_STRING : '@"' (~'"' | '""')* '"';
-INTERPOLATED_REGULAR_STRING_START:
- '$"' { this.OnInterpolatedRegularStringStart(); } -> pushMode(INTERPOLATION_STRING)
-;
-INTERPOLATED_VERBATIUM_STRING_START:
- '$@"' { this.OnInterpolatedVerbatiumStringStart(); } -> pushMode(INTERPOLATION_STRING)
-;
-
-//B.1.9 Operators And Punctuators
-OPEN_BRACE : '{' { this.OnOpenBrace(); };
-CLOSE_BRACE : '}' { this.OnCloseBrace(); };
-OPEN_BRACKET : '[';
-CLOSE_BRACKET : ']';
-OPEN_PARENS : '(';
-CLOSE_PARENS : ')';
-DOT : '.';
-COMMA : ',';
-COLON : ':' { this.OnColon(); };
-SEMICOLON : ';';
-PLUS : '+';
-MINUS : '-';
-STAR : '*';
-DIV : '/';
-PERCENT : '%';
-AMP : '&';
-BITWISE_OR : '|';
-CARET : '^';
-BANG : '!';
-TILDE : '~';
-ASSIGNMENT : '=';
-LT : '<';
-GT : '>';
-INTERR : '?';
-DOUBLE_COLON : '::';
-OP_COALESCING : '??';
-OP_INC : '++';
-OP_DEC : '--';
-OP_AND : '&&';
-OP_OR : '||';
-OP_PTR : '->';
-OP_EQ : '==';
-OP_NE : '!=';
-OP_LE : '<=';
-OP_GE : '>=';
-OP_ADD_ASSIGNMENT : '+=';
-OP_SUB_ASSIGNMENT : '-=';
-OP_MULT_ASSIGNMENT : '*=';
-OP_DIV_ASSIGNMENT : '/=';
-OP_MOD_ASSIGNMENT : '%=';
-OP_AND_ASSIGNMENT : '&=';
-OP_OR_ASSIGNMENT : '|=';
-OP_XOR_ASSIGNMENT : '^=';
-OP_LEFT_SHIFT : '<<';
-OP_LEFT_SHIFT_ASSIGNMENT : '<<=';
-OP_COALESCING_ASSIGNMENT : '??='; // C# 8.0
-OP_RANGE : '..'; // C# 8.0
-
-// https://msdn.microsoft.com/en-us/library/dn961160.aspx
-mode INTERPOLATION_STRING;
-
-DOUBLE_CURLY_INSIDE : '{{';
-OPEN_BRACE_INSIDE : '{' { this.OpenBraceInside(); } -> skip, pushMode(DEFAULT_MODE);
-REGULAR_CHAR_INSIDE : { this.IsRegularCharInside() }? SimpleEscapeSequence;
-VERBATIUM_DOUBLE_QUOTE_INSIDE : { this.IsVerbatiumDoubleQuoteInside() }? '""';
-DOUBLE_QUOTE_INSIDE : '"' { this.OnDoubleQuoteInside(); } -> popMode;
-REGULAR_STRING_INSIDE : { this.IsRegularCharInside() }? ~('{' | '\\' | '"')+;
-VERBATIUM_INSIDE_STRING : { this.IsVerbatiumDoubleQuoteInside() }? ~('{' | '"')+;
-
-mode INTERPOLATION_FORMAT;
-
-DOUBLE_CURLY_CLOSE_INSIDE : '}}' -> type(FORMAT_STRING);
-CLOSE_BRACE_INSIDE : '}' { this.OnCloseBraceInside(); } -> skip, popMode;
-FORMAT_STRING : ~'}'+;
-
-mode DIRECTIVE_MODE;
-
-DIRECTIVE_WHITESPACES : Whitespace+ -> channel(HIDDEN);
-DIGITS : [0-9]+ -> channel(DIRECTIVE);
-DIRECTIVE_TRUE : 'true' -> channel(DIRECTIVE), type(TRUE);
-DIRECTIVE_FALSE : 'false' -> channel(DIRECTIVE), type(FALSE);
-DEFINE : 'define' -> channel(DIRECTIVE);
-UNDEF : 'undef' -> channel(DIRECTIVE);
-DIRECTIVE_IF : 'if' -> channel(DIRECTIVE), type(IF);
-ELIF : 'elif' -> channel(DIRECTIVE);
-DIRECTIVE_ELSE : 'else' -> channel(DIRECTIVE), type(ELSE);
-ENDIF : 'endif' -> channel(DIRECTIVE);
-LINE : 'line' -> channel(DIRECTIVE);
-ERROR : 'error' Whitespace+ -> channel(DIRECTIVE), mode(DIRECTIVE_TEXT);
-WARNING : 'warning' Whitespace+ -> channel(DIRECTIVE), mode(DIRECTIVE_TEXT);
-REGION : 'region' Whitespace* -> channel(DIRECTIVE), mode(DIRECTIVE_TEXT);
-ENDREGION : 'endregion' Whitespace* -> channel(DIRECTIVE), mode(DIRECTIVE_TEXT);
-PRAGMA : 'pragma' Whitespace+ -> channel(DIRECTIVE), mode(DIRECTIVE_TEXT);
-NULLABLE : 'nullable' Whitespace+ -> channel(DIRECTIVE), mode(DIRECTIVE_TEXT); // C# 8.0
-DIRECTIVE_DEFAULT : 'default' -> channel(DIRECTIVE), type(DEFAULT);
-DIRECTIVE_HIDDEN : 'hidden' -> channel(DIRECTIVE);
-DIRECTIVE_OPEN_PARENS : '(' -> channel(DIRECTIVE), type(OPEN_PARENS);
-DIRECTIVE_CLOSE_PARENS : ')' -> channel(DIRECTIVE), type(CLOSE_PARENS);
-DIRECTIVE_BANG : '!' -> channel(DIRECTIVE), type(BANG);
-DIRECTIVE_OP_EQ : '==' -> channel(DIRECTIVE), type(OP_EQ);
-DIRECTIVE_OP_NE : '!=' -> channel(DIRECTIVE), type(OP_NE);
-DIRECTIVE_OP_AND : '&&' -> channel(DIRECTIVE), type(OP_AND);
-DIRECTIVE_OP_OR : '||' -> channel(DIRECTIVE), type(OP_OR);
-DIRECTIVE_STRING:
- '"' ~('"' | [\r\n\u0085\u2028\u2029])* '"' -> channel(DIRECTIVE), type(STRING)
-;
-CONDITIONAL_SYMBOL: IdentifierOrKeyword -> channel(DIRECTIVE);
-DIRECTIVE_SINGLE_LINE_COMMENT:
- '//' ~[\r\n\u0085\u2028\u2029]* -> channel(COMMENTS_CHANNEL), type(SINGLE_LINE_COMMENT)
-;
-DIRECTIVE_NEW_LINE: NewLine -> channel(DIRECTIVE), mode(DEFAULT_MODE);
-
-mode DIRECTIVE_TEXT;
-
-TEXT : ~[\r\n\u0085\u2028\u2029]+ -> channel(DIRECTIVE);
-TEXT_NEW_LINE : NewLine -> channel(DIRECTIVE), type(DIRECTIVE_NEW_LINE), mode(DEFAULT_MODE);
-
-// Fragments
-
-fragment InputCharacter: ~[\r\n\u0085\u2028\u2029];
-
-fragment NewLineCharacter:
- '\u000D' //''
- | '\u000A' //''
- | '\u0085' //''
- | '\u2028' //''
- | '\u2029' //''
-;
-
-fragment IntegerTypeSuffix : [lL]? [uU] | [uU]? [lL];
-fragment ExponentPart : [eE] ('+' | '-')? [0-9] ('_'* [0-9])*;
-
-fragment CommonCharacter: SimpleEscapeSequence | HexEscapeSequence | UnicodeEscapeSequence;
-
-fragment SimpleEscapeSequence:
- '\\\''
- | '\\"'
- | '\\\\'
- | '\\0'
- | '\\a'
- | '\\b'
- | '\\f'
- | '\\n'
- | '\\r'
- | '\\t'
- | '\\v'
-;
-
-fragment HexEscapeSequence:
- '\\x' HexDigit
- | '\\x' HexDigit HexDigit
- | '\\x' HexDigit HexDigit HexDigit
- | '\\x' HexDigit HexDigit HexDigit HexDigit
-;
-
-fragment NewLine:
- '\r\n'
- | '\r'
- | '\n'
- | '\u0085' // '
- | '\u2028' //''
- | '\u2029' //''
-;
-
-fragment Whitespace:
- UnicodeClassZS //''
- | '\u0009' //''
- | '\u000B' //''
- | '\u000C' //'