Files
agenticCode/x-docs/roadmap.md
Ingo Schnabel a09ac514a5 Improvements
2026-07-07 19:10:24 +02:00

3.4 KiB

AgenticCode Roadmap — Open Tasks

This is a living task list of the remaining work. Completed features have been moved to x-docs/features.md (with full implementation notes); this file tracks only items that are still open.

Parser / model

  • Persisted per-language source/module kind — add an AstNode property capturing each module's finer kind beyond the coarse NodeType: Natural program / subprogram / copycode / map / data-area (LDA/PDA/GDA), Java class / interface / enum / record. Requires real sub-kind detection in both parsers (extension alone only distinguishes program vs data-area), persistence (+ optional index), and a re-ingest. Enables API filtering ("list all subprograms / interfaces / data areas") and uniform language-agnostic handling. Split out from the duplicate-detection fix (which branches on the in-memory SourceFiles.Kind at ingest time and needed none of this).

Java analysis fidelity (graph modeling)

Motivated by a batch-job analysis pass over the PUR pur-batch module (2026-07-06): 9 concrete AbstractPurBatchJob subclasses. The graph confirmed findings at the step-class level, but three structural gaps forced the work to be source-driven rather than graph-driven. Root cause: the Java graph models only direct method/constructor calls, not the framework/DI/JPA indirection PUR actually runs on. J1a-J9 done (see x-docs/features.md); J1b remains open.

  • J1b. Parse @Query/JPQL/native-SQL strings + derived-name filters (Java) (found 2026-07-06) — J1a resolves calls whose entity is syntactically recoverable (repository generic param, em.persist/merge/remove(arg), Panache active-record receiver). Still open: parse @Query/JPQL/native-SQL strings into table + mode, and derived query-method names (findAllByClient → READ + filter=client). Also open: repositories with no generic entity type (e.g. a custom IRiskRepository interface) — needs symbol resolution / an entity-hint, since pure syntactic parsing can't recover the entity.

Ingest performance

  • 24. ingest-all performance: parallel parse phase — the parse phase of ingestAll is sequential, but JavaParser.parse()/NaturalParser.parse() are stateless (a fresh com.github.javaparser.JavaParser per call; method-local node/edge lists), so files can be parsed concurrently (Java 21 virtual threads are enabled). Parse all candidates in parallel, keep duplicate-detection and the persist/finalizeProject phases sequential. Especially impactful for Java, where building a full CompilationUnit is the CPU-heavy step. Note: ingest log ordering becomes non-deterministic; consider a configurable parallelism bound via @ConfigProperty. Depends on item 23 (done).

  • 25. ingest-all performance: batch persist transactions — persist still opens one transaction/session per file. Batch the node/edge MERGEs across many files into fewer, larger transactions (UNWIND), cutting per-file transaction round-trip overhead. Lower impact than items 23/24; do last.

Integration & ops

  • 9. docker-compose.yml — untracked file at repo root provides a dev Neo4j container. Either commit it and reference it from the README's "Getting Started" (replacing/augmenting the manual docker run command), or remove it if superseded.

  • 10. Push local commits to remote — main is currently ahead of origin/main; push when ready.