Skip to content

Cross-language refusal tests read two different env var spellings: CLDK_TEST_PYTHON_NEO4J_URI vs CLDK_TEST_NEO4J_PYTHON_URI #362

Open

Description

@rahlk

Is your feature request related to a problem? Please describe.

The same concept — "a live graph of another language, to prove this backend refuses it" — is spelled two ways:

suite variable
tests/analysis/java/test_java_schema_probe.py CLDK_TEST_PYTHON_NEO4J_URI / _USER / _PASSWORD
tests/analysis/typescript/test_typescript_refuses_python_graph_live.py CLDK_TEST_NEO4J_PYTHON_URI / _USER / _PASSWORD

PYTHON_NEO4J in one, NEO4J_PYTHON in the other. Setting the wrong one is silent: the module skips, and a skip reads as a pass.

Describe the solution you'd like

Describe alternatives you've considered

Not stated in the original issue.

Additional context

Why it matters more than a papercut

Found by running the Java suite with what I believed was every gate satisfied, seeing two skips remain, and only then noticing the transposition. The whole point of #360 was that a silently skipped module hid five legs of rot; a variable name that is nearly right is the same failure mode in miniature.

Scope boundary

In scope: one spelling, both suites, and the skip reason quoting the variable it actually reads.

Out of scope: the CLDK_TEST_NEO4J_* (read-only) and CLDK_TEST_NEO4J_WRITE_* (disposable) families, which are consistent and whose separation is deliberate (#324).

Definition of done

  • Setting one documented set of variables satisfies the cross-language refusal gate in every suite that has one.

Activity

  1. rahlk commented on Sep 7, 2026

    @rahlk
    CollaboratorAuthor

    A third spelling in the same family, found while running the Java suite: the application name is CLDK_TEST_NEO4J_JAVA_APP for Java and CLDK_TEST_NEO4J_APP for TypeScript and Python.

    Setting the TypeScript spelling against the Java suite is silent and looks like it worked: 563 passed / 75 skipped instead of 636 passed / 2 skipped. Nothing fails; 73 tests just quietly do not run. That is worse than the transposition this issue was opened for, because the run still ends green.

    So the family is:

    concept Java TypeScript / Python
    application under test CLDK_TEST_NEO4J_JAVA_APP CLDK_TEST_NEO4J_APP
    a graph of another language, to prove refusal CLDK_TEST_PYTHON_NEO4J_URI CLDK_TEST_NEO4J_PYTHON_URI

    Both belong in the same fix, and the terminal-summary hook from #360 should report a suite that skipped for want of an application name, not only one that skipped for want of a write URI.

  2. rahlk commented on Sep 7, 2026

    @rahlk
    CollaboratorAuthor

    Surveyed every CLDK_TEST_* variable the suites actually read. There are five inconsistencies, not the two this issue was opened for.

    concept Java TypeScript / Python
    application name CLDK_TEST_NEO4J_JAVA_APP CLDK_TEST_NEO4J_APP
    cross-language graph URI CLDK_TEST_PYTHON_NEO4J_URI CLDK_TEST_NEO4J_PYTHON_URI
    its user / password / app CLDK_TEST_PYTHON_NEO4J_{USER,PASSWORD,APP} CLDK_TEST_NEO4J_PYTHON_{USER,PASSWORD,APP}
    scale fixture app CLDK_TEST_NEO4J_JAVA_SCALE_APP —
    default when unset none, so the suite skips odoo-slim-19 / superset-frontend

    The last row is its own footgun and is arguably worse than the transposition. Python and TypeScript default their application name, so pointing CLDK_TEST_NEO4J_URI at a graph that does not hold that application skips silently — the run ends green having verified nothing. Java has no default and skips loudly by comparison.

    Proposed resolution

    • One spelling per concept: CLDK_TEST_NEO4J_APP, CLDK_TEST_NEO4J_SCALE_APP, and the CLDK_TEST_NEO4J_PYTHON_* family for the cross-language refusal graph — keeping the CLDK_TEST_NEO4J_ prefix throughout so the family sorts together and a transposition is visually obvious.
    • A retired spelling that is still set becomes an error, not a shrug. Anyone with CLDK_TEST_NEO4J_JAVA_APP in their shell history would otherwise get exactly the silent skip this issue is about. A few lines in tests/conftest.py that fail the run naming the old variable and its replacement costs nothing and removes the failure mode permanently.
    • Every skip reason names the exact variable it looked for, and the terminal-summary hook from Write-gated Neo4j parity modules have been skipped through every leg; all ten tests now fail against current behaviour #360 reports a suite that skipped for a missing application name, not only one that skipped for a missing write URI.

    Open question worth a ruling: whether the defaults should go away entirely. A default application name is convenient locally and is the reason a mis-pointed URI reads as success. My inclination is to drop them and require the name, since these suites already require a URI with no default for the same reason (#324).

    Sequencing: this lands after #354, which is in flight and editing the same Java live-test files.

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