feat(data-only): GUIs synchronisees + audit

Web data-only fully wired contre les 20 feeds :

dashboard.js : 8 nouveaux handlers (gdelt, wikimedia, tides,
moon, atc, pose, mempool, github, rte_eco2mix). Sparklines +
seuils alert/warn/green coherents.

map.js : marker GDELT (purple) en plus des seismes/foudre/
avions/ISS/volcans, TTL 60s comme les autres ephemeres.

control.html : nouvelle section 'Modes visuels (oF / Metal)'
avec 9 boutons (storm/tunnel/plasma/kaleido/voronoi/metaballs/
stars/bars/hands3d). Le handler scene-btn est splitte par
container (#scenes vs #vizmodes) pour ne pas melanger
l'etat actif.

server.js : whitelist /control/viz* + routing par path. Les
/control/viz* partent vers oF (:57123), tout le reste vers
SC (:57121). Nouveau env OF_PORT_OUT.

Audit fixes :
- LaunchMode displayName Data-only : 'SC + oF + feeds, no web'
  -> 'SC + Metal viz + feeds + web' (l'ancien libelle datait
  d'avant le toggle Web UI dans dataOnly).
- SettingsPanel : toggle Squelette etiquete '(a venir)' tant
  que le rendu n'est pas implemente cote MeshRenderer.
This commit is contained in:
L'électron rare
2026-05-13 19:56:17 +02:00
parent b361c1c09b
commit 4fd37b4faf
8 changed files with 143 additions and 5 deletions
@@ -64,7 +64,7 @@ struct SettingsPanel: View {
label: "Fil de fer",
isOn: $settings.showWireframe)
layerRow(icon: "figure.stand",
label: "Squelette (articulations)",
label: "Squelette (à venir)",
isOn: $settings.showSkeleton)
}
}
@@ -17,7 +17,7 @@ enum LaunchMode: String, CaseIterable, Identifiable {
var displayName: String {
switch self {
case .full: return "Full AV-Live"
case .dataOnly: return "Data-only (SC + oF + feeds, no web)"
case .dataOnly: return "Data-only (SC + Metal viz + feeds + web)"
case .bodyMesh: return "Body Mesh (Multi-HMR + RealityKit)"
}
}