@claude — Neo4j consumer isolation: assess + implement declarative per-consumer provisioning
Context
The shared Neo4j is Community edition (5.26.27), which supports exactly one database (
eo4j) and no \CREATE USER/RBAC (both Enterprise-only). As a result, FuzePlan was wired to the shared
eo4j\ database using the shared
eo4j\ admin credentials — functional but completely unisolated. Every consuming repo shares the same admin credentials and the same single database. This is a security and multi-tenancy gap.
Ask
Research, decide, and implement the right path for per-consumer Neo4j isolation:
Option A — Neo4j Enterprise license (preferred if cost is acceptable)
- Enterprise adds multi-database (\CREATE DATABASE fuzeplan) + RBAC (\CREATE USER fuzeplan_user)
- Update the Helm chart to run Enterprise image
- Add a provisioning Job (same pattern as Mongo ask) that creates per-consumer DB + user from a
eo4j.consumers\ values list
- Check Neo4j Enterprise licensing (AuraDB Enterprise? Self-hosted Enterprise? Community is Apache 2 → Enterprise is commercial)
Option B — Dedicated Neo4j instance per tenant (if Enterprise cost is prohibitive)
- Add a second Neo4j StatefulSet in the chart (e.g.
eo4j-fuzeplan) alongside the shared one
- Each consuming repo gets its own instance (full isolation, no license cost)
- Assess resource overhead (Neo4j is heavy — ~1-2 GiB heap per instance)
Option C — Namespace-scoped credentials + prefix convention (stopgap only)
- Keep Community, document that all consumers share the
eo4j\ DB
- Enforce a node/relationship label prefix per consumer (e.g. \FuzePlan_Task) to avoid collisions
- Accept the security limitation; revisit when Enterprise is justified
Acceptance
- A clear recommendation with cost/resource tradeoff for Options A/B/C
- Whichever option is chosen: implemented as a Helm chart change + provisioning Job, declarative and Git-backed
- FuzePlan wired to its isolated Neo4j DB+user (or documented prefix if Option C)
- All FuzeInfra gate checks pass
- \docs/CONSUMER_ONBOARDING_SHARED_CLUSTER.md\ updated with the Neo4j consumer pattern
Reference
- Current Neo4j StatefulSet: \helm/fuzeinfra/templates/databases.yaml\ (search for neo4j section)
- Current credentials: \uzeinfra-secrets\ (\NEO4J_AUTH\ key, format
eo4j/)
- FuzePlan's current connection: \�olt://fuzeinfra-neo4j.fuzeinfra.svc.cluster.local:7687, user=
eo4j, password from fuzeplan-secrets SealedSecret
- Mongo provisioning issue (parallel): see companion issue in this repo (feat(mongo) declarative provisioning)
STATE
@claude — Neo4j consumer isolation: assess + implement declarative per-consumer provisioning
Context
The shared Neo4j is Community edition (5.26.27), which supports exactly one database (
eo4j) and no \CREATE USER/RBAC (both Enterprise-only). As a result, FuzePlan was wired to the shared
eo4j\ database using the shared
eo4j\ admin credentials — functional but completely unisolated. Every consuming repo shares the same admin credentials and the same single database. This is a security and multi-tenancy gap.
Ask
Research, decide, and implement the right path for per-consumer Neo4j isolation:
Option A — Neo4j Enterprise license (preferred if cost is acceptable)
eo4j.consumers\ values list
Option B — Dedicated Neo4j instance per tenant (if Enterprise cost is prohibitive)
eo4j-fuzeplan) alongside the shared one
Option C — Namespace-scoped credentials + prefix convention (stopgap only)
eo4j\ DB
Acceptance
Reference
eo4j/)
eo4j, password from fuzeplan-secrets SealedSecret
STATE