feat(lab): complete E30 evidence review gate
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
# ADR 0023: require sensor capabilities before algorithm admission
|
||||
|
||||
Date: 2026-07-26
|
||||
Status: accepted
|
||||
|
||||
## Context
|
||||
|
||||
ADR 0018 introduced the immutable K1-specific
|
||||
`missioncore.lidar-evidence-profile/v1`, and ADRs 0020–0021 established that the
|
||||
external K1 `lio_pcl` product is a post-LIO, map-registered increment rather
|
||||
than a native sensor scan. Those decisions correctly block known incompatible
|
||||
LiDAR stages, but the compatibility rules are still encoded per stage.
|
||||
|
||||
Mission Core must also admit future native scanners, depth sources and
|
||||
simulation providers without allowing an algorithm to infer missing physical
|
||||
properties from a successful API call. In particular, the absence of endpoints
|
||||
in the current K1 representation is not evidence that a ray traversed free
|
||||
space.
|
||||
|
||||
## Decision
|
||||
|
||||
1. Mission Core owns
|
||||
`missioncore.sensor-representation-capabilities/v1` as a provider-neutral
|
||||
description of the physical properties admitted for one versioned source
|
||||
representation.
|
||||
2. The existing LiDAR evidence profile remains immutable. The capability
|
||||
profile references it by `source_profile_id`; it does not replace or rewrite
|
||||
source evidence.
|
||||
3. K1 `lio_pcl` is represented as `registered-map-increment` with
|
||||
`frame-increment` currentness. It admits metric XYZ, metric intensity,
|
||||
map registration and a separate sensor pose.
|
||||
4. K1 `lio_pcl` does not admit per-point time, ring/channel, a separate IMU,
|
||||
a shared hardware clock, a native ray model, per-point ray origin, motion
|
||||
compensation, ray clearing, free-space evidence or persistent
|
||||
reconstruction.
|
||||
5. Algorithms own a versioned requirements document with accepted
|
||||
representation kinds and required capabilities.
|
||||
6. Admission is binary and fail-closed. A missing capability or incompatible
|
||||
representation rejects the algorithm/input pairing; Mission Core never
|
||||
synthesizes a capability to make an integration run.
|
||||
7. Successful compatibility admission does not grant command, navigation or
|
||||
safety authority.
|
||||
8. `absence_of_endpoints_means_free` is fixed to `false`, and unknown remains
|
||||
unknown. Planner adapters must separately require accepted free-space
|
||||
evidence.
|
||||
|
||||
## Consequences
|
||||
|
||||
- Endpoint-only occupied marking can consume the K1 registered increment.
|
||||
- Projective free-space mappers, ray clearing, TSDF/ESDF integrations and
|
||||
native-scan algorithms reject the K1 profile until a different admitted
|
||||
source supplies their requirements.
|
||||
- A future native MID-360 export or synthetic scan receives a separate source
|
||||
and capability profile; it does not upgrade historical K1 recordings.
|
||||
- Capability compatibility can be used by workers, provider adapters and LAB
|
||||
manifests without moving product ownership into ROS 2.
|
||||
- Track geometry and local occupied/unknown contracts can bind the exact
|
||||
representation profile and preserve the same fail-closed semantics.
|
||||
|
||||
## Implementation
|
||||
|
||||
- `src/k1link/compute/sensor_representation.py`
|
||||
- `src/k1link/compute/e30_review_pack.py`
|
||||
- `src/k1link/compute/e30_materialization.py`
|
||||
- `src/k1link/web/e30_review_api.py`
|
||||
- `apps/control-station/src/core/laboratory/e30Review.ts`
|
||||
- `apps/control-station/src/workspaces/E30ReviewWorkspace.tsx`
|
||||
- `tests/test_sensor_representation.py`
|
||||
- `tests/test_e30_review_pack.py`
|
||||
- `tests/test_e30_materialization.py`
|
||||
- `apps/control-station/test/e30Review.test.mjs`
|
||||
- `docs/16_ARCHITECTURE_AUDIT_EXECUTION_ROADMAP.md`
|
||||
|
||||
## References
|
||||
|
||||
- ADR 0018: LiDAR evidence before models
|
||||
- ADR 0020: Patchwork++ vendor-map boundary
|
||||
- ADR 0021: native scan, normalized scan and rolling-map separation
|
||||
- `docs/13_LIDAR_WORKER_PRODUCT_AND_ROADMAP.md`
|
||||
Reference in New Issue
Block a user