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
{{ message }}
Repository navigation
Neo4j: scope destructive statements on the can:// id prefix; retire _module #219
#213 anchored the purge on java-owned labels, stopping it reaching other languages. It is still application-blind — see #218, which is the narrow immediate fix. This issue is the full change: the prefix subsumes both the label anchor from #213 and _module itself.
Java has no _module indexes to remove (#217 asked for them; deleting the property resolves it instead) and no --eager gate.
What to do
Scope the per-module purge and the orphan prune on the application's can:// id prefix (can://java/<app>), replacing the _module predicate and the label-list anchor.
Drop _module from the projection, from the graph catalog, and from any index on it.
Add a JCanNode marker label to every node keyed by a can:// id, as an index anchor only — Neo4j property indexes are label-scoped, so MATCH (n) WHERE n.id STARTS WITH $p scans the whole store without one. STARTS WITH is index-backed on a range index; CONTAINS/ENDS WITH are not.
MAJOR graph-contract bump: a property is removed.
Grep this analyzer's SDK Neo4j backend for _module so a consumer is updated in the same train. The removal is not conditional on the answer — that was decided — but a surprise later is worse than a check now.
Two things not to get wrong
Prefix boundary.can://java/<app> also prefixes can://java/<app>Xtra. Match descendants on prefix + '/' and the node itself by equality.
Empty prefix.STARTS WITH '' matches every node in the database. Refuse a null or empty application id rather than falling through.
Goals
Both destructive statements scoped by id prefix
_module gone from projection, catalog and indexes
Marker label added and used as the index anchor
A test showing a second application in this same language, with a colliding module path, survives a push
The null/empty application id case is refused
Graph contract MAJOR bump
Definition of done
A test that fails before and passes after
The emitted graph is unchanged apart from _module's removal and the added marker label, shown by diffing a fixture projection
Activity
can://id prefix; retire_module.github#50