Skip to content

Commit b1300bb

Browse files
aksOpsclaude
andcommitted
docs(changelog): document sub-project 1 Phases 1-4 (resolver SPI)
Captures the cross-cutting Confidence + source schema change, the intelligence/resolver/ SPI surface, the Java backend (javaparser-symbol-solver-core), DetectorContext.resolved() opt-in, and the per-base confidence floor wired through Analyzer's emission path. Detector migrations to consume ctx.resolved() are explicitly called out as Phase 5 follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 0609bce commit b1300bb

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,36 @@ for that specific tag for the per-commit details.
5454
`Confidence` enum + `source` field on every `CodeNode` / `CodeEdge`,
5555
4–6 Java detectors migrated, 9 layers of aggressive testing). Implementation
5656
in flight on `feat/sub-project-1-resolver-spi-and-java-pilot`.
57+
- **Symbol-resolver SPI** (sub-project 1, Phases 1–4 of the resolver-and-Java-pilot
58+
plan): the foundation for moving the graph from regex-class-of-correctness
59+
to AST-and-symbol-resolution-class-of-correctness. New `Confidence` enum
60+
(`LEXICAL`/`SYNTACTIC`/`RESOLVED` with stable `score()` mapping) plus a
61+
`source` field land on every `CodeNode` and `CodeEdge`, round-trip through
62+
Neo4j (bare `confidence`/`source` properties on nodes and `RELATES_TO`
63+
relationships) and through the H2 analysis cache (`CACHE_VERSION` bumped
64+
4 → 5 so existing v4 caches drop and rebuild on next open). Read paths are
65+
non-throwing — legacy data without these fields reads back as
66+
`LEXICAL`/null, never NPEs. New SPI under
67+
`intelligence/resolver/`: `Resolved` interface + `EmptyResolved` singleton
68+
sentinel, `SymbolResolver` per-language backend, `ResolutionException`,
69+
`ResolverRegistry` (Spring `@Service` with deterministic alphabetical
70+
bootstrap, case-insensitive lookup, per-resolver failure isolation). First
71+
backend `JavaSymbolResolver` wraps `javaparser-symbol-solver-core` 3.28.0
72+
(Apache-2.0, same release train as `javaparser-core`) with a
73+
`JavaSourceRootDiscovery` that walks Maven/Gradle/plain layouts under a
74+
project root (skipping `target/`, `build/`, `node_modules/`, `.git/`, etc.;
75+
symlink-loop-safe via `NOFOLLOW_LINKS`). `DetectorContext` now carries an
76+
`Optional<Resolved>` (`withResolved()` opt-in, `Optional.empty()` for every
77+
detector that doesn't care — fully backward compatible). `Detector.defaultConfidence()`
78+
declares the per-detector floor (`LEXICAL` for regex bases, `SYNTACTIC` for
79+
AST/structured/JavaParser/JavaMessaging bases) and `DetectorEmissionDefaults.applyDefaults`
80+
is wired into every `detector.detect()` call site in `Analyzer.java`
81+
emissions whose `source` is null get stamped at the orchestration boundary
82+
(detectors that explicitly stamp survive untouched). 11 atomic commits
83+
ship with ~290 new tests covering happy paths, legacy-data fallbacks,
84+
malformed inputs, determinism, concurrency-safe construction, and singleton
85+
invariants. Detector migrations to consume `ctx.resolved()` and the
86+
resolver-bootstrap-into-Analyzer hook follow in sub-project 1 Phase 5.
5787

5888
### Changed
5989

0 commit comments

Comments
 (0)