This is an automated email from the ASF dual-hosted git repository.

wu-sheng pushed a commit to branch feat/infra-3d-live-pipeline
in repository https://gitbox.apache.org/repos/asf/skywalking-horizon-ui.git

commit 0e54d1a3a8630999f77fbb7ed728c39e447054c1
Author: Wu Sheng <[email protected]>
AuthorDate: Fri May 29 23:00:26 2026 +0800

    docs(infra-3d): record live topology; drop stale 'not wired to live OAP' 
note
---
 CHANGELOG.md                            |  7 +++++++
 apps/ui/src/features/infra-3d/CLAUDE.md | 15 +++++++++++++--
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index bf6bd9b..211d569 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -517,6 +517,13 @@ link into that layer's dashboard.
   the active scopes (`metrics 2h · alarms 20m · ↻ 1m`). An alarmed cube
   burns red with a radiating ripple, matched to its service by (layer,
   name) so only the firing service in the right tier is flagged.
+- **Live topology.** The deployment structure is read live from OAP rather
+  than a bundled snapshot: each layer's service roster and service map are
+  fetched one at a time (low concurrency) and assembled into the scene, so
+  the map is correct on any deployment. It refreshes on the same one-minute
+  cycle — an unchanged structure updates metrics/alarms in place without
+  disturbing the camera, while a service appearing or disappearing rebuilds
+  the affected tier. The load progresses stage by stage in the status strip.
 - **Beacon mode.** A toolbar toggle dims every healthy cube to a
   wireframe ghost and lets only alarming cubes glow, so the services
   that are firing jump out instantly during an incident.
diff --git a/apps/ui/src/features/infra-3d/CLAUDE.md 
b/apps/ui/src/features/infra-3d/CLAUDE.md
index 2633b1f..d5d0bd0 100644
--- a/apps/ui/src/features/infra-3d/CLAUDE.md
+++ b/apps/ui/src/features/infra-3d/CLAUDE.md
@@ -474,10 +474,21 @@ raycaster's bounding box mid-pointer-event and made 
clicks miss /
 require a second tap). Same single `BoxGeometry` for every cube;
 every transition is a property change on the existing mesh.
 
+## Live data vs. the snapshot
+
+The scene now reads its structure live from OAP by default: the pipeline's
+`services` / `topologies` stages fetch each layer's roster + service map one
+at a time (`useLiveTopology.ts`), assembling a `DemoTopology` that
+`buildSceneGraph` consumes exactly like the snapshot. `data/demo-topology.json`
+remains the **fallback** — rendered until the first sequential load lands, if
+the load comes back empty, or when `?live=0` forces it for comparison. The
+scene is re-keyed on a per-layer structure hash so an unchanged refresh keeps
+the camera; only a roster/edge change rebuilds. The cross-layer hierarchy
+(`hierarchy`) is still left empty in live mode — Smartscape peers are a later,
+per-service fetch.
+
 ## What this PoC is NOT
 
-- **Not** wired to live OAP data yet. Demo data is a snapshot committed
-  in `data/demo-topology.json`.
 - **Not** showing cross-plane edges as static geometry — that's a
   future interaction.
 - **Not** persisting visibility / camera state across reloads.

Reply via email to