Skip to content

chore(release): 3.1.0 - #239

Merged
rahlk merged 2 commits into
mainfrom
chore/release-3.1.0
Sep 7, 2026
Merged

chore(release): 3.1.0#239
rahlk merged 2 commits into
mainfrom
chore/release-3.1.0

Conversation

@rahlk

@rahlk rahlk commented Sep 7, 2026

Copy link
Copy Markdown
Collaborator

Cuts 3.1.0 for the config-read and entrypoint-report work: #233, #235, #237, #238, tracked under codellm-devkit/.github#62.

Why MINOR, not PATCH

New public surface reaches consumers:

Addition Where
config_uses[], config_reads_unresolved[], entrypoint_report{} analysis.json application root
entrypoint_frameworks analysis.json type and callable
J_USES_CONFIG, J_READS_CONFIG_UNRESOLVED Neo4j relationship types
entrypoint_frameworks, entrypoint_report_json Neo4j :JApplication
entrypoint_frameworks Neo4j :JType, :JCallable

Additive under semver, and what the committed spec's release plan and the repo's own graph-catalog bump policy both prescribe. A patch tag would tell a consumer on a ~3.0 pin there is nothing new to read.

The graph contract version does not moveV2SchemaCatalog.SCHEMA_VERSION stays 2.0.0. A re-baseline is codellm-devkit/.github#50's call across all three analyzers, so these relationships are detectable by presence, not by version. #238 records that on the constant itself.

Gates, run on 5b40540 and again on this commit

Gate Result
Fixture suite 546 tests, 1 failure — CodeAnalyzerIntegrationTest, no Docker daemon on this machine; fails identically on pre-existing commits
Schema conformance -a 1/2/3/4 on daytrader8: 0 errors each against analysis.v2.schema.json
Monotonicity config_uses superset chain holds; full-tree facts 6226 → 6226 → 11095 → 15725, 0 lost at any step
Determinism two runs byte-identical
Cross-projection J_USES_CONFIG cypher 15 = json 15; J_READS_CONFIG_UNRESOLVED cypher 6 = the 6 distinct (key, reason) pairs _k collapses 12 json records into; entrypoint_report_json parses equal to the json report

./gradlew jar produces codeanalyzer-3.1.0.jar, the name the release workflow expects, and the PyPI wheel takes its version from gradle.properties, so one bump covers jar, wheel and GitHub Release.

Also here

A README §4 update. It described the graph contract without either new feature, and claimed every node label is J-prefixed — untrue since the repository-artifact layer landed :Artifact / :Package / :ConfigKey unprefixed on purpose. Now records that J_USES_CONFIG's source is a union of four node families rather than always a body node, that unresolved reads are kept rather than dropped, and that the entrypoint report is emitted even when empty.

… report

Section 4 described the graph contract without either. It also claimed every
node label is `J`-prefixed, which stopped being true when the repository-artifact
layer landed `:Artifact`, `:Package` and `:ConfigKey` unprefixed on purpose — so
a sibling-language analyzer over the same repository shares those nodes rather
than duplicating them.

Adds what a consumer has to know to use the new surface: that `J_USES_CONFIG`'s
source is a union of four node families and not always a body node, that
unresolved reads are kept rather than dropped, and that the entrypoint report is
emitted even when empty because that is the only thing separating "no
entrypoints" from "the pass found nothing".
@rahlk
rahlk merged commit 21cc730 into main Sep 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant