fix(apps): resolve latent host-port collisions + detect at load time

The strfry/vaultwarden 8082 collision shipped in a signed catalog
because nothing checks cross-app host ports. Fix the remaining latent
pairs from the cfb8d953 audit — did-wallet 8083→8088 (filebrowser
keeps 8083), morphos-server 8086→8089 (netbird-server keeps 8086),
lightning-stack 8087→8091/9737→9738 (netbird and fedimint-gateway
keep theirs) — and fix their healthchecks, which probed the HOST port
inside the container (same class as strfry 6fe62355; now 127.0.0.1 +
container port). load_manifests now flags collisions across the
merged disk+catalog set (bitcoin variants and the mempool umbrella
pair are exempt as mutually exclusive), and a repo-level test parses
apps/*/manifest.yml so a future latent pair fails CI instead of
shipping.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
archipelago
2026-07-10 12:25:42 -04:00
co-authored by Claude Fable 5
parent 9b1c090e21
commit ebd904262e
4 changed files with 100 additions and 7 deletions
+2 -2
View File
@@ -27,7 +27,7 @@ app:
apparmor_profile: did-wallet
ports:
- host: 8083
- host: 8088
container: 8080
protocol: tcp # Web UI
@@ -42,7 +42,7 @@ app:
health_check:
type: http
endpoint: http://localhost:8083
endpoint: http://127.0.0.1:8080
path: /health
interval: 30s
timeout: 5s
+3 -3
View File
@@ -29,13 +29,13 @@ app:
apparmor_profile: lightning-stack
ports:
- host: 9737
- host: 9738
container: 9735
protocol: tcp # P2P
- host: 10010
container: 10009
protocol: tcp # gRPC
- host: 8087
- host: 8091
container: 8080
protocol: tcp # REST/Web UI
@@ -53,7 +53,7 @@ app:
health_check:
type: http
endpoint: http://localhost:8087
endpoint: http://127.0.0.1:8080
path: /v1/getinfo
interval: 30s
timeout: 5s
+2 -2
View File
@@ -27,7 +27,7 @@ app:
apparmor_profile: morphos-server
ports:
- host: 8086
- host: 8089
container: 8080
protocol: tcp # Web UI
@@ -43,7 +43,7 @@ app:
health_check:
type: http
endpoint: http://localhost:8086
endpoint: http://127.0.0.1:8080
path: /health
interval: 30s
timeout: 5s