Files
NODEDC_MISSION_CORE/docs/audits/2026-09-20-mid-route-016-retrieval-diagnosis.md
T
DCCONSTRUCTIONS e515ab1b8c feat(planning): consolidate recorded-route localization and spatial scene
Preserve the completed teach-and-repeat laboratory stage: reference preparation, cascaded acquisition, local tracking and recovery, recording lifecycle, replay qualification, and persistent Rerun scene controls. Document the open grid-picking regression and Rerun upgrade contract. No autonomous driving or loop-closure optimization is claimed.
2026-09-21 08:47:19 +03:00

127 lines
6.9 KiB
Markdown

# Two mid-route starts: retrieval failure, not absence of matching geometry
Date: 2026-09-20. Scope: inspect physical attempt 016 and fix the explicitly
requested vertical-scale outline. No production localisation logic, admission
threshold, device command, raw recording or historical result was changed.
## Evidence and integrity
The operator reports first starting approximately 30 m along the reference,
then moving closer, approximately 20 m, and pressing reinitialisation. The
saved run contains two stationary initialisations and one fresh validation.
All 18 artifact hashes listed by its report match the files on disk, including
both frozen initialisation inputs and the fresh registration input. The report
records no receipt gaps. Prefix maximum motion was 5.0 mm and 5.4 mm: motion
during the stationary prefix does not explain the failure.
This is one recording with two positions, not two independent captures. The
operator's distances are approximate, not surveyed ground truth.
## What actually ran
Both initialisations completed the 108-fit dense start stage and then the
18-fit route fallback. There was no worker timeout. Fallback wall time was
approximately 3.1 s after approximately 15 s for the start stage.
The fallback descriptor evaluated all 18 anchors on the selected 81.06 m
reference. `rank_route_candidates` then retained only the first six; exact
registration evaluated three yaw seeds for each. It did not proceed to the
remaining descriptor candidates after rejecting that shortlist.
| Attempt | Anchors admitted to exact registration, in descriptor order | Live outcome |
| --- | --- | --- |
| First | 0, 5, 10, 81.06, 80, 75 m | No admitted route location |
| Reinitialised | 0, 5, 81.06, 80, 75, 10 m | Provisional hypothesis near the route end; rejected by fresh validation |
The second provisional transform placed the scanner nearest route progress
79.76 m, with 74.16% point overlap and 0.2475 m inlier RMSE. Its fresh check
reported 77.14% overlap and 0.2407 m RMSE, but failed numerical convergence
(`converged=false`). The hypothesis was never confirmed as tracking. It is
inconsistent with the operator's reported location; high overlap alone cannot
justify admitting it. Lowering the gate or ignoring convergence would therefore
not be an appropriate remedy.
## Bounded offline counterfactual
Read each frozen `route-relocalization-input.npz` and call `relocalize_route`
with the production policy, changing only `candidate_count` from 6 to 18 so
every existing anchor reaches the same three-yaw exact fit. Retain the same
clouds, 30 s deadline, 40 iterations and all geometric thresholds. No live
publication or historical result rewrite occurs.
| Input | Selected anchor | Estimated scanner progress along reference | Point overlap | Inlier RMSE | Converged |
| --- | --- | --- | --- | --- | --- |
| First prefix | 30 m | 30.10 m | 96.95% | 0.1472 m | Yes |
| Reinitialised prefix | 20 m | 24.47 m | 98.41% | 0.1547 m | Yes |
Both searches completed and returned a candidate without relaxing acceptance.
The first 30 m anchor ranked fifteenth; the second 20 m anchor ranked
fourteenth. The second 25 m anchor ranked thirteenth and independently fitted
the same location with 98.41% overlap. Distances from fitted scanner position to
the nearest reference path sample are approximately 1.03 m and 2.03 m.
Overlap is the measured fraction of evaluated points within 0.5 m, not a
probability of correct location, centimetric accuracy or a vehicle-safety
qualification. Inlier RMSE is cloud residual, not independently measured pose
error. The counterfactual does not replay fresh confirmation or prove a live
recovery. It isolates a concrete retrieval false negative.
## Code-level cause and next decision
`route_relocalization.py` ranks radial-height histograms around cloud medians:
a 20 m live footprint is compared to 28 m reference contexts. These differently
observed and populated clouds can rank the true location poorly. The rankings
above prove that defect on this capture; they do not isolate which descriptor
feature is responsible.
The implementation is only a truncated cascade: it discards candidates after
the sixth, labels completion relative to those attempted fits, and offers only
one provisional transform. `StationaryBootstrap.accept_fresh` ends initial
confirmation on rejection; it does not resume the ranked candidate queue.
Automatic recovery after established tracking does not repair cold-start
shortlist exhaustion.
Recommended implementation, not applied in this turn:
1. Preserve the established dense start path and local tracking.
2. Use ranking as work order, not as a permanent exclusion of other areas.
Process spatially diverse candidate batches and continue the queue after
rejection, under an explicit compute/freshness budget.
3. When the budget is exhausted with unvisited candidates, report incomplete
search, not evidence that the route cannot be matched.
4. Improve descriptor observation comparability and verify distinct competing
locations before promotion. Continue to another viable candidate when fresh
confirmation rejects a provisional one; preserve source-age and identity
fences and never reuse stale confirmation data.
5. Qualify against both frozen prefixes, wrong-location/ambiguity controls and
the known successful start/tracking recordings before requesting another
field test. Increasing a constant to 18 is a diagnostic, not the scalable
product design for a kilometre route.
## Outline correction
The shared Design Guideline explicitly drew a 2 px outline on the vertical
range wrapper when its native input matched `:focus-visible`. This state can
survive pointer interaction. The vertical variant now has no border, outline
or shadow in any state. Focus-visible underlines both existing contrast-aware
central text layers. Native arrow/Home/End behaviour, left-side endpoints and
the 80 m domain range remain unchanged. The shared registry, documentation,
catalog specimen and contract test changed together; no app-local CSS override
or localisation change was introduced.
## Validation and handoff
- Shared range contract: 5/5; Design Guideline registry validation and core /
catalog typechecks passed.
- Mission Core architecture contract: 4/4; full frontend typecheck passed;
full frontend unit suite: 872/872; production build passed. Existing bundle
size warning remains; no new server or scanner session was started.
- Browser QA on the saved 016 scene in normal and expanded layout: slider
min -3.023, max 80. Pointer click changed value to 38.48 with real input focus;
native and wrapper outlines were 0 px, border 0 px, shadow none. Keyboard
focus underlined both contrast layers; Up changed the value, End restored 80.
- Canonical service on port 8000 served the new production CSS/JS and remained
healthy. No temporary numerical workers or build watchers remain. One
background saved-evidence view is retained for owner review, at the full
80 m clipping range. Device state is idle.