enigma-memory 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/LICENSE +55 -0
  2. package/README.md +379 -0
  3. package/apps/cli/bin/enigma.mjs +1117 -0
  4. package/apps/desktop/src/app.js +1327 -0
  5. package/apps/desktop/src/index.html +1373 -0
  6. package/apps/desktop/src/styles.css +386 -0
  7. package/apps/gateway/bin/enigma-gateway.mjs +52 -0
  8. package/apps/gateway/src/server.mjs +1403 -0
  9. package/apps/native-host/README.md +265 -0
  10. package/apps/native-host/bin/enigma-native-host.mjs +499 -0
  11. package/apps/native-host/manifests/com.enigma.native_host.chrome.json +9 -0
  12. package/apps/native-host/manifests/com.enigma.native_host.edge.json +9 -0
  13. package/apps/native-host/manifests/com.enigma.native_host.firefox.json +9 -0
  14. package/apps/relay/bin/enigma-relay.mjs +52 -0
  15. package/apps/relay/src/server.mjs +1571 -0
  16. package/apps/verifier/bin/enigma-verify.mjs +240 -0
  17. package/deploy/docker-compose.production.example.yml +150 -0
  18. package/deploy/kubernetes/enigma-backend.example.yaml +580 -0
  19. package/package.json +196 -0
  20. package/packages/adapters/PACKAGE_CONTRACT.md +47 -0
  21. package/packages/adapters/src/index.js +183 -0
  22. package/packages/boundary/src/index.js +468 -0
  23. package/packages/connectors/src/index.js +533 -0
  24. package/packages/core/src/index.js +766 -0
  25. package/packages/enterprise/src/index.js +505 -0
  26. package/packages/importers/src/index.js +1083 -0
  27. package/packages/mcp-server/bin/enigma-mcp.mjs +19 -0
  28. package/packages/mcp-server/src/index.js +1185 -0
  29. package/packages/mesh/src/index.js +531 -0
  30. package/packages/metering/PACKAGE_CONTRACT.md +20 -0
  31. package/packages/metering/src/index.js +246 -0
  32. package/packages/optimizer/src/index.js +707 -0
  33. package/packages/passport/src/index.js +651 -0
  34. package/packages/settlement/PACKAGE_CONTRACT.md +28 -0
  35. package/packages/settlement/src/index.js +369 -0
  36. package/packages/storage/PACKAGE_CONTRACT.md +23 -0
  37. package/packages/storage/src/index.js +392 -0
  38. package/packages/vault/src/index.js +904 -0
  39. package/scripts/build-ai-orchestration-plan.mjs +248 -0
  40. package/scripts/build-cloudflare-pages-release-packet.mjs +287 -0
  41. package/scripts/build-cloudflare-token-policy.mjs +239 -0
  42. package/scripts/build-cloudflare-token-request.mjs +314 -0
  43. package/scripts/build-demo-assets.mjs +263 -0
  44. package/scripts/build-edge-backend-workers.mjs +353 -0
  45. package/scripts/build-goal-completion-audit.mjs +398 -0
  46. package/scripts/build-hosted-probe-worker.mjs +191 -0
  47. package/scripts/build-operator-acceptance-packet.mjs +254 -0
  48. package/scripts/build-operator-evidence-starter.mjs +525 -0
  49. package/scripts/build-production-backend-env-kit.mjs +384 -0
  50. package/scripts/build-production-dependency-report.mjs +369 -0
  51. package/scripts/build-production-handoff-packet.mjs +475 -0
  52. package/scripts/build-production-readiness-manifest.mjs +209 -0
  53. package/scripts/build-production-status-board.mjs +297 -0
  54. package/scripts/build-production-storage-migration.mjs +86 -0
  55. package/scripts/build-production-workplan.mjs +371 -0
  56. package/scripts/build-review-packet.mjs +594 -0
  57. package/scripts/check.mjs +419 -0
  58. package/scripts/cloudflare-ops.mjs +1672 -0
  59. package/scripts/cloudflare-secret-env.mjs +128 -0
  60. package/scripts/collect-hosted-backend-live-evidence.mjs +263 -0
  61. package/scripts/infrastructure-readiness.mjs +944 -0
  62. package/scripts/install-enigma-local.mjs +270 -0
  63. package/scripts/memory-optimization-benchmark.mjs +242 -0
  64. package/scripts/monitor-live-endpoints.mjs +358 -0
  65. package/scripts/release-audit.mjs +5588 -0
  66. package/scripts/release-provenance.mjs +250 -0
  67. package/scripts/run-backend-readiness-smoke.mjs +220 -0
  68. package/scripts/validate-backup-restore-drill.mjs +166 -0
  69. package/scripts/validate-cloudflare-credentials.mjs +112 -0
  70. package/scripts/validate-cloudflare-worker-inspect.mjs +179 -0
  71. package/scripts/validate-domain-tls.mjs +248 -0
  72. package/scripts/validate-hosted-backend-live.mjs +319 -0
  73. package/scripts/validate-incident-drill.mjs +221 -0
  74. package/scripts/validate-kms-custody.mjs +235 -0
  75. package/scripts/validate-legal-compliance-approval.mjs +274 -0
  76. package/scripts/validate-monitoring-alerting.mjs +263 -0
  77. package/scripts/validate-network-access-policy.mjs +285 -0
  78. package/scripts/validate-operator-acceptance.mjs +298 -0
  79. package/scripts/validate-production-manifests.mjs +325 -0
  80. package/scripts/validate-public-site-security.mjs +252 -0
  81. package/scripts/validate-security-threat-model.mjs +285 -0
  82. package/scripts/validate-service-settlement.mjs +256 -0
  83. package/scripts/validate-support-sla.mjs +190 -0
  84. package/scripts/validate-tenant-policy-approval.mjs +228 -0
  85. package/scripts/validate-usage-metering.mjs +224 -0
  86. package/scripts/validate-whitepaper-claims.mjs +166 -0
  87. package/specs/boundary-manifest-v1.schema.json +35 -0
  88. package/specs/capsule-v1.schema.json +55 -0
  89. package/specs/claim-boundary-manifest-v1.schema.json +22 -0
  90. package/specs/connector-profile-v1.schema.json +62 -0
  91. package/specs/deletion-tombstone-v1.schema.json +26 -0
  92. package/specs/enterprise-policy-v1.schema.json +59 -0
  93. package/specs/gateway-request-v1.schema.json +32 -0
  94. package/specs/goal-completion-audit-v1.schema.json +70 -0
  95. package/specs/hosted-backend-live-evidence-v1.schema.json +147 -0
  96. package/specs/import-report-v1.schema.json +214 -0
  97. package/specs/infrastructure-readiness-manifest-v1.schema.json +130 -0
  98. package/specs/memory-event-v1.schema.json +42 -0
  99. package/specs/mesh-node-v1.schema.json +126 -0
  100. package/specs/passport-v1.schema.json +50 -0
  101. package/specs/production-handoff-packet-v1.schema.json +149 -0
  102. package/specs/receipt-v1.schema.json +61 -0
  103. package/specs/relay-record-v1.schema.json +43 -0
  104. package/specs/state-checkpoint-v1.schema.json +37 -0
  105. package/specs/trust-bundle-v1.schema.json +56 -0
@@ -0,0 +1,580 @@
1
+ # Enigma backend Kubernetes reference manifest.
2
+ # This is production-shaped scaffolding only. It is not backend availability evidence.
3
+ # Operators must provide real storage, KMS/signing material, SIEM export, backups,
4
+ # monitoring, ingress hosts/TLS, and acceptance evidence before any go-live decision.
5
+ ---
6
+ apiVersion: v1
7
+ kind: Namespace
8
+ metadata:
9
+ name: enigma-backend
10
+ labels:
11
+ app.kubernetes.io/part-of: enigma
12
+ pod-security.kubernetes.io/enforce: restricted
13
+ pod-security.kubernetes.io/audit: restricted
14
+ pod-security.kubernetes.io/warn: restricted
15
+ ---
16
+ apiVersion: v1
17
+ kind: ConfigMap
18
+ metadata:
19
+ name: enigma-backend-config
20
+ namespace: enigma-backend
21
+ labels:
22
+ app.kubernetes.io/part-of: enigma
23
+ data:
24
+ NODE_ENV: "production"
25
+ ENIGMA_BACKEND_MODE: "production"
26
+ ENIGMA_REQUIRE_EXTERNAL_STORAGE: "true"
27
+ ENIGMA_REQUIRE_EXTERNAL_KMS: "true"
28
+ ENIGMA_REQUIRE_SIEM_EXPORT: "true"
29
+ ENIGMA_REQUIRE_BACKUP_TARGET: "true"
30
+ ENIGMA_DISABLE_LOCAL_DEMO_FALLBACK: "true"
31
+ ENIGMA_REQUIRE_OPERATOR_ACCEPTANCE_EVIDENCE: "true"
32
+ ENIGMA_READINESS_FAIL_CLOSED: "true"
33
+ ENIGMA_RELAY_PUBLIC_BASE_URL: "https://relay.example.invalid"
34
+ ENIGMA_GATEWAY_PUBLIC_BASE_URL: "https://gateway.example.invalid"
35
+ ENIGMA_ADMIN_BASE_URL: "https://admin.example.invalid"
36
+ ENIGMA_RELAY_BACKEND_HOST_REF: "operator-required-relay-backend-host-ref"
37
+ ENIGMA_RELAY_DNS_TLS_REF: "operator-required-relay-dns-tls-ref"
38
+ ENIGMA_RELAY_RUNTIME_AUTH_REF: "operator-required-relay-runtime-auth-ref"
39
+ ENIGMA_RELAY_MONITORING_REF: "operator-required-relay-monitoring-ref"
40
+ ENIGMA_GATEWAY_BACKEND_HOST_REF: "operator-required-gateway-backend-host-ref"
41
+ ENIGMA_GATEWAY_DNS_TLS_REF: "operator-required-gateway-dns-tls-ref"
42
+ ENIGMA_GATEWAY_MONITORING_REF: "operator-required-gateway-monitoring-ref"
43
+ ENIGMA_GATEWAY_ADMIN_AUTH_REF: "operator-required-gateway-admin-auth-ref"
44
+ ENIGMA_GATEWAY_DATA_PLANE_AUTH_REF: "operator-required-gateway-data-plane-auth-ref"
45
+ ENIGMA_GATEWAY_ADMIN_AUTH_BEARER_SHA256: "operator-required-admin-bearer-sha256"
46
+ ENIGMA_GATEWAY_DATA_PLANE_AUTH_BEARER_SHA256: "operator-required-data-plane-bearer-sha256"
47
+ ENIGMA_BACKUP_TARGET_REF: "operator-required-backup-target-ref"
48
+ ENIGMA_NETWORK_ACCESS_POLICY_REF: "operator-required-network-access-policy-ref"
49
+ ENIGMA_KMS_CUSTODY_REF: "operator-required-kms-custody-ref"
50
+ ENIGMA_TENANT_POLICY_APPROVAL_REF: "operator-required-tenant-policy-approval-ref"
51
+ ENIGMA_USAGE_METERING_REF: "operator-required-usage-metering-ref"
52
+ ENIGMA_SERVICE_SETTLEMENT_REF: "operator-required-service-settlement-ref"
53
+ ENIGMA_MONITORING_ALERTING_REF: "operator-required-monitoring-alerting-ref"
54
+ ENIGMA_SIEM_REF: "operator-required-siem-ref"
55
+ ENIGMA_PUBLIC_SITE_SECURITY_REF: "operator-required-public-site-security-ref"
56
+ ENIGMA_SECURITY_THREAT_MODEL_REF: "operator-required-security-threat-model-ref"
57
+ ENIGMA_LEGAL_COMPLIANCE_APPROVAL_REF: "operator-required-legal-compliance-approval-ref"
58
+ ENIGMA_SUPPORT_SLA_REF: "operator-required-support-sla-ref"
59
+ ENIGMA_INCIDENT_DRILL_REF: "operator-required-incident-drill-ref"
60
+ ENIGMA_BACKUP_RESTORE_DRILL_REF: "operator-required-backup-restore-drill-ref"
61
+ ENIGMA_OPERATOR_ACCEPTANCE_DECISION: "operator-required-go-decision"
62
+ ---
63
+ apiVersion: v1
64
+ kind: Secret
65
+ metadata:
66
+ name: enigma-backend-secrets
67
+ namespace: enigma-backend
68
+ labels:
69
+ app.kubernetes.io/part-of: enigma
70
+ type: Opaque
71
+ # Placeholder only: create required keys out-of-band with the cluster secret manager.
72
+ # Expected keys include:
73
+ # - relay-signing-key
74
+ # - gateway-signing-key
75
+ # - external-storage-dsn
76
+ # - kms-key-ref
77
+ # - siem-export-endpoint
78
+ # - backup-target-uri
79
+ # - operator-acceptance-evidence-uri
80
+ ---
81
+ apiVersion: apps/v1
82
+ kind: Deployment
83
+ metadata:
84
+ name: enigma-relay
85
+ namespace: enigma-backend
86
+ labels:
87
+ app.kubernetes.io/name: enigma-relay
88
+ app.kubernetes.io/part-of: enigma
89
+ spec:
90
+ replicas: 2
91
+ selector:
92
+ matchLabels:
93
+ app.kubernetes.io/name: enigma-relay
94
+ template:
95
+ metadata:
96
+ labels:
97
+ app.kubernetes.io/name: enigma-relay
98
+ app.kubernetes.io/part-of: enigma
99
+ spec:
100
+ automountServiceAccountToken: false
101
+ securityContext:
102
+ runAsNonRoot: true
103
+ runAsUser: 1000
104
+ runAsGroup: 1000
105
+ fsGroup: 1000
106
+ seccompProfile:
107
+ type: RuntimeDefault
108
+ containers:
109
+ - name: relay
110
+ image: ghcr.io/enigma-ai/enigma:operator-pinned-digest-required
111
+ imagePullPolicy: IfNotPresent
112
+ command: ["enigma-relay"]
113
+ args: ["serve", "--host", "0.0.0.0", "--port", "8787"]
114
+ ports:
115
+ - name: http
116
+ containerPort: 8787
117
+ envFrom:
118
+ - configMapRef:
119
+ name: enigma-backend-config
120
+ env:
121
+ - name: ENIGMA_RELAY_SIGNING_KEY_REF
122
+ valueFrom:
123
+ secretKeyRef:
124
+ name: enigma-backend-secrets
125
+ key: relay-signing-key
126
+ optional: false
127
+ - name: ENIGMA_EXTERNAL_STORAGE_DSN
128
+ valueFrom:
129
+ secretKeyRef:
130
+ name: enigma-backend-secrets
131
+ key: external-storage-dsn
132
+ optional: false
133
+ - name: ENIGMA_KMS_KEY_REF
134
+ valueFrom:
135
+ secretKeyRef:
136
+ name: enigma-backend-secrets
137
+ key: kms-key-ref
138
+ optional: false
139
+ - name: ENIGMA_BACKUP_TARGET_URI
140
+ valueFrom:
141
+ secretKeyRef:
142
+ name: enigma-backend-secrets
143
+ key: backup-target-uri
144
+ optional: false
145
+ - name: ENIGMA_OPERATOR_ACCEPTANCE_EVIDENCE_URI
146
+ valueFrom:
147
+ secretKeyRef:
148
+ name: enigma-backend-secrets
149
+ key: operator-acceptance-evidence-uri
150
+ optional: false
151
+ readinessProbe:
152
+ httpGet:
153
+ path: /readyz
154
+ port: http
155
+ periodSeconds: 10
156
+ timeoutSeconds: 2
157
+ failureThreshold: 3
158
+ livenessProbe:
159
+ httpGet:
160
+ path: /livez
161
+ port: http
162
+ periodSeconds: 30
163
+ timeoutSeconds: 2
164
+ failureThreshold: 3
165
+ resources:
166
+ requests:
167
+ cpu: 100m
168
+ memory: 128Mi
169
+ limits:
170
+ cpu: 500m
171
+ memory: 512Mi
172
+ securityContext:
173
+ allowPrivilegeEscalation: false
174
+ readOnlyRootFilesystem: true
175
+ capabilities:
176
+ drop: ["ALL"]
177
+ ---
178
+ apiVersion: v1
179
+ kind: Service
180
+ metadata:
181
+ name: enigma-relay
182
+ namespace: enigma-backend
183
+ labels:
184
+ app.kubernetes.io/name: enigma-relay
185
+ app.kubernetes.io/part-of: enigma
186
+ spec:
187
+ type: ClusterIP
188
+ selector:
189
+ app.kubernetes.io/name: enigma-relay
190
+ ports:
191
+ - name: http
192
+ port: 8787
193
+ targetPort: http
194
+ ---
195
+ apiVersion: policy/v1
196
+ kind: PodDisruptionBudget
197
+ metadata:
198
+ name: enigma-relay
199
+ namespace: enigma-backend
200
+ labels:
201
+ app.kubernetes.io/name: enigma-relay
202
+ app.kubernetes.io/part-of: enigma
203
+ spec:
204
+ minAvailable: 1
205
+ selector:
206
+ matchLabels:
207
+ app.kubernetes.io/name: enigma-relay
208
+ ---
209
+ apiVersion: apps/v1
210
+ kind: Deployment
211
+ metadata:
212
+ name: enigma-gateway
213
+ namespace: enigma-backend
214
+ labels:
215
+ app.kubernetes.io/name: enigma-gateway
216
+ app.kubernetes.io/part-of: enigma
217
+ spec:
218
+ replicas: 2
219
+ selector:
220
+ matchLabels:
221
+ app.kubernetes.io/name: enigma-gateway
222
+ template:
223
+ metadata:
224
+ labels:
225
+ app.kubernetes.io/name: enigma-gateway
226
+ app.kubernetes.io/part-of: enigma
227
+ spec:
228
+ automountServiceAccountToken: false
229
+ securityContext:
230
+ runAsNonRoot: true
231
+ runAsUser: 1000
232
+ runAsGroup: 1000
233
+ fsGroup: 1000
234
+ seccompProfile:
235
+ type: RuntimeDefault
236
+ containers:
237
+ - name: gateway
238
+ image: ghcr.io/enigma-ai/enigma:operator-pinned-digest-required
239
+ imagePullPolicy: IfNotPresent
240
+ command: ["enigma-gateway"]
241
+ args: ["serve", "--host", "0.0.0.0", "--port", "8797"]
242
+ ports:
243
+ - name: http
244
+ containerPort: 8797
245
+ envFrom:
246
+ - configMapRef:
247
+ name: enigma-backend-config
248
+ env:
249
+ - name: ENIGMA_GATEWAY_SIGNING_KEY_REF
250
+ valueFrom:
251
+ secretKeyRef:
252
+ name: enigma-backend-secrets
253
+ key: gateway-signing-key
254
+ optional: false
255
+ - name: ENIGMA_KMS_KEY_REF
256
+ valueFrom:
257
+ secretKeyRef:
258
+ name: enigma-backend-secrets
259
+ key: kms-key-ref
260
+ optional: false
261
+ - name: ENIGMA_EXTERNAL_STORAGE_DSN
262
+ valueFrom:
263
+ secretKeyRef:
264
+ name: enigma-backend-secrets
265
+ key: external-storage-dsn
266
+ optional: false
267
+ - name: ENIGMA_SIEM_EXPORT_ENDPOINT
268
+ valueFrom:
269
+ secretKeyRef:
270
+ name: enigma-backend-secrets
271
+ key: siem-export-endpoint
272
+ optional: false
273
+ - name: ENIGMA_BACKUP_TARGET_URI
274
+ valueFrom:
275
+ secretKeyRef:
276
+ name: enigma-backend-secrets
277
+ key: backup-target-uri
278
+ optional: false
279
+ - name: ENIGMA_OPERATOR_ACCEPTANCE_EVIDENCE_URI
280
+ valueFrom:
281
+ secretKeyRef:
282
+ name: enigma-backend-secrets
283
+ key: operator-acceptance-evidence-uri
284
+ optional: false
285
+ readinessProbe:
286
+ httpGet:
287
+ path: /readyz
288
+ port: http
289
+ periodSeconds: 10
290
+ timeoutSeconds: 2
291
+ failureThreshold: 3
292
+ livenessProbe:
293
+ httpGet:
294
+ path: /livez
295
+ port: http
296
+ periodSeconds: 30
297
+ timeoutSeconds: 2
298
+ failureThreshold: 3
299
+ resources:
300
+ requests:
301
+ cpu: 100m
302
+ memory: 128Mi
303
+ limits:
304
+ cpu: 500m
305
+ memory: 512Mi
306
+ securityContext:
307
+ allowPrivilegeEscalation: false
308
+ readOnlyRootFilesystem: true
309
+ capabilities:
310
+ drop: ["ALL"]
311
+ ---
312
+ apiVersion: v1
313
+ kind: Service
314
+ metadata:
315
+ name: enigma-gateway
316
+ namespace: enigma-backend
317
+ labels:
318
+ app.kubernetes.io/name: enigma-gateway
319
+ app.kubernetes.io/part-of: enigma
320
+ spec:
321
+ type: ClusterIP
322
+ selector:
323
+ app.kubernetes.io/name: enigma-gateway
324
+ ports:
325
+ - name: http
326
+ port: 8797
327
+ targetPort: http
328
+ ---
329
+ apiVersion: policy/v1
330
+ kind: PodDisruptionBudget
331
+ metadata:
332
+ name: enigma-gateway
333
+ namespace: enigma-backend
334
+ labels:
335
+ app.kubernetes.io/name: enigma-gateway
336
+ app.kubernetes.io/part-of: enigma
337
+ spec:
338
+ minAvailable: 1
339
+ selector:
340
+ matchLabels:
341
+ app.kubernetes.io/name: enigma-gateway
342
+ ---
343
+ # Public ingress is intentionally path-bounded. Do not enable catch-all routing;
344
+ # publish only the explicitly reviewed health endpoints here.
345
+ apiVersion: networking.k8s.io/v1
346
+ kind: Ingress
347
+ metadata:
348
+ name: enigma-public
349
+ namespace: enigma-backend
350
+ annotations:
351
+ kubernetes.io/ingress.class: operator-selected-public-ingress-class
352
+ cert-manager.io/cluster-issuer: operator-selected-issuer
353
+ enigma.ai/operator-note: public ingress exposes exact /readyz and /livez only; no root, admin, or data-plane routing
354
+ spec:
355
+ tls:
356
+ - hosts:
357
+ - relay.example.invalid
358
+ - gateway.example.invalid
359
+ secretName: operator-public-tls-secret
360
+ rules:
361
+ - host: relay.example.invalid
362
+ http:
363
+ paths:
364
+ - path: /readyz
365
+ pathType: Exact
366
+ backend:
367
+ service:
368
+ name: enigma-relay
369
+ port:
370
+ name: http
371
+ - path: /livez
372
+ pathType: Exact
373
+ backend:
374
+ service:
375
+ name: enigma-relay
376
+ port:
377
+ name: http
378
+ - host: gateway.example.invalid
379
+ http:
380
+ paths:
381
+ - path: /readyz
382
+ pathType: Exact
383
+ backend:
384
+ service:
385
+ name: enigma-gateway
386
+ port:
387
+ name: http
388
+ - path: /livez
389
+ pathType: Exact
390
+ backend:
391
+ service:
392
+ name: enigma-gateway
393
+ port:
394
+ name: http
395
+ ---
396
+ # Private/admin ingress placeholder. Keep this controller internal-only and add
397
+ # operator-managed auth, allowlisted source networks, audit logging, and matching
398
+ # NetworkPolicy before enabling relay/gateway admin or data-plane routes.
399
+ apiVersion: networking.k8s.io/v1
400
+ kind: Ingress
401
+ metadata:
402
+ name: enigma-admin
403
+ namespace: enigma-backend
404
+ annotations:
405
+ kubernetes.io/ingress.class: operator-selected-private-ingress-class
406
+ cert-manager.io/cluster-issuer: operator-selected-issuer
407
+ enigma.ai/operator-note: private/admin ingress placeholder; require auth, private network reachability, audit logging, and NetworkPolicy
408
+ spec:
409
+ tls:
410
+ - hosts:
411
+ - admin.example.invalid
412
+ secretName: operator-admin-tls-secret
413
+ rules:
414
+ - host: admin.example.invalid
415
+ http:
416
+ # Non-health relay/gateway routes are private placeholders only. If the
417
+ # backing service expects root-relative paths, configure the private
418
+ # ingress controller's rewrite/auth policy out-of-band; never mirror
419
+ # these data-plane or admin routes on the public ingress.
420
+ paths:
421
+ - path: /relay
422
+ pathType: Prefix
423
+ backend:
424
+ service:
425
+ name: enigma-relay
426
+ port:
427
+ name: http
428
+ - path: /witness
429
+ pathType: Prefix
430
+ backend:
431
+ service:
432
+ name: enigma-relay
433
+ port:
434
+ name: http
435
+ - path: /pairing
436
+ pathType: Prefix
437
+ backend:
438
+ service:
439
+ name: enigma-relay
440
+ port:
441
+ name: http
442
+ - path: /gateway
443
+ pathType: Prefix
444
+ backend:
445
+ service:
446
+ name: enigma-gateway
447
+ port:
448
+ name: http
449
+ - path: /policy
450
+ pathType: Exact
451
+ backend:
452
+ service:
453
+ name: enigma-gateway
454
+ port:
455
+ name: http
456
+ - path: /siem/export
457
+ pathType: Exact
458
+ backend:
459
+ service:
460
+ name: enigma-gateway
461
+ port:
462
+ name: http
463
+ ---
464
+ apiVersion: networking.k8s.io/v1
465
+ kind: NetworkPolicy
466
+ metadata:
467
+ name: enigma-default-deny
468
+ namespace: enigma-backend
469
+ labels:
470
+ app.kubernetes.io/part-of: enigma
471
+ spec:
472
+ podSelector: {}
473
+ policyTypes:
474
+ - Ingress
475
+ - Egress
476
+ ---
477
+ apiVersion: networking.k8s.io/v1
478
+ kind: NetworkPolicy
479
+ metadata:
480
+ name: enigma-allow-ingress-controllers-to-services
481
+ namespace: enigma-backend
482
+ labels:
483
+ app.kubernetes.io/part-of: enigma
484
+ spec:
485
+ podSelector:
486
+ matchExpressions:
487
+ - key: app.kubernetes.io/name
488
+ operator: In
489
+ values: ["enigma-relay", "enigma-gateway"]
490
+ policyTypes:
491
+ - Ingress
492
+ # Placeholder: NetworkPolicy is controller-level, not HTTP path-level. Keep the
493
+ # public controller bound to the exact /readyz and /livez paths above, and replace the
494
+ # private selector with the internal/admin ingress namespace plus auth/source
495
+ # allowlists before enabling admin or data-plane routes.
496
+ ingress:
497
+ - from:
498
+ - namespaceSelector:
499
+ matchLabels:
500
+ kubernetes.io/metadata.name: operator-public-ingress-namespace
501
+ - namespaceSelector:
502
+ matchLabels:
503
+ kubernetes.io/metadata.name: operator-private-ingress-namespace
504
+ ports:
505
+ - protocol: TCP
506
+ port: 8787
507
+ - protocol: TCP
508
+ port: 8797
509
+ ---
510
+ apiVersion: networking.k8s.io/v1
511
+ kind: NetworkPolicy
512
+ metadata:
513
+ name: enigma-allow-required-egress-placeholders
514
+ namespace: enigma-backend
515
+ labels:
516
+ app.kubernetes.io/part-of: enigma
517
+ spec:
518
+ podSelector:
519
+ matchExpressions:
520
+ - key: app.kubernetes.io/name
521
+ operator: In
522
+ values: ["enigma-relay", "enigma-gateway"]
523
+ policyTypes:
524
+ - Egress
525
+ egress:
526
+ - to:
527
+ - ipBlock:
528
+ cidr: 192.0.2.0/32
529
+ ports:
530
+ - protocol: TCP
531
+ port: 443
532
+ ---
533
+ apiVersion: batch/v1
534
+ kind: CronJob
535
+ metadata:
536
+ name: enigma-backup-placeholder
537
+ namespace: enigma-backend
538
+ labels:
539
+ app.kubernetes.io/name: enigma-backup
540
+ app.kubernetes.io/part-of: enigma
541
+ spec:
542
+ schedule: "17 3 * * *"
543
+ concurrencyPolicy: Forbid
544
+ successfulJobsHistoryLimit: 3
545
+ failedJobsHistoryLimit: 3
546
+ jobTemplate:
547
+ spec:
548
+ template:
549
+ metadata:
550
+ labels:
551
+ app.kubernetes.io/name: enigma-backup
552
+ app.kubernetes.io/part-of: enigma
553
+ spec:
554
+ restartPolicy: OnFailure
555
+ automountServiceAccountToken: false
556
+ securityContext:
557
+ runAsNonRoot: true
558
+ runAsUser: 1000
559
+ runAsGroup: 1000
560
+ seccompProfile:
561
+ type: RuntimeDefault
562
+ containers:
563
+ - name: backup-placeholder
564
+ image: ghcr.io/enigma-ai/enigma:operator-pinned-digest-required
565
+ imagePullPolicy: IfNotPresent
566
+ command: ["/bin/sh", "-c"]
567
+ args:
568
+ - "echo backup target must be wired by operator; exit 1"
569
+ env:
570
+ - name: ENIGMA_BACKUP_TARGET_URI
571
+ valueFrom:
572
+ secretKeyRef:
573
+ name: enigma-backend-secrets
574
+ key: backup-target-uri
575
+ optional: false
576
+ securityContext:
577
+ allowPrivilegeEscalation: false
578
+ readOnlyRootFilesystem: true
579
+ capabilities:
580
+ drop: ["ALL"]