This document describes breaking changes introduced in each major version and how to migrate your analysis workspace.
v4 is a major release that reorganizes the pipeline into vertical-slice domains and removes several legacy features. The sections below describe each breaking change and the steps to migrate.
What changed (PR #584):
| Before | After |
|---|---|
requirements.txt |
pyproject.toml + uv.lock |
scripts/activatePythonEnvironment.sh |
scripts/activateUvEnvironment.sh |
USE_VIRTUAL_PYTHON_ENVIRONMENT_VENV=true |
PYTHON_PACKAGE_MANAGER=uv (default) |
PYTHON_ENVIRONMENT_FILE=<path> |
removed |
Migration steps:
-
Default (uv): Install
uvif not already present: https://docs.astral.sh/uv/getting-started/installation/. Once installed, no further action is needed —uvis the new default. -
conda users: Set
PYTHON_PACKAGE_MANAGER=condain your environment or pass it toanalyze.sh. -
GitHub Actions: Remove or replace
use-venv_virtual_python_environment: true—uvis now the default, so you can simply omit the input, or set it explicitly:python-package-manager: 'uv'
Former conda users (previously relying on
use-venv_virtual_python_environment: false) must now set:python-package-manager: 'conda'
-
Custom scripts that source
scripts/activatePythonEnvironment.shmust be updated to sourcescripts/activateUvEnvironment.shinstead. -
Remove any reference to
USE_VIRTUAL_PYTHON_ENVIRONMENT_VENVandPYTHON_ENVIRONMENT_FILEfrom your environment configuration.
What changed (PR #577):
--report Jupyteris no longer a valid report type.scripts/reports/compilations/JupyterReports.shis deleted.scripts/executeJupyterNotebook.shandscripts/executeJupyterNotebookReport.share deleted.- Environment variables
ENABLE_JUPYTER_NOTEBOOK_PDF_GENERATIONandJUPYTER_NOTEBOOK_DIRECTORYare removed. - GitHub Actions public workflow input
jupyter-pdfis removed. - Chromium headless browser is no longer required.
- The 25
explore/*.ipynbnotebooks remain available for interactive local use only and are not executed by the pipeline.
Migration steps:
- Remove any invocation of
analyze.sh --report Jupyterfrom your scripts or CI configuration. - Remove
ENABLE_JUPYTER_NOTEBOOK_PDF_GENERATIONandJUPYTER_NOTEBOOK_DIRECTORYfrom your environment. - Remove
jupyter-pdffrom your GitHub Actions workflow inputs. - Uninstall Chromium if it was only installed for PDF generation.
Several report output directories have been renamed as part of the domain reorganization.
3a. Internal dependencies (PR #552)
| Before | After |
|---|---|
reports/internal-dependencies-csv/ |
reports/internal-dependencies/<scope>/ |
reports/path-finding-csv/ |
reports/internal-dependencies/<scope>/ |
reports/topology-csv/ |
reports/internal-dependencies/<scope>/ |
reports/internal-dependencies-visualization/ |
reports/internal-dependencies/<scope>/Graph_Visualizations/ |
reports/path-finding-visualization/ |
reports/internal-dependencies/<scope>/Graph_Visualizations/ |
<scope> is one of: Java_Artifact, Java_Package, Java_Type, Typescript_Module, NPM_NonDevPackage, NPM_DevPackage.
3b. Git history (PR #559)
| Before | After |
|---|---|
reports/git-history-csv/ |
reports/git-history/ |
3c. Java (PR #568)
| Before | After |
|---|---|
reports/java-csv/ |
reports/java/ |
reports/artifact-dependencies-csv/ |
reports/java/ |
3d. Cyclic dependencies (PR #581)
| Before | After |
|---|---|
reports/internal-dependencies/<scope>/Cyclic_Dependencies*.csv |
reports/cyclic-dependencies/<scope>/ |
Migration steps:
- Update any downstream consumers (CI jobs, dashboards, archival scripts) that reference the old output paths.
- The old directories are no longer created. If you archive or publish reports, update the source paths accordingly.
What changed (PR #586):
To reduce baseline analysis time, three domains are now skipped by default:
anomaly-detection(machine learning model training)node-embeddings(graph embedding generation)graph-algorithms(community detection, centrality algorithms)
When running analyze.sh without --domain, these domains are automatically excluded. The remaining seven analysis domains (overview, external-dependencies, internal-dependencies, cyclic-dependencies, java, git-history, archetypes) and the neo4j-management support domain run normally.
Migration steps:
-
To include all domains: Pass
--exclude-domain "":analyze.sh --exclude-domain "" -
To include only compute-intensive domains: Use
--domain:analyze.sh --domain anomaly-detection --keep-running analyze.sh --domain node-embeddings --keep-running analyze.sh --domain graph-algorithms --keep-running
-
To customize exclusions: List specific domains to skip:
analyze.sh --exclude-domain "node-embeddings,graph-algorithms" -
In GitHub Actions: The public workflow now accepts
run-all-domains: trueto include all domains by default:run-all-domains: true
What changed (PR #581):
- A new
domains/cyclic-dependencies/domain now owns all cyclic dependency analysis. - Cyclic dependency Cypher queries moved from
domains/internal-dependencies/queries/cyclic-dependencies/todomains/cyclic-dependencies/queries/. - The
internal-dependenciesreport no longer includes a "Cyclic Dependencies" section. - Output CSV files for cyclic dependency results are now written to
reports/cyclic-dependencies/<scope>/instead ofreports/internal-dependencies/<scope>/.
Migration steps:
- Update any report consumers that read
Cyclic_Dependencies*.csvfiles fromreports/internal-dependencies/to read fromreports/cyclic-dependencies/instead. - If you reference cyclic dependency queries by path, update the path from
domains/internal-dependencies/queries/cyclic-dependencies/todomains/cyclic-dependencies/queries/. - No changes to
analyze.shinvocations are required — both domains run by default.
What changed (PR #580):
A new domains/archetypes/ domain now owns Authority, Bottleneck, and Hub archetype detection. The anomaly-detection domain no longer assigns these labels or rank properties.
Neo4j node property renames:
| Before | After |
|---|---|
Mark4TopAnomalyAuthority |
Mark4TopArchetypeAuthority |
Mark4TopAnomalyBottleneck |
Mark4TopArchetypeBottleneck |
Mark4TopAnomalyHub |
Mark4TopArchetypeHub |
anomalyAuthorityRank |
archetypeAuthorityRank |
anomalyBottleneckRank |
archetypeBottleneckRank |
anomalyHubRank |
archetypeHubRank |
Migration steps:
-
If your Cypher queries or application code reference the old property names, rename them to the new names listed above.
-
If you persist Neo4j data across pipeline runs and have existing nodes with the old properties, run the following Cypher to migrate them:
MATCH (n) WHERE n.Mark4TopAnomalyAuthority IS NOT NULL SET n.Mark4TopArchetypeAuthority = n.Mark4TopAnomalyAuthority REMOVE n.Mark4TopAnomalyAuthority MATCH (n) WHERE n.Mark4TopAnomalyBottleneck IS NOT NULL SET n.Mark4TopArchetypeBottleneck = n.Mark4TopAnomalyBottleneck REMOVE n.Mark4TopAnomalyBottleneck MATCH (n) WHERE n.Mark4TopAnomalyHub IS NOT NULL SET n.Mark4TopArchetypeHub = n.Mark4TopAnomalyHub REMOVE n.Mark4TopAnomalyHub MATCH (n) WHERE n.anomalyAuthorityRank IS NOT NULL SET n.archetypeAuthorityRank = n.anomalyAuthorityRank REMOVE n.anomalyAuthorityRank MATCH (n) WHERE n.anomalyBottleneckRank IS NOT NULL SET n.archetypeBottleneckRank = n.anomalyBottleneckRank REMOVE n.anomalyBottleneckRank MATCH (n) WHERE n.anomalyHubRank IS NOT NULL SET n.archetypeHubRank = n.anomalyHubRank REMOVE n.anomalyHubRank
-
No changes to
analyze.shinvocations are required — both domains run by default.
What changed (PR #555):
| Before | After |
|---|---|
scripts/configuration/template-neo4j.conf |
domains/neo4j-management/configuration/template-neo4j.conf |
scripts/configuration/template-neo4j-high-memory.conf |
domains/neo4j-management/configuration/template-neo4j-high-memory.conf |
scripts/configuration/template-neo4j-low-memory.conf |
domains/neo4j-management/configuration/template-neo4j-low-memory.conf |
scripts/configuration/template-neo4j-v4.conf |
domains/neo4j-management/configuration/template-neo4j-v4.conf |
scripts/configuration/template-neo4j-v4-low-memory.conf |
domains/neo4j-management/configuration/template-neo4j-v4-low-memory.conf |
scripts/startNeo4j.sh and scripts/stopNeo4j.sh are kept as backward-compatible redirect stubs — existing analysis workspaces that call these scripts do not need to be updated.
Migration steps:
- If you reference the configuration template files directly (e.g. to copy or override them), update the paths from
scripts/configuration/todomains/neo4j-management/configuration/. - No changes needed for
scripts/startNeo4j.shorscripts/stopNeo4j.shcallers.
What changed (PR #555):
| Before | After |
|---|---|
scripts/SCRIPTS.md |
SCRIPTS.md (repo root) |
scripts/ENVIRONMENT_VARIABLES.md |
ENVIRONMENT_VARIABLES.md (repo root) |
cypher/CYPHER.md |
CYPHER.md (repo root) |
Migration steps:
- Update any bookmarks, links, or documentation that reference the old paths.
What changed (PR #559):
| Before | After |
|---|---|
scripts/importGit.sh |
domains/git-history/import/importGit.sh |
Migration steps:
- Update any invocations of
scripts/importGit.shto usedomains/git-history/import/importGit.sh. - Update links in documentation or CI scripts accordingly.