docs(simulation): record S1 target bootstrap and UI gates

This commit is contained in:
DCCONSTRUCTIONS 2026-07-24 18:04:11 +03:00
parent 630d1ae819
commit e1809ac9e1
5 changed files with 115 additions and 7 deletions

View File

@ -160,6 +160,12 @@ Pause/resume/step/reset/stop are owned by the application service through a
worker port. Stock-rover provider specs, target-worker execution and PX4/Gazebo worker port. Stock-rover provider specs, target-worker execution and PX4/Gazebo
control mapping are still pending factual acceptance. control mapping are still pending factual acceptance.
Commit `630d1ae` has passed the first D-only `MissionCore-Sim` bootstrap
(`20 passed`, no retained test process). The first visible milestone is now
split explicitly: UI-0 is a read-only direct run view after real target
start/stop/recovery is proven; the top-level Polygon control surface remains
gated on S1 command and safety acceptance.
See the [Polygon product/SRS](docs/12_SIMULATION_POLYGON_PRODUCT_AND_SRS.md), See the [Polygon product/SRS](docs/12_SIMULATION_POLYGON_PRODUCT_AND_SRS.md),
[ADR 0015](docs/adr/0015-simulation-polygon-qualification-boundary.md) and the [ADR 0015](docs/adr/0015-simulation-polygon-qualification-boundary.md) and the
[SIM S0 worker runbook](docs/runbooks/SIM_S0_AI_WORKER.md). [SIM S0 worker runbook](docs/runbooks/SIM_S0_AI_WORKER.md).

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 | | 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 | | 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 | | 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 ownership foundation implemented locally — immutable run/journal/command contracts, exact-S0/D-only admission, idempotent application lifecycle, one-active-run authority and PGID process supervision with deterministic shutdown are implemented and tested. Target stock-rover provider specs/execution, PX4 command delivery, telemetry/frames, watchdog/failsafe evidence, navigation/safety acceptance and real actuator authority remain absent | | Simulation Polygon | SIM S0 GO; S1A complete; S1B ownership foundation passed target bootstrap — exact commit `630d1ae` runs inside D-only `MissionCore-Sim` with 20 target tests and zero test-process residue. Target stock-rover provider specs/execution, PX4 command delivery, telemetry/frames, watchdog/failsafe evidence, navigation/safety acceptance and real actuator authority remain absent. UI-0 is planned after target lifecycle; top-level Polygon remains gated |
USB project copying remains optional ground truth rather than a blocker for the USB project copying remains optional ground truth rather than a blocker for the
now-verified network path. Owner-operated LixelGO traffic verifies the MQTT now-verified network path. Owner-operated LixelGO traffic verifies the MQTT

View File

@ -564,6 +564,11 @@ pause/step/reset evidence remain open. The application service's port can be
implemented worker-locally without turning SSH or an operator shell into the implemented worker-locally without turning SSH or an operator shell into the
product data plane. product data plane.
The exact commit `630d1ae` has passed the first target bootstrap inside
`MissionCore-Sim`: its immutable Git archive was admitted under D, both S1 test
modules returned `20 passed`, and no test process residue remained. This proves
target executability of the ownership foundation, not the real provider graph.
### S2 ### S2
- Gazebo LiDAR/odometry feed the ROS 2/Nav2 baseline. - Gazebo LiDAR/odometry feed the ROS 2/Nav2 baseline.
@ -600,15 +605,33 @@ Polygon is planned as the seventh top-level bounded context:
Center | Fleet | Observation | Polygon | Missions | Data | System Center | Fleet | Observation | Polygon | Missions | Data | System
``` ```
Two UI gates are intentionally distinct.
### UI-0 — early read-only run view
After target S1B proves persisted start/stop/recovery history, a direct internal
run view may expose:
- run identity, lifecycle and terminal reason;
- authoritative clock and current pause/running state;
- provider health/process ownership;
- 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.
### UI-1 — top-level Polygon
Top-level UI implementation begins only after: Top-level UI implementation begins only after:
1. this SRS and the clock/frame/authority contracts are accepted; 1. this SRS and the clock/frame/authority contracts are accepted;
2. S1 backend lifecycle is proven; 2. S1 target backend lifecycle and command authority are proven;
3. run history is persisted independently of a browser session. 3. run history is persisted independently of a browser session.
The future UI may present Scenarios, Run, Control, History, Compare and Report. UI-1 may present Scenarios, Run, Control, History, Compare and Report. It cannot
It cannot own provider processes, bypass authority checks or write directly to own provider processes, bypass authority checks or write directly to PX4.
PX4.
## 21. Change control ## 21. Change control

View File

@ -51,8 +51,9 @@ reports easy to misuse.
backend is C-backed and currently serves unrelated co-tenants. backend is C-backed and currently serves unrelated co-tenants.
13. S1 uses exact `px4_msgs` directly. The experimental 13. S1 uses exact `px4_msgs` directly. The experimental
`px4-ros2-interface-lib` is not a mandatory S1 dependency. `px4-ros2-interface-lib` is not a mandatory S1 dependency.
14. A top-level Polygon UI is gated on accepted contracts and a proven S1 14. A read-only direct UI-0 run view may follow proven target S1B lifecycle and
backend lifecycle with persisted run history. persisted history. 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. 15. Real actuator authority requires a new decision and physical safety gate.
16. S0 processes run inside an ephemeral loopback-only Linux network namespace. 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 Micro XRCE-DDS Agent's UDP wildcard bind is acceptable only inside that
@ -147,3 +148,9 @@ namespace creation, live readiness probes, restart-safe PID/start-token
reconciliation and Gazebo world-control/PX4 command adapters remain open. The reconciliation and Gazebo world-control/PX4 command adapters remain open. The
worker port deliberately fixes ownership semantics without prematurely fixing worker port deliberately fixes ownership semantics without prematurely fixing
the eventual transport. the eventual 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.

View File

@ -0,0 +1,72 @@
# SIM S1 target bootstrap — 2026-07-24
## Result
`PASS` for the exact S1 source-generation/bootstrap boundary. This proves that
the committed S1A/S1B contracts, repository, application service, worker guard
and process-supervisor tests execute inside the accepted `MissionCore-Sim`
target. It does not accept the stock-rover provider lifecycle, PX4 commands,
telemetry, frames, watchdog behavior or S1 as a whole.
## Exact source generation
- Mission Core commit: `630d1ae`.
- Branch: `feat/simulation-polygon-s1`.
- Archive: `NODEDC_MISSION_CORE-s1-630d1ae.tgz`.
- Archive SHA-256:
`0ca5d3ffb008add6e793428e96b88920fdc65fa8d9982e5018ce7a4e83958dae`.
- Source:
`/mnt/d/NDC_MISSIONCORE/simulation/source/NODEDC_MISSION_CORE-630d1ae`.
- Cache:
`/mnt/d/NDC_MISSIONCORE/simulation/cache/mission-core-s1/`.
The archive was produced with `git archive` from the exact commit and an
explicit path set. The pre-existing S0 source and evidence generations were not
modified.
## Target and storage
- WSL distribution: `MissionCore-Sim`.
- Python: `3.12.3`.
- Kernel: WSL2 Linux `6.18.33.1-microsoft-standard-WSL2`, x86-64.
- Mutable source, cache and evidence: D-only.
- D free bytes at bootstrap: `392483127296`.
- Evidence:
`/mnt/d/NDC_MISSIONCORE/simulation/artifacts/s1/bootstrap/20260724T150000Z-630d1ae`.
## Validation
```text
PYTHONPATH=src python3 -m pytest -q \
tests/test_simulation_s1_run_store.py \
tests/test_simulation_s1_orchestrator.py
```
Result:
```text
20 passed in 14.73s
```
The evidence generation retains environment and source identity, target pytest
output, source-file SHA-256 values, an empty process-residue record, an evidence
digest index and `verdict=pass`.
## Accepted and open boundaries
Accepted:
- exact committed S1 source executes on the target worker;
- the D-only source/cache/artifact split is viable;
- local process-group tests stop without retained test processes;
- S1 requires neither a global Python package install nor Docker.
Still open:
- concrete Gazebo/PX4/XRCE/ROS provider specifications;
- product-owned loopback target namespace;
- real-provider health and deterministic shutdown;
- restart-safe PID/start-token reconciliation;
- live pause/resume/step/reset;
- Ackermann/Differential command mapping;
- canonical `VehicleState`, frame conversion and failsafe evidence.