Cross-Domain Dependencies
The "glue" problem Jnkn solves.
The Problem
Modern systems span multiple domains:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Python │ │ Terraform │ │ Kubernetes │
│ Service │ │ Infra │ │ Manifests │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
└───────────────────┴───────────────────┘
│
??? Dependencies ???
Each domain has its own tools:
| Domain | Tools | Blind Spot |
|---|---|---|
| Python | pytest, mypy | Doesn't know about infra |
| Terraform | terraform plan | Doesn't know what code uses resources |
| Kubernetes | kubectl, helm | Doesn't know what secrets code expects |
No tool checks across domains.
Real-World Scenarios
Scenario 1: Renamed Variable
# Before
output "db_host" { value = aws_rds.main.endpoint }
# After (renamed)
output "database_host" { value = aws_rds.main.endpoint }
Terraform plan: ✅ Success
Python tests: ✅ Success (mocked)
Production: 💥 Crash
Scenario 2: Deleted Secret
Scenario 3: Schema Change
Why This Happens
- No explicit links — Code references env vars by string, not by import
- Convention-based —
DATABASE_URLin code is expected to match infra output - Different ownership — Platform team manages infra, app team manages code
- Async changes — Changes merged at different times
How Jnkn Helps
Jnkn creates implicit links based on naming:
graph LR
subgraph Python
E[env:DATABASE_URL]
end
subgraph Terraform
T[output.database_url]
end
E -.->|"token match<br/>0.92 confidence"| T
Now when you run:
You see:
The Stitching Process
graph TD
P[Parse All Files] --> N[Extract Nodes]
N --> T[Tokenize Names]
T --> M[Match Tokens]
M --> C[Calculate Confidence]
C --> E[Create Edges]
- Parse — Find all env vars, resources, etc.
- Tokenize —
DATABASE_URL→[database, url] - Match — Find nodes with overlapping tokens
- Score — Calculate match confidence
- Link — Create edges above threshold
Limitations
Jnkn uses lexical matching, not semantic understanding:
| Can Detect | Cannot Detect |
|---|---|
DB_HOST ↔ db_host |
IAM role → S3 permission |
REDIS_URL ↔ redis_cluster |
Table size → IOPS limit |
| Name-based connections | Behavioral dependencies |
For semantic understanding, you need runtime observability or explicit documentation.
Best Practices
- Use consistent naming —
DATABASE_URLeverywhere, notDB_URLin one place - Run Jnkn in CI — Catch cross-domain breaks before merge
- Review high-impact changes — Pay attention to blast radius
- Document exceptions — Suppress known false positives with reasons