Skip to content
ULAP ONE
Research preview
Browse the system · what is built, what is running, what fans out where

ULAP ONE Explorer

0 of 19 deployed routes answering

One origin fans out by path to every service on this node. This page shows the whole map, probes each route live, lists the capability register the control-api parses, and records every metric a dashboard asks for that nothing actually produces.

Waiting Not a snapshot Updated nothing has answered yet Sources 0 of 3 sources answering · 3 waiting
Capability register no answer yet Service inventory no answer yet Gateway route probes no answer yet
Data provenance

What this page reads, and what it is allowed to conclude

Waiting

Identity

Read by
Your browser, over this origin. No server-side cache sits in between.
Mode
Live poll. This is not a snapshot and it is not a recording.
Last read
not yet
Sources
3

Measurements

Capability register
Waiting · never
GET /api/control/capabilities · every 30 s · the NOW / PHASE-1 / EXTENSION register the control-api parses out of docs/CAPABILITIES.md
Service inventory
Waiting · never
GET /api/control/inventory · every 8 s · deployment truth — which services exist, and which are optional and absent. This is what separates NOT DEPLOYED from DEPLOYED AND FAILING.
Gateway route probes
Waiting · never
19 live GETs — every route.probe in ui/src/lib/domain/gateway.ts · every 20 s · one cheap GET per probeable gateway route, straight from this browser

Thresholds, and where they come from

Stale after 2.5 poll cadences (floor 4 s, cap 90 s)
Source: ui/src/lib/domain/liveness.svelte.ts — derived from wall clock, not set by the poll, so a loop that DIED is still detected
Not answering after 3 consecutive misses
Source: ui/src/lib/domain/liveness.svelte.ts — one miss is a blip, three is a fault
Static after 20 poll cadences with no change in the reported value (floor 60 s, cap 5 min)
Source: ui/src/lib/domain/liveness.svelte.ts — an ORTHOGONAL axis. A static source is still live: it answered. The two facts are separate because on 2026-08-03 a tile read 0.0 Mbps for fifteen minutes beside a chip that said "Live · just now". Only sources that report their value to feed.ok(id, value) are judged; the rest claim nothing.

What this proves

  • Each source above answered your browser at the stated time, over this origin.
  • The census below was computed from the last probe sweep and the last inventory, and the ages of both are stated.

What this does NOT prove

  • A fresh probe sweep does not mean a healthy stack. The sweep can be current and every route in it failing; the census carries the outcome, this strip carries only the freshness.
  • A 2xx from a route means the upstream answered. It does not mean the service is correct.
  • When the inventory is not answering, an opt-in route cannot be separated into not-deployed and failing, and those rows say so rather than guessing.

Environment

Probes
Origin-relative GETs from your browser. No server-side prober sits in between.
Route table
Embedded by hand from config/sensing-dashboard.nginx.conf and kept in sync by hand.

Provenance

Capability register
GET /api/control/capabilities · every 30 s
Service inventory
GET /api/control/inventory · every 8 s
Gateway route probes
19 live GETs — every route.probe in ui/src/lib/domain/gateway.ts · every 20 s
Caveat, verbatim

This page counts whether a route answered, not whether it is right. Opt-in components that nobody deployed are absence, not failure, and are excluded from the denominator on purpose.

Raw source

  • ui/src/lib/domain/gateway.ts the route table and the metric-gap register

Route census

Select a bucket to filter the fan-out table below. Every route is in exactly one.

Origin fan-out

config/sensing-dashboard.nginx.conf Deployed but failing · 0 of 22 routes
Origin fan-out — every path this gateway serves, its upstream, and the result of a live probe from this browser
PROBEPATHUPSTREAMWHAT IT ISPROBE RESULT
Still probing 22 routes. Nothing has been called failing yet.

Four states, not two. A green chip is answering. A red chip is deployed and failing — a real fault. A grey hollow-ring chip is opt-in and not deployed: nobody brought it up, so there is nothing to be healthy or unhealthy, and the row names the command that would deploy it. A fourth reads not asserted: no safe GET exists for that route, so none is made. The gateway returns the same 503 for the first two, so this page separates them with /api/control/inventory, which reports optional: true + status: "absent" for a component that was never started. Counting an undeployed component as a failure is the mirror image of counting an absent one as a pass; both make the roll-up worthless. Nothing here is hidden — the filter above names every bucket and its count, and an opt-in component stays on the list and says what it is.

A path marked leaves the console: it is another tool on this origin, with no shell, no nav and no research-preview caveat, and the only way back is the browser's back button. The nav marks Grafana and the Prometheus UI the same way; /video/ is the legacy standalone video-dashboard container and is not in the nav at all — it is not this console's /video.html route.

Every path is origin-relative and that is the contract. An absolute http://localhost:NNNN URL works on exactly one machine and is blocked as mixed content the moment the page is served over https. Grafana is subpath-bound at /grafana/ and that is the single canonical route: the dedicated origin that used to serve it is retired.

Capability register

/api/control/capabilities parsed from docs/CAPABILITIES.md
Now 0
Phase 1 0
Extension 0
NOW
  • none reported
PHASE-1
  • none reported
EXTENSION
  • none reported

This register is parsed live from docs/CAPABILITIES.md by the control-api. The Overview route keeps a second, hand-maintained copy of the same list; one of the two can drift and nothing catches it. This is the one that cannot.

A register row is a declaration, not a measurement. The three counts above count rows in a markdown file. The evidence strings behind them (hover a row) are what the register asserts, and a number inside one is not something this console read. Until 2026-08-04 the SR row asserted 30+ fps live while the measured GB10 rate was 4.6 fps; the register now states a design target and a dated measurement as two separate clauses. Delivered rates are measured on Video; benchmark numbers live behind the snapshot boundary on Evidence.

Live service inventory

/api/control/inventory
Live service inventory — every service the control-api enumerates, with its deployment status and maturity
SERVICESTATUSMATURITY
No services reported.

A service reported absent is not in the active profile, which is different from unhealthy. Start its profile to bring it up. This table is also the deployment truth the fan-out above uses to tell not deployed apart from deployed and failing, so when it is empty those rows say they cannot be separated rather than picking one.

Metric producer gaps

do not fabricate a metric to fill a panel

Every row is a number a panel in this console asks for that no service on this stack actually produces. They are recorded rather than filled in. Fix the producer, then delete the row.

Applied NTN netem profile (clear | leo | meo | geo) GET /api/mode/ntn asked by WORKLOADS · 04 NTN Backhaul Demo

NO PRODUCER. mode-controller has no /ntn route; its OpenAPI is /health /mode /status /events /config /force /reset /metrics.

The panel reads "not reported" and stops polling after the first miss. It previously rendered a hardcoded "clear", which is a claim that no impairment is applied — exactly the claim nobody measured.

GPU framebuffer occupancy (DCGM FB series) PromQL avg(DCGM_FI_DEV_FB_USED/(FB_USED+FB_FREE)) asked by WORKLOADS · 07 Host metrics

COUNTER DOES NOT EXIST ON GB10 — this is not a broken scrape. dcgm-exporter DOES enumerate the GB10 (GPU_UTIL, GPU_TEMP, MEMORY_TEMP, MEM_COPY_UTIL, POWER_USAGE, SM_CLOCK all return series) but it exports zero DCGM_FI_DEV_FB_USED / FB_FREE / FB_TOTAL series for this part, and `nvidia-smi --query-gpu=memory.used/free/total` returns literal N/A. The earlier note here — "dcgm-exporter does not enumerate the GB10" — was wrong; GPU util has been live all along.

The GPU-memory tile no longer reads a bare "unavailable" off a dead PromQL. It reads ran-manager /metrics/host, which sums nvidia-smi --query-compute-apps=used_memory over live CUDA contexts — a real measurement, labelled UNIFIED, against the pool the CPU shares. It is NOT framebuffer occupancy and the tile says so. When ran-manager is not running the tile names the missing counter instead of shrugging.

Sensing decision latency, end to end none — the paper quotes 23 ms asked by SENSING · inference tile (shows single-record inference instead)

NO PRODUCING ARTEFACT IN THIS REPO. The measured figure is 4.71 ms single-record inference; the 23 ms decision-latency number has no artefact behind it.

The tile shows the inference time the service actually returns and labels it INFERENCE, not decision latency.

Per-slot cuPHY latency as a live series none — only the dated JSON under benchmarks/reports/ asked by EVIDENCE

OFFLINE ARTEFACT ONLY. There is no exporter; the numbers come from a bench harness run by hand.

The EVIDENCE route reads the artefacts off disk at build time and labels the snapshot with the build timestamp. It is not presented as live.

SR-HQ (/sr-hq) stream readiness and frame rate GET /api/srq/stats asked by VIDEO · SR-HQ Archive tile

PRODUCER PRESENT BUT NEVER SERVED in the live-verified deployment: the quality worker ran CPU-only on a Lanczos fallback and processed 0 frames.

The tile reports whatever the worker returns, including IDLE and 0. It does not substitute the SPAN worker numbers.

PSNR of the SR output against the native stream none asked by VIDEO · SR gain badge

NOT MEASURABLE HERE. There is no synchronised ground truth at the SR worker.

The badge reports a Laplacian-variance sharpness gain over a bicubic upscale of the same input, is labelled no-reference, and explicitly does not claim PSNR.

Provenance of this page
No surface called Explorer previously existed in this bundle or in the monorepo: there is no such page, route, service or nav entry anywhere. What the design docs describe as the browse surface is GET /control/inventory, "the see what is built and what is not surface". This route is built on that, plus the capability register and the gateway route table, and it lives in the same shell as every other page rather than in a sixth hand-written HTML file.
The census

How a route gets counted, and what a green one does not mean

0 of 19 answering 0 deployed but failing 0 opt-in, not deployed 0 with no safe probe

Identity

Routes declared
22
Probeable
19
Denominator
19 — probeable, minus anything the inventory calls absent
Probed by
Your browser, over this origin, every 20 s
Deployment truth
UNAVAILABLE — the inventory has not answered

Measurements

Answering
0
A 2xx came back from the route’s own probe path.
Deployed but failing
0
Everything that is neither proven up, nor deliberately unprobed, nor undeployed. A 502 maps to "error status" and is counted here — counting only hard downs let a fully broken stack read 0.
Opt-in, not deployed
0
Established from the inventory’s `optional: true` + `status: "absent"`, never guessed from an HTTP code.
No safe probe
0
A GET here would change state, so none is made.
Waiting for the first probe
22
Transient. Belongs to no verdict.

Thresholds, and where they come from

The roll-up goes green only when upCount === deployedProbeable, and deployedProbeable > 0
Source: ui/src/routes/explorer/+page.svelte — rollupTone
Absent is established from the inventory, not from a status code optional: true + status: "absent"
Source: GET /api/control/inventory — the gateway returns the same 503 for "never deployed" and "deployed and dead", so the status code alone cannot tell them apart

What this proves

  • Each route counted as answering returned a 2xx to this browser, over this origin, within the last sweep.
  • A component that is opt-in and was never brought up is counted as absent, in neither the numerator of "answering" nor the count of failures.
  • The fan-out table is the gateway map, so a path that is missing here is a path nginx does not serve.

What this does NOT prove

  • A 2xx means the upstream answered. It does NOT mean the service is correct, current, or serving the thing its path claims.
  • A red does NOT distinguish "the process died" from "the process is up and its dependency is down" — the detail column carries whatever the body said, and often that is all there is.
  • A route with no safe probe is not asserted in either direction. It is not counted good and it is not counted bad.
  • The route table is embedded by hand from config/sensing-dashboard.nginx.conf. If nginx changes and this file does not, the map is stale and nothing here would detect it.

Environment

Origin
One nginx gateway fans out by path. Every probe here is origin-relative; an absolute URL would work on exactly one machine.
External surfaces
Grafana, the Prometheus UI and the legacy video dashboard are on this origin but are not this application.

Provenance

Route table
ui/src/lib/domain/gateway.ts — mirrors config/sensing-dashboard.nginx.conf
Deployment truth
GET /api/control/inventory
Capability register
GET /api/control/capabilities — parsed from docs/CAPABILITIES.md
Probe results
one GET per probeable route, from this browser
Caveat, verbatim

This census counts whether a route answered, not whether it is right. A component that is opt-in and undeployed is absence, not failure, and it is excluded from the denominator on purpose: leaving it in makes the ratio permanently short of full and the banner permanently amber, which trains an operator to ignore it. The route table is kept in sync with the nginx config by hand.

Raw source

  • ui/src/lib/domain/gateway.ts — ROUTES, METRIC_GAPS
  • config/sensing-dashboard.nginx.conf the fan-out this table mirrors
Amini Amini Infratech for the Global South

Every link and every data fetch on this console is origin-relative. One origin fans out by path: / gateway, /video/, /grafana/, /prom/, /api/. An absolute http://localhost:NNNN URL works on exactly one machine, the one it was written on, and is blocked as mixed content the moment the page is served over https, which is how every operator actually reaches this stack.