You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Found while validating the CLDK python-sdk 2.0 Python leg against a live Neo4j projection of odoo-slim-19.0.0 (2,364 files) emitted by codeanalyzer-python 1.4.0.
Observation
The entrypoint pass detects nothing on Odoo:
MATCH (c:PyCallable) RETURN c.is_entrypoint, count(*)
FALSE 15549
MATCH (c:PyClass) RETURN c.is_entrypoint, count(*)
FALSE 1656
Zero entrypoints across 15,549 callables and 1,656 classes, in a framework whose entire public surface is HTTP routes. Odoo controllers are @http.route-decorated methods on classes deriving from http.Controller — for example addons/account_payment/controllers/payment.py::PaymentPortal.invoice_transaction.
Possibly related: only 81:PyDecorator nodes exist for those 15,549 callables, which also looks low for a codebase using @api.model, @api.depends and @http.route pervasively.
Why this matters more than a missing convenience
Entrypoints are the source set for reachability. A consumer walking forward from sources to sinks treats an undetected entrypoint as a source that does not exist — so every sink reachable only from it is reported unreachable, and a real finding is dismissed as a false positive. The failure is silent and directional: an omission produces no error, just a smaller cone.
PyEntrypointReport's own docstring anticipates exactly this: "The pass under-approximates by design, so silence is its failure mode… What makes a gap visible instead of indistinguishable from 'this project has no entrypoints'." On this application, silence is the whole output.
Two asks, in priority order
Project PyEntrypointReport into the Neo4j graph. It is emitted in the JSON path but no :PyApplication property or node carries it, so a Neo4j consumer cannot distinguish "no entrypoints" from "the pass found nothing". The SDK now returns an entrypoint_report_unavailable diagnostic over Neo4j for precisely this reason — it can only say "I cannot tell you".
Found while validating the CLDK python-sdk 2.0 Python leg against a live Neo4j projection of
odoo-slim-19.0.0(2,364 files) emitted bycodeanalyzer-python1.4.0.Observation
The entrypoint pass detects nothing on Odoo:
Zero entrypoints across 15,549 callables and 1,656 classes, in a framework whose entire public surface is HTTP routes. Odoo controllers are
@http.route-decorated methods on classes deriving fromhttp.Controller— for exampleaddons/account_payment/controllers/payment.py::PaymentPortal.invoice_transaction.Possibly related: only 81
:PyDecoratornodes exist for those 15,549 callables, which also looks low for a codebase using@api.model,@api.dependsand@http.routepervasively.Why this matters more than a missing convenience
Entrypoints are the source set for reachability. A consumer walking forward from sources to sinks treats an undetected entrypoint as a source that does not exist — so every sink reachable only from it is reported unreachable, and a real finding is dismissed as a false positive. The failure is silent and directional: an omission produces no error, just a smaller cone.
PyEntrypointReport's own docstring anticipates exactly this: "The pass under-approximates by design, so silence is its failure mode… What makes a gap visible instead of indistinguishable from 'this project has no entrypoints'." On this application, silence is the whole output.Two asks, in priority order
PyEntrypointReportinto the Neo4j graph. It is emitted in the JSON path but no:PyApplicationproperty or node carries it, so a Neo4j consumer cannot distinguish "no entrypoints" from "the pass found nothing". The SDK now returns anentrypoint_report_unavailablediagnostic over Neo4j for precisely this reason — it can only say "I cannot tell you".Even without (2), (1) turns a silent wrong answer into a visible gap — which is the distinction the report was designed to draw.
Reproduction