feat(perception): add full camera-first shadow

This commit is contained in:
DCCONSTRUCTIONS
2026-07-30 23:15:06 +03:00
parent dee6d57133
commit dc6f9b66da
12 changed files with 1932 additions and 29 deletions
@@ -415,6 +415,13 @@ Dataset expansion is no longer the next gate.
- [x] Add a separate diagnostic motion-observation and near-occupied proximity
derivative with temporal freshness, source provenance and no persistent-map
mutation.
- [x] Run the candidate camera detector through the canonical E29 association
over all 4,489 RAVNOVES00 frames. Keep camera semantic ownership, publish
LiDAR range only from qualified occupied support and retain the detector as
a diagnostic shadow pending independent quality review.
- [x] Version the vehicle-body/LiDAR-mount contract and bind RAVNOVES00
fail-closed as a portable, physically unbound K1 source without invented
dimensions or transforms.
- [ ] Admit a `recent-collision` state only after vehicle-body and LiDAR-mount
geometry are bound; proximity is not collision truth.
- [x] Reuse the accepted camera-to-LiDAR projection as an optional semantic
@@ -176,6 +176,13 @@ real authority.
- [x] Verify strict round-trip plus adversarial duplicate ownership, unknown
owner, camera-only/conflict range, geometry-only semantics, held/persistent
ownership, unavailable source and authority mutation cases.
- [x] Reuse the canonical E29 frame association in E53 over all 4,489
RAVNOVES00 frames with a second camera candidate. Preserve camera semantic
ownership, keep unavailable LiDAR range explicit and reject runtime
promotion without independent truth.
- [x] Add `missioncore.rig-geometry/v1` with strict unbound/measured/qualified
states. Bind the portable RAVNOVES00 K1 as `unbound`; do not infer a vehicle
body or LiDAR-to-body mount from the recording.
The frozen A3 engineering and human generations cover all 486 items and
retains the exact A2 materialization/review-pack and 42-sheet evidence
@@ -0,0 +1,57 @@
# ADR 0035: Camera-first shadow and physical rig-geometry boundary
Date: 2026-07-30
Status: accepted and implemented
## Decision
Mission Core preserves one perception ownership rule:
```text
camera owns semantic class and object proposal
LiDAR owns metric support and range
```
The canonical E29 association is exposed as one reusable frame evaluator and
is reused by E29 and full-source candidate shadows. A camera proposal remains
an object when LiDAR support is unavailable; its range remains unavailable.
Unassociated LiDAR geometry remains geometry without a semantic class.
E53 runs a candidate camera detector over every RAVNOVES00 frame through that
unchanged association. It is a diagnostic shadow and cannot mutate E29,
persistent reconstruction or runtime detector selection.
## Rig geometry
Vehicle-body and LiDAR mount/extrinsic use
`missioncore.rig-geometry/v1`. The contract has three states:
- `unbound`: no physical body or mount values may be present;
- `measured`: body and rigid transform require immutable measurement evidence
and uncertainty, but collision remains unavailable;
- `qualified`: geometry passed its named qualification method, while
collision still requires a separate algorithm and safety gate.
RAVNOVES00 binds `ravnoves00-portable-k1/unbound-v1`. It is portable K1
evidence and supplies no vehicle body or measured LiDAR→body transform.
Invented dimensions, sensor height or identity transforms are rejected.
## Resource correction
The first E53 full pass exposed repeated decompression of
`cloud_points_map` inside the frame loop. That immutable result failed its
50 ms p95 gate at 210.7093 ms.
The accepted implementation materializes compressed source members once
before sequential frame processing. The corrected run processed all 4 489
frames at 1.7993 ms p95 and 36.8594 MiB peak-RSS growth. No Docker, worker,
network service or second Mission Core backend participates in the path.
## Authority
E53 proves technical full-source execution, not detector accuracy:
- E29 overlap is comparison, not ground truth;
- adjacent image-space IoU is continuity diagnostics, not tracking truth;
- the candidate detector is not operationally promoted;
- collision, navigation, safety and commands remain false.