Imported from cogpy/cogflu (
AGENTS.md). Install upstream withnpx skills add cogpy/cogflu. Copyright stays with the author.
AGENTS.md
Cursor Cloud specific instructions
This repo ("Influent" / "Cogflu") is a Java 17 + Maven multi-module monorepo (visual
analytics for transaction flow). Standard commands live in README.md,
BUILD_STATUS.md, and .github/workflows/maven-full-pipeline.yml; the notes below only
capture non-obvious, environment-specific gotchas.
Toolchain (already provisioned in the VM snapshot)
- JDK 17 is mandatory. The Maven Enforcer plugin hard-locks the JVM to
[17,18)(see rootpom.xml), so the base image's JDK 21 is rejected. JDK 17 lives at/opt/java/jdk-17; Maven 3.9.9 at/opt/maven(alsomvnonPATH).JAVA_HOMEandPATHare exported from~/.bashrc. If you launch a non-login shell, setJAVA_HOME=/opt/java/jdk-17explicitly.
Build / lint / test (run from repo root)
- Build all 23 modules:
mvn -B -ntp clean install -DskipTests(~2 min). - Lint (Spotless / google-java-format):
mvn -B -ntp spotless:check(auto-fix withmvn spotless:apply). Spotless also runs as part ofinstall. - Tests:
mvn -B -ntp test. - Flaky tests: clustering tests in
ensemble-clustering(notablycom.oculusinfo.ml.distance.TestTemporalDistanceand the hierarchical cluster-order assertions) can intermittently fail in a full reactormvn testbecause bucket/cluster ordering is non-deterministic. They pass reliably when the module is run in isolation (mvn test -pl ensemble-clustering -Dtest=...); re-run before assuming a real regression. The root-levelDebugClustering.javais a print-only note about this ordering behaviour.
Running the example web apps — important caveats
The example WAR apps (kiva, bitcoin, walker, influent-app) do not run
end-to-end out of the box:
mvn jetty:runis broken: the modules pin the legacyorg.mortbay.jetty:jetty-maven-plugin:8.1.16but add ajetty-server:12.xdependency, causing a Jetty linkage error (NoClassDefFound/Invocable).- The built WARs fail to start on a servlet container (e.g. Tomcat 9) because of
packaged dependency incompatibilities: Guice 7 core is bundled alongside Guava 23
and the Guice 4.2.3
guice-servlet/guice-multibindingsextensions, which are mutually incompatible (NoSuchMethodError: ImmutableMap$Builder.buildOrThrow, then a GuiceCreationException). - External backends are decommissioned:
solr.uncharted.softwareno longer resolves (entity search is impossible); only the MSSQL demo hostinfluent.uncharted.software:1433still answers. There is no bundled sample data. - Net: a working web UI would require fixing the repo's dependency versions AND
standing up a local Solr + database with imported data (see
docs/src/community/developer-docs/how-to/). Treat that as a project change, not routine dev-env setup.
Exercising core functionality without the web stack
Influent's core "dynamic entity clustering" is the ensemble-clustering library and
runs with no external services. Hello-world demo (no external deps):
mvn -q -pl ensemble-clustering test-compile
mvn -q -pl ensemble-clustering dependency:build-classpath \
-Dmdep.outputFile=/tmp/ec-cp.txt -DincludeScope=test
java -cp "ensemble-clustering/target/classes:ensemble-clustering/target/test-classes:$(cat /tmp/ec-cp.txt)" \
com.oculusinfo.ml.unsupervised.EntityClusteringDemo
Source:
ensemble-clustering/src/test/java/com/oculusinfo/ml/unsupervised/EntityClusteringDemo.java
(same package as the other unsupervised demos).
Other subprojects
graphrag/ is a separate embedded Python project (Microsoft GraphRAG) with its own
toolchain; it is not part of the Maven reactor.