feat(ui): separate live data and lab surfaces
This commit is contained in:
@@ -189,12 +189,14 @@ The archival surface consumes the same append-only run repository through
|
||||
`GET /api/v1/polygon/runs` and
|
||||
`GET /api/v1/polygon/runs/{run-id}`. `QualificationRunStore(read_only=True)`
|
||||
does not create, chmod or mutate the configured repository and rejects every
|
||||
write transition. When `/api/v1/polygon/worker` returns an admitted available
|
||||
worker, the Control Station adds `Полигон` as a seventh header root. One header
|
||||
click opens the single `polygon-datasets` workspace without a System launcher
|
||||
panel. The old `?workspace=polygon-run[&run=<id>]` URL remains a compatibility
|
||||
redirect into the dataset workspace; there is no separate Runs item in the
|
||||
operator navigation.
|
||||
write transition. The operator information architecture is now governed by
|
||||
[ADR 0022](adr/0022-operator-surface-ownership.md): **Данные** owns saved
|
||||
sessions and public datasets, **Наблюдение** is live-only, and the former
|
||||
Polygon root is the last header item named **Тестировочный контур**. It opens
|
||||
the laboratory archive even when Simulation Worker is offline. Old
|
||||
`?workspace=polygon-run[&run=<id>]` and `?workspace=polygon-datasets` URLs remain
|
||||
compatibility redirects into **Данные → Датасеты**; there is no separate Runs
|
||||
item in the operator navigation.
|
||||
Browser QA loaded the accepted archive and the S1C live worker, rotated and
|
||||
zoomed the 3D rover, observed live run/provider status, Gazebo sim time and
|
||||
ENU/FLU pose, then completed a clean stop. Start/stop stays behind the backend
|
||||
@@ -206,7 +208,7 @@ supervision and an accepted routed worker transport.
|
||||
The Dataset Gateway is now multi-source. RELLIS S0 pins official repository
|
||||
frame `000104`, verifies `131,072` Ouster XYZI points against aligned labels and
|
||||
publishes a bounded semantic/ground-target preview beside GOOSE in the same
|
||||
`Полигон → Датасеты` workflow. This closes only reader, axes, ontology,
|
||||
`Данные → Датасеты` workflow. This closes only reader, axes, ontology,
|
||||
licensing and versioned ignore-policy compatibility. Full RELLIS Ouster scans,
|
||||
labels and poses remain D-only admission work before the cross-dataset
|
||||
Current/Patchwork++ decision.
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
Status: implemented for native K1 point/pose evidence and host-side camera
|
||||
archival. Valid K1 `ModelingReport` scan time, distance and speed are also
|
||||
materialized as recorded Rerun time series. Recorded spatial playback is exposed
|
||||
in the Mission Core observation workspace. The camera archive/player contract
|
||||
in **Данные → Сессии и записи**; **Наблюдение → Пространственная сцена** is
|
||||
live-only. The camera archive/player contract
|
||||
is implemented and covered by tests. TEST007 physically accepted shared-timeline
|
||||
playback of the saved cameras and point cloud. It also carries the first optional
|
||||
external-perception result projected into the same Rerun recording; older
|
||||
@@ -23,9 +24,10 @@ fully usable with only their available modalities.
|
||||
3. Stop acquisition normally, or allow the local service to recover an
|
||||
unexpected interruption on its next start. Session recording is automatic;
|
||||
the disk action is not required.
|
||||
4. Open **Сохранённые сессии** in the observation header. The menu shows up to
|
||||
100 indexed runs, their date, duration, state, modalities and
|
||||
background preparation state.
|
||||
4. Open **Данные → Сессии и записи**. The inline archive shows up to 100
|
||||
indexed runs, their date, duration, state, modalities and background
|
||||
preparation state. Opening an archive never replaces the live source owned
|
||||
by **Наблюдение**.
|
||||
5. Choose a replayable run. Opening a replay never performs conversion in the
|
||||
request. A ready recording opens immediately; otherwise the client receives
|
||||
HTTP 202, keeps the current scene mounted and polls the preparation status.
|
||||
@@ -128,7 +130,8 @@ on deletion.
|
||||
The visual result is resolved by the LAB session id, so `LAB E19`, `LAB E21`
|
||||
and the derived temporal comparison `LAB E22` can coexist over `RAVNOVES00`
|
||||
without “latest accepted result” replacing an earlier experiment. The operator
|
||||
can open any row in **Сохранённые сессии** and use the same
|
||||
can open any row in **Данные → Сессии и записи** or the corresponding LAB row
|
||||
in **Тестировочный контур** and use the same
|
||||
**Объекты 2D / Сегментация / Кубы 3D** controls. First publication must also
|
||||
warm the result-specific Rerun overlay; later opens reuse that verified cache
|
||||
and do not rerun AI inference.
|
||||
|
||||
@@ -90,11 +90,11 @@ Polygon is now a parallel product branch. As of this document:
|
||||
Simulation Worker agent in a fresh loopback-only namespace, a bounded
|
||||
Unix-socket Mission Core gateway and an explicit `internal-virtual-only`
|
||||
lifecycle gate;
|
||||
- UI-2 exact generation `60e7916` established `Полигон` as a dedicated header
|
||||
root only while Mission Core confirms an available Simulation Worker. The
|
||||
current product surface keeps that direct entry. The operator navigation has
|
||||
one implemented item, `Датасеты`; immutable run evidence remains an internal
|
||||
backend contract rather than a second page;
|
||||
- UI-2 exact generation `60e7916` established the first dedicated `Полигон`
|
||||
header root. ADR 0022 subsequently renamed the operator surface
|
||||
**Тестировочный контур**, moved it last, and assigned it to laboratory work.
|
||||
Public sources are now under **Данные → Датасеты**; immutable run evidence
|
||||
remains an internal backend contract rather than a second page;
|
||||
- the browser-native Three.js scene renders a recognisable procedural Ackermann
|
||||
Rover, ground grid and ENU trajectory. Orbit supports 360° azimuth, bounded
|
||||
vertical inspection from overhead to horizon, zoom, pan, follow and camera
|
||||
@@ -860,7 +860,11 @@ Center | Fleet | Observation | Missions | Data | Polygon | System
|
||||
```
|
||||
|
||||
The product surface and execution capability are intentionally distinct.
|
||||
`Полигон` and its dataset catalog remain visible without a worker. Worker
|
||||
The original `Полигон` implementation and its dataset catalog remain available
|
||||
as historical evidence without a worker. Under
|
||||
[ADR 0022](adr/0022-operator-surface-ownership.md), the operator root is now
|
||||
named **Тестировочный контур**, owns laboratory work, and is last in the header.
|
||||
Public evaluation sources moved to **Данные → Датасеты**. Worker
|
||||
capability gates only live lifecycle and command actions, which fail closed and
|
||||
show an explicit offline state.
|
||||
|
||||
@@ -946,8 +950,8 @@ fails closed. The review index exposes no paths or digests. A selected frame is
|
||||
verified against the content-bound review manifest before its bounded point
|
||||
preview is decoded. Responses never contain the configured root, raw dataset
|
||||
bytes or command payloads. `?workspace=polygon-run[&run=<run-id>]` remains a
|
||||
compatibility redirect into `polygon-datasets`; it does not restore a separate
|
||||
Runs page.
|
||||
compatibility redirect into **Данные → Датасеты**; it does not restore a
|
||||
separate Runs page or the historical Polygon dataset surface.
|
||||
|
||||
UI-0 itself has no PX4 transport or lifecycle/command operations. It remains a
|
||||
read-only evidence contract backed by the server-owned run repository and is
|
||||
|
||||
@@ -432,7 +432,8 @@ Dataset expansion is no longer the next gate.
|
||||
The implemented `missioncore.k1-local-surface/v1` derivative is reproducible
|
||||
through `experiments/perception/run_k1_local_surface.py` and is exposed
|
||||
read-only through `GET /api/v1/lidar/local-surfaces` plus the bound frame,
|
||||
timeline and review endpoints. **Парк → Диагностика LiDAR** reuses the five
|
||||
timeline and review endpoints. **Тестировочный контур → Лабораторные работы**
|
||||
reuses the five
|
||||
RAVNOVES00 scene selectors and also exposes a clickable timeline over the
|
||||
complete recording. The selected source frame shows observed surface, observed
|
||||
occupied-above-surface, negative outlier, unclassified evidence and yellow
|
||||
|
||||
@@ -60,15 +60,15 @@ Implemented now:
|
||||
`missioncore.k1-local-surface-frame/v2`: the prior-only plane, current
|
||||
lower-cell coordinates, signed residual and derived inlier mask are
|
||||
content-bound and visible as a read-only 3D overlay;
|
||||
- a provider-neutral read-only local-surface view in
|
||||
**Парк → Диагностика LiDAR**, synchronized to the five existing
|
||||
- a provider-neutral read-only local-surface laboratory result in
|
||||
**Тестировочный контур → Лабораторные работы**, synchronized to the five existing
|
||||
RAVNOVES00 scene selectors and a clickable complete-recording timeline;
|
||||
- a complete recorded-host-paced 1× worker replay through authenticated
|
||||
ingress, K1 normalization, point/pose binding and a bounded latest-wins
|
||||
surface estimator: `4,206` results at `9.1945 Hz` and `89.530 ms` p95 age;
|
||||
- worker storage admission for `D:\NDC_MISSIONCORE\datasets` and
|
||||
`/mnt/d/NDC_MISSIONCORE/datasets`;
|
||||
- a dedicated, honest dataset catalog in **Полигон → Датасеты**;
|
||||
- a dedicated, honest dataset catalog in **Данные → Датасеты**;
|
||||
- live admission states (`downloading`, `verifying`, `frame-ready`) and a real
|
||||
`Открыть` action;
|
||||
- one admitted GOOSE validation frame with source colors, normalized remission
|
||||
@@ -86,8 +86,8 @@ Implemented now:
|
||||
- a reproducible Current/Patchwork++ A/B artifact with point-aligned masks,
|
||||
disagreement views, independent-label metrics, latency and exact provider
|
||||
identities;
|
||||
- a separate **Парк → Диагностика LiDAR** surface containing only real sensor
|
||||
recordings and their operational evidence.
|
||||
- a separate laboratory surface containing only real sensor recordings and
|
||||
their offline experimental evidence.
|
||||
|
||||
Not implemented:
|
||||
|
||||
@@ -106,17 +106,18 @@ Not implemented:
|
||||
|
||||
## Product surface boundary
|
||||
|
||||
The gateway is not part of device quality diagnostics.
|
||||
The gateway and current local-surface work are not live device diagnostics.
|
||||
|
||||
- **Парк → Диагностика LiDAR** answers whether a selected real sensor recording
|
||||
is present, reproducible and operationally usable. It never mixes public
|
||||
dataset frames into the selected device evidence.
|
||||
- **Наблюдение** opens a concrete live or recorded spatial scene.
|
||||
- **Данные** owns source-of-record, retention, replay preparation and export.
|
||||
- **Полигон → Датасеты** is the single operator surface for admitted evaluation
|
||||
- **Наблюдение** opens only the current live spatial scene.
|
||||
- **Данные → Сессии и записи** owns saved sensor records and replay.
|
||||
- **Данные → Датасеты** is the single operator surface for admitted evaluation
|
||||
inputs. Opening one dataset exposes its source fragments, sparse annotated
|
||||
scans, visual overlays and useful analysis calculated only for the selected
|
||||
fragment.
|
||||
scans, visual overlays and useful analysis inside the expanded source card.
|
||||
Opening another source closes the previous one.
|
||||
- **Тестировочный контур → Лабораторные работы** owns immutable experiment
|
||||
configurations, accepted LAB instances and visual conclusions such as E29.
|
||||
- A future **Парк** diagnostics surface must require a connected device and a
|
||||
dedicated live diagnostic contract. It cannot reuse an offline replay report.
|
||||
- Internal replay-run identity, provenance and immutable artifacts remain a
|
||||
backend evidence contract. They are not a second operator navigation item
|
||||
and are not presented as vehicle motion.
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
# ADR 0022 — Operator surface ownership
|
||||
|
||||
Status: accepted, 2026-07-26
|
||||
|
||||
## Context
|
||||
|
||||
The first simulation and LiDAR qualification slices exposed implementation
|
||||
results where they were produced. Saved observation sessions lived in the live
|
||||
spatial workspace, public datasets lived under Polygon, and the local-surface
|
||||
laboratory result was labelled as device diagnostics. This made the operator
|
||||
infer backend history instead of following product concepts.
|
||||
|
||||
The same ambiguity affected Centre: separate overview, health and activity
|
||||
pages repeated static capability inventories instead of showing the current
|
||||
compute and network contour.
|
||||
|
||||
## Decision
|
||||
|
||||
Mission Core assigns one owner to each operator concept:
|
||||
|
||||
| Product area | Owns | Does not own |
|
||||
| --- | --- | --- |
|
||||
| **Наблюдение** | Current live sensor scene and live-only spatial controls | Saved-session selection or offline experiments |
|
||||
| **Данные** | Saved sessions, replay, public datasets, streams, entities and export | Simulation execution or laboratory conclusions |
|
||||
| **Тестировочный контур** | Versioned laboratory work, test configuration and visual evidence | Source-of-record retention or public dataset storage |
|
||||
| **Центр → Состояние контура** | Live compute nodes, processes, network reachability and connected devices | Static feature inventory or a separate activity page |
|
||||
| **Система** | Deeper module, integration, network, audit and configuration administration | Daily operational health summary |
|
||||
| **Парк** | Devices, sensors and live device operation | Offline algorithm-development reports |
|
||||
|
||||
The existing internal root id `polygon` remains stable for compatibility, but
|
||||
its operator label is **Тестировочный контур** and it is last in the header.
|
||||
Legacy `?workspace=polygon-datasets` and `?workspace=polygon-run` links resolve
|
||||
to **Данные → Датасеты**. They do not recreate the previous Polygon dataset
|
||||
page.
|
||||
|
||||
Saved session replay is mounted only in **Данные → Сессии и записи** or from a
|
||||
LAB entry. Leaving either archive returns **Наблюдение → Пространственная
|
||||
сцена** to the runtime-published live source. A selected archive cannot leak
|
||||
into the live observation surface.
|
||||
|
||||
Dataset sources use a single-open accordion. Expanding one source mounts its
|
||||
viewer and analysis inside that source card, pushes later sources down, and
|
||||
closes the previously expanded source.
|
||||
|
||||
The laboratory archive reads immutable LAB instances from the existing
|
||||
observation-session catalog. The E29 local-surface result remains a read-only
|
||||
laboratory surface and is no longer presented as live LiDAR diagnostics. A
|
||||
future device-diagnostics workspace must require an attached device and its own
|
||||
diagnostic contract.
|
||||
|
||||
Contour health reads only live contracts:
|
||||
|
||||
- `GET /api/health`;
|
||||
- `GET /api/v1/device-plugin-runtimes`;
|
||||
- `GET /api/v1/polygon/worker`;
|
||||
- current Mission Runtime state for active device and perception metrics.
|
||||
|
||||
Unknown or unavailable values remain empty/offline. The UI does not invent
|
||||
load, latency, activity or connected devices.
|
||||
|
||||
## Consequences
|
||||
|
||||
- Public datasets and private sensor records are both discoverable under Data,
|
||||
but remain separate evidence classes.
|
||||
- Laboratory evidence is inspectable without confusing it with live device
|
||||
health or closed-loop simulation.
|
||||
- The current Simulation Worker may be offline while its prior laboratory
|
||||
evidence remains available.
|
||||
- The generic Control Station remains device-neutral; device names and
|
||||
implementation details come from plugin/runtime contracts.
|
||||
- New operator pages must declare one product owner before implementation.
|
||||
Reference in New Issue
Block a user