docs(perception): reject direct TRAVEL AOS compatibility

This commit is contained in:
DCCONSTRUCTIONS
2026-08-26 19:34:10 +03:00
parent 28d5297237
commit 989a3ce28c
2 changed files with 167 additions and 8 deletions
@@ -308,8 +308,17 @@ The upstream T3 qualification passed on `2026-08-26`: exact-source KITTI
regression was bit-identical to the committed gold result, the standalone
example produced all outputs and the ROS 2 Jazzy node was discoverable. See
[`experiments/perception/M49_T3_TRAVEL_UPSTREAM_QUALIFICATION_2026-08-26.md`](../experiments/perception/M49_T3_TRAVEL_UPSTREAM_QUALIFICATION_2026-08-26.md).
RAVNOVES00 replay remains gated on scan-model compatibility and the GPL runtime
boundary.
The direct RAVNOVES00 compatibility gate then rejected the combined TGS+AOS
profile. TGS ground/non-ground membership was invariant under point-order
reversal, but AOS failed all `20/20` order comparisons with labeled-point
Jaccard as low as `0.469`; its `64 × 4,500`, `-24.8°…+2.0°` KITTI scan model is
not the K1 registered-map-increment contract. The complete evidence is in
[`experiments/perception/M49_T3_TRAVEL_RAVNOVES_COMPATIBILITY_2026-08-26.md`](../experiments/perception/M49_T3_TRAVEL_RAVNOVES_COMPATIBILITY_2026-08-26.md).
Direct AOS admission is closed. TGS alone remains eligible for a bounded
ground/non-ground adapter that retains the exact unreturned complement as
unknown evidence. GPL runtime, visual quality and full-source realtime remain
open gates.
### T4 — Candidate C occupancy/ESDF probe
@@ -328,9 +337,11 @@ boundary.
## Immediate next action
Verify TRAVEL's spinning-scan assumptions against the bounded causal
RAVNOVES00 `lio_pcl` representation, then build the recorded-replay adapter if
the required information exists. Candidate A T2 replay remains blocked by the
failed unmodified T1 gate. No LOW-STEP tuning, new object model, camera resize,
fisheye rectification, manual dataset or parallel heavy Worker job is
authorized by this decision.
Build the TGS-only recorded adapter over the bounded causal RAVNOVES00
representation. Preserve `GROUND_SUPPORT`, `NONGROUND_OCCUPIED`, the exact
`UNKNOWN_REJECTED` complement and `UNOBSERVED` as separate products; do not use
AOS or infer free cells from absent republication. Review the ten anchors in
metric 3D/costmap space before adding diagnostic camera projection. Candidate A
T2 replay remains blocked by the failed unmodified T1 gate. No LOW-STEP tuning,
new object model, camera resize, fisheye rectification, manual dataset or
parallel heavy Worker job is authorized by this decision.
@@ -0,0 +1,148 @@
# M4.9 T3 TRAVEL compatibility on RAVNOVES00 — 2026-08-26
Status: **direct TRAVEL TGS+AOS profile rejected**; TGS retained for a bounded
ground/non-ground adapter probe; visual quality, realtime integration,
navigation and actuation remain disabled
## Decision
The unmodified TRAVEL KITTI profile cannot consume the RAVNOVES00 `lio_pcl`
representation as a complete ground-and-instance provider. Ground segmentation
is deterministic and fast on the tested inputs, but the above-ground object
segmentation changes materially when the exact same points are presented in
reverse order. The fixed KITTI vertical-angle profile also does not describe
the K1 registered-map increments.
Mission Core therefore rejects direct admission of TRAVEL AOS. It retains the
unmodified TGS stage for the next bounded adapter test because its ground and
non-ground partitions were bit-set invariant across all order comparisons. The
adapter must preserve TGS-rejected points as explicit unknown evidence rather
than silently dropping them. No AOS cluster, camera box, free cell or command
receives authority from this run.
## Frozen identity
| Item | Identity |
| --- | --- |
| TRAVEL source | `95dc2fbd66a343efd9060c45a5711b6307a950a4` |
| Mission Core probe source | `28d52972370097d3f3e376e17c9fdb388b0e7ebf` |
| Deterministic Worker artifact | `c726018a62f602ff1f51432fbdf4bba67aa969735f9798a55472b079eff8a0fb` |
| TRAVEL image | `sha256:7b412020f4d8392d1d1ed1b33beadc44140f0ea8f781e62dd69796042334300f` |
| CPU preparation/analysis image | `sha256:ceb13548617e4bd3f619766bfdff00af3fa5160946b367828da6d2233dcdcba0` |
| RAVNOVES00 LiDAR pack | `0685d24219d8236caf8b7f1685e93f6d6b59e7fd015a768d88a92bbe8b154944` |
| Compatibility profile | [`config/perception/m49-travel-ravnoves-compatibility-v1.json`](../../config/perception/m49-travel-ravnoves-compatibility-v1.json) |
The release artifact was built from a clean committed revision, copied into a
new Worker release root and verified before extraction. The run used the two
already-qualified images by exact image ID. It performed no image build,
network access, CUDA/Vulkan request or GPU lease.
## Input contract
The probe used the ten operator-reviewed anchors `171`, `306`, `368`, `402`,
`450`, `509`, `525`, `744`, `1122` and `1856` with two causal representations:
1. `current_increment`: the exact registered map increment transformed into
the current LiDAR frame;
2. `causal_rolling_1s`: current and past increments from the preceding one
second, bounded to the accepted `12 m` local-map radius and transformed into
the current LiDAR frame.
No future frame was used. Missing republication was not interpreted as free
space. The source pack has no retained intensity, ring/channel, per-point time
or native ray model; intensity was zero-filled only to satisfy the XYZI input
ABI.
Each representation was run in source order and exact reverse order. This
produced `10 × 2 × 2 = 40` isolated CPU invocations.
## Result
### TGS ground/non-ground stage
| Measurement | Current increment | Causal rolling 1 s |
| --- | ---: | ---: |
| Eligible points over ten source-order anchors | `20,468` | `144,872` |
| Ground + non-ground points returned | `20,337` | `144,871` |
| Unreturned eligible points | `131` | `1` |
| Anchors with complete accounting | `7/10` | `9/10` |
| Ground multiset order Jaccard, minimum | `1.000` | `1.000` |
| Non-ground multiset order Jaccard, minimum | `1.000` | `1.000` |
| TGS stage p50 | `0.269 ms` | `1.775 ms` |
| TGS stage p95 | `0.329 ms` | `4.379 ms` |
| TGS stage maximum | `0.583 ms` | `4.807 ms` |
TGS classification is order-invariant on all twenty source/reverse
comparisons. The missing points are not random process loss. TRAVEL internally
routes below-plane or filtered points into its outlier cloud, while the public
example and ROS wrapper publish only `ground`, `nonground` and AOS `labeled`.
Frame `171` accounts for `129` of the `131` missing current-increment points;
they lie approximately `2.595.09 m` from the sensor. A safety adapter must
retain the exact input complement as `UNKNOWN_REJECTED`, never as free.
### AOS above-ground object stage
| Measurement | Result |
| --- | ---: |
| Accepted source/reverse comparisons | `0/20` |
| Labeled-point multiset Jaccard, minimum | `0.469` |
| Labeled-point multiset Jaccard, median | `0.663` |
| Labeled-point multiset Jaccard, maximum | `0.963` |
| Current-increment non-ground points retained as labeled, median | `20.6%` |
| Causal-rolling non-ground points retained as labeled, median | `38.4%` |
This is a representation incompatibility, not a threshold-quality judgment.
AOS projects points into a `64 × 4,500` spherical range matrix and keeps the
first point that reaches an occupied angular bin. A registered-map increment
does not carry an upstream ring order, so reversing an otherwise identical
array changes which points survive projection and changes cluster membership.
The pinned KITTI profile declares a vertical range of `-24.8°…+2.0°`. Only
`26.7%` of current-increment non-ground points and `34.4%` of causal-rolling
non-ground points lie inside that declared range. The pinned implementation's
row lookup also has no valid end-of-range branch for an angle above the maximum.
Changing the angle table and inventing a pseudo-ring layout would create a new
K1-specific algorithm profile; it is not accepted as the ready upstream system
tested here.
### Wrapper and resource envelope
- Forty isolated invocations completed in `6.654335 s`, including container
startup, input preparation and analysis.
- Per-invocation wall p50 was `50 ms`; p95 was `70.5 ms`. These include
process startup and are not the candidate-stage realtime measurement.
- Maximum measured process RSS was `18,140 KiB`.
- Canonical `ndc-mission-core-triton` retained the same container ID and stayed
`running/healthy`.
- The one-shot scheduled task and all three exact candidate container names
were removed. Worker free memory after cleanup was approximately `52.82 GiB`.
- Frigate, GAUSS/PlayCanvas, the GPU allocation and the canonical port `8000`
were not modified.
## Sealed evidence
Worker root:
`D:\NDC_MISSIONCORE\runtime\results\m49-t3-travel-ravnoves\ravnoves-compat-001`
| File | Bytes | SHA-256 |
| --- | ---: | --- |
| `result.json` | `26,810` | `ff0b27f469cccad258c53ae07cb04ad00e696d82b32021c4f1f38ba7fa39d66a` |
| `worker-summary.json` | `1,007` | `007eb400f6a12c950e81a631dc1c7824bc10c0024327fb9965f5689d3b4c6a22` |
| `inputs/input-manifest.json` | `22,967` | `1239f2517c5dfcb46827cfd8f370e642a70eac3a83e39d6b769564321e2ff930` |
| `travel-timing.tsv` | `1,606` | `959b82372dbb197525071f030a4be1d6f3ff848e32b62b4b47b4f2bf2fa9d3d7` |
## Next gate
Build a TGS-only recorded adapter with four explicit outputs:
1. positive `GROUND_SUPPORT` from TGS ground;
2. `NONGROUND_OCCUPIED` from every TGS non-ground point, without AOS;
3. `UNKNOWN_REJECTED` from the exact eligible-input complement;
4. `UNOBSERVED` for cells with no positive support, never free by omission.
The first review remains the ten anchors in a 3D occupancy/costmap view. Camera
projection is diagnostic only and follows after the metric output is sealed.
The adapter is admitted only if compact obstacles and the passages between them
remain explicit without large vegetation/curb walls. GPL distribution and
full-source realtime remain separate gates.