feat: add Polygon UI-0 run view

This commit is contained in:
DCCONSTRUCTIONS
2026-07-24 19:02:10 +03:00
parent a78c8c83f5
commit b790f29d59
18 changed files with 2193 additions and 43 deletions
+14 -1
View File
@@ -24,7 +24,7 @@ Each gate produces evidence and an explicit GO, PAUSE or BLOCKED result.
| Plugin isolation | GO (laboratory control plane) — vendor backend/frontend and optional scene controls are plugin-owned; manifest/runtime descriptor parity, versioned handshake, lifecycle health and transport correlation fail closed while execution remains in-process |
| K1 application control | GO (physical staged cycle) — after fixing the PCAP-proven `sint64` time field, one explicit UI launch completed all 14 canonical operations on one control session, reached live `SCANNING + project + init_ready`, displayed real points, then one explicit STOP returned K1 to unbound `READY`. No retry or fallback command was sent. Native-project reuse through LixelGO/USB remains an independent verification |
| Stage 8 product storage | PAUSE — retention, replication, encryption, capacity monitoring and long-run browser/WASM stress remain deployment gates |
| Simulation Polygon | SIM S0 GO; S1A complete; S1B real-provider lifecycle PASS — exact commit `6cb1495` passed 25 target tests and one D-only loopback stock-Ackermann run. Mission Core admitted world/startup/DDS health, persisted eight events, sent zero commands and stopped both PGIDs with zero residue. UI-0 implementation is now unblocked. Pause/resume/step/reset, PX4 command delivery, canonical telemetry/frames, watchdog/failsafe, navigation/safety acceptance and real actuator authority remain absent; top-level Polygon remains gated |
| Simulation Polygon | SIM S0 GO; S1A complete; S1B real-provider lifecycle PASS; UI-0 internal read-only run view PASS — exact commit `6cb1495` passed 25 target tests and one D-only loopback stock-Ackermann run. Mission Core admitted world/startup/DDS health, persisted eight events, sent zero commands and stopped both PGIDs with zero residue. The Control Station now reads that canonical journal through GET-only Polygon API routes and a direct hidden workspace; visual QA opened the real accepted run. Pause/resume/step/reset, PX4 command delivery, canonical telemetry/frames, watchdog/failsafe, navigation/safety acceptance and real actuator authority remain absent; top-level Polygon remains gated |
USB project copying remains optional ground truth rather than a blocker for the
now-verified network path. Owner-operated LixelGO traffic verifies the MQTT
@@ -162,6 +162,19 @@ groups stopped without residue. Live world control, PX4 command delivery,
heartbeat/watchdog execution and captured failsafe outcomes remain the next S1
increments.
UI-0 now 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. The Control Station opens the internal
`polygon-run-internal` workspace only for the direct
`?workspace=polygon-run[&run=<id>]` route; it is filtered out of System
navigation and adds no seventh top-level section. Browser QA loaded the accepted
real run with eight events, four provider pins, zero commands and the unchanged
virtual-only authority boundary. A shared operator-facing deployment still
requires a reviewed read-only D mount/source configuration; UI-0 does not use
SSH as a product data plane.
## Stage 0 — repository and host baseline
Deliverables:
+32 -8
View File
@@ -9,7 +9,9 @@ Ops source of truth:
- [MISSIONCOR-39](https://ops.nodedc.ru/nodedc/browse/MISSIONCOR-39) is the
canonical, changeable architecture plan.
- [MISSIONCOR-40](https://ops.nodedc.ru/nodedc/browse/MISSIONCOR-40) is the
active SIM S0 implementation and qualification gate.
completed SIM S0 implementation and qualification gate.
- [MISSIONCOR-41](https://ops.nodedc.ru/nodedc/browse/MISSIONCOR-41) is the
active S1 lifecycle/authority implementation and qualification gate.
This document and ADR 0015 are the repository truth. A material change to run
kinds, authority, clocks, frames, source-of-record, provider boundaries or phase
@@ -66,6 +68,10 @@ Polygon is now a parallel product branch. As of this document:
lifecycle in a fresh loopback-only namespace: two provider PGIDs, explicit
world/startup/DDS-writer readiness, eight persisted events, zero commands,
terminal `completed` and zero process residue;
- UI-0 is implemented as a hidden direct read-only Control Station workspace
over GET-only Polygon API routes. Browser QA loaded the real accepted S1B
journal and displayed its four provider pins, eight events, zero commands and
unchanged virtual-only authority boundary;
- `actuator_authority=false`;
- `navigation_or_safety_accepted=false`.
@@ -579,8 +585,9 @@ session and PX4 DDS writer, sent zero control commands, and stopped with no
registry or `/proc` residue. Evidence is D-only and digest indexed under
`/mnt/d/NDC_MISSIONCORE/simulation/artifacts/s1/lifecycle/`.
This accepts the S1B target start/health/stop boundary and unlocks UI-0. It does
not accept restart-safe PID/start-token reconciliation, live
This accepts the S1B target start/health/stop boundary. UI-0 now consumes the
accepted persisted history without widening authority. It does not accept
restart-safe PID/start-token reconciliation, live
pause/resume/step/reset, canonical VehicleState, frame conversion, rover command
mapping, watchdog/failsafe cases, repeatability or S1 as a whole.
@@ -624,8 +631,8 @@ Two UI gates are intentionally distinct.
### UI-0 — early read-only run view
Target S1B now proves persisted start/health/stop history. A direct internal run
view may expose:
Target S1B proves persisted start/health/stop history. UI-0 is implemented as a
direct internal run view and exposes:
- run identity, lifecycle and terminal reason;
- authoritative clock and current pause/running state;
@@ -633,9 +640,26 @@ view may expose:
- qualification events and admitted artifact links;
- explicit limitations and gate status.
UI-0 has no PX4 transport, no control commands and no top-level Polygon
navigation claim. It is a development/acceptance surface backed only by the
server-owned run repository.
The backend reads the configured repository from
`MISSIONCORE_POLYGON_RUNS_ROOT` using
`QualificationRunStore(read_only=True)`. It exposes only:
```text
GET /api/v1/polygon/runs
GET /api/v1/polygon/runs/{run-id}
```
Missing/malformed configuration returns `503`; invalid or corrupt evidence
fails closed. Responses never contain the configured root, artifact bytes or
command payloads. The UI opens only through
`?workspace=polygon-run[&run=<run-id>]`; its hidden workspace is filtered from
System navigation and no seventh top-level section is added.
UI-0 has no PX4 transport, no lifecycle/command operations and no top-level
Polygon navigation claim. It is a development/acceptance surface backed only
by the server-owned run repository. A shared review deployment requires a
reviewed read-only D mount or a co-located backend; SSH is not a product data
plane.
### UI-1 — top-level Polygon
@@ -2,9 +2,11 @@
## Status
Accepted for architecture; SIM S0 qualification returned `GO` and the S1B
real-provider start/health/stop boundary passed on 2026-07-24. Navigation
behavior, safety behavior and real actuator authority are not accepted.
Accepted for architecture; SIM S0 qualification returned `GO`, the S1B
real-provider start/health/stop boundary passed on 2026-07-24, and the direct
read-only UI-0 view is implemented and visually verified against that accepted
journal. Navigation behavior, safety behavior and real actuator authority are
not accepted.
## Context
@@ -51,9 +53,10 @@ reports easy to misuse.
backend is C-backed and currently serves unrelated co-tenants.
13. S1 uses exact `px4_msgs` directly. The experimental
`px4-ros2-interface-lib` is not a mandatory S1 dependency.
14. A read-only direct UI-0 run view may follow proven target S1B lifecycle and
persisted history. Top-level Polygon UI and control remain gated on accepted
S1 target command/lifecycle behavior.
14. The read-only direct UI-0 run view consumes proven target S1B persisted
history through GET-only server routes. It is hidden from navigation and
cannot mutate a run. Top-level Polygon UI and control remain gated on
accepted S1 target command/lifecycle behavior.
15. Real actuator authority requires a new decision and physical safety gate.
16. S0 processes run inside an ephemeral loopback-only Linux network namespace.
Micro XRCE-DDS Agent's UDP wildcard bind is acceptable only inside that
@@ -113,10 +116,14 @@ PX4 startup and DDS-writer markers existed. No arm, setpoint or other PX4 shell
command was sent. Stop produced `completed`, eight events, zero commands and no
process residue.
This decision accepts UI-0 implementation against persisted run history. It
does not widen command authority or accept pause/step/reset, canonical
telemetry, frame conversion, watchdog/failsafe behavior, navigation or physical
control.
UI-0 now implements that decision. `QualificationRunStore(read_only=True)`
opens an existing repository without creating or chmodding it and rejects every
mutating method. The web process exposes only run catalog/detail GET routes,
and the hidden Control Station workspace opens only from
`?workspace=polygon-run[&run=<id>]`. Browser QA loaded the accepted
`s1b-6cb1495-20260724t1535z` journal. This does not widen command authority or
accept pause/step/reset, canonical telemetry, frame conversion,
watchdog/failsafe behavior, navigation or physical control.
## S1A implementation
@@ -159,14 +166,16 @@ the accepted S0 dependency graph. `k1link.simulation.worker` binds that
primitive to the exact accepted S0 profile digest and canonical D-only S1 run
artifact and process-runtime layouts.
This is not target-worker acceptance. Provider specifications, loopback network
namespace creation, live readiness probes, restart-safe PID/start-token
reconciliation and Gazebo world-control/PX4 command adapters remain open. The
worker port deliberately fixes ownership semantics without prematurely fixing
the eventual transport.
The later exact generation `6cb1495` supplied the target provider
specifications, loopback namespace and live readiness probes and passed the
real-provider start/health/stop boundary described above. Restart-safe
PID/start-token reconciliation after orchestrator loss and Gazebo
world-control/PX4 command adapters remain open. The worker port deliberately
fixes ownership semantics without making SSH or the browser a provider
transport.
Commit `630d1ae` subsequently passed a D-only `MissionCore-Sim` bootstrap:
the exact Git archive SHA was verified, both S1 test modules returned
`20 passed`, and the test process-residue record was empty. This accepts target
executability of the foundation only; it does not change the open real-provider
boundaries above.
executability of the foundation only; the later `6cb1495` evidence, not that
bootstrap, closes the real-provider lifecycle boundary.
@@ -107,4 +107,19 @@ Open:
- Ackermann and Differential command mapping;
- TTL/heartbeat/watchdog and provider-loss cases;
- repeatability verdict and complete S1 QualificationReport;
- UI-0 implementation, S1C/S1D and S2.
- S1C/S1D and S2.
## UI-0 follow-on
The direct internal read-only UI-0 surface is implemented after this acceptance
without changing the accepted S1B evidence. It reads the same
`artifacts/s1/runs` journal through GET-only backend routes and a
non-navigable Control Station workspace. Visual QA loaded the copied accepted
run and showed terminal `completed`, `operator-stop-clean`, four provider pins,
eight events, zero commands and the virtual-only authority boundary. The
browser received neither the configured D root nor artifact bytes or command
payloads.
This follow-on is interface/read-model acceptance only. It does not promote the
S1B run to S1 acceptance and does not close any remaining control, telemetry,
frame, failsafe, repeatability, navigation or physical-safety gate.