Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
88ebf04
checkpoint: pre-yolo 2026-04-26T05:51:41
aksOps Apr 26, 2026
ef45032
checkpoint: pre-yolo 2026-04-27T14:42:04
aksOps Apr 27, 2026
aa51d2d
checkpoint: pre-yolo 2026-04-27T14:42:09
aksOps Apr 27, 2026
c3f8744
checkpoint: pre-yolo 2026-04-27T15:15:03
aksOps Apr 27, 2026
244d6b8
checkpoint: pre-yolo 2026-04-27T15:49:58
aksOps Apr 27, 2026
2c03425
docs(spec): add sub-project 1 design — resolver SPI + Java pilot + co…
aksOps Apr 27, 2026
ac2021b
docs(spec): fix relative paths after spec relocation to docs/specs/
aksOps Apr 27, 2026
9be2b17
docs: bring all documentation in sync with live state + cross-ref doc…
aksOps Apr 27, 2026
f16a60a
docs(plan): add implementation plan for sub-project 1
aksOps Apr 27, 2026
ee33811
feat(model): add Confidence enum (LEXICAL/SYNTACTIC/RESOLVED)
aksOps Apr 27, 2026
0ce49e1
feat(model): add confidence + source to CodeNode
aksOps Apr 27, 2026
86dca96
feat(model): add confidence + source to CodeEdge
aksOps Apr 27, 2026
bb71f49
feat(graph): round-trip confidence + source through Neo4j
aksOps Apr 27, 2026
1534338
feat(cache): bump CACHE_VERSION to 5; round-trip confidence + source
aksOps Apr 27, 2026
91a9c51
feat(detector): set Confidence default per base class + stamp helper
aksOps Apr 27, 2026
49285d5
feat(resolver): add Resolved/EmptyResolved/SymbolResolver SPI + Resol…
aksOps Apr 27, 2026
da74167
feat(resolver): add ResolverRegistry with auto-discovery
aksOps Apr 27, 2026
e447380
feat(detector): add Optional<Resolved> accessor to DetectorContext
aksOps Apr 27, 2026
0b07ac6
chore(deps): add javaparser-symbol-solver-core 3.28.0
aksOps Apr 27, 2026
ba5c5c4
feat(resolver/java): add JavaSourceRootDiscovery (Maven/Gradle/plain)
aksOps Apr 27, 2026
c83167b
feat(resolver/java): add JavaResolved + JavaSymbolResolver (@Component)
aksOps Apr 27, 2026
0609bce
feat(analyzer): apply DetectorEmissionDefaults after every detect() call
aksOps Apr 27, 2026
b1300bb
docs(changelog): document sub-project 1 Phases 1-4 (resolver SPI)
aksOps Apr 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,60 @@ for that specific tag for the per-commit details.
summary of the Best Practices state, Scorecard baseline + target (≥ 8.0/10
stretch with eight checks at max), known floor reductions, and the OSS-CLI
stack reference. (RAN-52 AC #7)
- `PROJECT_SUMMARY.md` (repo-root agent entry doc) and
[`docs/project/`](docs/project/) deep-dives (architecture, data-model,
build-and-run, conventions, ui, flows) — written for AI agents and humans
who need to understand and modify the codebase, every claim grounded in a
file path. Sits alongside `CLAUDE.md` (which remains the canonical
hand-maintained internals doc).
- `docs/specs/` — directory for active architectural design specs. First
entry: `2026-04-27-resolver-spi-and-java-pilot-design.md`, the design for
sub-project 1 of the "robust graph" decomposition (symbol-resolver SPI
between parse and detect, Java pilot via JavaParser's `JavaSymbolSolver`,
`Confidence` enum + `source` field on every `CodeNode` / `CodeEdge`,
4–6 Java detectors migrated, 9 layers of aggressive testing). Implementation
in flight on `feat/sub-project-1-resolver-spi-and-java-pilot`.
- **Symbol-resolver SPI** (sub-project 1, Phases 1–4 of the resolver-and-Java-pilot
plan): the foundation for moving the graph from regex-class-of-correctness
to AST-and-symbol-resolution-class-of-correctness. New `Confidence` enum
(`LEXICAL`/`SYNTACTIC`/`RESOLVED` with stable `score()` mapping) plus a
`source` field land on every `CodeNode` and `CodeEdge`, round-trip through
Neo4j (bare `confidence`/`source` properties on nodes and `RELATES_TO`
relationships) and through the H2 analysis cache (`CACHE_VERSION` bumped
4 → 5 so existing v4 caches drop and rebuild on next open). Read paths are
non-throwing — legacy data without these fields reads back as
`LEXICAL`/null, never NPEs. New SPI under
`intelligence/resolver/`: `Resolved` interface + `EmptyResolved` singleton
sentinel, `SymbolResolver` per-language backend, `ResolutionException`,
`ResolverRegistry` (Spring `@Service` with deterministic alphabetical
bootstrap, case-insensitive lookup, per-resolver failure isolation). First
backend `JavaSymbolResolver` wraps `javaparser-symbol-solver-core` 3.28.0
(Apache-2.0, same release train as `javaparser-core`) with a
`JavaSourceRootDiscovery` that walks Maven/Gradle/plain layouts under a
project root (skipping `target/`, `build/`, `node_modules/`, `.git/`, etc.;
symlink-loop-safe via `NOFOLLOW_LINKS`). `DetectorContext` now carries an
`Optional<Resolved>` (`withResolved()` opt-in, `Optional.empty()` for every
detector that doesn't care — fully backward compatible). `Detector.defaultConfidence()`
declares the per-detector floor (`LEXICAL` for regex bases, `SYNTACTIC` for
AST/structured/JavaParser/JavaMessaging bases) and `DetectorEmissionDefaults.applyDefaults`
is wired into every `detector.detect()` call site in `Analyzer.java` —
emissions whose `source` is null get stamped at the orchestration boundary
(detectors that explicitly stamp survive untouched). 11 atomic commits
ship with ~290 new tests covering happy paths, legacy-data fallbacks,
malformed inputs, determinism, concurrency-safe construction, and singleton
invariants. Detector migrations to consume `ctx.resolved()` and the
resolver-bootstrap-into-Analyzer hook follow in sub-project 1 Phase 5.

### Changed

- Documentation count drift fixed: detector total updated from **97 → 99**
(live count, excluding `Abstract*` and `*Helper*`); `NodeKind` total
updated from **32 → 34** (javadoc at `model/NodeKind.java` was stale by
two entries); `EdgeKind` total updated from **27 → 28** (javadoc at
`model/EdgeKind.java` was stale by one entry). `README.md`, `CLAUDE.md`,
`PROJECT_SUMMARY.md`, `docs/project/*.md`, and the source javadocs are
now in sync.

- Branch protection on `main` requires every commit to be ssh-signed
(RAN-46 AC #2). Force-pushes to `main` are rejected; squash-merge from
PRs is the only path.
Expand Down
8 changes: 4 additions & 4 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## 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. 97 detectors, 35+ languages, Neo4j Embedded graph database, Spring AI MCP server, REST API, web UI.
**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.

- **Maven coordinates:** `io.github.randomcodespace.iq:code-iq` (artifactId intentionally unchanged)
- **CLI command:** `codeiq` (via `java -jar`; JAR filename remains `code-iq-*-cli.jar`)
Expand Down Expand Up @@ -101,7 +101,7 @@ io.github.randomcodespace.iq
|-- 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 (32), EdgeKind (27)
|-- model/ # CodeNode, CodeEdge, NodeKind (34), EdgeKind (28), Confidence
|-- intelligence/ # Intelligence enrichment (Phase 2-5)
| |-- lexical/ # LexicalEnricher, LexicalQueryService, DocCommentExtractor, SnippetStore
| |-- extractor/ # LanguageEnricher, LanguageExtractor, LanguageExtractionResult
Expand Down Expand Up @@ -328,8 +328,8 @@ mvn dependency-check:check
| `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` | 32 node types enum |
| `model/EdgeKind.java` | 27 edge types enum |
| `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) |
Expand Down
Loading
Loading