feat(ui): separate live data and lab surfaces

This commit is contained in:
DCCONSTRUCTIONS
2026-07-26 12:50:10 +03:00
parent 677dbdb776
commit 05413e3f5c
19 changed files with 1430 additions and 402 deletions
+9 -7
View File
@@ -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.
+8 -5
View File
@@ -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.
+12 -8
View File
@@ -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
+2 -1
View File
@@ -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
+15 -14
View File
@@ -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.