docs(simulation): accept S1B real provider lifecycle

This commit is contained in:
DCCONSTRUCTIONS
2026-07-24 18:39:59 +03:00
parent 6cb14954d4
commit a78c8c83f5
5 changed files with 181 additions and 32 deletions
+10 -6
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 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 |
| 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 |
USB project copying remains optional ground truth rather than a blocker for the
now-verified network path. Owner-operated LixelGO traffic verifies the MQTT
@@ -152,11 +152,15 @@ Without the exact admitted target-worker evidence its correct result remains
`INCOMPLETE`. S1 starts from the accepted S0 version/storage/time/process
boundary. Its S1A increment implements server-owned immutable run identity,
legal lifecycle transitions, canonical rover command envelopes, authority/TTL
admission, append-only artifacts and restart reconciliation. The local S1B
increment adds idempotent application lifecycle, single active ownership, an
exact-profile/D-only worker guard and deterministic POSIX PGID supervision.
Target provider launch/control, PX4 delivery, heartbeat/watchdog execution and
captured failsafe outcomes remain the next S1 increments.
admission, append-only artifacts and restart reconciliation. The S1B increment
adds idempotent application lifecycle, single active ownership, an
exact-profile/D-only worker guard, health-gated real provider specs and
deterministic POSIX PGID supervision. Exact generation `6cb1495` passed on
`MissionCore-Sim`: Micro XRCE-DDS Agent and PX4/Gazebo stock rover ran inside a
fresh loopback-only namespace, the run reached `completed`, and both provider
groups stopped without residue. Live world control, PX4 command delivery,
heartbeat/watchdog execution and captured failsafe outcomes remain the next S1
increments.
## Stage 0 — repository and host baseline
+27 -12
View File
@@ -62,6 +62,10 @@ Polygon is now a parallel product branch. As of this document:
- all nine digest-bound S0 evidence claims validate and the target doctor
returns `GO` for profile SHA-256
`aeecf5005301db230e1340b85215cbbd862b72974a22b8c43767c28be8453e2f`;
- S1B exact generation `6cb1495` has passed a product-owned real-provider
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;
- `actuator_authority=false`;
- `navigation_or_safety_accepted=false`.
@@ -557,17 +561,28 @@ The next local increment implements the provider-neutral ownership boundary:
- failure, profile drift or process residue becomes a persisted terminal
failure rather than a successful stop.
This is a tested local foundation, not S1B target acceptance. Concrete
Gazebo/PX4/XRCE/ROS provider specs, loopback namespace creation, target
health probes, post-restart PID identity reconciliation and live
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
product data plane.
The first target adapter now supplies concrete Micro XRCE-DDS Agent and combined
PX4/Gazebo stock-rover specs. Readiness is an executable contract: the Agent
must be listening, while PX4 must report the exact rover world/model, completed
startup and a `vehicle_status_v1` DDS writer. PX4 stdin remains open without
sending a command, so its shell cannot enter an EOF prompt loop. Provider logs
are read incrementally, all argv are shell-free, and every provider owns a
dedicated PGID.
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.
The exact commit `6cb1495` passed `25` target tests and the real
`s1b-6cb1495-20260724t1535z` lifecycle inside `MissionCore-Sim`. Its immutable
Git archive SHA-256 is
`37da47744e855bb1031734893a6f2dd82bb4eb92b7e15edd70794c29b2dfb451`.
Mission Core persisted the admitted/starting/running/stopping/completed history,
started `micro-xrce-dds-agent` plus `px4-gazebo-stock-rover`, observed an XRCE
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
pause/resume/step/reset, canonical VehicleState, frame conversion, rover command
mapping, watchdog/failsafe cases, repeatability or S1 as a whole.
### S2
@@ -609,8 +624,8 @@ 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:
Target S1B now proves persisted start/health/stop history. A direct internal run
view may expose:
- run identity, lifecycle and terminal reason;
- authoritative clock and current pause/running state;
@@ -2,9 +2,9 @@
## Status
Accepted for architecture; SIM S0 qualification returned `GO` on 2026-07-24.
Navigation behavior, safety behavior and real actuator authority are not
accepted.
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.
## Context
@@ -102,6 +102,22 @@ resolved/accepted pins and all required evidence. On the accepted profile
generation and nine-claim confined evidence set it returned `GO`; it cannot
infer that result from repository state alone.
## S1B target lifecycle
Exact generation `6cb1495` is the first product-owned real-provider acceptance.
`SimulationApplicationService` persisted the lifecycle while the worker adapter
created a fresh loopback-only namespace and `PosixProcessSupervisor` owned two
dedicated PGIDs: Micro XRCE-DDS Agent and the combined PX4/Gazebo stock
Ackermann launch. The run became `running` only after the exact world/model,
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.
## S1A implementation
`k1link.simulation.contracts` now defines the first product-owned
@@ -0,0 +1,110 @@
# SIM S1B real-provider acceptance — 2026-07-24
## Result
`PASS` for the product-owned stock-rover start/health/stop boundary on the
accepted `MissionCore-Sim` worker.
This is not S1 acceptance. It does not prove live world control, rover command
mapping, canonical telemetry/frames, watchdog/failsafe behavior, repeatability,
navigation behavior or real actuator safety.
## Accepted source generation
- Branch: `feat/simulation-polygon-s1`.
- Mission Core commit:
`6cb14954d4696270e12d4adb800bc337251dc631`.
- Archive: `NODEDC_MISSION_CORE-s1-6cb1495.tgz`.
- Archive SHA-256:
`37da47744e855bb1031734893a6f2dd82bb4eb92b7e15edd70794c29b2dfb451`.
- Source:
`/mnt/d/NDC_MISSIONCORE/simulation/source/NODEDC_MISSION_CORE-6cb1495`.
- Target test evidence:
`/mnt/d/NDC_MISSIONCORE/simulation/artifacts/s1/bootstrap/20260724T153453Z-6cb1495`.
- Target test result: `25 passed`.
The source was produced with `git archive` from the exact commit and an
explicit path set. Existing S0 and earlier S1 source/evidence generations were
not modified.
## Accepted run
- Run: `s1b-6cb1495-20260724t1535z`.
- Evidence:
`/mnt/d/NDC_MISSIONCORE/simulation/artifacts/s1/lifecycle/s1b-6cb1495-20260724t1535z`.
- Host profile:
`ai-worker-px4-gazebo-v1`.
- Host profile SHA-256:
`aeecf5005301db230e1340b85215cbbd862b72974a22b8c43767c28be8453e2f`.
- Lifecycle profile SHA-256:
`06fadcd1b55b70c9a53556dadc65d15a35d8d73f7664ebf766b9986cbe19a883`.
- Scenario SHA-256:
`49e8f4009bc96c40964a5657fef5c2e035f22fa567a2247b0e40571cb5e4ee5e`.
- Network interfaces inside the run: `lo` only.
- Provider owners:
`micro-xrce-dds-agent`, `px4-gazebo-stock-rover`.
- Terminal state: `completed`.
- Terminal reason: `operator-stop-clean`.
- Persisted events: `8`.
- Control commands: `0`.
- Registry residue: none.
- Independent exact-process check after the run: no `px4`,
`MicroXRCEAgent` or `gz`.
- D free bytes after the run: `392023871488`, above the accepted 200 GiB stop
floor.
Provider readiness was not inferred from PIDs. The admitted log evidence
contains:
```text
world: rover, model: rover_ackermann_0
Startup script returned successfully
successfully created rt/fmu/out/vehicle_status_v1 data writer
session established
```
PX4 stdin remained open to prevent an EOF prompt loop, but Mission Core wrote no
PX4 shell command. The worker received no arm or actuator/setpoint request.
## Failed generations retained as negative evidence
`01ec122` stopped before starting providers because the first namespace check
read WSL sysfs rather than the current namespace through netlink. The transient
namespace itself contained only loopback. Source was corrected in a new
generation; the failed generation was not retried.
`b4e3b3b` reached the real stock rover and XRCE session but ended
`orchestrator-start-failed`. Its declared profile incorrectly required
`Running, connected`, a line emitted by the S0 diagnostic CLI command rather
than spontaneous provider health, while PX4 stdin was closed. The full failed
run, provider logs, terminal process registry and digest index remain under:
```text
/mnt/d/NDC_MISSIONCORE/simulation/artifacts/s1/lifecycle/s1b-b4e3b3b-20260724t1531z
```
That generation was not retried. `6cb1495` replaced repeated full-file polling
with incremental log readers, kept PX4 stdin open without writing commands and
used the factual DDS-writer marker.
## Accepted and open boundaries
Accepted:
- exact S0 generation and D-only admission;
- product-owned loopback namespace;
- shell-free real provider specifications;
- readiness-gated Mission Core start;
- persisted run lifecycle and provider registry;
- deterministic real-provider stop with no residue;
- zero command/actuator authority.
Open:
- restart-safe PID/start-token reconciliation after orchestrator process loss;
- live pause/resume/single-step/reset;
- PX4/ROS canonical VehicleState and ENU/NED/FLU/FRD golden conversion;
- 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.