Problem
Three things Python's analyzer emits and Java's does not. Each makes an SDK accessor answer a degenerate value or refuse, and none is recoverable from what the Java projection carries today.
Measured on a 3.0.3 projection of daytrader8 + thingsboard, against the Python and TypeScript reference graphs.
1. No config-read edges. Java emits DEFINES_CONFIG and nothing else, so get_config_readers() has nothing to read and returns [] unconditionally — the ambiguous empty the SDK refuses everywhere else.
| language |
config relationship types |
| Python |
DEFINES_CONFIG, PY_USES_CONFIG, PY_READS_CONFIG_UNRESOLVED |
| TypeScript |
DEFINES_CONFIG |
| Java |
DEFINES_CONFIG |
Java projects 9,688 :ConfigKey nodes, so the keys are known; what is missing is which callable reads one.
2. No entrypoint report on the application root. MATCH (a:JApplication) RETURN any(k IN keys(a) WHERE k CONTAINS 'entrypoint') is FALSE for Java and TRUE for both siblings. keys(:JApplication) is exactly analyzer_name, analyzer_version, name, schema_version. So get_entrypoint_coverage() reports entrypoint_report_unavailable where the other two answer, even though Java does project 2,604 :JEntrypoint nodes — the marks are there, the report about how they were found is not.
3. No comment nodes in the projection. Zero nodes carrying a comment label. analysis.json has comments, so the in-process backend answers and the graph backend raises — a split that is invisible to a caller choosing a backend.
Scope boundary
In scope: those three. Out of scope: CRUD (#187), and the can:// id missing from the :JApplication root (codeanalyzer-schema#5).
Goals
Caveats and known risks
- The parity clause applies: these terms exist in codeanalyzer-python already. Match those names rather than coining new ones — a term coined twice is permanently wrong.
- TypeScript has the same config gap and should probably move in the same release, so the three analyzers do not end up with three vocabularies.
- Comments are bulky. If projecting them wholesale is too costly, say so and propose what a caller actually needs, rather than projecting a subset silently.
Definition of done
- The three python-sdk accessors that degrade or refuse on a Java graph answer, with no SDK change beyond reading the new data.
Problem
Three things Python's analyzer emits and Java's does not. Each makes an SDK accessor answer a degenerate value or refuse, and none is recoverable from what the Java projection carries today.
Measured on a 3.0.3 projection of daytrader8 + thingsboard, against the Python and TypeScript reference graphs.
1. No config-read edges. Java emits
DEFINES_CONFIGand nothing else, soget_config_readers()has nothing to read and returns[]unconditionally — the ambiguous empty the SDK refuses everywhere else.DEFINES_CONFIG,PY_USES_CONFIG,PY_READS_CONFIG_UNRESOLVEDDEFINES_CONFIGDEFINES_CONFIGJava projects 9,688
:ConfigKeynodes, so the keys are known; what is missing is which callable reads one.2. No entrypoint report on the application root.
MATCH (a:JApplication) RETURN any(k IN keys(a) WHERE k CONTAINS 'entrypoint')isFALSEfor Java andTRUEfor both siblings.keys(:JApplication)is exactlyanalyzer_name, analyzer_version, name, schema_version. Soget_entrypoint_coverage()reportsentrypoint_report_unavailablewhere the other two answer, even though Java does project 2,604:JEntrypointnodes — the marks are there, the report about how they were found is not.3. No comment nodes in the projection. Zero nodes carrying a comment label.
analysis.jsonhas comments, so the in-process backend answers and the graph backend raises — a split that is invisible to a caller choosing a backend.Scope boundary
In scope: those three. Out of scope: CRUD (#187), and the
can://id missing from the:JApplicationroot (codeanalyzer-schema#5).Goals
Caveats and known risks
Definition of done