Low-count AR recovery plan (nsat-quality-gate rebalance)¶
Objective¶
use_low_count_ambiguity_resolution (default-off) lowers the per-epoch
LAMBDA candidate-count floor so sparse-geometry epochs can attempt AR, but its
mandatory surplus_rescue_quality_pass requires nsat >= 10 and
ddpr_rms <= 5 m. A low-count epoch is sparse by construction, so those two
floors can never be met -- the rescue is structurally dead on exactly the
epochs it exists for.
On the frozen Tokyo run1 design slice (source epochs 5000--5499), 8 FLOAT epochs (slice 360--367) carry a correct, unambiguous LAMBDA candidate yet remain FLOAT purely because of these floors:
| slice epoch | nsat | float horiz. err | ddpr_rms | DDCP post-fit RMS | LAMBDA ratio | FFRT |
|---|---|---|---|---|---|---|
| 360 | 7 | 0.094 m | 9.58 m | 0.018 m | 4.3 | 1 |
| 361 | 7 | 0.094 m | 9.53 m | 0.018 m | 4.1 | 1 |
| 362 | 6 | 0.093 m | 10.57 m | 0.013 m | 5.8 | 1 |
| 363 | 6 | 0.092 m | 10.55 m | 0.012 m | 5.1 | 1 |
| 364 | 6 | 0.090 m | 10.55 m | 0.011 m | 4.6 | 1 |
| 365 | 7 | 0.088 m | 10.56 m | 0.012 m | 31.9 | 1 |
| 366 | 7 | 0.085 m | 10.57 m | 0.014 m | 35.3 | 1 |
| 367 | 5 | 0.084 m | 12.23 m | 0.015 m | 73.9 | 1 |
These epochs sit inside the 0.5 m 3-D aperture (the float solution is already
sub-10-cm horizontal) yet are labelled FLOAT. The candidate carrier
observation is clean (DDCP post-fit ~1--2 cm), so the large ddpr_rms is a
code-observation (multipath) signature, not an integer problem. This is
exactly the regime where a correct FIX is being lost to a quality gate.
Diagnostic result (falsified the proposed relaxation)¶
The relaxation was tested before any implementation was written. With
kSurplusRescueMinSatellites lowered to 1 and kSurplusRescueMaxDdprRmsM
raised to 100 m, --low-count-ar --low-count-min 3 --surplus-validation-min-n
1 on the frozen design slice turned 6 FLOAT epochs FIXED:
| slice epoch | FIXED horiz. err |
|---|---|
| 356 | 2909.78 m |
| 360 | 2909.78 m |
| 361 | 2909.78 m |
| 362 | 2909.78 m |
| 363 | 2909.78 m |
| 364 | 2909.78 m |
All six are wrong FIX at ~2.9 km; none is within the 0.5 m aperture. The
float solutions these epochs reported were indeed ~0.09 m horizontal (the
horiz_err_m column), but the integer candidates LAMBDA selected at ratio
4--74 and FFRT-pass were not the true integers -- FFRT and the ratio validate
internal consistency of the integer hypothesis against the float covariance,
not its agreement with truth. The nsat >= 10 and ddpr_rms <= 5 m floors
were therefore blocking exactly the wrong fixes they exist to block: a sparse
epoch with a large code residual and a self-consistent-but-wrong integer
candidate.
Conclusion: the low-count AR recovery plan as designed does not work. The
8 target epochs' correct-looking float solutions are not accompanied by
correct integer candidates, and no amount of ratio/DDCP evidence (already
clean at 1--2 cm) can distinguish the wrong integers without the
independent-satellite coverage the nsat floor encodes. Do not implement the
sparse-geometry witness, do not relax the quality gate, and do not spend
sealed run2/run3 holdouts on this direction. A correct recovery for these
epochs would require better float-ambiguity conditioning (a distinct problem
from the quarantine/arc-restart thread) or an independent absolute-position
witness, which the candidate-integrity witness already showed has zero yield
on this slice.
(Retained record) Frozen candidate-quality witness proposal¶
Superseded by the diagnostic result above; kept for the audit trail.
For a low-count epoch ONLY (n < min_candidates, same entry rule as today),
replace the nsat >= 10 and ddpr_rms <= 5 m arms of
surplus_rescue_quality_pass with a sparse-geometry substitute that uses
evidence which does not vanish as the satellite count shrinks:
- Carrier post-fit consistency (kept):
fixed_postfit_ddcp_factors >= 4andfixed_postfit_ddcp_rms_m <= 0.05 m-- already evaluated and passed (1--2 cm) on all 8 target epochs. - IMU-propagated aperture (kept from
imu_aided): the candidate lies withinimu_aided_max_prediction_separation_mof the IMU-propagated epoch seed, and withinimu_aided_max_float_separation_mof the float position. - New ratio floor for sparse geometry:
ratio >= 10(between today'slow_count_min_ratiodefault of 1.5 and the strict 3.0) to compensate for losing thensat >= 10independent-satellite coverage.
Everything else is unchanged: the epoch still enters via the existing
low-count entry gate, still requires use_surplus_satellite_validation, still
goes through surplus validation when the pool allows, and still must pass the
existing fixed-vs-float separation and plausibility gates. The change is
strictly narrower -- it relaxes two floors that cannot be satisfied by a
sparse epoch and adds one sparse-geometry ratio floor.
Gates¶
Gate 0: deterministic safety¶
- default-off bit-identical (OFF/ON solutions, ratios, statuses, CSV equal);
- a synthetic 4-ambiguity epoch with a clean carrier post-fit and a ratio of ~50 is accepted (previously LowCountRejected), while:
- the same epoch with a contaminated DDCP (RMS > 0.05 m) or ratio < 10 is still rejected; and
- a normal (n >= min_candidates) epoch is never routed through the sparse witness (established path untouched).
Gate 1: Tokyo run1 source epochs 5000--5499¶
- the 8 target epochs (360--367) become FIXED at their ~0.09 m positions;
- zero additional wrong FIX above the 0.5 m 3-D aperture anywhere in the slice;
- zero lost correct FIX relative to the OFF replay;
- no NONE/non-finite increase;
- fixed horizontal RMS/P95 regression at most 5%;
- solver overhead at most 10%.
Failure stops without tuning. Only a Gate-1 pass permits full run1. Tokyo run2/run3 remain sealed until a full-run1 activation passes.
CLI¶
Expose one research switch alongside the existing --low-count-ar:
--low-count-sparse-witness
No sigma sweep, ratio sweep, or aperture tuning is allowed in this experiment. Reference truth is used only by the offline scorer.