Skip to content

Neo4j projection omits config-read edges, the entrypoint report, and comments — all three present in codeanalyzer-python #231

Description

@rahlk

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

  • A relationship linking a callable to the config key it reads, and the unresolved-read counterpart, matching what codeanalyzer-python emits
  • The entrypoint report on the application root, in the shape the siblings already use
  • Comments projected, so the graph and JSON backends answer the comment accessors alike

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions