Матрица верификации
Полный машинно проверяемый реестр доказательств: 401 строк — 176 VALIDATED, 221 MODELLED, 4 PARTNER. Строка может быть VALIDATED только при наличии независимого внешнего оракула (это обеспечивают тесты инвариантов матрицы). Те же данные, с кликабельными ссылками по каждой строке на тест, модуль и закоммиченный тестовый набор, — это реестр проверки на https://kshana.dev. См. MODELLED-RATIONALE.md, почему каждая смоделированная строка не проверена внешне.
| ID | Требование | Возможность | Модуль | Тесты | Оракул | Статус |
|---|---|---|---|---|---|---|
| VM-60fc9ecb | Идентификация степенного шума по автокорреляции с лагом 1 | allan::lag1_noise_id: идентификатор шума по автокорреляции с лагом 1 по Riley и Greenhall (2004) (прореженная фаза с удалённой квадратичной составляющей или усреднённая по группам частота с удалённой линией; повторные первые разности, пока delta = r1/(1+r1) < 0,25 или d = dmax), возвращающий целочисленный и неокруглённый показатель степенного закона alpha (+2 белый PM до -2 случайное блуждание FM) при любом коэффициенте усреднения; он задаёт число степеней свободы по типу шума для карточек устройств библиотеки измеренных часов | allan (lag1_noise_id, lag1_acf) | tests/clock_library_lag1_noise_id_allantools.rs (140 случаев: десять записей степенного шума Касдина, b = 0 до -4, как данные фазы и частоты, af = 1 до 64; alpha_int и d совпадают, наихудшие |d alpha| 9.6e-13 и |d rho| 4.8e-13 при пороге 1e-9; предварительно зарегистрировано 2ec76864); allan::tests (lag1_identifies_white_pm_white_fm_and_random_walk_fm; lag1_is_blind_to_a_quadratic_phase_trend) | allantools 2024,6 autocorr_noise_id (A. Wallin и соавторы, LGPL-3.0-or-later, запускается генератором тестовых данных как отдельная программа): независимая реализация опубликованного алгоритма Riley–Greenhall, однозначно определённая величина при заявленных соглашениях. Проверяет идентификатор, а не шумовое содержание каких-либо реальных часов | VALIDATED |
| VM-455af4b5 | Аутентификация навигационных данных Galileo OSNMA на стороне приёмника | osnma + kshana osnma verify: открытый верификатор на чистом Rust на стороне приёмника для Galileo OSNMA (SIS ICD Issue 1,1, Receiver Guidelines Issue 1,3) по страницам I/NAV или потоку u-blox UBX-RXM-SFRBX: открытые ключи в дереве Меркла (DSM-PKR), подпись ECDSA P-256/P-521 для DSM-KROOT, проверка цепочки ключей TESLA (SHA-256 или SHA3-256), проверка MACSEQ и меток (HMAC-SHA-256 или CMAC-AES) для ADKD 0, 4 и 12 с перекрёстной аутентификацией, конец/отзыв/обновление цепочки, обновление и отзыв открытого ключа и сообщение о тревоге; статус каждого спутника Authenticated/Failed/Unavailable с причиной каждого сбоя или задержки. Носит консультативный характер: это не навигационное оборудование с утверждённым типом и не служба целостности навигации; характеристики защиты от спуфинга не заявляются |
osnma (page, subframe, dsm, merkle, signature, tesla, mac, maclt, navdata, verifier, ubx, cli) | tests/osnma_official_vectors.rs (по выбору, KSHANA_OSNMA_VECTORS: все 18 наборов векторов, 186 382 меток аутентифицировано, 0 неудачных, нижние пороги по наборам, объявленные цепочки, ADKD 0/4/12, проверенное оповещение, возобновление аутентификации после конца цепочки, отзыв цепочки и ключа и новый открытый ключ; офлайн, векторы не распространяются); tests/osnma_synthetic.rs (набор атак: подложные подкадры из далёкого будущего, истечение срока и привязка к данным, оповещение и «не использовать», подтверждение заголовка, фиктивные метки, MACSEQ, конфликт ключей, устаревший и воспроизведённый KROOT, CMAC-AES/SHA3-256/P-521 через верификатор); модульные тесты osnma (известные ответы RFC 4231, RFC 4493, FIPS 197, FIPS 202, RFC 6979 и CRC-24Q) | Официальные тестовые векторы Galileo OSNMA, опубликованные Европейским центром обслуживания GNSS в приложении к Receiver Guidelines (Test_vectors.zip, sha256 ef9b9afc6ef9e1c57393415cf2a1dc80c4035e7c06123907ea0bb97dd3ccf370): 18 из 18 наборов, 186 382 меток аутентифицировано, 0 с ошибкой, запущено автономно 2026-10-10 (запись доказательств в kshana-pro docs/evidence). Область применения: векторы подтверждают криптографическую проверку (Merkle, KROOT/ECDSA, цепочка TESLA, метки MACK, ADKD 0/4/12) и её результаты на опубликованных сценариях; они используют только HMAC-SHA-256, цепочку SHA-256, 128-битные ключи, 40-битные метки и записи таблицы 33 и 34, поэтому CMAC-AES, цепочки SHA3-256 и другие параметры охвачены только опубликованными тестами известных ответов для примитивов и синтетическими тестами. Укрепление в части доверенного времени, привязки данных, срока действия и подтверждения заголовка проверено синтетическими тестами атак, а не внешним оракулом. Не проверялись: списки отзыва сертификатов, реальные сигналы и реальный приёмник (раскладка слов UBX проверена только на синтетических кадрах), деревья Меркла на SHA3-256, свежесть без независимого времени. Это не служба ЕС | VALIDATED |
| VM-27e53cda | Характеризация стабильности частоты | Девиации Аллана, модифицированная и Адамара + идентификация степенного шума с доверительными интервалами χ² | allan | tests/allan_reference.rs (NBS14 в сравнении со Stable32 с точностью 1e-4); allan::tests | NIST SP 1065 (Riley) / эталонные девиации Stable32 для NBS14 | VALIDATED |
| VM-f329e455 | Стабильность частоты на реальных измеренных часах | Перекрывающиеся девиации Аллана и Адамара на реальном цезиевом стандарте | allan | tests/cs5071a_reference.rs (реальный Cs 5071A и водородный мазер, 556 990 точек, 16 коэффициентов усреднения в сравнении со Stable32 с точностью 1e-3; зависит от данных через scripts/fetch_cs5071a.sh) | Перекрывающиеся ADEV/HDEV Stable32 на измеренном фазовом ряду цезиевого 5071A (allantools) | VALIDATED |
| VM-374517c9 | Совпадение оценщиков Аллана на каноническом эталонном ряду Stable32 | Перекрывающиеся девиации Аллана, модифицированная Аллана и времени по всей лестнице AF | allan | tests/phasedat_reference.rs (Stable32 PHASE.DAT, 139 коэффициентов усреднения, OADEV/MDEV/TDEV с точностью 1e-3; зависит от данных через scripts/fetch_phasedat.sh) | Эталонные девиации Stable32 для PHASE.DAT (Riley; стандартный регрессионный ряд) | VALIDATED |
| VM-5ced4913 | Стабильность частоты в расширенном диапазоне (Theo1 / TOTDEV) | Theo1 и полная девиация (TOTVAR) — оценщики стабильности на больших τ в расширенном диапазоне, доходящие до ~75% записи, где девиация Аллана перестаёт работать около ~50%; построенный на них гибрид ThêoH с удалённым смещением (allan::theoh_curve) остаётся MODELLED | allan | tests/theo1_totvar_reference.rs (Theo1 + TOTDEV на 1000-точечном наборе данных LCG из NIST SP 1065 §12,4, 6 + 6 коэффициентов усреднения в сравнении с allantools 2024,06 с точностью <1e-9); allan::tests (отслеживание замкнутой формы для белого ЧМ; тождество TOTVAR=ADEV при m=1; инвариантность Theo1/TOTVAR к смещению фазы/частоты; наклон -1/2 для белого ЧМ) | allantools 2024,06 — независимая сторонняя библиотека стабильности частоты — theo1 (NIST SP 1065 ур. 30) и totdev (NIST SP 1065 ур. 25) на герметичном наборе данных LCG из NIST SP 1065 §12,4; воспроизводится автономно через tests/fixtures/theo1_totvar/generate_theo1_totvar_reference.py | VALIDATED |
| VM-fb93df39 | Максимальная ошибка временного интервала (MTIE) — метрика дрейфа времени в телекоммуникациях | MTIE(τ): максимальный размах времени от пика до пика в любом скользящем окне τ = m·tau0, статистика дрейфа ITU-T G.810/G.823/G.8261, по которой записаны пределы сетей синхронизации (маски MTIE) — экстремальная (макс/мин) величина, отличная от среднеквадратического семейства Аллана | allan (mtie, mtie_curve) | tests/mtie_reference.rs (MTIE на герметичном 1000-точечном фазовом ряду LCG из NIST SP 1065 §12,4, 9 коэффициентов усреднения m=1..256 в сравнении с mtie из allantools 2024,06 с точностью <1e-9, наблюдаемо ≤4e-15); allan::tests (размах, выведенный вручную; монотонное неубывание по τ; точное a·m на чистой рампе) | allantools 2024,06 — независимая сторонняя библиотека стабильности частоты — mtie() на герметичном фазовом ряду LCG из NIST SP 1065 §12,4; MTIE — чисто максимально-минимальная статистика, поэтому выход оценщика побитово совпадает с allantools на одинаково построенном массиве фазы (зафиксированные эталонные константы с 15 значащими цифрами находятся в пределах 1 ULP). Воспроизводится автономно через tests/fixtures/mtie/generate_mtie_reference.py | VALIDATED |
| VM-f2098d5f | Модифицированная девиация Аллана / девиация времени (MDEV / TDEV) | MDEV(τ): перекрывающаяся модифицированная девиация Аллана (оценщик со скользящим окном по вторым разностям, различающий белый и фликкер-шум фазы) и TDEV(τ) = τ/√3·MDEV(τ), статистика дрейфа во временной области ITU-T G.811/G.812/G.823, по которой записаны маски синхронизации | allan (modified_adev, time_deviation) | tests/mdev_tdev_reference.rs (MDEV + TDEV на герметичном 1000-точечном фазовом ряду LCG из NIST SP 1065 §12,4, 8 коэффициентов усреднения m=1..200 в сравнении с mdev/tdev из allantools 2024,06 с относительной точностью <1e-9, плюс тождество τ/√3 на реальном ряду); allan::tests (наклон −1/2 для белого ЧМ; малый случай MDEV, выведенный вручную) | allantools 2024,06 — независимая сторонняя библиотека стабильности частоты — mdev() и tdev() на герметичном фазовом ряду LCG из NIST SP 1065 §12,4 (тот же ряд, что в строках Theo1/TOTDEV/MTIE), вычисляющие те же однозначно определённые оценщики; совпадение с относительной точностью <1e-9. Воспроизводится автономно через tests/fixtures/mdev_tdev/generate_mdev_tdev_reference.py. (Тест phasedat_reference.rs, зависящий от данных, также сверяет их со Stable32 с точностью 1e-3; это жёсткая герметичная перекрёстная проверка, всегда включённая) | VALIDATED |
| VM-459d2f31 | Стабильность частоты оптических часов на реальной измеренной кривой | Восстановление степенного закона (белая FM + нижний предел красного шума) методом NNLS по опубликованной измеренной девиации Аллана оптического часового перехода ⁸⁸Sr — воспроизводя σ_y(τ) и главное масштабирование 4.7e-16/√τ на малых τ с подлинным измеренным нижним пределом на больших τ, а не синтезированный нижний предел оптического класса, который holdover.rs принимает в остальных случаях | quantum_trade (qparams_from_adev_curve), powerlaw | tests/optical_clock_adev_reference.rs (σ_y(τ) оптических часов на пинцетах ⁸⁸Sr, Norcia и др., 8 времён усреднения 0,92–117,76 s, включены дословно по лицензии CC-BY-4.0: NNLS восстанавливает кривую с СКО ~10% / ≤21% в худшей точке; восстановленное √q_wf = 4.33e-16 совпадает с опубликованным 4.7e-16/√τ; q_rw > 0 измеренный уровень красного шума) | Norcia, Young, Eckner, Oelker, Ye, Kaufman, Science 366:93 (2019), рис. 4, измеренная ADEV; кривая взята дословно из Zenodo 10.5281/zenodo.3382347 (CC-BY-4.0). Область ограничена воспроизведением опубликованной измеренной кривой стабильности — показатели устройств по holdover до порога для класса часов остаются MODELLED | VALIDATED |
| VM-3cfc418d | Целостность (RAIM/ARAIM/SBAS) | Разделение решений ARAIM с несколькими гипотезами по ARAIM Airborne Design Document (ADD) v4.2 (araim_reference::add_v42_protection_levels и add_v42_protection_levels_ecef: определение подмножеств по правилам P_THRES и FC_THRES, VPL, HPL, эффективный порог монитора EMT и sigma_acc); обнаружение отказов мгновенным RAIM по χ² с исключением одного спутника (raim::snapshot_raim, raim::snapshot_raim_fde) и HPL/VPL по наклону в геодезической местной системе; и комбинация уровней защиты SBAS по DO-229E (sbas::sbas_protection_level) для службы L1. НЕ охвачено, сказано прямо: удобные функции с единой сигмой raim::araim_raim и raim::araim_dual_raim НЕ соответствуют ADD (на совпадающих входных данных они расходятся со Stanford MAAST на 0,75 м по VPL / 4,04 м по HPL и на 0,39 м по VPL / 1,93 м по HPL, это результат); сравнение для двухчастотного многосозвездного (DFMC) SBAS L5 — это результат (308 пар «пользователь–эпоха» без GEO в видимости защищены Kshana, но не MAAST, чей барьер приёма GEO Kshana не моделирует); у raim::solution_separation_raim нет внешнего сравнения | araim_reference (add_v42_protection_levels, add_v42_protection_levels_ecef); raim (snapshot_raim, snapshot_raim_fde, araim_raim, araim_dual_raim, solution_separation_raim); sbas (sbas_protection_level); lunar | tests/integrity_araim_stanford_oracle.rs::araim_mhss_matches_stanford_maast_add_v4_2 (270 случаев с реальной геометрией, Celestrak GPS+Galileo и IGS SP3: наихудшие |dVPL| 2.2e-3 m, |dHPL| 1.1e-3 m, |dEMT| 2.1e-10 m при ADD TOL_PL 0,05 m); tests/integrity_araim_stanford_oracle.rs::uniform_sigma_matched_gap_finding (расхождения при равномерной сигме, зафиксированы); tests/integrity_snapshot_raim_rtklib_oracle.rs::snapshot_raim_decisions_and_slope_levels_match_rtklib (реальные данные IGS ABMF 2018-05-13, 288 эпох, 2016 случаев с внесёнными смещениями от 10 до 100 m: 2016/2016 решений об обнаружении и 801/801 решений об исключении идентичны, уровни HPL/VPL по наклону в пределах 2.7e-12 m при 1e-6 m); tests/integrity_sbas_stanford_oracle.rs::sbas_l1_protection_levels_match_stanford_maast_on_real_waas_messages (2868 пар «пользователь–эпоха» на реальных вещаниях WAAS, один и тот же защищаемый набор, наихудшие |dVPL| 7.1e-6 m и |dHPL| 1.6e-5 m при 1e-4 m); tests/integrity_sbas_stanford_oracle.rs::sbas_l5_finding_geo_reception_gate (вывод по L5, зафиксирован); tests/igs_real_data.rs и tests/araim_dual_real_data.rs (проверка правдоподобия на реальных данных IGS SP3 и геометрии Celestrak, сохранены как регрессионные проверки, а не оракулы) | Три независимых инструмента, предварительно зарегистрированные (0123cee1) до появления каких-либо тестовых данных или выходов оракула, допуски зафиксированы тогда же. (1) ARAIM: Stanford MAAST для ARAIM 2 (коммит ab70e2a3, BSD-3) mhss_raim_baseline_v5.m, запущен как отдельная программа под GNU Octave 8,4 с прокладкой совместимости unique() на стороне драйвера (раскрыта, без изменения алгоритма), при ADD TOL_PL 0,05 м: реализация на Rust воспроизводит эталонную реализацию ADD на 270 реальных случаях. Раскрыто: путь ADD в Kshana был написан после предварительной регистрации, следуя ADD так, как его реализует MAAST; независимая контрольная проверка рецензентом (270 новых геометрий пользователя и второе сообщение поддержки целостности, MAAST перезапущен на замороженном коде) пройдена на том же пороге. (2) Мгновенный RAIM: RTKLIB v2.4.2-p13 (BSD-2) estpos/valsol/raim_fde в отдельной обвязке на C для обнаружения и исключения; уровень защиты по наклону из RTKLIB matinv/xyz2enu плюс SciPy 1.18.1 chi2/ncx2, где обе стороны вычисляют одну и ту же замкнутую форму (Brown; Parkinson и Axelrad), так что проверка уровня защиты охватывает реализацию, а не формулу. (3) SBAS: Stanford MAAST (коммит 7d32b049) usr_vhpl, без изменений, на собственных записанных вещаниях WAAS из MAAST: уровни L1 в пределах 1e-4 м после перемасштабирования K и равный защищённый набор. Те же сравнения дали результаты, изложенные в возможности: функции ARAIM с единой сигмой не соответствуют ADD, а равенство наборов L5 нарушается на 308 парах без GEO в видимости (уровни на 3267 парах, которые защищают оба инструмента, совпадают до 1e-13 м). K-факторы DO-229E/DO-316 — переписанные константы, а реальная геометрия — входные данные; ни то, ни другое не засчитывается как оракул. Редакция 0,30: уровни защиты snapshot_raim перенесены из радиальной в геодезическую местную систему (до 0,31 м по HPL и 0,14 м по VPL на 16 град. с. ш.) | VALIDATED |
| VM-e73617ea | Распространение и определение орбиты | SGP4/SDP4, Cowell 6-DOF + возмущения, пакетное и последовательное OD | sgp4, propagator, orbit_determination, precise_od | tests/sgp4_verification.rs (666 проверочных векторов AIAA, наихудшее 4,12 mm); tests/sgp4_crate_comparison.rs (независимый крейт sgp4) | Проверочные векторы SGP4 по AIAA 2006-6753 | VALIDATED |
| VM-7b9f2f5d | Численный распространитель Cowell и силовая модель | Численный распространитель Cowell с иерархической силовой моделью (задача двух тел, зональные J2–J6, третье тело Солнце/Луна, SRP «пушечного ядра», экспоненциальное торможение); RK4 с удвоением шага / DP5(4) / DOP853 | propagator, forces | tests/numerical_cowell_propagator_reference.rs (275 эпох = 11 случаев × 25 почасовых состояний, LEO+GTO, в сравнении с Orekit 12,2 DormandPrince853; консервативные уровни T1–T5, наихудшее |Δr| 0,08 m за 24 h; уровень сопротивления охарактеризован на 333 m) | Orekit 12,2 (CS GROUP, Apache-2.0) NumericalPropagator/DormandPrince853 — независимая библиотека, другой интегратор и другая рекурсия по сферическим гармоникам. Консервативные уровни (задача двух тел → зональные J2–J6 → третье тело Солнце/Луна → SRP «пушечного ядра») согласуются до долей метра на дуге 24 ч, подтверждая интегратор и алгебру сил; уровень торможения и абсолютная достоверность входных данных по эфемеридам Солнца и Луны и плотности остаются MODELLED (только характеризация) | VALIDATED |
| VM-69a790eb | Тень SRP от сплюснутой Земли (включается по выбору) | Освещённая доля SRP с эллипсоидом WGS-84 как затмевающим телом (кажущийся радиус Земли от лимба эллипсоида в сторону Солнца, формула линзы из двух дисков; srp_shadow::oblate_conical_shadow), включается по выбору в силовой модели Cowell через propagator::ForceModel::srp_shadow (по умолчанию: сферическая коническая тень, без изменений) | srp_shadow, forces (srp_accel_with_lit_fraction), propagator | tests/srp_oblate_shadow_orekit_oracle.rs (2400 геометрий поперёк границы тени, 884 в полутени, от LEO до GEO, склонение Солнца 0 и +-23.44 deg, 8 азимутов: наихудшее |dnu| 7.41e-9 для WGS-84 и 2.24e-9 для сферического базового уровня; отношения Orekit для WGS-84 и сферы различаются до 0,98, поэтому набор различает сжатие); модульные тесты srp_shadow и propagator | Orekit 12,2 (Apache-2.0) SolarRadiationPressure.getLightingRatio с затмевающим телом WGS-84 и сферическим OneAxisEllipsoid, запущен как отдельная программа с Солнцем в той же инерциальной точке. Пороги зарегистрированы заранее в xval/srp-oblate-shadow-orekit/PREREGISTRATION.md (6d6d269c): 1e-6 для обоих и разброс между сплюснутой и сферической моделями > 1e-2; все выполнены. Ось эллипсоида — инерциальная ось z с обеих сторон (без прецессии и нутации) | VALIDATED |
| VM-7244b960 | SRP по модели «коробка с крыльями» и ECOM2, с частными производными (включается по выбору) | SRP не по модели «пушечного ядра»: модель плоских пластин «коробка с крыльями» (Vallado, ур. 8-44; односторонние панели корпуса, крылья, направленные на Солнце) с таблицами Galileo FOC, IOV и IOV в конце срока службы из метаданных спутников GSC, при номинальном рысканье GNSS, с аналитическими частными производными по фактору излучения и по зеркальному и диффузному коэффициентам каждой панели; и эмпирическая модель ECOM2 (D2/B1) с её частными производными. «Коробка с крыльями» включается по выбору в распространителе Cowell (propagator::ForceModel::box_wing_srp, задаёт поле srp_boxwing) и в модели точного определения орбиты (precise_od::PreciseForceModel::box_wing_srp), заменяя член «пушечного ядра» с cr в качестве фактора излучения; оба по умолчанию равны None, оставляя каждый существующий путь побайтово идентичным. ECOM2 не подключена ни к одной силовой модели | srp_boxwing, propagator, precise_od | tests/srp_boxwing_orekit_oracle.rs (252 геометрий орбиты Galileo, 7 случаев Солнца, включая расстояния в перигелии и афелии, 100 случайных ориентаций; сумма плоских пластин: наихудшее 2.05e-15 относительное по 1056 случаям; сквозная проверка с собственными ориентацией и давлением Orekit: наихудшее 2.39e-15 по 747 случаям полного солнечного освещения, тогда как константы давления Orekit по умолчанию отличаются на >= 4.43e-3, поэтому сравнение различает константу; номинальная матрица рыскания: наихудшее 1.89e-15; частная производная по коэффициенту излучения: наихудшее 1.35e-15; частные производные по панелям: наихудшее 4.12e-13 относительное по центральным разностям Orekit на 10836 случаях панелей; ускорение и частные производные ECOM2: наихудшее 1.74e-15); модульные тесты srp_boxwing (предельные случаи в замкнутой форме, частные производные по конечным разностям); тесты подключения propagator и precise_od | Orekit 12,2 (Apache-2.0) BoxAndSolarArraySpacecraft с FixedPanel и PointingPanel, SolarRadiationPressure(dRef = 1 а. е., pRef = 1361/c), номинальное рысканье GenericGNSS и ECOM2(nD = 2, nB = 1), запущен как отдельная программа с Солнцем в фиксированных инерциальных положениях; производная фактора излучения из Hipparchus Gradient, производные по панелям как центральные разности Orekit (в Orekit их нет). Пороги зарегистрированы заранее в xval/srp-boxwing-orekit/PREREGISTRATION.md (e59df6bf) до появления какого-либо выхода Orekit: 1e-12 относительных (1e-11 сквозных, 1e-9 для разностей); все выполнены (RESULTS.md). VALIDATED охватывает только вычисление модели: таблицы GSC — переписанные входные данные, а адекватность «коробки с крыльями» для реальных орбит Galileo, тепловое переизлучение, модифицированный закон рысканья при малом beta и затменные развороты не охвачены; прогноз SRP для Galileo остаётся MODELLED | VALIDATED |
| VM-dfdd58c8 | Тень SRP с потемнением солнечного края (включается по выбору) | Освещённая доля SRP как неэкранированная доля солнечного потока с потемнением к краю (закон в приближении Эддингтона I(mu)/I(1) = 2/5 + 3/5 mu, квадратура Гаусса–Лежандра) над сферической Землёй или Землёй WGS-84 (srp_shadow::limb_darkened_shadow, вариант ShadowModel OblateEarthLimbDarkened) | srp_shadow | srp_shadow::tests (кольцеобразная замкнутая форма, равномерный закон, воспроизводящий коническую тень, пределы полного Солнца и полной тени) | Внешнего нет: в Orekit 12,2 нет коэффициента освещённости с потемнением к краю. Проверено только по замкнутым формам того же закона | MODELLED |
| VM-34cdc433 | Плотность термосферы по NRLMSISE-00 | Порт эмпирической термосферы NRLMSISE-00 (gtd7 и gtd7d: плотности компонентов, полная массовая плотность с аномальным кислородом, температуры; 24 переключателя; режимы суточного Ap и 3-часового массива ap) из версии на C для общественного достояния исходного NRL Fortran | nrlmsise00 | tests/nrlmsise00_reference.rs (720 узлов сетки, от 90 до 1000 km, 4 широты, 2 местных времени, 3 суток, низкая/умеренная/высокая активность: плотность в пределах 1.866e-6 относительно и температура в пределах 1.97e-4 K от pymsis; побитово идентично порту на C; 17 опубликованных тестовых случаев на C, 187 значений в пределах 0,496 единицы 7-й значащей цифры); модульные тесты nrlmsise00 | pymsis 0.13.0 (MIT) version=0, который запускает NRL Fortran GTD7D в одинарной точности, и порт NRLMSISE-00 на C (выпуск 20190709, общественное достояние), скомпилированный как отдельная программа, плюс 17 опубликованных тестовых выходов дистрибутива на C. Пороги зарегистрированы заранее в xval/nrlmsise00-pymsis/PREREGISTRATION.md (e90ae26a) до появления порта; все выполнены (RESULTS.md). Подтверждает порт, а не точность модели относительно измеренной плотности | VALIDATED |
| VM-c19ea19a | Уровень плотности для торможения по NRLMSISE-00 (включается по выбору) | forces::DensityModel (по умолчанию Exponential, Nrlmsise00 { f107a, f107, ap }) и propagator::ForceModel::drag_density: квадратичное торможение относительно соосно вращающейся атмосферы с плотностью NRLMSISE-00 в геодезической точке WGS-84 (угол вращения Земли при UT1 = TT, местное солнечное время UT + lon/15), постоянная космическая погода для каждой модели; по умолчанию выключено и побитово идентично | forces (density_at, drag_accel_with_density), propagator | tests/drag_tier_orekit_oracle.rs (4 случая x 25 почасовых состояний за 24 h, круговая 51,6 deg, 400 km при низкой/умеренной/высокой активности и 300 km: наихудшие |dr| 0,0303 m и |dv| 3.36e-5 m/s при 3,3 – 141,8 km смещения от сопротивления, наихудшее отношение ошибки к порогу 0,003; контроль с экспоненциальной плотностью промахивается на 119,1 m); модульные тесты forces и propagator (по умолчанию побитово идентично; уровень вычисляет порт в земной геодезической точке) | Orekit 12,2 (Apache-2.0) NumericalPropagator/DormandPrince853 с DragForce поверх собственной реализации NRLMSISE00 в Orekit, запущен как отдельная программа с той же системой угла вращения Земли, формой WGS-84, соглашением о местном солнечном времени (среднее Солнце) и TT вместо UT; настройка соглашений проверена оракул против оракула (Orekit против pymsis, 5.2e-5 по плотности). Пороги зарегистрированы заранее в xval/drag-tier-orekit/PREREGISTRATION.md (21647478): 0,5 м + 1e-3 от смещения под действием торможения и две проверки чувствительности > 100 м; все выполнены. Не охвачено: точность модели относительно измеренной плотности, изменяющаяся во времени космическая погода, ветвь GMAT | VALIDATED |
| VM-36db0ce5 | Стандартное экспоненциальное торможение относительно независимой реализации (экваториальное) | Стандартное торможение распространителя Cowell: квадратичное торможение относительно соосно вращающейся атмосферы с forces::atmospheric_density, кусочно-экспоненциальной таблицей Vallado, таблица 8-4, на сферической высоте (propagator::ForceModel::drag со стандартным вариантом Exponential из forces::DensityModel) | forces (atmospheric_density, drag_accel), propagator | tests/drag_exponential_gmat_oracle.rs (экваториальные случаи E400, E300 и E250x600 на J2000.0, 25 почасовых состояний за 24 h: смещение, вызванное сопротивлением, согласуется со смещением GMAT не более чем на 0,016 порога 0,5 m + 1e-3|D| при смещении от 21,5 до 143,9 km; изменение +1 % Cd*A/m достигает 9,83 порога; наклонный случай I400 приведён, расхождение 10,4 %, заявленная разница в определении высоты) | GMAT R2022a (NASA GSFC, Apache-2.0) GmatConsole с атмосферой Exponential (та же 28-диапазонная таблица), точечной массой Земли и PrinceDormand78, запущен, но никогда не включается в поставку. Пороги зарегистрированы заранее в xval/drag-exponential-gmat/PREREGISTRATION.md (640c85c1) по смещению от торможения с каждой стороны (прогон с торможением минус прогон без него), что исключает два значения mu Земли и интеграторы; все выполнены (RESULTS.md). GMAT принимает геодезическую высоту, а kshana — сферическую: они совпадают только на экваторе, поэтому VALIDATED охватывает экваториальные орбиты; вне экватора модели различаются по построению (10,4 % от смещения за 24 ч при 51,6 град., 400 км). В публичной сборке GMAT нет NRLMSISE-00 (плагин отсутствует), поэтому для уровня NRLMSISE-00 есть только оракул Orekit. Точность таблицы относительно измеренной плотности не охвачена | VALIDATED |
| VM-6c291c83 | Солнце и Луна по DE440 в силовой модели Cowell (включается по выбору) | Уровень эфемерид, включаемый по выбору, для членов третьего тела и SRP численной силовой модели Cowell ForceModel: геоцентрические Солнце и Луна из любого EphemerisProvider (ядро DE440 SPK через KernelEphemeris) при TDB = TT + (TDB - TT), с отказом от поставщика, не способного обслужить эпоху, и подсчётом любого возврата к аналитическому ряду; по умолчанию выключено | propagator (ForceModel::with_ephemeris, ForceEphemeris), ephem_provider | tests/propagator_de440_orekit_oracle.rs (5 случаев x 25 почасовых состояний за 24 ч, LEO, GEO и HEO, третье тело и третье тело + SRP: наихудшее |dr| 0,0170 м, |dv| 1.84e-5 м/с; контроль по аналитическому ряду расходится на 9,96 м; Солнце 6,39 м и Луна 0,244 м относительно положений DE440 из Orekit — зафиксированный промах); модульные тесты propagator (отказ провайдера, подсчёт возвратов к запасному варианту, общий для клонов) | Orekit 12,2 (Apache-2.0) NumericalPropagator/DormandPrince853 с ThirdBodyAttraction и SolarRadiationPressure на собственном читателе DE440 в Orekit (orekit-data lnxp1990.440), запущен как отдельная программа; kshana читает побитово проверенный по SPICE фрагмент NAIF de440s.bsp. Пороги зарегистрированы заранее в xval/propagator-de440-orekit/PREREGISTRATION.md (22a5a01d). Порог по орбите (0,5 м) и контроль чувствительности выполнены, но порог по положению Солнца и Луны (3 м / 0,2 м) не достигнут: 6,39 м / 0,244 м. SPICE, читающий то же ядро на его точном TDB, расходится с Orekit на ту же величину (6,25 м / 0,240 м), поэтому разрыв лежит между путём NAIF de440s и читателем DE440 или шкалой времени в Orekit; причина не выделена. Зафиксировано и закреплено, поэтому строка остаётся MODELLED | MODELLED |
| VM-555b0707 | Атмосферный прилив S1 (включается по выбору) | Суточный прилив S1 атмосферного давления как возмущение геопотенциала: модель N1 Biancale и Bode (2006), степени от 2 до 6, по формуле нагрузки IERS 2010, ур. 6,21 (tides::atmospheric_tide_s1, s1_air_tide_acceleration), включается по выбору в силовых моделях Cowell и точных (air_tide_s1, по умолчанию выключено) | tides, propagator, precise_od | tides::tests (член S1 суточный, поворачивается на 90 град за четверть суток и имеет амплитуду коэффициента нагрузки каждой строки; физическая величина на LEO); propagator::tests::the_s1_air_tide_flag_adds_exactly_the_s1_acceleration | Внешнего для эффекта геопотенциала нет. 24 коэффициента переписаны из GFZ STR06/01, таблица 1, модель N1, и перепроверены строка за строкой по отчёту (SHA-256 890865ae); степени 0, 1, 7 и 8 не используются. Ray и Ponte (2003) не публикуют таблицы сферических гармоник, поэтому второй источник не сравнивался | MODELLED |
| VM-9ad1723e | Коэффициенты атмосферного прилива S2 в соглашении IERS | Гармоники давления воздуха S2 по Ray (2001) (n <= 4, прямые и обратные) преобразованы в полностью нормированную форму с опережением по синусу по IERS 2010, ур. 6.20-6.21 (амплитуда, делённая на N_nm, epsilon = 90 град. - psi) и применены как член S2 в tides::atmospheric_tide | tides (s2_air_waves, atmospheric_tide) | tests/s2_air_tide_gfz_table5.rs (21 из 21 волн согласуются с опубликованной моделью A2: наихудшее 0,00050 cm, 0,050 deg при порогах 0,0006 cm, 0,1 deg); tests/tides_iers.rs (диапазон амплитуды S2) | Biancale и Bode, GFZ Scientific Technical Report STR06/01 (2006), таблица 5, модель A2: Ray (2001) опубликована в полностью нормированных гармониках с фазами с опережением по синусу, независимое представление той же модели. Зарегистрировано заранее в xval/s2-air-tide-fix/PREREGISTRATION.md (5e31c37a) вместе с исправлением, которое оно подтверждает. Охватывает только преобразование коэффициентов; для геопотенциального эффекта воздушного прилива внешнего оракула нет | VALIDATED |
| VM-ab8e111d | Тессеральный геопотенциал в распространителе Cowell | Опциональное тессеральное поле EGM2008 (до степени и порядка 70) как центральная гравитация численной модели сил Cowell ForceModel, вычисляемое в земной системе координат, повёрнутой на угол вращения Земли IAU 2000 (или по цепочке CIO GCRS–ITRS); по умолчанию выключено, поэтому ни один существующий результат не меняется | propagator (Geopotential, EarthFixedFrame), gravity_sh | tests/cowell_tesseral_orekit_oracle.rs (6 случаев x 25 почасовых состояний за 24 h: EGM2008 8x8 и 70x70 для LEO 45 deg, полярной 89,9 deg, солнечно-синхронной 98,2 deg, GTO и 70x70 с Солнцем/Луной и SRP; наихудшие |dr| 0,0355 m, |dv| 3.74e-5 m/s; отрицательные контроли промахиваются на 6168 m (замороженная Земля) и 20871 m (только зональные члены)); модульные тесты propagator (тождество в зональном пределе с точностью 1e-12, система CIO побитово совпадает с precise_od, интеграл Якоби сохраняется с точностью 1e-9 за 6 h) | Orekit 12,2 (CS GROUP, Apache-2.0) NumericalPropagator/DormandPrince853 с HolmesFeatherstoneAttractionModel на тех же коэффициентах (tools/egm2008_to70.gfc) в системе координат тела, повёрнутой по той же формуле угла вращения Земли, запущенный как отдельная программа. Пороги предварительно зарегистрированы (f0e0e65, изменены до любого сравнения в 2da899a): |dr| <= 0,5 м и |dv| <= 5e-4 м/с, а оба отрицательных контроля промахиваются более чем на 100 м; все пороги выполнены, затем пороги ужесточены до 0,1 м и 1e-4 м/с. Не проверено: точность ориентации Земли (обе стороны используют UT1 = TT без прецессии и нутации в системе Era), вариант системы Cio (только внутренняя проверка), степени выше 70 | VALIDATED |
| VM-011311b1 | Гравитация в сферических гармониках высокой степени (EGM2008 до 2190) | Вычисление полностью нормированного поля до степени 2190, устойчивое к потере значимости и к полюсам (SphericalHarmonicField::acceleration_hf / potential_hf, модифицированная прямая столбцовая рекурсия Holmes-Featherstone 2002 с градиентом, свободным от 1/cos phi), потоковый загрузчик ICGEM .gfc (from_gfc_file / from_gfc_reader; полное поле EGM2008 загружается во время работы, а не входит в поставку), а также вычислитель Holmes-Featherstone, выбираемый в опциональном геопотенциале Cowell | gravity_sh, propagator (FieldEvaluator) | tests/gravity_sh_high_degree.rs (Orekit в 8 точках вне оси: макс. |da| 2.2e-17 м/с^2 при N = 70, выполняется всегда; 3.5e-17, 3.9e-17 и 7.3e-17 м/с^2 при N = 200, 360, 2190, зависит от наличия данных KSHANA_EGM2008_GFC); tests/cowell_tesseral_200_orekit_oracle.rs (24-часовая орбита 200x200, зависит от наличия данных: наихудшее |dr| 0,1317 м, |dv| 1.45e-4 м/с; контроль на степени 70 — 0,726 м); модульные тесты gravity_sh (согласие с классическим вычислителем до 1e-13 на степени 70, конечная разность и непрерывность на полюсе для поля степени 2190, исчезающе малый член степени 2190 против вычисления с расширенным порядком) | Orekit 12,2 (Apache-2.0) HolmesFeatherstoneAttractionModel и pyshtools 4.14.1 (BSD-3-Clause) MakeGravGridPoint, запущенные как отдельные программы; пороги предварительно зарегистрированы в xval/high-degree-gravity/PREREGISTRATION.md (276c869f) и xval/cowell-tesseral-200-orekit/PREREGISTRATION.md (0aa312a6). Orekit согласуется везде, где определён, но pyshtools не достигает своего предварительно зарегистрированного порога в двух приполярных точках (до 7.3e-10 м/с^2; проверка в mpmath с 50 разрядами относит ошибку на счёт pyshtools), на самой полярной оси эталонного значения нет, а предварительно зарегистрированный контроль чувствительности к степени 70 для 24-часовой орбиты не выполнен (0,726 м против > 1 м). Каждый промах записан, а не подогнан, поэтому строка остаётся MODELLED | MODELLED |
| VM-c46b5c0f | Интегратор DOP853 | Явный метод Рунге–Кутты Hairer DOP853 порядка 8(5 3) с объединённой оценкой погрешности 5-го/3-го порядка, контроллером шага SciPy/Hairer, автоматическим начальным шагом, защитным ограничителем шага с отказом по умолчанию и плотным выходом 7-го порядка; выбирается как вариант интегратора пропагатора Dop853 / propagator::propagate_dop853 | integrator, propagator | tests/dop853_scipy_oracle.rs (8 одиночных шагов: состояние с относительной точностью 5.55e-15, производная FSAL 3.46e-15, плотный выход 1.99e-14, решения о приёме/отклонении шага идентичны; 3 полных прогона при rtol = atol = 1e-12 (LEO 58000 s, e = 0,7 на 5 периодах, Аренсторф на одном периоде): начальный шаг идентичен, принятые шаги 502/501, 390/390, 298/298 и вычисления 6025/6013, 5497/5497, 4285/4285 в сравнении с SciPy, конечные состояния с относительной точностью 2.95e-13 (двух тел) и 1.58e-12 (Аренсторф), плотный выход с точностью 9.5e-13; точность относительно точного решения Кеплера в mpmath равна точности SciPy (LEO 8.44e-5 m, периодичность Аренсторфа 1.475e-9)); модульные тесты integrator и propagator (24 h задачи двух тел против точного решения Кеплера с ошибкой менее 0,1 m) | SciPy 1.18.1 (BSD-3-Clause) solve_ivp(method=DOP853) и его процедуры одного шага, нормы ошибки, плотного выхода и начального шага, независимая реализация; точные двухтельные состояния из mpmath 1.3.0 с 40 разрядами. Пороги предварительно зарегистрированы в xval/dop853-scipy/PREREGISTRATION.md (ae1b25e) до первого сравнения; все выполнены (xval/dop853-scipy/RESULTS.md). В полных прогонах первый шаг SciPy передаётся обоим решателям; процедура начального шага сравнивается отдельно. Не охвачено: RKF7(8), обнаружение жёсткости, определение событий | VALIDATED |
| VM-801a1141 | Надёжный решатель уравнения Кеплера | Эллиптический решатель Кеплера для всех 0 <= e < 1 и всех средних аномалий: кубический стартёр Markley (1995) и поправка пятого порядка, невязка без потери значимости при вычитании (1-e)E + e(E - sin E) - M и защищённая доводка методом Ньютона (kepler::solve_kepler_markley, propagator::solve_kepler_robust) | kepler, propagator | tests/kepler_mpmath_oracle.rs (405 узлов сетки, e от 0 до 0,999999, M в [-pi, pi] вплоть до 1e-12: наихудшее |E - E_ref| 0,898 eps|E| при пороге 8 eps|E|; 9 точек с накрученным M при наихудшем 0,013 от порога; ни в одной из 414 точек не потребовался уточняющий шаг Ньютона; обёртка побитово идентична); модульные тесты kepler | mpmath 1.3.0 (BSD-3-Clause), 50-разрядные корни по точным двоичным входным данным. Пороги предварительно зарегистрированы в xval/kepler-mpmath/PREREGISTRATION.md (df22174), заданы относительно |E| с аргументом об обусловленности при e -> 1, M -> 0; все выполнены (xval/kepler-mpmath/RESULTS.md). Прежние решатели (solve_kepler_checked, orbit::solve_kepler, ephem::solve_kepler) численно не изменены, потому что от них зависят зафиксированные результаты, и эта строка их не охватывает | VALIDATED |
| VM-16c33630 | Пакетное определение орбиты по дальности, скорости изменения дальности и азимуту/углу места с маскированием станций | Восстановление состояния на эпоху по смешанным измерениям дальности, скорости изменения дальности и азимута/угла места выше маски по углу места методом Гаусса–Ньютона на H = (dh/dx(t)) Phi(t, t0): аналитические частные производные измерений и вариационная матрица перехода состояния с аналитическими производными двухтельной задачи и J2 (интегрируется методом RK4, это не STM в замкнутой форме) | orbit_determination (determine_orbit_batch_tracking, propagate_with_stm, is_visible), batch_ls (gauss_newton_analytic) | tests/od_tracking_measurements_reference.rs (8 сценариев: радиальная скорость, азимут/угол места и смешанные, LEO и MEO, бесшумные и с заданным начальным значением при сигме 5 м / 5 мм/с / 1e-4 рад, маски 5 и 10 град, против Orekit 12,2: множества видимости совпадают; значения измерений в пределах 5.84e-8 м, 6.30e-10 м/с, 1.44e-13 рад; STM в пределах 1.2e-14 относительно; зашумлённые состояния в пределах 1,74 см и 1.14e-5 м/с; СКО после подгонки по типам в пределах 2.7e-4 относительно; бесшумный kshana против истины 1.06e-8 м; бесшумный kshana против Orekit 1,464 и 1,740 см на двух сценариях — зафиксированный промах порога 1 см); модульные тесты orbit_determination и batch_ls | Orekit 12,2 (Apache-2.0) BatchLSEstimator с собственными мгновенными геометрическими измерениями RangeRate и AzEl (перекрёстно проверенными по TopocentricFrame), запущенный как отдельная программа на одинаковых замаскированных наблюдениях с фиксированным начальным значением. Пороги предварительно зарегистрированы в xval/od-measurements-orekit/PREREGISTRATION.md (0cf9076). Все пороги выполнены, кроме B4, согласия бесшумного состояния в 1 см, не достигнутого в 2 из 4 сценариев (1,46, 1,74 см): собственная бесшумная оценка Orekit находится на таком расстоянии от своей смоделированной истины (причина на стороне Orekit не выявлена). Записано и зафиксировано, поэтому строка остаётся MODELLED. Не моделируется: время распространения света, аберрация, рефракция, вращение Земли, последовательный фильтр для этих типов измерений | MODELLED |
| VM-f7b86f0a | Взвешивание наблюдений по кодам точности SP3 | Сопоставление кодов точности SP3 (экспоненты в заголовке ++ в 2^n мм, база %f, стандартные отклонения base^n мм для каждой записи) со средними квадратическими погрешностями положения для каждого наблюдения в движке прецизионного определения орбиты (sp3::parse_sp3_accuracy, Sp3Accuracy::position_sigma_m) | sp3, precise_od | модульные тесты src/sp3.rs; tests/agency_galileo.rs::galileo_e11_sp3_accuracy_weighted_fit (зафиксированный набор ESOC за 8 ч, сигма 0,032 м из показателя заголовка 5: СКО по 3D на уровне 1 0,132 м без изменений, на уровне 2 0,035 м против 0,070 м при сигме 1 м, причём изменение возникает из-за перебалансированного эмпирического априорного ограничения); tests/agency_swarm.rs (продукт Swarm не содержит кодов точности и переходит на запасной вариант, закреплено) | Внешнего эталона нет: веса являются выбором модели (формат SP3 определяет код лишь как показатель точности от производителя; здесь он читается как одно сигма по каждой оси). Существующие записанные прогоны агентств не изменены | MODELLED |
| VM-70e79085 | Гравитационные поля планет из таблиц PDS SHADR | Чтение таблиц сферических гармоник PDS SHADR (from_shadr в SphericalHarmonicField, src/gravity_pds.rs: преобразование единиц, C00 = 1 задано, проверки полноты и нормировки) и вычисление гравитации в системе координат тела для Марса GMM-3 (степень и порядок 120) и лунного поля GRAIL GL0660B (степень и порядок 660) | gravity_pds, gravity_sh | tests/planetary_gravity_pds.rs (срезы степени 20 выполняются всегда: наихудшее |dg|/|g| 9.7e-16, относительно возмущения 3.4e-11; GMM-3 d/o 120 по всей сфере 3.7e-15 / 6.3e-12 и GL0660B d/o 660 при |lat| <= 60 deg 5.0e-14 / 1.0e-10, зависит от данных; заголовки и выбранные коэффициенты равны опубликованным продуктам PDS, число записей 7380 и 218790); модульные тесты gravity_pds | pyshtools 4.14.1 (BSD-3-Clause), читающий те же файлы PDS и вычисляющий гравитацию в точке, запущенный как отдельная программа, а также опубликованные заголовки и метки продуктов PDS. Пороги предварительно зарегистрированы в xval/planetary-gravity-pyshtools/PREREGISTRATION.md (32c5b50); все выполнены (RESULTS.md). Данные: NASA PDS Geosciences Node, общественное достояние; обрезки до степени 20 входят в поставку с NOTICE, полные файлы загружаются во время теста | VALIDATED |
| VM-4b74b49f | Подключение опубликованного гравитационного поля к телу | with_gravity_field (в Body, src/gravity_pds.rs): подключает любое загруженное поле сферических гармоник (например GMM-3 или GL0660B) к Body, чтобы пропагатор вычислял его в системе координат тела; опционально, тела по умолчанию не меняются | gravity_pds, body, propagator, mars_frame | tests/planetary_gravity_pds.rs::a_shadr_field_attached_to_a_body_drives_the_propagator; gravity_pds::tests::with_gravity_field_is_opt_in | Только внутренняя согласованность. Каждое опубликованное поле определено в системе координат тела, принятой его производителем (GMM-3 в марсианской системе Konopliv et al. 2006, GL0660B в лунной системе главных осей DE421), тогда как поле вычисляется в системе IAU; это смещение не моделируется | MODELLED |
| VM-9aa52bbe | Пакетное и последовательное определение орбиты | Восстановление состояния на эпоху [r,v] по дальностям от наземных станций с помощью пакетного дифференциального корректора Гаусса–Ньютона и последовательного фильтра на модели сил «двухтельная задача + J2» | orbit_determination, precise_od (batch_ls::gauss_newton, fusion::ukf) | tests/batch_sequential_orbit_determination_reference.rs (8 сценариев: 6 безшумных LEO/MEO/эксцентричная/3–4 станции + 2 σ=5 m, в сравнении с Orekit 12,2; наихудшие пакетные |Δr| 1e-3 m / |Δv| 1e-6 m/s, последовательные |Δr| 0,9 m) | Orekit 12,2 (CS GROUP, Apache-2.0) BatchLSEstimator (Левенберга–Марквардта) + KalmanEstimator (EKF) — независимая сторонняя библиотека оценивания на согласованной модели сил; восстановленное состояние на эпоху и СКО послеподгоночных невязок согласуются в пределах <1e-3 м без шума и <3 м при уровне шума 5 м | VALIDATED |
| VM-7d653b9e | Решатель времени распространения света для радиометрии дальнего космоса | Запаздывающее решение времени распространения света на прямом участке τ = |r_rx − r_target(t−τ)|/c для радиометрической навигации в дальнем космосе (Земля→Марс/Солнце/Луна) | radiometric (light_time_solution) | tests/deep_space_mars_radiometric_reference.rs (24 участка за 8 эпох 2020–2027 в сравнении с ANISE DE440; наихудшие |Δτ| 1.03e-9 s, |Δrange| 0,31 m при расстоянии до 2,5 AU) | ANISE 0,10 (Nyx Space, MPL-2.0), время распространения света с аберрацией по сходящемуся методу Ньютона (Aberration::CN; эквивалент spkapo из SPICE) на эфемеридах JPL DE440 — независимая реализация SPICE на Rust; решатель запаздывания kshana с неподвижной точкой совпал с ним с точностью до долей наносекунды. Более широкие показатели Доплера / Шапиро / OD с редуцированной динамикой остаются MODELLED | VALIDATED |
| VM-ddaed06d | Положение спутника по бортовым эфемеридам (мульти-GNSS RINEX) | Кеплеровы бортовые эфемериды IS-GPS-200 / Galileo-OS / BeiDou-OS → положение спутника в ECEF по разобранной навигационной записи RINEX-3 | rinex (parse_nav, RinexEphemeris::sv_position_ecef) | tests/rinex_sp3_interop_reference.rs (84 случая «КА–эпоха»: GPS + Galileo + BeiDou-MEO, 12 КА × 7 смещений, в сравнении с RTKLIB eph2pos; наихудшее |Δ| по оси 6.2e-8 m) | RTKLIB v2.4.2-p13 eph2pos(), скомпилированный из исходного кода на C (T. Takasu, BSD-2-Clause) — независимая реализация IS-GPS-200/SIS-ICD, получившая те же навигационные записи RINEX-3; положение спутника в ECEF совпало с точностью до ~62 нм. (Интерполяция прецизионных эфемерид SP3 проверяется отдельно — см. «Интерполяция прецизионных эфемерид SP3») | VALIDATED |
| VM-771c34bd | Интерполяция прецизионных эфемерид SP3 | Интерполяция Лагранжа по стандарту IGS для положений спутников из прецизионных эфемерид SP3 с поправкой на вращение Земли для каждого узла (поворот каждого узла на ω⊕·(t_node−t) в связанную с Землёй систему момента запроса до подгонки полинома) | sp3 (Sp3Interpolator::position_ecef) | tests/sp3_interp_reference.rs (72 случая «КА–эпоха» вне узлов / 6 спутников в сравнении с RTKLIB peph2pos; наихудшее |Δ| по оси 1.5e-8 m) | RTKLIB peph2pos(), скомпилированный из исходного кода на C (preceph.c; T. Takasu, BSD-2-Clause) — фактический эталон IGS, независимая реализация; интерполятор kshana (теперь с той же поправкой на вращение Земли для узлов) совпал с ним с точностью до ~15 нм на реальном продукте SP3, тогда как до поправки расхождение составляло ~5,5 см | VALIDATED |
| VM-a5c3941a | Кодировщики навигационных сообщений помимо GPS LNAV (GPS CNAV, Galileo I/NAV и F/NAV) | Сообщения GPS CNAV типов 10/11/30, слова Galileo I/NAV типов 1–5 в номинальных чётных/нечётных страницах и страницы Galileo F/NAV типов 1–4: упаковка и квантование полей по ICD, CRC-24Q, свёрточное кодирование со скоростью 1/2 и K=7 (G2 инвертирован для Galileo), блочное перемежение и синхропоследовательности, с парными тестовыми декодерами | gnss_navmsg (gps_cnav, gal_inav, gal_fnav, fec) | gnss_navmsg::tests (контрольное значение CRC-24Q 0xCDE703; импульсная характеристика свёрточного кода; Витерби исправляет внесённые ошибки; ширины полей); tests/gnss_navmsg_roundtrip.rs (начальные биты полей равны номерам битов в ICD; кодирование -> FEC -> перемежение -> Витерби -> декодирование возвращает исходное в пределах половины младшего разряда); tests/gnss_navmsg_galileo_brdc_grid.rs (записи Galileo IGS BRDC 2018-133 на сетке младшего разряда, наихудшее 3.6e-3 младшего разряда; заранее зарегистрированный порог по числу спутников не выполнен, 15 из 20, FINDING) | Только внутренний прямой и обратный проход и известные ответы из ICD; ни один сторонний декодер не запускался (стенд RTKLIB/GNSS-SDR, читающий KSHANA_NAVMSG_ORACLE_JSON, зависит от наличия данных). MODELLED | MODELLED |
| VM-fd4e4555 | Читатель глобальных карт ионосферы IONEX и интерполяция на реальной CODE GIM | Читатель IONEX 1,0 (заголовок, значения I5 с фиксированными столбцами, карты TEC и RMS, абсолютные эпохи, пропущенные значения) с билинейной пространственной интерполяцией, интерполяцией по времени, предусмотренной форматом (ближайшая / последовательная / с поворотом карты, формулы 1–3), и TEC вдоль наклонной трассы в модели тонкой оболочки | ionex (parse_ionex, parse_ionex_file, IonexFile::vtec_at, IonexFile::slant_tec_at, interpolate_tec_in_time, TecGrid::vtec_at) | tests/ionex_code_gim_oracle.rs (зафиксированная синтетическая карта IONEX в сравнении с эталоном по формуле: 20 075 узлов точно, интерполяция max |Δ| 3.5e-13 TECU; зависит от данных через KSHANA_IONEX_CODE_GIM_DIR, реальный широтный срез итоговой GIM CODE за 2018-05-13, загруженный fetch.sh с закреплённым SHA-256: узлы точно, интерполяция max |Δ| 3.6e-13 TECU по 15 795 отсчётам, наклонное TEC 5.1e-13 TECU; зависит от данных RTKLIB v2.4.2-p13 iontec в 6885 точках запроса, прогон 2026-10-13: max |Δ| 3.6e-13 TECU в обоих режимах по времени, порог 1e-5 зарегистрирован заранее); ionex::tests | Напечатанные значения CODE GIM (точные в каждом узле; карта загружается во время теста и не включена в репозиторий, поскольку её лицензия не подтверждена) и независимая повторная реализация формул интерполяции IONEX 1,0 на стандартной библиотеке Python, зафиксированная вместе с тестовыми данными (пороги предварительно зарегистрированы e4d8b1f, 1e-9 TECU). Проверка третьей стороной (B6, предварительно зарегистрирована, первый прогон): RTKLIB v2.4.2-p13 iontec (BSD-2-Clause, запущен как отдельный инструмент) в 6885 точках запроса согласуется с IonexFile::vtec_at в пределах 3.6e-13 TECU в обоих режимах интерполяции при пороге 1e-5 TECU. Зависит от наличия данных: CODE GIM загружается во время теста, закреплена по SHA; RTKLIB читает файл целиком, потому что его getindex отвергает обрезку по широте. tests/fixtures/ionex_code_gim/fetch.sh загружает её и проверяет SHA-256, тест завершается ошибкой при любых других байтах, а run_rtklib.sh — документированный путь воспроизведения (нужен доступ к сети). Повышено до VALIDATED решением владельца на основании доказательств, зависящих от наличия данных (2026-10-13) | VALIDATED |
| VM-f40289c2 | Сглаживание кода по несущей по методу Hatch на реальных наблюдениях RINEX | Фильтр Hatch без расходимости (безионосферный код, сглаживаемый безионосферной несущей, окно N эпох, перезапуск при потере захвата, скачке геометрически-независимой комбинации или пропуске) в сборке прецизионного одиночного определения положения (PPP) | hatch (HatchFilter), pvt (assemble_epoch_precise_smoothed, CarrierSmoother) | hatch::tests (сквозной проход без шума; дисперсия белого шума 1/(2N-1); перезапуски); tests/hatch_wettzell_oracle.rs::hatch_finding_is_pinned (WTZR 2025-02-24 01-06 ч, 600 эпох, N = 100: медианная 3D-ошибка 1,553 -> 1,116 м, p95 3,473 -> 3,207 м) | НАХОДКА по опубликованной координате ITRF2020 станции WTZR: предварительно зарегистрированные пороги (медиана и p95 после сглаживания не более 0,6 от исходных; tests/fixtures/gnss_wettzell_2025055/PREREGISTRATION_HATCH.md) не достигнуты, отношения 0,718 и 0,923; остаточная ошибка метрового уровня носит характер смещения (смещение кода C1C, антенна, приливы, долгопериодная многолучевость), а не белого шума, который устраняет сглаживание. MODELLED: статистика фильтра проверена внутренне | MODELLED |
| VM-0f3c1299 | Двойные разности RTK с фиксацией целых чисел по LAMBDA на реальных наблюдениях RINEX | Относительное позиционирование на короткой базе по реальным двухчастотным кодовым и фазовым измерениям GPS: двойные разности относительно самого высокого спутника с их полной ковариацией, плавающий фильтр Калмана по базе и однократным разностям неоднозначностей с повторной инициализацией при срывах, целочисленный метод наименьших квадратов LAMBDA с проверкой по отношению и база, обусловленная зафиксированными целыми числами | rtk_real (run_rtk), lambda (resolve) | tests/rtk_real_wettzell_oracle.rs (станции IGS WTZR база / WTZZ ровер, 1,4 m, 2025-02-24 00-03 h, 30 s: 359 эпох, фиксация в 100 % случаев начиная с 00:10, медиана ошибки фиксированной базовой линии 4,5 mm, p95 5,5 mm; первые 10 min с фиксацией 2,6 mm против плавающего решения 13 cm); rtk_real::tests | Опубликованные координаты ITRF2020 станций WTZR и WTZZ (IGN ITRF2020_GNSS.SSC, решение 3, с высотами антенн из RINEX), дающие эталонную базу; пороги предварительно зарегистрированы в tests/fixtures/gnss_wettzell_2025055/PREREGISTRATION_RTK.md до написания кода. Только короткая база: ионосферные и тропосферные двойные разности не моделируются | VALIDATED |
| VM-2a1dcc58 | Решение по времени приёмника методом PPP относительно финальных часов станции IGS | Часы приёмника, оцениваемые статическим плавающим фильтром PPP по реальным двухчастотным кодовым и фазовым измерениям GPS с финальными орбитами и часами IGS: передача времени от приёмника ко времени IGS, безионосферное решение по времени PPP. | ppp_real (run_ppp, PppEpoch::clock_m) | tests/ppp_time_igs_station_clock.rs (WTZR 2025-02-24, 04:00-05:55, 24 эпох: Kshana минус стандарт IGS 0,075 ns, порог 0,20; среднее -0.659 ns, порог 5,0) | Финальные комбинированные часы IGS для станции WTZR (записи AR файла IGS0OPSFIN_20250550000_01D_05M_CLK, SHA-256 d19f3d45...993d, комбинация сетевых решений нескольких аналитических центров; продукты IGS, свободное использование с указанием авторства); пороги предварительно зарегистрированы в xval/ppp-time/PREREGISTRATION.md до любого сравнения; все выполнены с первого прогона. ЧТО НЕ ПРОВЕРЕНО: одна станция и одно двухчасовое окно после сходимости; время IGS, а не UTC(k); постоянное смещение включает кодовые смещения приёмника и ограничено, а не откалибровано; прослеживаемости к Circular T нет. | VALIDATED |
| VM-8381d091 | Плавающее прецизионное определение положения (PPP) на реальных наблюдениях RINEX | Статический плавающий расширенный фильтр Калмана PPP по реальным двухчастотным кодовым и фазовым измерениям GPS с финальными орбитами и часами IGS: безионосферная комбинация, смещения антенн спутника и приёмника (вариации приёмника), твёрдый земной прилив, эффект намотки фазы, задержка Шапиро, оцениваемая зенитная влажная задержка, плавающие неоднозначности по дугам с обнаружением срывов по геометрически-независимой комбинации / Melbourne-Wübbena | ppp_real (run_ppp, parse_antex_receiver, solid_tide_ecef, phase_windup) | tests/ppp_real_wettzell_oracle.rs (станция IGS WTZR, 2025-02-24 00-06 h, 30 s, исключена из разработки: горизонтальная ошибка в последней эпохе 1,5 mm, по вертикали −2,9 cm; 04-06 h 240/240 эпох в пределах 0,10 m в 3-D, p95 6,7 cm; p95 только по коду 1,70 m; зависит от данных СКО ZTD 1,7 cm относительно EUREF); ppp_real::tests; tests/ppp_parity_glab_rtklib.rs (RM-31: PPP RTKLIB v2.4.2-p13 на тех же входных данных согласуется в пределах 0,05 m на 240/240 эпох, 9,7 mm в последней, при третьей регистрации после двух прогонов, в конфигурации RTKLIB которых не было твёрдого прилива и антенна была поставлена в слот базы; оба случая записаны как выводы; порог паритета SPP был не выполнен, медиана 1,085 m против 0,50 m; gLAB 6.0.0 при первом зарегистрированном прогоне, командная строка поправки 4: PPP в пределах 0,05 m на 240/240 эпох и 5,0 mm в последней, порог SPP не выполнен, медиана 1,187 m, вывод: собственные решения SPP двух эталонных инструментов различаются на 0,852 m по медиане, то есть порог был задан жёстче, чем согласие между самими инструментами) | Опубликованная координата ITRF2020 станции WTZR (IGN ITRF2020_GNSS.SSC, решение 3, перенесённая с её скоростью) — пороги предварительно зарегистрированы в tests/fixtures/gnss_wettzell_2025055/PREREGISTRATION_PPP.md до написания фильтра; разработка только на совместно расположенной станции WTZZ. Не моделируется: океаническая нагрузка, PCV спутника, разрешение целочисленных неоднозначностей | VALIDATED |
| VM-020e03fb | Чтение навигационных файлов RINEX 4 | Навигационные файлы RINEX 4.00-4.02: записи > EPH для GPS LNAV, Galileo I/NAV и F/NAV, BeiDou D1/D2 и QZSS LNAV декодируются в тип бортовых эфемерид; записи CNAV, CNV1-3, FDMA, SBAS, STO, EOP и ION пропускаются до заголовка следующей записи; запись, в заголовке которой указан другой спутник, и усечённая запись отклоняются |
rinex (parse_nav, parse_nav_with) | tests/rinex4_nav_brd400_oracle.rs (IGS BRD400DLR_S RINEX 4,02 в сравнении с BRDM00DLR_S RINEX 3,04 за 2026-07-19, срез 00-02 h: записи G 37 / E 478 / C 72 сопоставлены в обе стороны, каждое поле идентично, положение на Toe 0 m; полные сутки зависят от данных: G 416 / E 5668 / C 865 / J 118); rinex::tests | Объединённый широковещательный файл RINEX 3 от IGS за те же сутки (опубликованные данные, записанные другим генератором файлов по тем же бортовым сообщениям); пороги предварительно зарегистрированы в tests/fixtures/brdc_rinex4_2026200/PREREGISTRATION.md (7aa264b) до первого прогона | VALIDATED |
| VM-93d6d028 | Чтение файлов наблюдений RINEX 4 | Заголовки наблюдений RINEX 4.0x (DOI, LICENSE OF USE, STATION INFORMATION, MERGED FILE; метки сопоставляются в столбцах 61–80 для версии 4 и выше) и записи эпох | rinex_obs (parse_obs) | tests/rinex4_obs_mao0.rs (первые 4 эпохи файла IGS MGEX RINEX 4,00 MAO000USA_R_20231980000_01D_30S_MO, 58 спутников, 7 систем: записи заголовка и значения первой эпохи равны опубликованным литералам); rinex_obs::tests::parses_a_rinex_4_header_with_its_new_records (синтетический заголовок 4,02 по спецификации) | Соответствие формату на реальном опубликованном файле RINEX 4,00 (прочитанные значения равны напечатанным в файле литералам) и на заголовке, выведенном из спецификации; независимый читатель не запускался, поэтому MODELLED | MODELLED |
| VM-c58c97b0 | Положение геостационарного спутника BeiDou по бортовым эфемеридам | BDS-SIS-ICD-B1I v3.0 §5.2.4.12: положение геостационарного спутника по бортовым эфемеридам (квазиинерциальная система, затем Rz(Ω̇e·tk)·Rx(−5°)), включается опционально через поле include_beidou_geo в NavParseOptions, поэтому читатель по умолчанию по-прежнему пропускает GEO | rinex (RinexEphemeris::sv_position_ecef_bds_geo, NavParseOptions) | tests/bds_geo_broadcast_oracle.rs (реальные записи C01-C04: геостационарный радиус, долготы 140.02/80.04/110.55/159.99 град в опубликованных слотах, |широта| 2,13 град с учётом наклона против 6,65 без него; заранее зарегистрированное сравнение широковещательных данных с точным SP3 зависит от наличия данных KSHANA_BDS_GEO_SP3 и не запускалось); rinex::tests | Предварительно зарегистрировано (7aa264b, 110fef9) относительно прецизионной орбиты IGS MGEX с GEO; такой продукт оказался недоступен в сеансе, где это создавалось, поэтому сравнение ожидается, а строка остаётся MODELLED (проверено только по опубликованным номинальным позициям GEO) | MODELLED |
| VM-6cc640b7 | Интерполяция прецизионных часов SP3 | Смещение часов спутника между табулированными узлами часов SP3 линейной интерполяцией по двум охватывающим допустимым узлам (схема RTKLIB pephclk; метка плохих часов пропускается) и те же узлы, переданные в цепочку прецизионных продуктов как записи, эквивалентные часам RINEX | sp3 (Sp3File::clock_s, clock_nodes), precise_products (ClockRinex::from_sp3) | tests/sp3_clock_igs_oracle.rs (итоговый SP3 IGS с шагом 15 min за 2025-02-24 в сравнении с итоговыми часами IGS с шагом 30 s, 32 спутника GPS: медиана |Δ| в узлах 2.6e-13 s; 3038 записей в средних точках, СКО 0,121 ns, p95 0,265 ns; при удержании значения узла вместо интерполяции СКО 4,24 ns); sp3::tests::clock_interpolation_is_linear_between_valid_nodes_and_exact_at_them | Финальная комбинация часов спутников IGS с шагом 30 с (IGS0OPSFIN 30S CLK, 2025-02-24): опубликованные оценки часов в моменты запроса, а не интерполированные по SP3; пороги предварительно зарегистрированы в tests/fixtures/sp3_clock_igs_oracle/PREREGISTRATION.md до первого прогона (СКО 0,15 нс, p95 0,30 нс, медиана по узлам 1e-12 с, различимость 2x) | VALIDATED |
| VM-c65fdad2 | Тесно связанная комплексная система GNSS/INS по фазе несущей с плавающими неоднозначностями | Фильтр Калмана в пространстве ошибок по 15 состояниям INS, двухкомпонентным часам приёмника и одной плавающей неоднозначности несущей на каждый отслеживаемый спутник; псевдодальность, фаза несущей и опционально скорость изменения дальности от орбитальной группировки Walker на SGP4 (время распространения света и эффект Саньяка), поправки Klobuchar и Saastamoinen/Niell, применяемые в контуре в собственном положении фильтра; обнаружение срывов по разности несущей во времени с порогом для каждого спутника, расширяемым на неопределённость скорости; повторная инициализация неоднозначностей при срывах и при повторном захвате | fusion::carrier_tc (run_carrier_tc, CarrierTcCfg), fusion::trajectory (truth_epochs) | tests/fusion_carrier_tc.rs (движение по траектории «фигура 8»: установившееся СКО по 3D 0,025 м по несущей против 0,470 м по коду на одинаковых измерениях; 12 начальных значений, среднее NIS/dof 1,00 и установившееся NEES/dof 0,92; срыв на 1 цикл обнаружен в своей эпохе без ложных тревог, решение осталось целым; отключение широковещательных поправок повышает ошибку по коду с 0,51 м до 19,6 м (ионосфера) и 8,0 м (тропосфера); прогон без шума сходится к 0,3 мм) | Внутренняя согласованность: измерения синтезируются из моделей, которые использует фильтр (χ² NEES/NIS по значениям seed, сходимость без шума, внесение срывов). MODELLED; реальные данные приёмника и сторонний фильтр не сравниваются | MODELLED |
| VM-f381b220 | Морские, железнодорожные и авиационные пакеты GNSS/INS с возможностью тесной связи | Три сценария gnss-ins на библиотеке траекторий (судно, идущее зигзагом со скоростью 8 м/с, с пятиминутным перерывом; поезд, проходящий через выемку с двумя видимыми спутниками и туннель; самолёт, у которого перерыв охватывает разворот с креном 25 градусов) и необязательная таблица [tight] пакета: псевдодальности от орбитальной группировки Walker на SGP4, объединяемые замкнутым навигатором, при этом в номинальном режиме используются все спутники выше маски, а в ухудшенном — несколько самых высоких | fusion::pack (TightCfg, [tight]), сценарии gnss-ins-maritime / gnss-ins-rail / gnss-ins-aviation | tests/gnss_ins_packs.rs (каждый пакет: слитое решение лучше свободной INS на интервале пропадания для обоих датчиков; железная дорога: тесная связь 5,3 м против слабой 12,9 м для навигационного класса и 15,6 м против 18,8 м для тактического на интервале пропадания, доступность 0,97 против 0,95; таблица тесной связи проверена); tests/gnss_ins_legacy_trajectory_pin.rs (слабосвязанный режим по умолчанию побитно идентичен) | Внутренне: показатели качества каждого пакета относительно его собственной истины и сравнение слабой и тесной связи на одинаковых входных данных. MODELLED; сравнение аудита с NaveGo не выполнялось | MODELLED |
| VM-583fb6a6 | Связанный фильтр PNT по псевдодальностям с состоянием смещения и 3D-расширением в пакете fusion | Один сводный фильтр Калмана по положению, скорости, фазе и частоте часов, получающий псевдодальности, которые связывают положение и часы (обновления в форме Джозефа с учётом взаимной ковариации); вариант 1-DOF, дополненный состоянием постоянного смещения акселерометра, который пакет fusion запускает в режиме [coupled]; и 3D-версия с 8 состояниями со строками линии визирования | fusion::coupled (CoupledPntFilter, CoupledPntBiasFilter, CoupledPnt3d), fusion (run_coupled_suite), hybrid (CoupledCfg) | tests/fusion_coupled_filters.rs (3D-фильтр на 60 начальных значениях: среднее NEES второй половины 8,12 для 8 состояний, сумма χ² последней эпохи внутри своей 95 %-й полосы; поправка часов в 0,1 нс снижает сигму 3D-положения с 5,58 м до 3,07 м; фильтр смещения на 60 начальных значениях: сумма χ²(5) в полосе, смещение в пределах 3 сигм в 59 из 60; fusion-pnt-coupled со смещёнными акселерометрами: p95 положения 18,7 м / 90,0 м и целостность 1,00 / 0,97 в связанном режиме против 430 м / 4060 м и 0,006 / 0,000 в разделённом); fusion::coupled::tests; tests/fusion_coupled_pack.rs (fusion и hybrid без [coupled] побитно идентичны) | Внутренняя согласованность: истина смоделирована по собственным моделям фильтров (χ² NEES по значениям seed Монте-Карло, несвязанный пакет на одинаковых датчиках). MODELLED | MODELLED |
| VM-2b31e9b2 | Слабосвязанный фильтр Калмана GNSS/INS с плечом рычага на наборе данных KF-GINS | Замкнутый 15-мерный фильтр Калмана в пространстве ошибок, управляемый приращениями IMU, с объединением положений антенны GNSS через модель плеча рычага H = [I 0 −[(C_b^n l_b)×] 0 0], настраиваемый из файла KF-GINS YAML (начальное состояние и сигмы, ARW/VRW, смещения Гаусса–Маркова) | fusion::kfgins (run, loaders, score), fusion::closed_loop (propagate_increments, fuse_position_lever_arm), fusion::gnss_ins_ekf (update_position_lever_arm) | tests/fusion_kfgins_dataset_oracle.rs (синтетические загрузчики и тесты рычага на вращающейся платформе выполняются всегда; зависит от данных через KSHANA_KFGINS_DIR, прогон 2026-10-13 на демонстрационном наборе KF-GINS: горизонтальное / вертикальное СКО 0,0109 / 0,0090 m относительно опорной траектории против 0,0111 / 0,0083 m у KF-GINS на C++, все шесть заранее зарегистрированных порогов выполнены; рычаг выключен 0,329 m) | Опубликованная эталонная траектория набора данных и программа KF-GINS на C++ (GPL-3.0, коммит 8291a93e, запущена как отдельный инструмент); пороги предварительно зарегистрированы в xval/kfgins/PREREGISTRATION.md, и KF-GINS не запускался на этих данных до этой регистрации (проверено в его разделе Results). Все шесть порогов выполнены с первого прогона. ЗАВИСИТ ОТ ДАННЫХ: демонстрационный набор KF-GINS (реальные IMU Leador-A15 и RTK GNSS с эталонной траекторией) не имеет лицензии, поэтому не включён в репозиторий; xval/kfgins/fetch.sh загружает его во время теста с закреплённым SHA-256 каждого файла, и тест завершается ошибкой при несовпадении; путь воспроизведения, требующий доступа к сети, описан в xval/kfgins/PREREGISTRATION.md. Повышено до VALIDATED решением владельца на основании доказательств, зависящих от наличия данных (2026-10-13) | VALIDATED |
| VM-98bed4a0 | Экспорт тестового стенда, прочитанный читателями файлов движения симулятора (gps-sdr-sim) | Файлы движения экспорта стенда, поданные собственным читателям файлов открытого симулятора GNSS, возвращаются как экспортированная траектория: файл NMEA GGA (-g), срез «время/широта/долгота/высота» из CSV движения (-x) и его срез «время/x/y/z» (-u), на 6 сценариях gnss-ins (включая морские, железнодорожные и авиационные пакеты, прочитанные до предела симулятора в 3000 отсчётов) и 2 стационарных. Только движение; никакой сигнал не записывается и не генерируется. | interop::testbench (write_motion_csv, write_nmea, export) | tests/testbench_gpssdrsim_oracle.rs (6 тестов: оракул и сценарии, байты экспорта закреплены, читатели NMEA и LLH, четырёхстолбцовый срез ECEF, FINDING run-1 на CSV полной ширины, сетка строк 10 Hz) | ЧТО ПРОВЕРЕНО ВНЕШНЕ, сказано узко: gps-sdr-sim (MIT, коммит 28ca29a6) readNmeaGGA, readUserMotion и readUserMotionLLH с собственным llh2xyz WGS 84, вызываемые через xval/testbench-gpssdrsim/driver.c (ни одна функция сигнала не вызывается), в сравнении со связанными с Землёй столбцами CSV движения строка за строкой, с порогами, предварительно зарегистрированными в xval/testbench-gpssdrsim/PREREGISTRATION.md до любого прогона: каждый отсчёт прочитан во всех 8 сценариях; NMEA в худшем случае 1,21 мм (порог 1 см); срез LLH в худшем случае 0,145 мм (порог 1 мм); четырёхстолбцовый связанный с Землёй срез точен (порог 1 мкм, поправка 1); строки gnss-ins на сетке симулятора 10 Гц с точностью до 2.3e-13 с. НАХОДКА (прогон 1, зафиксирована): CSV с удалённым заголовком и полной шириной не читается с ключом -u, потому что 100-символьный буфер строки читателя разбивает каждую 161-символьную строку на два отсчёта; docs/TEST-BENCH.md даёт четырёхстолбцовый срез. ЧТО НЕ ПРОВЕРЕНО: физика истинной траектории сценария; сигнальный выход gps-sdr-sim; читатель любого другого симулятора; любой приёмник. | VALIDATED |
| VM-a606add5 | Библиотека траекторий GNSS/INS и импорт истинных данных из CSV | Выбираемые профили движения для пакета gnss-ins (прямая, фигура 8, городское движение с остановками, набор высоты самолётом и координированный разворот, съёмочный дрон), заданные командами скоростей Эйлера и ускорения вдоль трека, замкнутыми на истинное состояние с кинематическим IMU (центростремительная, гравитационная и кориолисова составляющие), и импортированная из CSV истинная траектория, превращённая в IMU, который её воспроизводит; прежний дрейф-прогон без изменений, если профиль не задан | fusion::trajectory (TrajectoryCfg, Trajectory, kinematic_imu, parse_truth_csv), fusion::pack ([trajectory]) | fusion::trajectory::tests (координированный разворот не даёт боковой силы, коэффициент нагрузки 1/cos φ; импорт CSV воспроизводит пролетённый профиль с точностью 1e-3 м/с и 1 м); tests/gnss_ins_trajectory_library.rs (каждый профиль запускается, и слияние лучше свободной INS на интервале пропадания; каждый воспроизводит своё названное движение; наблюдаемость курса: сигма рыскания после 240 с — 1,27 град при прямолинейном крейсерском полёте против 0,039 град при фигуре 8 и 0,062 град при движении с остановками); tests/gnss_ins_legacy_trajectory_pin.rs (прежний результат и хэши истины побитно идентичны) | Внутренне: тождества кинематики твёрдого тела, прямой и обратный проход через CSV и собственная ковариация фильтра. MODELLED (реальный журнал поездки не сравнивается) | MODELLED |
| VM-b2b424ef | Механизация бесплатформенной INS | Бесплатформенная инерциальная механизация WGS-84 NED с кватернионной ориентацией (с компенсацией конусного и скалинг-движения), распространяющая навигационное состояние по приращениям (Δθ, Δv) | inertial::mechanization, inertial::attitude, inertial::imu_errors | tests/classical_strapdown_ins_reference.rs (профили статики/поворота/конического движения, по 30 эпох каждый, в сравнении с NaveGo: ориентация побитово идентична 0 rad; скорость/положение в пределах названных аналитических границ) | NaveGo v1.4 (R. Gonzalez et al., LGPL-3), запущенный в Octave — независимый опубликованный инструментарий INS, получающий тот же поток приращений (Δθ,Δv). Ориентация совпадает бит в бит (те же соглашения NED / кватернион со скаляром первым / скорость вращения Земли / транспортная скорость); скорость и положение согласуются с точностью до двух документированных различий — члена северной гравитации от отклонения отвеса, который NaveGo учитывает, а kshana намеренно опускает (гравитация по отвесу; совпадает с замкнутой формой Groves до каждой цифры, с проверкой нижней границы на правдоподобие), и различий интеграторов порядка O(dt²) — это не ошибки механизации | VALIDATED |
| VM-52d2b490 | Синтез функционалов гравитационного поля (навигационная карта с гравитационной коррекцией / без GNSS) | Модуль гравитации в сферических гармониках + возмущение (мГал) по любой модели ICGEM .gfc; нормальная гравитация GRS80 | gravity_sh | tests/icgem_gravity_reference.rs (синтез GRS80 воспроизводит Сомильяну с точностью 3.5e-12; реальная карта возмущений ICGEM EGM2008 физически правдоподобна) | Нормальная гравитация Сомильяна GRS80 (Moritz 1980, IAG) + опубликованные γ_e/γ_p; реальное поле ICGEM EGM2008 | VALIDATED |
| VM-cbbbaf73 | Земля–Луна, CR3BP, NRHO 9:2 относительно орбиты, по которой летел CAPSTONE | Круговая ограниченная NRHO (околопрямолинейная гало-орбита) 9:2 у L2, южная, которую исправляет cr3bp::differential_correct_halo (семейство орбит Gateway и CAPSTONE), сравнивается по средней геометрии (период, радиус перилуния, радиус аполуния) с орбитой, по которой CAPSTONE фактически летел. Измерение того, насколько хорошо член CR3BP описывает реальную орбиту; орбита CR3BP не является орбитой эфемеридной модели и не сравнивается эпоха за эпохой | cr3bp (differential_correct_halo, PeriodicOrbit) | tests/capstone_nrho_horizons.rs::cr3bp_nrho_matches_capstone_mean_geometry (CAPSTONE, март 2023, 4 перилуны и 5 аполун: период 6,5004 сут против 6,5699 сут (1,07 %, порог 3 %), аполуна 71 182 против 71 215 км (0,05 %, порог 5 %), перилуна 3 385 против 3 245 км (4,1 %, порог 20 %)); cr3bp::tests::reproduces_l2_southern_nrho_92_regime | Измерено относительно реконструированных эфемерид CAPSTONE из JPL Horizons (NAIF -1176, CAPSTONE_merged, ICRF с центром в Луне, 2023-03-01..31 с шагом 10 мин), зафиксированных байт в байт (tests/fixtures/capstone_horizons/, NOTICE.md), предварительно зарегистрировано 4e868170 до загрузки, как измерение с порогами по средней геометрии. Это не валидация: CR3BP не учитывает Солнце, эксцентриситет Луны и поддержание орбиты, которое выполнял CAPSTONE, поэтому пороги описывают, насколько репрезентативна модельная орбита, а не точность. Результаты: docs/design/evidence/cap29d-capstone-nrho/RESULTS.md | MODELLED |
| VM-7a53988a | Вращающиеся состояния CR3BP, отображённые в ICRF с центром в Луне на линии Земля–Луна по DE440 | cr3bp::to_moon_centred_icrf отображает безразмерное вращающееся состояние CR3BP Земля–Луна в положение и скорость в ICRF с центром в Луне на мгновенной линии Земля–Луна (единица длины — расстояние Земля–Луна, единица времени — обратная орбитальная скорость, полная угловая скорость системы, включая её внеплоскостную составляющую от ускорения Луны), с обратным преобразованием from_moon_centred_icrf, а cr3bp::to_moon_centred_icrf_de440 читает геоцентрическое состояние Луны из DE440 SPK. Оно отображает состояния; оно не превращает орбиту CR3BP в орбиту эфемеридной модели | cr3bp (to_moon_centred_icrf, from_moon_centred_icrf, to_moon_centred_icrf_de440) | tests/cr3bp_to_mci_spice_oracle.rs::cr3bp_to_mci_matches_a_spice_two_vector_frame (72 случая: 12 эпох в январе 2025 x точки L1 и L2, два южных гало-состояния L2 и одно начальное состояние DRO из API периодических орбит трёх тел JPL и произвольное состояние; наихудшее положение 1.8e-7 m при пороге 1 mm, скорость 1.2e-9 m/s при 1e-6 m/s; обратное преобразование 2.7e-15); cr3bp::tests::moon_centred_map_round_trips_and_sends_the_moon_to_the_origin | NAIF SPICE Toolkit (CSPICE N0067 через spiceypy 8.3.0) sxform двухвекторной динамической системы координат (первичный +X вдоль положения Луны относительно Земли, вторичный +Y вдоль её скорости, de440s), применённый к размерному вращающемуся состоянию, построенному из собственного состояния Луны в SPICE, отдельной программой, которая не вызывает код Kshana (tests/fixtures/cr3bp_to_mci_spice/, NOTICE.md). Предварительно зарегистрировано 2313eb1b, изменено до любого прогона в d5ef79b3, чтобы включить внеплоскостную угловую скорость системы (без неё скорость отличалась бы до 8e-2 м/с). Проверка только преобразования уровня Library. Результаты: docs/design/evidence/rm34-cr3bp-to-mci/RESULTS.md | VALIDATED |
| VM-cadb7067 | Вид «солнечная система» на ядре JPL (planetary_kernel_path) | Вид solar-system с planetary_kernel_path: каждое сообщаемое тело, чей собственный код NAIF содержится в SPK, получает своё гелиоцентрическое положение и скорость в J2000 из ядра через собственный читатель движка (метка KERNEL), связь, оба конца которой находятся в ядре, вычисляется по нему, барицентры никогда не подставляются вместо планеты, а каждое другое тело остаётся аналитическим со своей меткой; отчёт получает блок ядра (путь, SHA-256, тела и связи, взятые из него) только когда параметр задан. Для de440s.bsp это Меркурий, Венера, Земля и Луна |
solar_system (SolarSystemScenario::planetary_kernel_path, KernelOut); ephem_provider (KernelEphemeris) | tests/solar_system_kernel_oracle.rs::kernel_backed_solar_system_matches_spice (Меркурий, Венера, Земля и Луна на 2026-01-01, 2030-06-15 и 2040-12-31: наихудшие 3.3e-5 m и 1.0e-11 m/s при 1 mm и 1e-6 m/s; блок ядра и метки точны); tests/solar_system_kernel_oracle.rs::without_a_kernel_the_report_has_no_kernel_block | NAIF SPICE Toolkit (CSPICE N0067 через spiceypy 8.3.0) spkezr, гелиоцентрические состояния по полному de440s.bsp, отдельная программа, не вызывающая код Kshana (tests/fixtures/solar_system_kernel/, NOTICE.md); движок читает вырезки de440s бит в бит. Предварительно зарегистрировано f8e946ea. Проверка уровня Library для подключения: сама DE440 и аналитические тела здесь не проверяются. Результаты: docs/design/evidence/cap31-solar-system-kernel/RESULTS.md | VALIDATED |
| VM-c8b4f777 | Porkchop на эфемеридах DE440 | maneuver::porkchop_kernel: перебор «дата запуска × дата прибытия» для стартового C3 (км²/с²) и V-бесконечности прибытия (км/с) с одновитковым прямым решателем Ламберта и защитой от коллинеарности 0,5 град, по гелиоцентрическим состояниям J2000 любых двух тел NAIF, прочитанным из JPL DE440 SPK собственным читателем крейта. Один виток, прямое движение, без ограничений ракеты-носителя и прибытия: это перебор, а не проектирование миссии | maneuver (porkchop_kernel, PorkchopGrid); ephem_provider (KernelEphemeris) | tests/porkchop_de440_oracle.rs::de440_porkchop_matches_spice_and_pykep (от Земли к барицентру Марса, 16 отправлений 2026-09-01..2027-01-29 x 19 прибытий 2027-06-01..2028-02-26: 304 ячейки конечны с обеих сторон, наихудшие C3 2.5e-14 и V-бесконечность 2.6e-14 относительно при пороге 1e-8, одна и та же ячейка с минимальным C3, 9,1997 km²/s²) | NAIF SPICE Toolkit (CSPICE N0067 через spiceypy 8.3.0) гелиоцентрические состояния по de440s.bsp и pykep 3.0.1 lambert_problem (ESA, ядро kep3 на C++, MPL-2.0), независимый решатель Ламберта, запущенный как отдельная программа, не вызывающая код Kshana (tests/fixtures/porkchop_de440/, NOTICE.md); движок читает вырезку de440s бит в бит. Предварительно зарегистрировано 2d857fb1. Проверка уровня Library для перебора. Результаты: docs/design/evidence/cap20b-porkchop-de440/RESULTS.md | VALIDATED |
| VM-c80a768c | Оптимизатор импульсных перелётов на эфемеридах DE440 | maneuver::optimise_transfer_kernel: даты отправления и прибытия баллистического двухимпульсного перелёта за один виток, минимизирующие стартовый C3 или V-бесконечность прибытия в пределах типа I или типа II, как непрерывный оптимум (сетка с шагом 2 суток по обоим окнам, затем 2-D метод Нелдера–Мида), по гелиоцентрическим состояниям из DE440 SPK. Оптимизатор дат для одного участка, а не проектирование миссии: без ракеты-носителя, орбиты ожидания, манёвров в дальнем космосе и многовитковых вариантов | maneuver (optimise_transfer_kernel, TransferObjective, TransferType, TransferOptimum); ephem_provider (KernelEphemeris) | tests/transfer_optimiser_oracle.rs::transfer_optimiser_matches_spice_pykep_scipy (от Земли к барицентру Марса, отправления 2026-09-15..2027-01-15 x прибытия 2027-05-01..2028-03-01, Type I/II x min C3 / min V-infinity: наихудшая целевая функция 8.7e-13 относительно, даты в пределах 1e-5 суток, другая величина в пределах 2.5e-7 относительно, при заранее зарегистрированных порогах 1e-7, 0,01 суток и 1e-4; docs/design/evidence/cap20cd-transfer-optimiser/); tests/transfer_optimiser_oracle.rs::transfer_optimiser_against_the_published_2026_handbook (вторичный опубликованный источник NASA/TM-2010-216764, таблица 2: Type II min C3 9,182 против 9,144 и Type II min V-infinity 2,564 против 2,565 — MET; Type I min C3 10,535 против 11,11, -5.18 %, NOT MET и утверждается как пропущенный, библиотечный оракул согласуется с Kshana) | Независимый оптимизатор: NAIF SPICE Toolkit (CSPICE N0067 через spiceypy 8.3.0) гелиоцентрические состояния на той же вырезке de440s, pykep 3.0.1 lambert_problem (ESA, MPL-2.0) и метод Нелдера–Мида из SciPy 1.18.1, без вызова кода Kshana. Справочник NASA по перелётам Земля–Марс (MIDAS, эфемериды не указаны, сетка дат с шагом 2 суток) является вторичным опубликованным источником и статус не определяет | VALIDATED |
| VM-710b7e9b | Решатель многовитковых перелётов Ламберта | Все решения задачи Ламберта с числом полных витков до трёх (maneuver::lambert_multirev: одновитковое решение, затем левая и правая ветви для каждого числа витков, Izzo 2015), с граничными скоростями v1 и v2, для прямых и ретроградных перелётов, в канонических и гелиоцентрических единицах СИ, включая перелёты в пределах 1 % от минимального времени полёта для данного числа витков и геометрии, близкие к 180 град. Только двухтельный решатель (без возмущений) | maneuver (lambert_multirev, LambertSolution, LambertBranch) | tests/lambert_multirev_oracle.rs::multirev_lambert_matches_pykep_on_the_preregistered_cases (382 случая: 300 случайных 3-D, 18 около 180 deg, 24 около минимального времени при M = 1..3, 40 гелиоцентрических; 1058 решений; числа и порядок ветвей равны; скорости с относительной точностью 1e-8, наихудшее 1.6e-13; в пределах 1 % от минимального времени с точностью 1e-6, наихудшее 7.5e-15; внутренняя проверка посадки по Кеплеру попадает для каждого решения в пределах 4.2e-12 от |r2|, кроме одного закреплённого вывода на дуге с e = 0,994 — это ограничение kepler_universal, а не решателя) | pykep 3.0.1 lambert_problem (ESA, ядро kep3 на C++, MPL-2.0), независимая библиотека, запущенная как отдельная программа скриптом scripts/gen_lambert_multirev_ref.py; зафиксирован только её численный результат. Предварительно зарегистрировано a75de851 (набор случаев, пороги, правило исхода) до любого сравнения; эталон был сгенерирован заново независимо и совпадает побайтно. Результаты: docs/design/evidence/lambert-multirev/RESULTS.md | VALIDATED |
| VM-a5e13882 | Двухтельный решатель перелётов Ламберта | Одновитковый решатель Ламберта Izzo-2015 (r1, r2, время полёта → граничные скорости) для перелётов LEO→GEO→гелиоцентрических, прямых и ретроградных | maneuver (lambert) | tests/lambert_reference.rs (13 переходов в сравнении с lamberthub izzo2015; наихудшее |Δv| 7e-12 m/s) | lamberthub 1.0.0 izzo2015 (J. Martínez Garrido, MIT) — независимый сторонний решатель Ламберта. Одновитковая (M=0) задача Ламберта имеет единственное решение, поэтому согласие между библиотеками является настоящей внешней проверкой; совпадение до <1e-4 м/с (наблюдалось ~1e-11), тот же вид проверки, что получает DOP по gnss_lib_py | VALIDATED |
| VM-91baec5d | Системы отсчёта и шкалы времени | Прецессия–нутация IAU 2006/2000A, CIO GCRS↔ITRS, шкалы времени с високосными секундами | frames, precession, nutation, cio, timescales | tests/frame_reference_vectors.rs (сквозная проверка Vallado; векторы SOFA/ERFA) | Эталонные векторы IAU SOFA / ERFA; Vallado AIAA 2006-6753 (0,1–4 мм) | VALIDATED |
| VM-ba0279e6 | Двухчастные юлианские даты и високосные секунды на пути времени околоземной орбиты | Календарная дата и время UTC в двухчастную юлианскую дату UTC по соглашению SOFA dtf2d для суток, заканчивающихся високосной секундой (длиной 86 401 с, допустимо 23:59:60.x), UTC в TAI и обратно, а также UT1 из UTC через TAI, на двухчастных датах начиная с 1972-01-01: путь времени, который принимают SGP4 (Sgp4::propagate_at, отсчёт от двухчастной эпохи) и земное вращение IAU 2006/2000A (sgp4::teme_to_itrs_matrix_eop с двухчастным углом вращения Земли) | jd2 (Jd2::from_utc_calendar, utc_to_tai, tai_to_utc, utc_to_ut1, tai_to_tt, earth_rotation_angle); sgp4 (Sgp4::new_at, Sgp4::propagate_at) | tests/jd2_sofa_time_oracle.rs (224 моментов UTC: по шесть около каждой из 27 високосных секунд 1972-2016, два фиксированных, 60 случайных с фиксированным seed в 1972-2026; dtf2d, utctai и taiutc каждая в пределах 1e-6 s, наихудшее 1.9e-11 s); jd2::tests (a_leap_second_day_is_86401_seconds_long_and_tai_steps_once; tai_to_utc_inverts_utc_to_tai_to_the_microsecond_across_a_leap_second; ut1_runs_through_tai_across_a_leap_second_day; the_two_part_earth_rotation_angle_matches_the_single_f64_one); sgp4::tests::propagate_at_measures_time_from_the_two_part_epoch | pyerfa 2.0.1.5 (liberfa 2.0.1, BSD-3-Clause; алгоритмы SOFA в выпуске проекта ERFA), независимая библиотека: erfa.dtf2d("UTC"), erfa.utctai и erfa.taiutc на зафиксированных моментах, разность образуется по частям на двухчастных датах, порог 1e-6 с задан до прогона (предварительно зарегистрировано e947e69d). Наибольшая разность 9.6e-12 с (dtf2d) и 1.9e-11 с (utctai, taiutc). Если принять каждые сутки UTC за 86 400 с или оставить долю високосных суток без масштабирования, тест краснеет. UT1 через TAI (iauUtcut1) проверяется на ветви ERFA в строке пути околоземной орбиты. Область: UTC с 1972-01-01; прежнее UTC с дрейфующей скоростью не моделируется | VALIDATED |
| VM-349495a3 | Двухчастные юлианские даты в вращении Земли на пути орбиты | Вращение Земли по двухчастной юлианской дате UT1 на пути орбиты, так что положение в земной системе координат сохраняет микросекунду, которую теряет дата в одном f64 (около 3e-9 рад вблизи 2020): jd2::gmst82 (GMST IAU 1982, соглашение TEME, на двух частях), cio::gcrs_to_itrs_matrix_jd2 (матрица CIO GCRS→ITRS с углом вращения Земли по двум частям) и, построенные на них и проверенные внутренне, frames::teme_to_itrf_jd2 / itrf_to_teme_jd2, orbit::Propagator::position_in_frame_jd2 и own_jd2_utc, опциональный two_part_jd сценария эфемерид (положение ECEF, трасса на поверхности и вид со станции; по умолчанию выключен, без изменений) и преобразования From без потерь между jd2::Jd2 и timescales::TwoPartJd. Прецессия–нутация и эпоха модели сил Cowell остаются в одном f64, где округление в 40 мкс меньше 1e-15 рад или намного меньше погрешности аналитических эфемерид Солнца и Луны | jd2 (gmst82, From<TwoPartJd>, From<Jd2>); cio (gcrs_to_itrs_matrix_jd2); frames (teme_to_itrf_jd2, itrf_to_teme_jd2); orbit (Propagator::position_in_frame_jd2, own_jd2_utc); ephemeris (EphemerisScenario::two_part_jd) | tests/jd2_earth_rotation_erfa_oracle.rs::two_part_earth_rotation_agrees_with_erfa (40 двухчастных дат UT1/TT 1980-2050, включая шаги +1, +10, +50 us на двух датах: gmst82 в пределах 1e-12 rad, наихудшее 0; элементы GCRS в ITRS в пределах 5e-12, наихудшее 2.7e-14; вращение при +1/+10/+50 us в пределах 1e-13 rad от ERFA, наихудшее 1.1e-14 rad, тогда как путь с одиночным f64 полностью не различает шаги +1 и +10 us); ephemeris::tests::two_part_jd_agrees_with_the_default_and_resolves_microsecond_steps; frames::tests::the_two_part_teme_to_itrf_round_trips_and_resolves_a_microsecond; jd2::tests::gmst82_matches_the_single_f64_gstime_away_from_the_floor; jd2::tests::two_part_types_convert_without_moving_the_instant | pyerfa 2.0.1.5 (liberfa 2.0.1, BSD-3-Clause; алгоритмы SOFA в выпуске проекта ERFA), независимая библиотека: gmst82 и c2t06a на зафиксированных двухчастных датах, движение полюса 0,1 и 0,3 угл. сек. Предварительно зарегистрировано b10475ee (даты, пороги) до написания функций и до запуска эталона. Внутренние тесты (параметр сценария, прямой и обратный проход TEME/ITRF, преобразования типов) являются вспомогательной самосогласованностью | VALIDATED |
| VM-a676a683 | Матрицы систем координат относительно векторов ERFA: смещение и прецессия IAU 2006, TEME в GCRS и цепочка CIO со смещениями небесного полюса | Три матрицы систем координат, сравниваемые поэлементно или по углу поворота с ERFA на произвольных эпохах: precession::precession_matrix (смещение и прецессия IAU 2006 по углам Фукусимы–Уильямса), nutation::teme_to_gcrs_matrix (поворот TEME в GCRS P^T N^T Rz(-EE) с прецессией IAU 2006, нутацией IAU 2000B и уравнением равноденствий с двумя ведущими дополнительными членами) и cio::gcrs_to_cirs_matrix_with_offsets (поворот GCRS в CIRS со смещениями небесного полюса IERS dX, dY, добавляемыми к модельным X, Y полюса CIP до поворота, соглашение справочника SOFA; новое). Сами модельные решения (нутация 2000B на пути TEME, ряд из двух дополнительных членов) не проверяются, проверяется только их реализация | precession (precession_matrix); nutation (teme_to_gcrs_matrix); cio (gcrs_to_cirs_matrix_with_offsets) | tests/frames_erfa_vector_oracle.rs::frame_matrices_agree_with_erfa_vectors (40 эпох TT 1950-2100, dX и dY до 0,5 mas: элементы прецессии в пределах 1e-13, наихудшее 0; TEME в GCRS в пределах 5e-10 rad, наихудшее 1.10e-10 rad; CIO со смещениями в пределах 1e-13, наихудшее 0; нулевые смещения побитово идентичны cio::gcrs_to_cirs_matrix) | pyerfa 2.0.1.5 (liberfa 2.0.1, BSD-3-Clause; алгоритмы SOFA в выпуске проекта ERFA), независимая библиотека: pmat06; numat(obl06, nut00b) с уравнением равноденствий из eect00 (полный ряд дополнительных членов), составленные как P^T N^T Rz(-EE); xys06a, затем c2ixys(X + dX, Y + dY, s). Предварительно зарегистрировано 979c1e39 (эпохи, смещения и пороги) до запуска эталона. Невязка TEME в 1.1e-10 рад — предсказанный эффект сохранения двух дополнительных членов (около 3 мм на орбите GNSS) | VALIDATED |
| VM-604f1e8f | UTC до 1972 года (эпоха дрейфующей скорости) на пути времени с двухчастной юлианской датой | UTC с 1960-01-01 по 1971-12-31, когда UTC шло со смещением скорости относительно TAI и корректировалось долями секунды, на пути с двухчастной юлианской датой: TAI - UTC по таблице дрейфа каждого периода (timescales::tai_minus_utc_on_date), календарная дата UTC в двухчастную юлианскую дату UTC с длиной суток 86 400 с + dleap (Jd2::from_utc_calendar), UTC в TAI с долей суток, масштабированной от UTC к секундам СИ (jd2::utc_to_tai), и TAI обратно в UTC (jd2::tai_to_utc), по SOFA dtf2d, utctai и taiutc. До 1960 года TAI - UTC принимается равным 0 (значение SOFA; UTC не определено) и находится вне заявления. Однократная timescales::tai_minus_utc в f64 по-прежнему ограничивает значение 10 с до 1972 года и не охвачена | timescales (tai_minus_utc_on_date); jd2 (Jd2::from_utc_calendar, utc_to_tai, tai_to_utc) | tests/jd2_pre1972_sofa_oracle.rs::pre_1972_utc_conversions_agree_with_erfa (117 моментов UTC: по четыре около каждого из 15 начал выражения TAI-UTC 1960-1972 и 60 случайных с фиксированным seed в 1960-1971; dtf2d, utctai и taiutc каждая в пределах 1e-6 s, наихудшее 2.9e-11 s); tests/jd2_pre1972_sofa_oracle.rs::post_1972_results_are_bit_identical (224 моментов строки 1972+ не изменились ни на бит) | pyerfa 2.0.1.5 (liberfa 2.0.1, BSD-3-Clause; алгоритмы SOFA в выпуске проекта ERFA), независимая библиотека: erfa.dtf2d("UTC"), erfa.utctai и erfa.taiutc на зафиксированных моментах, разность образуется по частям. Предварительно зарегистрировано 23c40661 (моменты, допуск и контрольная сумма для 1972+) до изменения движка и до запуска эталона. Таблица дрейфа переписана из той же таблицы SOFA iauDat, которую использует эталон, поэтому сравнение охватывает арифметику преобразования (длина суток, масштабирование UTC в секунды СИ, итерации), а не саму историческую таблицу | VALIDATED |
| VM-3123f2d9 | Бортовые часы спутников ГЛОНАСС и распространение по бортовой орбите | Бортовое смещение часов спутника ГЛОНАСС -tau_n + gamma_n (t - t_b) в момент, отсчитываемый по часам спутника (glonass::GlonassEphemeris::sv_clock_bias_s, смещение, скорректированное на смещение часов двумя итерациями с неподвижной точкой), и положение вектора бортового состояния в связанной с Землёй системе ПЗ-90, распространённого методом RK4 по уравнениям движения из ICD ГЛОНАСС в пределах +/-15 мин от опорной эпохи (GlonassEphemeris::position_ecef), по реальным навигационным записям ГЛОНАСС RINEX 3. Преобразование ПЗ-90.11 в ITRF не применяется (они согласуются на сантиметровом уровне с 2014 года; RTKLIB его тоже не применяет). В выходные данные сценария не подключено: библиотечная функция | glonass (GlonassEphemeris::sv_clock_bias_s, position_ecef, parse_glonass_nav) | tests/glonass_broadcast_rtklib_oracle.rs::glonass_broadcast_clock_and_orbit_match_rtklib (292 случая: 4 записи GLONASS из реального вещательного файла IGS MGEX за 2013-01-01 x 73 смещения в пределах +/-900 s; часы в пределах 1e-14 s, наихудшее 0 s; положение в пределах 0,01 m, наихудшее 1.12e-3 m) | RTKLIB v2.4.2-p13 (T. Takasu, BSD-2-Clause, коммит 71db0ffa) geph2clk и geph2pos, скомпилированные из исходного кода на C в отдельном стенде (xval/rtklib-glonass), который читает тот же файл RINEX собственным читателем RTKLIB, поэтому сравниваются также разбор, знак -tau_n, единицы и итерации, а не только часы и орбита. Предварительно зарегистрировано e099c42a до появления функции и до сборки стенда. Обе стороны вычисляют одну и ту же замкнутую форму часов, поэтому сравнение часов охватывает реализацию, а не формулу. Интеграторы орбиты различаются (RTKLIB шагает по 60 с, затем остаток, Kshana равными шагами не более 60 с), как и константы (RTKLIB mu 3.9860044e14, Kshana ПЗ-90.11 3.986004418e14); наихудший случай 1,1 мм — это именно эта разница, как предсказано до прогона. Область: бортовые эфемериды в пределах интервала действия, а не истинная орбита или истинные часы (сравнения с прецизионными продуктами нет) | VALIDATED |
| VM-b4e008a0 | Единый путь околоземной орбиты: наборы элементов SGP4 в GCRS и ITRS по цепочке IAU 2006/2000A с параметрами ориентации Земли | Путь распространения и систем координат, общий для каждого маршрутизируемого вида околоземной орбиты: набор средних элементов SGP4 с двухчастной эпохой UTC (sgp4::MeanElementSet, читается из элементов проектирования орбитальной группировки через MeanElementSet::from_earth_fixed), распространяемый SGP4/SDP4 в TEME (sgp4::SgpOrbit), и повороты TEME → ITRS и GCRS → ITRS цепочки IAU 2006/2000A с UT1 - UTC и движением полюса (sgp4::teme_to_itrs_matrix_eop, gcrs_to_itrs_matrix_eop, формы без параметров teme_to_itrs_matrix и gcrs_to_itrs_matrix). TEME — истинный экватор даты со средним равноденствием, достигаемый из GCRS через смещение и прецессию IAU 2006, нутацию IAU 2000B и уравнение равноденствий | sgp4 (MeanElementSet, SgpOrbit, Eop, teme_to_itrs_matrix_eop, gcrs_to_itrs_matrix_eop); jd2 (utc_to_ut1, earth_rotation_angle); nutation (teme_to_gcrs_matrix); cio (gcrs_to_cirs_matrix); frames (polar_motion_matrix) | tests/earth_orbit_path_sgp4_erfa_oracle.rs (участок 1: 4432 положения TEME из 232 зафиксированных наборов элементов в сравнении с python-sgp4 2,24, наихудшее 6.1e-8 m, порог 1 cm; участок 2: 108 моментов, 23 из них с параметрами ориентации Земли и один в последнюю секунду суток с високосной секундой, в сравнении с ERFA: GCRS -> ITRS наихудшее 2.9e-6 mas, порог 0,1 mas; TEME -> ITRS наихудшее 0,41 mas, порог 2 mas); sgp4::tests (the_itrs_path_matches_the_orbit_module_iau_chain; an_earth_fixed_node_stays_at_its_longitude_at_the_epoch); tests/no_private_models.rs | Ветвь 1: python-sgp4 2,24 (лицензия MIT; эталонный SGP4 на C++ от D. Vallado, код, породивший проверочные векторы AIAA 2006-6753), WGS-72, улучшенный режим. Ветвь 2: pyerfa 2.0.1.5 (ERFA, BSD-3-Clause, подпрограммы SOFA): c2t06a с TT из utctai/taitt и UT1 из utcut1, а для TEME c2t06a . pnm06a^T . rz(-ee06a). Пороги заданы до прогона (предварительно зарегистрировано 72ea9eb0). Раскрыто: первый прогон не прошёл ветвь 2 в 2016-12-31T23:59:59,5 на одну секунду вращения (UT1 бралось из квазиюлианской даты UTC в день с високосной секундой); движок исправлен (jd2::utc_to_ut1), и второй прогон согласуется при неизменных порогах. Если отбросить движение полюса (46 сбоев) или взять константы WGS-84 вместо WGS-72 (4432 сбоев), тест краснеет. Эта трёхветвевая схема заменила сквозное сравнение с Orekit, которое не прошло на SDP4 Orekit при e = 0 и на его TEME по IERS 1996 (находка остаётся зафиксированной в tests/leo_polar_coverage_full_claim_orekit_oracle.rs) | VALIDATED |
| VM-faf6c34f | Компромисс при проектировании дальномерного кода | Границы боковых лепестков и взаимной корреляции m-последовательностей и кодов Голда, длина↔неоднозначность | navsignal (CodeFamily) | navsignal::code_tests (GPS C/A Gold ≈ −23,9 dB; φ(1023)/10 = 60) | Опубликованная взаимная корреляция кодов Голда GPS C/A (−23,9 дБ); граница Голда 1967 года | VALIDATED |
| VM-bb79da35 | Геометрия GNSS / геометрический фактор DOP (ухудшение точности) | GDOP/PDOP/HDOP/VDOP/TDOP по геометрии линий визирования через Q=(HᵀH)⁻¹ с локальным разложением ENU | orbit (dop) | tests/dop_reference.rs (8 геометрий, от хорошо обусловленных до почти вырожденных) | DOP из gnss_lib_py 1.0.4 (Stanford NAV Lab) — независимая библиотека, совпадение до 1e-6 относительно | VALIDATED |
| VM-a0ea0d9f | Ошибка положения из геометрии: СКО ошибки = sigma_UERE x DOP для решения движка по методу наименьших квадратов | dop_error_mc::run_geometry и check: Монте-Карло с фиксированным начальным значением (N = 20 000 эпох на геометрию, sigma = 1,5 м, ChaCha8 seed 36 + i) собственного итерационного решения движка по методу наименьших квадратов (pvt::solve_spp, единичные веса, решается от истинного положения) на 8 геометриях из tests/fixtures/dop/dop_reference.csv, с сравнением дисперсий ошибок по востоку, северу, высоте и часам, СКО H/V/P, корреляции восток–север, средних ошибок и доли внутри 95 %-го горизонтального эллипса с sigma^2 Q, где Q — множитель ковариации ядра orbit::dop (orbit::dop_cofactor, та же арифметика) на той же геометрии | dop_error_mc (run_geometry, check, TOLERANCES); dop_error_ci (run, GEOMETRIES); orbit (dop, dop_cofactor); pvt (solve_spp) | tests/uere_dop_monte_carlo.rs (position_error_is_sigma_times_dop_on_the_gnss_lib_py_geometries: все 104 проверки пройдены при первом прогоне после предварительной регистрации e50c88d2, наихудшая дисперсия 3,2 %, СКО 1,6 %, корреляция 0,012, среднее 2,2 стандартной ошибки, доля эллипса 0,0039; negative_control_a_doubled_pdop_fails_every_geometry; negative_control_elevation_dependent_errors_fail_the_low_elevation_geometries: оба контроля не проходят, как и требуется; position_error_is_sigma_times_dop_on_masked_skies: две геометрии с маскированным горизонтом из примечания к проекту, небо 10sat-mixed под пресетами городской улицы (4 спутника, PDOP 16,6) и контейнерного терминала (9 спутников, PDOP 2,5), все 26 проверок пройдены при первом прогоне после предварительной регистрации 03999c11, tests/fixtures/dop/PREREGISTRATION-MASKED.md); tests/position_error_dop_ci.rs (первая, отдельная проверка на четырёх выбранных вручную небесах (открытое, сгруппированное, каньон, полнеба; сигма 1 м, начальное значение 0x0D0B5EED) с доверительными интервалами хи-квадрат при суммарном уровне 1e-6 на 20 проверок: отношения от 0,987 до 1,009, собственные PDOP/GDOP решателя равны значениям ядра с точностью 2.5e-12, и отрицательные контроли для ошибки DOP в 10 % и ошибок вида 1/sin(угол места); выполнено до предварительной регистрации, поэтому приведено как результат, а не как предварительно зарегистрированное); dop_error_mc::tests; dop_error_ci::tests | Внутренняя согласованность с замкнутой формой: при линейной гауссовой модели ковариация метода наименьших квадратов равна sigma^2 (H^T H)^-1 (Kaplan and Hegarty (eds.), Understanding GPS: Principles and Applications, 2nd ed., Artech House, 2006, гл. 7). Метод и допуски из проектной записки по геометрии 0,36, раздел 5,2, зафиксированы в коммите предварительной регистрации до первого прогона: каждая дисперсия в пределах 5 % (5 стандартных ошибок выборочной дисперсии при N = 20 000), каждое СКО в пределах 2,5 %, корреляция восток–север в пределах 0,035 (5/sqrt(N)), каждое среднее в пределах 5 стандартных ошибок, доля внутри 95 %-го эллипса в пределах 0,95 +/- 0,0077 (5 биномиальных стандартных ошибок); отрицательные контроли (удвоенный PDOP; ошибки, растущие как 1/sin(угол места), против невзвешенной Q) должны не проходить. КАК ЭТО СКЛАДЫВАЕТСЯ: Q — множитель ковариации ядра orbit::dop, VALIDATED по gnss_lib_py 1.0.4 на тех же 8 геометриях в tests/dop_reference.rs (строка «Геометрия GNSS / геометрический фактор DOP»); эта строка добавляет переход от этих множителей к метрам через решатель движка и не заимствует статус той строки. ПОЧЕМУ MODELLED: внешние наборы данных не задействованы; согласие показывает, что оценщик и шум реализуют sigma x DOP в рамках учебной модели, а не что ошибка какого-либо приёмника равна UERE x DOP, и sigma_UERE является входным параметром | MODELLED |
| VM-f7f6e62d | Классификация доверия с учётом геометрии: геометрия спутников рядом с оценкой доверия к приёмнику и класс для каждого вычета | receiver_trust::geometry: геометрия спутников для каждой эпохи (хорошая, ухудшенная с причинами few-satellites/high-pdop/high-hdop/sky-blocked или неизвестная, когда журнал не содержит GSV, NAV-SAT или GSA), выведенная из сообщённых углов места и азимутов через orbit::dop или взятая из GSA, с меткой, которая всегда сообщается и никогда не оценивается (good, fair, poor, unknown), и словесным описанием HDOP, PDOP, VDOP, числа спутников и потери сигнала; монитор геометрии в оценке судна, который ничего не вычитает, пока геометрия не станет плохой (отношение max(hdop/4, pdop/6, 5/n_used) выше 1), затем линейно нарастает до предела в 15 баллов при 1,5, и одна геометрия не может опустить оценку ниже ухудшенной полосы (предел, конец нарастания и нижняя граница в [geometry]; без тревоги); класс для каждого вычета (geometry, environment, inconsistency): потеря захвата у спутников ниже 15 град относится к классу geometry, спутники в зоне видимости, но не отслеживаемые, — к классу environment, а вычет за плохую геометрию, у которого заявленный HDOP выходит за пределы max(1,0, 25 % от выведенного HDOP) относительно заявленного неба, — к классу inconsistency | receiver_trust (geometry: GeometryTracker, geometry_ratio, sky_ratio, geometry_points, GeometryLabel; score: DeductionClass, score_with; monitors; live); telemetry (sample, prometheus, syslog, otlp) | tests/natural_degradation_trust.rs (a_stated_skyline_reads_the_fjord_as_geometry: на синтетическом проходе по фьорду из scenarios/training/fjord-natural-degradation.toml одни и те же 624 эпохи вычитаются с заданным [skyline] и без него; с ним sky-blocked сообщается на 680 эпохах (0 без него: запасной вариант по разрыву азимута ничего не видит в двустороннем фьорде), open_fraction равна 0,758, а эпохи класса окружения сокращаются с 78 до 33, остальное — потери спутников, которых заданный горизонт оставляет на открытом месте; вне события горизонт не меняет ни одной оценки); receiver_trust::geometry::tests (выведенные вручную отношения на порогах, границы порогов, нарастание и ограничение, нижний предел, границы меток, переопределения [geometry], DOP на проверенном ядре, удерживаемые и устаревшие небеса, неизвестное не угадывается, потеря сигнала, допуск на плохую геометрию, сигнальные значения отсутствия решения); tests/geometry_trust.rs (приемлемое маскированное небо помечено и не оценивается, плохое маскированное небо, потеря на малом угле места, падение мощности, подделанный HDOP, полная потеря сигнала, увод во время плохой геометрии, неизвестная геометрия, переопределения сеанса, схема live); tests/geometry_trust_no_change.rs (обе примерные сессии побитно идентичны 0.35.0 после удаления добавленных ключей); tests/geometry_corpus_identity.rs (каждый зафиксированный корпус NMEA судов, в том числе как открытое небо только GPS, и сценарии тренировки экипажа: побитно идентичны 0.35.0, кроме плохих эпох, которые отличаются только вычетом за геометрию) | Внутренняя согласованность: классификация проверяется по заявленным ею правилам и по вручную выведенным отношениям на синтетических правках зафиксированного демонстрационного журнала, а контрольные фиксации отсутствия изменений удерживают результаты 0.35.0: ни одна оценка не меняется, пока геометрия не станет плохой; метка сообщается всегда. ПОЧЕМУ MODELLED: пороги выбраны, а не подогнаны (происхождение в geometry_model каждого прогона; значения IEC 61108-1 и GPS SPS приведены как процитированные и подлежат сверке с текстом стандартов), и нет внешнего размеченного набора данных о естественном ухудшении геометрии в сравнении с атаками, по которому можно проверить классификацию. Выведенный DOP использует ядро orbit::dop, VALIDATED по gnss_lib_py, статус которого эта строка не заимствует. Класс геометрии — это утверждение о небе, а не вывод о том, что атаки не было | MODELLED |
| VM-b59d517d | Бортовая модель ионосферы (Klobuchar, IS-GPS-200) | Групповая задержка в ионосфере Klobuchar для одночастотного L1 вдоль наклонной трассы по восьми бортовым коэффициентам α/β | gnss_sim (klobuchar_delay_m) | tests/klobuchar_reference.rs (10 случаев по возвышению/азимуту/местному времени, два набора коэффициентов) | RTKLIB ionmodel (tomojitakasu/RTKLIB, src/rtkcmn.c) — независимая эталонная реализация, скомпилированная из исходного кода; совпадение до < 1e-4 м | VALIDATED |
| VM-1e6c81a8 | Статистическое ядро целостности RAIM/ARAIM (законы χ² / нецентральный χ² / нормальный) | Распределительная основа, на которой держится каждый уровень защиты: порог обнаружения отказа по снимку χ²₁₋ₚfₐ(dof), нецентральность пропуска обнаружения pbias=√λ и множители K_fa/K_md/K_V разделения решений | raim (chi2_cdf, chi2_quantile, noncentral_chi2_cdf, normal_cdf, normal_quantile, pbias) | tests/raim_reference.rs (171 случай: функция распределения и квантиль χ², функция распределения и квантиль нормального распределения, функция распределения нецентрального χ², pbias по диапазонам P_fa/P_md/избыточности) | SciPy 1.17.0 (scipy.stats.chi2/.norm/.ncx2 + optimize.brentq) — независимая библиотека (Cephes/Boost), иной алгоритм, чем ряд неполной гамма-функции в Kshana; совпадение с относительной точностью ≤1e-6. Только ядро. Распределение бюджета P_HMI в ARAIM MHSS больше не остаётся без опубликованного числового оракула — собственный разобранный пример Технической подгруппы ARAIM WG-C теперь подкрепляет отдельную строку «Уровни защиты ARAIM MHSS в сравнении с опубликованными эталонными векторами», совпадение при собственном эталонном TOL_PL = 5e-2 m, — поэтому область этой строки — статистическое ядро, а распределение несёт та строка (см. docs/ARAIM_REFERENCE.md) | VALIDATED |
| VM-b9fd9dfe | Уровень защиты SBAS (HPL/VPL по DO-229E, взвешенный метод наименьших квадратов) | Уровни защиты по DO-229E, приложение J, взвешенным методом наименьших квадратов: D=(GᵀWG)⁻¹ по углу места и азимуту каждого спутника и бюджету ошибок, большая полуось горизонтального эллипса ошибок и вертикальное σ, масштабированные опубликованными коэффициентами K | sbas (sbas_protection_level) | tests/sbas_reference.rs (6 реальных эпох EGNOS: HPL сопоставлен напрямую, вертикальное d_U проверено без K-коэффициента) | Ответвление RTKLIB для SBAS-PL — zsiki/rtklib_ws waasprotlevels() (Siki & Takács 2017, «DO-229D Appendix J»), запущенное rnx2rtkp -ws на реальных сообщениях EGNOS GEO-PRN120 и реальном RINEX BUTE/Будапешт; независимая сторонняя реализация, HPL совпадает до < 2e-3 м. gLAB v6.0.0 (core/filter.c) подтвердил идентичное соглашение. Оба эталона округляют K_V→5,33, тогда как у Kshana точное Φ⁻¹(1−5e-8)=5,3267 (~0,06%), поэтому вертикаль проверяется как свободная от коэффициента K величина d_U | VALIDATED |
| VM-216727c9 | Метрики оценки ML-детекторов (ROC/AUC/матрица ошибок/Pfa-Pmd) | AUC (Манна–Уитни, совпадения ½), матрица ошибок при пороге, P_d/P_md/P_fa/точность (precision)/доля верных ответов (accuracy)/F1 | impairment_eval (auc, confusion_at, roc_curve) | tests/eval_metrics_reference.rs (5 наборов данных, 24 порогов; точные счётчики + <1e-9) | scikit-learn 1.9.0 (Pedregosa et al., JMLR 2011) — независимая библиотека, точное совпадение | VALIDATED |
| VM-24e0303a | Оценка обнаружения аномалий на реальной телеметрии космических аппаратов | ROC AUC + бутстрэп-доверительный интервал, разделяющий реальные размеченные аномалии; прозрачный детектор (воспроизводит разметку) | impairment_eval, eval_stats | tests/opssat_ad_reference.rs (реальные данные ESA OPS-SAT, AUC воспроизводит scikit-learn с точностью 1e-9); tests/ai_ml_rf_impairment_detection_evaluation_reference.rs (122 случая на реальной тестовой выборке OPSSAT-AD: полная матрица ошибок в рабочей точке + Pd/Pfa/точность/F1 в сравнении со scikit-learn, точно по целым числам) | scikit-learn roc_auc_score на тестовой части OPSSAT-AD (Ruszczak et al. 2025, CC BY 4,0) — реальная телеметрия OPS-SAT | VALIDATED |
| VM-4fd47e51 | Численные ядра квантового компромисса (NNLS / полосы χ² / Q по Ван Лоану) | Подгонка измеренной ADEV методом NNLS, полосы согласованности χ² для NEES/NIS и дискретная ковариация шума процесса часов по Ван Лоану (инерционный выбег в holdover) — вычислительный хребет движка компромиссов | quantum_trade (qparams_from_adev_curve), detection (chi2_inv_cdf), clock_state (ClockState3) | tests/scipy_reference.rs (NNLS; χ² при рабочих степенях свободы ≥ 48; Q по ван Лоану) | scipy 1.17.1 — optimize.nnls / stats.chi2.ppf / linalg.expm; NNLS+Q точно, χ² <5e-4 при рабочем dof. Только ядра — показатели характеристик устройств остаются Modelled (следующая строка) | VALIDATED |
| VM-611e3164 | Геомагнитное эталонное поле (синтез IGRF-14) | Синтез основного поля IGRF-14 в сферических гармониках — компоненты X/Y/Z/F, склонение и наклонение — для слоя альтернативного PNT по магнитным аномалиям | igrf, igrf_data | tests/alternative_complementary_pnt_reference.rs (2520 глобальных точек × высот в сравнении с ppigrf на эпоху 2025,0; наихудшие |ΔXYZF| 3.9e-4 nT, |ΔD| 2.8e-6°, |ΔI| 3.6e-7°) | ppigrf 2.1.0 (K. M. Laundal, MIT) — эталонная реализация IGRF на чистом Python от IAGA-VMOD, поставляемая с официальными коэффициентами IGRF14.shc (IAGA 14-го поколения, Zenodo 10.5281/zenodo.14012302); независимая сторонняя кодовая база, вычисляющая однозначно определённое поле IGRF-14, совпадение на глобальной сетке | VALIDATED |
| VM-b4802fbd | Статистики обнаружения — гауссова AUC и минимально обнаруживаемый отказ | Аналитическая бинормальная ROC AUC = Φ(μ/(σ√2)) и минимально обнаруживаемый отказ σ·(Φ⁻¹(1−P_fa)+Φ⁻¹(P_d)), лежащие в основе квантовых детекторов отказов и детекторов аномалий | quantum_faults, eval_stats, detection | tests/quantum_faults_reference.rs (109 случаев в сравнении со scipy 1,17 norm.cdf/ppf + scikit-learn roc_auc_score; наихудшие |Δ| AUC 6.9e-8, минимально обнаружимая неисправность 1.3e-8, эмпирический AUC 1.1e-16) | scipy 1,17 (Cephes ndtr/ndtri) + scikit-learn roc_auc_score (Pedregosa et al., JMLR 2011), обе BSD-3-Clause — независимые библиотеки, вычисляющие те же однозначно определённые величины гауссова хвоста и AUC, совпадение до порога функции ошибок A&S (~7e-8). Квантовое преимущество над классическим, построенное поверх, остаётся MODELLED | VALIDATED |
| VM-9219a1de | Ядро ранговых статистик (τ Кендалла / Дирихле / процентиль) | Ядра ранговой корреляции и передискретизации в исследовании нестабильности решений об устойчивости: τ-b Кендалла, среднее Дирихле, ранжирование соревновательного типа и доверительные интервалы по процентилям | resilience::stats | tests/resilience_score_decision_instability_reference.rs (124 случая в сравнении со scipy 1,18 / numpy 2,4: 61 τ-b Кендалла с точностью 2e-16, ранжирование точно, среднее Дирихле + процентильный ДИ с точностью 1e-12) | scipy 1,18 (stats.kendalltau variant='b', rankdata) + numpy.percentile (BSD-3-Clause) — независимые реализации (τ сортировкой слиянием) однозначно определённых ранговых статистик, совпадение до 1e-12. Исследование нестабильности решений, построенное на этих ядрах, остаётся MODELLED | VALIDATED |
| VM-00275839 | Ядро вывода приоритетов MCDA (собственный вектор AHP / коэффициент согласованности) | Веса приоритетов метода анализа иерархий = нормированный главный (Перрона) собственный вектор обратносимметричной матрицы парных сравнений методом степенных итераций, с индексом согласованности (Consistency Index) и коэффициентом согласованности (Consistency Ratio) по Саати и порогом приёмки CR<0,10 | mcda::ahp | tests/mcda_ahp_reference.rs (таблица случайных индексов Саати 1980 для n=1..10 ТОЧНО; вектор приоритетов + λ_max + CR в сравнении с SciPy/LAPACK eig на согласованной 3×3 и несогласованных 3×3 / 4×4, совпадение с точностью <1e-9) | Каноническая таблица случайного индекса Саати (1980) (RI(5)=1,12) воспроизведена точно + SciPy/LAPACK scipy.linalg.eig (BSD-3-Clause) как независимый решатель собственных значений, вычисляющий тот же однозначно определённый собственный вектор/значение Перрона, совпадение до <1e-9. Слой решений Парето / чувствительности / MAUT, построенный на этом ядре, остаётся MODELLED (агрегаторы WSM/WPM/TOPSIS/VIKOR/PROMETHEE/ELECTRE проверены внешне отдельно — см. строки ниже) | VALIDATED |
| VM-684c550a | Ядра взвешенной агрегации MCDA (WSM / WPM) | Модель взвешенной суммы (аддитивный агрегат с min–max-нормировкой + ранжирование) и модель взвешенного произведения (мультипликативный агрегат с нормировкой на сумму и обратной величиной для затрат) — два оценщика значений агрегации для компромиссных исследований | mcda::wsm, mcda::wpm | tests/mcda_wsm_reference.rs (оценки WSM + ранжирование) и tests/mcda_wpm_reference.rs (оценки WPM + ранжирование), каждый в сравнении с pymcdm с точностью <1e-9 на фиксированной матрице решений 4×3 с критериями выгоды/затрат | pymcdm (methods.WSM + normalizations.minmax_normalization; methods.WPM + normalizations.sum_normalization) — независимая, широко используемая сторонняя библиотека MCDA на Python, вычисляющая те же однозначно определённые взвешенные агрегаты; совпадение до <1e-9. Воспроизводится офлайн через tests/fixtures/mcda_wsm/ и tests/fixtures/mcda_wpm/. На входе «мусор — на выходе мусор»; слой чувствительности и робастности остаётся MODELLED | VALIDATED |
| VM-cbf34b8e | Ранжирование MCDA по расстоянию до идеала (TOPSIS) | Technique for Order of Preference by Similarity to Ideal Solution — min–max-нормировка, взвешенные положительное и отрицательное идеальные решения, относительная близость Cᵢ = d⁻/(d⁺+d⁻) и ранжирование | mcda::topsis | tests/mcda_topsis_reference.rs (коэффициенты близости + ранжирование в сравнении с pymcdm с точностью <1e-9 на фиксированной матрице 4×3 с критериями выгоды/затрат) | pymcdm methods.TOPSIS + normalizations.minmax_normalization — независимая сторонняя библиотека MCDA, вычисляющая те же однозначно определённые коэффициенты близости; совпадение до <1e-9. Воспроизводится офлайн через tests/fixtures/mcda_topsis/generate_topsis_reference.py | VALIDATED |
| VM-8b3572d6 | Компромиссное ранжирование MCDA (VIKOR) | VlseKriterijumska Optimizacija — групповая полезность Sᵢ, индивидуальное сожаление Rᵢ и компромиссный индекс Qᵢ при весе стратегии v=0,5, с ранжированием «меньше — лучше» | mcda::vikor | tests/mcda_vikor_reference.rs (индекс Q + ранжирование в сравнении с pymcdm с точностью <1e-9 на фиксированной матрице 4×3 с критериями выгоды/затрат) | pymcdm methods.VIKOR(v=0,5) — независимая сторонняя библиотека MCDA, вычисляющая ту же однозначно определённую агрегацию S/R/Q с нормировкой по диапазону; совпадение до <1e-9. Воспроизводится офлайн через tests/fixtures/mcda_vikor/generate_vikor_reference.py | VALIDATED |
| VM-2fe3fe0b | Ранжирование MCDA по чистому потоку превосходства (PROMETHEE II) | Preference Ranking Organization METHod — индекс парных предпочтений с шестью стандартными формами обобщённого критерия, положительные и отрицательные потоки превосходства и полное ранжирование по чистому потоку (обычный критерий проверен) | mcda::promethee | tests/mcda_promethee_reference.rs (чистый поток превосходства + ранжирование, обычный критерий, в сравнении с pymcdm с точностью <1e-9 на фиксированной матрице 4×3 с критериями выгоды/затрат) | pymcdm methods.PROMETHEE_II('usual') — независимая сторонняя библиотека MCDA, вычисляющая тот же однозначно определённый чистый поток превосходства; совпадение до <1e-9. Воспроизводится офлайн через tests/fixtures/mcda_promethee/generate_promethee_reference.py. Формы предпочтения с порогами (q/p/σ) сводятся к той же алгебре обобщённого критерия и остаются проверенными по свойствам | VALIDATED |
| VM-ce013b59 | Ядро выбора по превосходству MCDA (ELECTRE I) | ELimination Et Choix Traduisant la REalité — матрицы согласия и несогласия, отношение доминирования по согласию без вето и ядро выбора по превосходству (соглашение: все критерии на максимум, веса нормированы на сумму, единая глобальная шкала) | mcda::electre | tests/mcda_electre_reference.rs (матрицы согласия, несогласия и доминирования поэлементно + ядро/множество доминируемых в сравнении с pyDecision с точностью <1e-9 на фиксированном наборе данных 4×3 только с критериями выгоды) | pyDecision algorithm.electre_i (Valdecy Pereira) — независимая сторонняя библиотека многокритериальных решений, вычисляющая те же однозначно определённые согласие/несогласие/доминирование/ядро; совпадение поэлементно до <1e-9. Воспроизводится офлайн через tests/fixtures/mcda_electre/generate_electre_reference.py. Выбор порогов ĉ/d̂ — входные данные аналитика (чувствительность остаётся MODELLED) | VALIDATED |
| VM-9adfd44f | Ядра агрегации MCDA (WASPAS / MOORA) | Weighted Aggregated Sum Product ASSessment (выпуклая смесь с линейной нормировкой λ·WSM+(1−λ)·WPM при λ=0,5) и система отношений MOORA (взвешенная сумма выгод с векторной нормировкой минус взвешенная сумма затрат) — смесь значений с повышенной устойчивостью и знаковый оценщик системы отношений | mcda::waspas, mcda::moora | tests/mcda_waspas_reference.rs (предпочтения WASPAS + ранжирование) и tests/mcda_moora_reference.rs (оценки MOORA + ранжирование), каждый в сравнении с pymcdm с точностью <1e-9 на фиксированной матрице решений 4×3 с критериями выгоды/затрат | pymcdm (methods.WASPAS + normalizations.linear_normalization, l=0,5; методы MOORA, система отношений, векторная нормировка) — независимая, широко используемая сторонняя библиотека MCDA на Python, вычисляющая те же однозначно определённые агрегаты; совпадение до <1e-9. Воспроизводится офлайн через tests/fixtures/mcda_waspas/ и tests/fixtures/mcda_moora/. На входе «мусор — на выходе мусор»; слой чувствительности и робастности остаётся MODELLED | VALIDATED |
| VM-c106eee9 | Пропорциональное ранжирование MCDA (COPRAS) | COmplex PRoportional ASsessment — значимость выгод S⁺ с нормировкой на сумму столбца плюс член значимости обратных затрат, относительная значимость Q и степень полезности U = Q/max Q (лучшая альтернатива = 1) | mcda::copras | tests/mcda_copras_reference.rs (степени полезности + ранжирование в сравнении с pyDecision с точностью <1e-9 на фиксированной матрице 4×3 с критериями выгоды/затрат) | pyDecision algorithm.copras_method (Valdecy Pereira) — независимая сторонняя библиотека MCDA, вычисляющая ту же однозначно определённую относительную значимость/полезность COPRAS. pyDecision выбрана намеренно: COPRAS в pymcdm 1.4.0 алгебраически вырождается в тривиальное S⁺+S⁻ и не является верным эталоном, тогда как pyDecision реализует каноническое Q = S⁺+(min(S⁻)·ΣS⁻)/(S⁻·Σ(min(S⁻)/S⁻)). Совпадение до <1e-9; воспроизводится офлайн через tests/fixtures/mcda_copras/generate_copras_reference.py | VALIDATED |
| VM-d952e366 | Задержка обнаружения изменений и ARL для CUSUM | Наихудшая задержка обнаружения табличного детектора CUSUM (⌊h/(z−k)⌋+1) и средняя длина серии вне контроля, используемые мониторами уровня защиты времени и спуфинга | tpl (Cusum), security | tests/timing_protection_level_under_spoofing_reference.rs (16 случаев детерминированной задержки ТОЧНО в сравнении с оракулом первого прохождения; 8 случаев ARL₁, Монте-Карло @60k испытаний в сравнении с аппроксимацией Зигмунда + опубликованными таблицами Монтгомери) | Опубликованная ARL табличного CUSUM: броуновское приближение Зигмунда (1985) (Hawkins & Olwell 1998, ур. 3,7), перекрёстно привязанное к таблицам ARL из Montgomery, Introduction to Statistical Quality Control (Wiley) для k=½, h∈{4 5}; детерминированная задержка совпадает точно с эталоном первого прохождения. Составная граница TPL остаётся MODELLED | VALIDATED |
| VM-3376197e | Дисперсия выбега часов в holdover и обращение порога | Рост дисперсии фазовой ошибки при выбеге q_wf·t + q_rw·t³/3 + q_drift·t⁵/20 и её монотонное обращение в порог holdover по ошибке времени | holdover (coast_phase_variance, holdover_seconds) | tests/gnss_denied_clock_holdover_reference.rs (27 случаев в сравнении со scipy 1,18: 12 дисперсий выбега в сравнении с linalg.expm Q₀₀ по ван Лоану, наихудшая относительная 1.1e-15; 7 инверсий holdover в сравнении с optimize.brentq, наихудшая относительная 1.5e-16) | scipy 1,18 (BSD-3-Clause): linalg.expm, вычисляющая дискретный шум процесса по Ван Лоану (1978) Q₀₀ = ∫₀ᵗ ΦQcΦᵀds методом масштабирования и возведения в квадрат с аппроксимацией Паде на расширенной матрице 6×6 — независимый путь, который никогда не видит полиномиальных коэффициентов kshana; а также optimize.brentq, обращающая ту же монотонную кривую в сравнении с бисекцией kshana. Показатели уровня красного шума по классам (ClockClass) остаются MODELLED | VALIDATED |
| VM-ea398366 | Ядро разнообразия по обратному индексу Симпсона | Эффективное архитектурное разнообразие = обратный индекс Симпсона / число Хилла порядка 2, 1/Σpᵢ², по качествам источников в группах независимости (член разнообразия в оценке устойчивости) | resilience::diversity (effective_diversity) | tests/resilience_diversity_reference.rs (17 случаев: 14 в сравнении со scikit-bio inv_simpson + 3 закреплённых граничных нулевых; наихудшее |Δ| 0,0) | scikit-bio 0.7.3 skbio.diversity.alpha.inv_simpson (McDonald et al., BSD-3-Clause) — независимая сторонняя библиотека, вычисляющая однозначно определённый обратный индекс Симпсона; воспроизведено байт в байт. Система оценки DHS-RPCF (веса/уровни), построенная поверх, остаётся MODELLED | VALIDATED |
| VM-73e30b65 | Маска линии горизонта, зависящая от азимута: видимое множество, азимут и угол места, и DOP под маской | skyline + frames::look_angles + geometry::sky_geometry: геодезические (WGS-84) азимут и угол места спутника с наземной точки, таблица маски по азимуту и углу места с линейной интерполяцией по азимуту и замыканием на 360 град, видимое множество el >= max(mask_deg, mask(az)) и DOP с общими часами и матрица кофакторов ENU и часов этого множества (ядро, лежащее в основе orbit::dop). Так раздел [skyline] определяет видимость в видах gnss-sim, jamming, leo-pvt, leo-pass и nmea-scenario и, с наземной точкой user_site, в orbit и integrity | skyline (Skyline::cut_deg, Skyline::visible); frames (look_angles, is_visible_skyline); orbit (UserPath, sky_view, cofactor_from_los); geometry (sky_geometry) | tests/skyline_orekit_oracle.rs (skyline_masks_agree_with_orekit_and_gnss_lib_py_as_pre_registered: 1173 углов наблюдения в шести пунктах и на четыре эпохи, шесть таблиц масок, 142 множества видимых; наихудшие |d el| 1.3e-13 deg и |d az| 2.3e-13 deg при пороге 1e-9, наихудшее |d mask| 1.1e-12 deg при пороге 1e-9, множества видимых идентичны, ни одно не попало в граничную полосу 1e-6 deg, наихудший DOP 3.3e-13 относительно и кофактор 6.6e-13 от масштаба матрицы при пороге 1e-9; предварительно зарегистрировано e4b9d912); skyline::tests (table_interpolates_linearly_between_rows; table_wraps_through_north_without_a_seam); tests/skyline_scenarios.rs (every_wired_scenario_is_byte_identical_to_the_0_35_0_release) | Orekit 12,2 (Apache-2.0): TopocentricFrame на WGS-84 OneAxisEllipsoid для углов обзора и ElevationMask для каждой таблицы, запущенные xval/orekit-skyline/OrekitSkyline.java на зафиксированных состояниях в земной системе координат (распространение не сравнивается), вместе с gnss_lib_py 1.0.4 (метаданные пакета: MIT) get_dop для DOP и матрицы DOP ENU и часов для множеств, которые Orekit считает видимыми. Предварительно зарегистрировано (xval/orekit-skyline/PREREGISTRATION.md, коммит e4b9d912) до запуска любого из эталонов на входных данных сравнения; линейная интерполяция Orekit с замыканием была заранее подтверждена на синтетическом зонде. Область: табличные маски, геодезические углы обзора, видимое множество под маской и его DOP с общими часами и кофактор. ЗДЕСЬ НЕ ПРОВЕРЕНО: сокращения для городского каньона, секторов и рельефа и предустановки (их 360-точечные таблицы поданы как входные данные; строки «Сокращение городского каньона, секторов и рельефа до таблицы» и «Предустановки линии горизонта»), состояния часов по системам и эллипс ошибок (строка «Горизонтальный эллипс ошибок и кофактор по системам из ковариации геометрии»), вращение GMST наземной точки user_site в orbit/integrity и привязка каждого пропагатора к одному моменту (Orekit получает состояния в земной системе координат), а также любое реальное препятствие (только прямая видимость) | VALIDATED |
| VM-9d83f008 | Сокращение городского каньона, секторов и рельефа до таблицы | skyline: городской каньон в замкнутой форме (срез atan((h - a) / d) при d = (w/2) / abs(sin(az - s)), открытые концы для конечной длины), секторы с резкими краями по часовой стрелке с замыканием и точки рельефа, сведённые к таблице с падением из-за кривизны d^2/(2 * 4/3 R); линия горизонта — их поточечный максимум с любой таблицей | skyline (Canyon::cut_deg, Sector::contains, TerrainPoint::elevation_deg, reduce_terrain, SkylineCfg::build) | skyline::tests (canyon_matches_hand_computed_wall_elevations; terrain_takes_the_curvature_drop; sectors_have_sharp_edges_and_wrap; a_preset_is_overridden_or_added_to_field_by_field; malformed_sections_are_refused) | Внутренняя проверка: замкнутые формы сверены со значениями, вычисленными вручную (углы места верхушек стен заданной улицы, условие открытого конца, падение из-за кривизны для заданной точки). Внешнего эталона нет: проектная записка относит эти сокращения к MODELLED, а ElevationMask в Orekit принимает таблицу, поэтому сравнение в строке «Маска линии горизонта, зависящая от азимута: видимое множество, азимут и угол места, и DOP под маской» читает их 360-точечные таблицы как входные данные и их не проверяет | MODELLED |
| VM-f409aed2 | Предустановки линии горизонта (городская улица, подход к гавани, фьорд, контейнерный терминал) | skyline::PRESETS: четыре REPRESENTATIVE геометрии с размерами, указанными в проектной записке, и строкой происхождения у каждой: city-street (каньон, улица 0 град, 20 м между стенами в 30 м, антенна 1,5 м), harbour-approach (секторы: открыто в сторону моря на 180 град, здания набережной 8 град на 90 град, волнолом 3 град), fjord (рельеф: стены на 600 м выше антенны на расстоянии 1,5 км по обе стороны канала север–юг, с учётом падения из-за кривизны), container-terminal (секторы: штабели 12 град над половиной со стороны суши, стрелы кранов 35 град и 25 град над двумя узкими секторами); переопределяются по полям | skyline (PRESETS, preset, preset_list) | skyline::tests (presets_carry_the_note_dimensions_and_provenance) | Нет: выбранные и заявленные размеры, а не обследование какой-либо улицы, порта, фьорда или терминала (отношение сторон улицы лежит в пределах полосы 0.5-2 по Oke (1988); фьорд соответствует порядку западнонорвежских фьордов; штабели используют высоту контейнеров high-cube по ISO 668). Тест сверяет предустановки с их собственными заявленными размерами, это проверка переписывания, которую правило валидации не засчитывает | MODELLED |
| VM-ea2e883b | Горизонтальный эллипс ошибок и кофактор по системам из ковариации геометрии | geometry::sky_geometry: кофактор ENU и часов (H^T H)^-1 с одними общими часами приёмника или с часами для каждой системы (ядро orbit::cofactor_from_los) и горизонтальный эллипс ошибок из его блока восток–север (полуоси k sigma sqrt(lambda), k = sqrt(-2 ln(1 - p)), азимут большой оси от севера) | geometry (sky_geometry, ellipse); orbit (cofactor_from_los) | tests/ellipse_numpy_oracle.rs (ellipse_and_cofactor_agree_with_numpy_as_pre_registered: 270 случаев, 142 зафиксированных множеств видимых из сравнения skyline при одних общих часах и при одних часах на систему; наихудшие ось 5.1e-13 относительно и ориентация 5.3e-12 deg, ни один не близок к круговому, кофактор 1.0e-12 от масштаба матрицы, при порогах 1e-9 и 1e-6 deg; предварительно зарегистрировано 0bbeeaee); geometry::tests (ellipse_of_an_analytic_two_by_two_case) | numpy 2.5.4 (BSD-3-Clause), xval/numpy-ellipse/ellipse.py: numpy.linalg.inv от G^T G и numpy.linalg.eigh от его горизонтального блока на зафиксированных входных данных, независимая численная библиотека, выполняющая обращение и разложение по собственным значениям собственными алгоритмами (стандарт P2). Предварительно зарегистрировано в xval/numpy-ellipse/PREREGISTRATION.md (коммит 0bbeeaee) до прогона; форматирование вывода драйвера было исправлено один раз после предварительной регистрации (скаляр numpy, записанный как np.float64(...)), без изменения протокола и допусков. Проверенное утверждение — линейная алгебра на этих входных данных; гауссова модель ошибок и UERE являются заданными входными данными, а не измеренной точностью и не границей целостности | VALIDATED |
| VM-2d7d6035 | Функции геометрии неба: видимость, DOP, ковариация, эллипс ошибок, облако Монте-Карло | geometry (sky_geometry, sky_monte_carlo, skyline_presets, skyline_profile, skyplot_svg; CLI kshana sky и kshana skyline, функции Python и WASM с теми же именами, MCP sky_geometry): по точке, времени и предустановкам орбитальной группировки (или по спутникам в виде азимута/угла места либо ECEF) — видимые и замаскированные линией горизонта спутники, GDOP/PDOP/HDOP/VDOP/TDOP, кофактор единичной дисперсии (H^T H)^-1 и ковариация в системе восток–север–вверх с одними часами приёмника на каждую систему или одними общими, горизонтальный эллипс ошибок (полуоси k sigma sqrt(lambda), k = sqrt(-2 ln(1 - p)), ориентация 0,5 atan2(2 Q_EN, Q_NN - Q_EE) от севера), а также n ошибок метода наименьших квадратов с фиксированным начальным значением при независимых гауссовых ошибках дальности с их эмпирической ковариацией, СКО и 95 %-м охватом. Кофактор — это orbit::cofactor_from_los, единственное ядро, лежащее в основе orbit::dop и orbit::dop_cov (dop — редукция dop_cov): второй реализации DOP нет |
geometry; orbit (cofactor_from_los, dop_cov, dop); surface (sky_geometry, sky_monte_carlo, skyline_presets, skyline_profile, skyplot_svg) | geometry::tests (ellipse_of_an_analytic_two_by_two_case; sky_geometry_equals_orbit_dop_on_the_same_visible_set; ecef_input_matches_azimuth_elevation_input; one_clock_per_system_adds_a_state_and_costs_geometry; monte_carlo_is_seeded_and_agrees_with_the_geometry; presets_propagate_and_are_seen_from_a_site); tests/dop_reference.rs (ядро для одних часов против gnss_lib_py) | Факторы DOP с одними часами опираются на ядро, проверенное по gnss_lib_py 1.0.4 (строка «Геометрия GNSS / геометрический фактор DOP (ухудшение точности)»); собственные проверки этой строки внутренние: sky_geometry воспроизводит orbit::dop и dop_cov на той же геометрии, эллипс воспроизводит аналитическое разложение 2x2 по собственным значениям, входные данные ECEF и азимут/угол места согласуются, а СКО и 95 %-й охват облака с фиксированным начальным значением согласуются с геометрией. Ковариация ENU с одними часами на систему и эллипс VALIDATED в строке «Горизонтальный эллипс ошибок и кофактор по системам из ковариации геометрии» (numpy, P2); здесь остаётся MODELLED композиция: распространение предустановок до показательного неба, облако Монте-Карло (сверяется с геометрией, из которой взята выборка, это проверка самосогласованности) и поверхности. Предустановки орбитальной группировки дают показательное небо, а не датированное; гауссова модель ошибок и UERE являются заданными входными данными, а не измеренной точностью и не границей целостности | MODELLED |
| VM-7a590be8 | Holdover часов без ГНСС | Рост ошибки выбега в замкнутой форме + holdover до порога; классы квантовых часов | holdover | holdover::tests (против многошаговой рекурсии ковариации фильтра Калмана; белый FM точно; круговой проход); ядро дисперсии выбега проверено извне в tests/gnss_denied_clock_holdover_reference.rs (против scipy Van-Loan/brentq) | Многошаговая рекурсия ковариации clock_state (перекрёстная проверка в той же кодовой базе); лежащее в основе ядро дисперсии выбега и обращения holdover проверено внешне по scipy (см. «Дисперсия выбега часов в holdover и обращение порога»). Показатели holdover по классам уровня красного шума остаются MODELLED | MODELLED |
| VM-4a6894e7 | Карточки измеренных устройств-часов (предсказание на отложенных данных) | clock_library: карточка устройства (белый фазовый шум, белый, фликкер и случайное блуждание ЧМ плюс линейный дрейф частоты), подогнанная к одной трети именованной измеренной записи часов после записанного в журнал прохода подготовки (удалены пропуски, выбросы фазы, скачки фазы, всплески; скачки частоты записаны в журнал), с весами по степеням свободы типов шума, определённым по лагу 1, и её предсказанная девиация Аллана, оцениваемая на отложенных двух третях; читатели файлов часов RINEX и IGS, файлов BIPM по лабораториям и раздела Circular T 1; преобразование карточки в модель шума временных слотов, расширенную модель часов для фильтра Калмана и уровни шума монитора спуфинга | clock_library (card, condition, series), realdata::clk, allan (lag1_noise_id) | tests/clock_library_device_cards_oracle.rs (gps_iif_cards_reproduce_the_recorded_finding; receiver_training_is_blocked_by_the_epoch_minimum; non_blind_cards_are_reported; предварительно зарегистрировано 2ec76864); clock_library::card::tests; clock_library::condition::tests; clock_library::series::tests; realdata::clk::tests; tests/clock_library_f9p_cards_oracle.rs (f9p_first_pipeline_reproduces_the_recorded_finding; f9p_corrected_pipeline_reproduces_the_recorded_finding; зависит от наличия данных) | Измеренные записи, отложенные: финальные комбинированные часы IGS с шагом 30 с для 11 спутников GPS Block IIF за 2026-03-01 — 14 (окно, которое ни один тест не открывал; IGS, открыто с указанием авторства) и приёмник JammerTest 2024 u-blox ZED-F9P в его неоцениваемых стационарных сеансах (GPL-3.0-or-later). Внешнее сравнение D9 (предварительно зарегистрировано 2ec76864, отношение предсказанной к измеренной девиации Аллана каждой карточки в пределах [1/1.5, 1,5] на её подогнанных временах усреднения), находка (остаётся MODELLED): 10 из 11 карточек GPS IIF укладываются в порог; G27 оптимистична на двухчасовом масштабе (0,662 при 7680 с, наихудший коэффициент 1,510), периодическая ошибка часового масштаба, которую степенная карточка не несёт. Карточка TCXO приёмника заблокирована: вне записанных в журнал передач остальные сеансы набора данных оставляют 167 эпох против требуемых 3600. Сообщено, не вслепую (записи, открытые более ранними строками): карточка цезиевых часов 5071A укладывается в порог (наихудшее 1,070 до 4096 с), карточка OCXO консервативна и выходит за порог (2,348 при 128 с; её уровень шума меняется в ходе записи), а карточка стронциевых часов Norcia, подогнанная по трём самым коротким опубликованным точкам, укладывается в него на двух оцениваемых точках (1,291, 1,405). Пассивные водородные мазеры Galileo (недоступен источник финальных часов Galileo без регистрации) и Deep Space Atomic Clock (одно открытое значение в космосе) заблокированы. D9, раунд 2, TCXO приёмника ZED-F9P как класс модели за 14 суток на 12 стационарных станциях Вроцлава (Zenodo 6488497, CC BY 4,0; предварительно зарегистрировано fb475550), находка: с зарегистрированным конвейером 11 из 12 станций не поддались оценке (RAIM отклонил большинство безионосферных эпох), а BX14 не прошла; раскрытый повторный прогон с исправленным конвейером (предварительно зарегистрировано c9cc0d49) проходит 1 из 11 слепых станций (BX12, 1,412; BX07 1,532 и BX13 1,542 лишь чуть за порогом), потому что часы приёмников одиночного определения положения по прерывистым файлам с шагом 30 с не являются чистой записью генератора | MODELLED |
| VM-d6948fbc | Карточки измеренных часов GPS Block IIF с членами на виток (предсказание на отложенных данных) | clock_library::card::DeviceCard::fit_phase_periodic: карточка устройства, несущая фазовые члены от одного до четырёх на виток (период T/k, T = 43 082,05 с), подогнанные совместно с квадратичным методом наименьших квадратов по одной трети измеренной записи часов спутника, с замкнутым вкладом каждого члена в девиацию Аллана 4 A^2 sin^4(pi tau / P) / tau^2 в предсказанной девиации Аллана | clock_library (card) | tests/clock_library_periodic_cards_oracle.rs (periodic_cards_reproduce_the_recorded_finding; предварительно зарегистрировано fb475550); clock_library::card::tests (a_periodic_card_carries_the_sinusoid_a_power_law_card_cannot) | Измеренные записи, отложенные: финальные комбинированные часы IGS с шагом 30 с для 11 спутников GPS Block IIF за 2026-04-01 — 14 (окно, которое ни один тест не открывал; IGS, открыто с указанием авторства). Внешнее сравнение D9 (предварительно зарегистрировано fb475550, отношение предсказанной к измеренной девиации Аллана в пределах [1/1.5, 1,5] на каждом подогнанном времени усреднения для каждого спутника), находка (остаётся MODELLED): 9 из 11 карточек укладываются в порог; G03 (1,947) и G25 (1,581) оптимистичны между 60 с и 2000 с, потому что их отложенные записи шумнее подгоночных третей (в отложенной части G25 16 пропусков и 29 выбросов фазы), это изменение часов, а не отсутствие периодического члена. Исключение периодических членов из предсказания не выдерживают все 11 карточек (от 1,77 до 4,96), поэтому именно члены несут предсказание | MODELLED |
| VM-4ca6b7c4 | Оценивание состояния бортовых часов | Часы Калмана с 3 состояниями (фаза/частота/дрейф) по Ван Лоану, стабилизированные по Джозефу | clock_state | clock_state::tests (аналитическая Q по Van-Loan; NEES; положительность PSD); tests/clock_state_reference.rs (полная траектория предсказания и обновления — состояние x и ковариация P 3×3 на 1925 шагах / 4 наборах параметров против filterpy 1.4.5; наихудшее |relΔ| 2.8e-14); tests/clock_state_igs_holdout_oracle.rs::three_state_filter_on_held_out_igs_clocks_finding (закрепляет вывод); tests/clock_state_ext_igs_fresh_oracle.rs::extended_filter_on_fresh_igs_clocks_finding; tests/clock_state_ext_igs_conditioned_oracle.rs::conditioned_extended_filter_finding (D9, раунд 3) | filterpy 1.4.5 KalmanFilter (R. Labbe, MIT), с F через scipy.linalg.expm и Q через блочную матрицу Ван Лоана (1978) — независимая эталонная реализация, воспроизводящая всю траекторию фильтра kshana. Согласованность между реализациями: физика часов и калибровка Аллана внешне не проверены, поэтому остаётся MODELLED. Внешнее сравнение 0,30, находка (остаётся MODELLED): на финальных часах IGS с шагом 30 с для 11 спутников GPS Block IIF (2025-08-17 — 30), при Q, подогнанной к ADEV первой половины, и оценке фильтра на отложенной второй половине фильтр согласован на один шаг вперёд (от 0,906 до 0,971 эпох внутри его 95 %-й полосы, порог 90 %), но излишне уверен на горизонте одного часа у 9 из 11 часов (от 0,486 до 0,829), а его суммы инноваций выходят за [2,4, 3,6] у 5. Подогнанный белый фазовый шум равен нулю на каждом спутнике, а ошибки часового масштаба (периодические члены, фликкер ЧМ) в модели с 3 состояниями нет. Раунд 2 для 0,30, расширенный фильтр (фликкер ЧМ и состояния с одним и двумя членами на виток) на новых отложенных часах IGS за 2025-09-01 — 14 (предварительно зарегистрировано 4b1a841e), находка (остаётся MODELLED): критерии согласованности на один шаг и на один час выполняются на всех 11 спутниках (от 0,948 до 0,988 и от 0,907 до 0,996), но критерий суммы инноваций не выполняется на G24 (0,964) и G30 (1,929) относительно [2,4, 3,6]. D9, раунд 3, расширенный фильтр раунда 2, настройка и критерии без изменений после замороженного детектора подготовки clock_library, на новых часах IGS за 2026-04-01 — 14 (предварительно зарегистрировано fb475550), находка (остаётся MODELLED): (a) один шаг от 0,941 до 0,968 и (c) среднее утроенного NIS от 2,641 до 3,549 выполняются на всех 11 спутниках; (b) один час не выполняется на G09 (0,894) и G26 (0,876) относительно 0,90 | MODELLED |
| VM-dcb22bd1 | Бюджет ошибок передачи времени | Двусторонняя передача/TWSTFT (Саньяк), общий вид GNSS, PPP; дрожание линии→дальность | timetransfer, timetransfer_adv | timetransfer::tests (взаимное сокращение; тождество Саньяка в двух формах); tests/time_transfer_error_budgeting_reference.rs (Саньяк при облёте экватора = 207,386 нс против опубликованного значения Ashby 207,4 нс с точностью до <0,05 нс; плюс геометрия Саньяка/geodist перекрёстно проверена относительно RTKLIB 2.4.3 geodist(), скомпилированного из исходного кода на C) | Величина эффекта Саньяка сверена с авторитетным ОПУБЛИКОВАННЫМ ЗНАЧЕНИЕМ — N. Ashby, 'Relativity in the GPS', Living Reviews in Relativity 6:1 (2003), ур. 1,29: восточный экваториальный облёт накапливает 207,4 нс (2ωA_E/c²); kshana воспроизводит 207,386 нс. Независимо подтверждено RTKLIB 2.4.3 geodist() (Takasu, BSD-2-Clause), несущим ту же геометрию 2Aω/c². Составной бюджет BIPM TWSTFT по транспондеру/общему виду/PPP внешнего эталона не имеет, поэтому возможность остаётся Modelled | MODELLED |
| VM-7b9ba72f | Модуляция навигационных сигналов и анализ слежения за кодом | PSD для BPSK-R/BOC, коэффициент спектрального разделения κ, полоса Габора, дрожание DLL, многолучевость | navsignal | navsignal::tests (собственный SSC BPSK = 2/3R_c; PSD единичной площади; DLL); tests/nav_signal_modulation_code_tracking_reference.rs (точное целочисленное совпадение взаимной/автокорреляции кодов Gold GPS C/A с независимой генерацией кодов по IS-GPS-200; PSD BPSK-R(1)/синусоидального BOC(1 1) против независимой периодограммы scipy); tests/nav_signal_betz_hein_published_oracle.rs (betz_text_correlation_values_over_1_ghz; hein_mboc_interference_improvements; finding_betz_side_lobes_and_multipath, закреплено) | Взаимная и автокорреляция кодов Голда GPS C/A совпали ТОЧНО (целые ±65/−1/63) с независимой генерацией кодов по IS-GPS-200; форма PSD для BPSK-R(1)/BOC(1 1) в сравнении с независимой периодограммой scipy. Замкнутые формы модуляции/SSC/DLL (Betz 2001 / Kaplan & Hegarty) остаются аналитическими, поэтому строка остаётся MODELLED, но подзадача корреляции кодов совпадает с внешним эталоном. Раунд 2 для 0,30 относительно напечатанных значений Betz 2001 и Hein et al. 2006 (предварительно зарегистрировано 9f4f2ce8, половина напечатанной единицы), находка (остаётся MODELLED): все 45 спектральных ячеек таблицы 1, значения корреляции для 1 ГГц, показатели помех MBOC и 2 из 3 смещений на рис. 17 согласуются; первые боковые лепестки на 24 МГц, смещение BOC(8 4) на рис. 17 и каждое наихудшее смещение из-за многолучевости на рис. 18-21 (на 11–15 % ниже) не согласуются. Kshana и независимое вычисление в NumPy по предварительно зарегистрированной трактовке согласуются, поэтому расхождение лежит в этой трактовке или в неуказанной детали статьи; причина не выяснена | MODELLED |
| VM-1a97a57b | Генерация расширяющего кода GPS L1 C/A | Генератор кода C/A на регистрах G1/G2 с линейной обратной связью, воспроизводящий опубликованные в IS-GPS-200 проверочные восьмеричные векторы первых 10 символов для PRN 1–9 (плюс длина 1023 символа, баланс единиц 512, трёхзначная периодическая автокорреляция) | sdr | sdr::code_tests (ca_first_ten_chips_match_is_gps_200_octal — первые 10 чипов PRN 1–9 точно воспроизводят восьмеричные значения IS-GPS-200 таблицы 3-Ia 1440/1620/1710/1744/1133/1455/1131/1454/1626; ca_code_has_1023_chips_and_is_balanced; ca_periodic_autocorrelation_is_three_valued) | IS-GPS-200, таблица 3-Ia «Назначения фазы кода» — авторитетные опубликованные правительством США в общественном достоянии проверочные ВОСЬМЕРИЧНЫЕ векторы первых 10 символов (GPS Directorate, navcen.uscg.gov); собственный регистр G1/G2 kshana точно воспроизводит каждый вектор PRN 1–9. Нижележащие замкнутые формы модуляции/SSC/DLL остаются Modelled (отдельная строка) | VALIDATED |
| VM-3d1e2932 | Характеристики квантовых инерциальных датчиков | Акселерометр на интерферометре холодных атомов из первых принципов (k_eff·T², QPN) | inertial::quantum_imu | quantum_imu::tests (k_eff; Mach-Zehnder T²; вилка нижнего предела Freier-2016); tests/quantum_inertial_sensor_reference.rs (передаточная функция |H(ω)|, k_eff·T² и ASD дробового шума против опубликованных числовых векторов Cheinet 2008 / Peters / Freier); tests/quantum_inertial_measured_qpn.rs (gauguet_finding_qpn_floor_sits_below_the_measured_noise, закреплено; gradiometer_qpn_line_matches_janvier_model) | Опубликованные числовые векторы первичных статей по CAI (передаточная функция Cheinet 2008; чувствительность Peters/Freier): k_eff·T² совпадает точно, дробовой шум ASD — односторонний нижний предел в пределах ~2× от каждого опубликованного прибора (реальные устройства несут технический шум выше квантового предела). Вилка, а не равенство. Раунд 2 для 0,30 (предварительно зарегистрировано fcb9ac64), находка (остаётся MODELLED): шум вращения только по QPN в сравнении с измеренными точками Gauguet et al. 2009, рис. 14, даёт отношения от 0,695 до 0,788 в трёх допущенных точках (0,751 в рабочей точке), не достигая предварительно зарегистрированного порога 30 % на 0,5 пункта; предел QPN лежит на 21–31 % ниже измеренного шума, как и следует ожидать от модели без шума лазера и детектирования. Композиция градиометра совпадает с линией модели QPN у Janvier et al. 2022 (отношение от 1,013 до 1,017, Reference). Измеренный тест не может выявить ошибку композиции sqrt(2); это может сделать только линия Janvier с неравным контрастом | MODELLED |
| VM-615e17f8 | Неоднозначность полос и динамический диапазон квантового инерциального датчика | Динамический диапазон неоднозначности полос Маха–Цандера: 2π-периодичный отсчёт полос задаёт максимальную однозначную удельную силу a_max=π/(k_eff·T²), а однозначный диапазон в ячейках разрешения a_max/σ_a=π/σ_Φ не зависит от оптического масштабного коэффициента — выигрыш чувствительности по T² стоит однозначного диапазона в точном соответствии (время опроса обменивает разрешение на диапазон, оставляя число ячеек заданным фазовым шумом отсчёта) | inertial::quantum_imu | quantum_imu::tests (a_max лежит на краю полуполосы ±π с масштабированием диапазона 1/T²; восстановление свёрнутой фазы точно внутри [−a_max,a_max] и вне его даёт наложение ровно на 2·a_max; однозначный динамический диапазон a_max/σ_a=π/σ_Φ одинаков при двух сильно различающихся масштабных коэффициентах длины волны/T; методы CaiAccelerometer совпадают со свободными функциями) | Самосогласованность модели полос интерферометра: край полуполосы, 2π-периодическая структура наложения и сокращение масштабного коэффициента в отношении диапазона к разрешению — замкнутые алгебраические тождества, проверяемые по собственным функциям фазы и чувствительности Маха–Цандера в движке — проверки внутренней согласованности, а НЕ внешний набор данных, поэтому строка остаётся InternalConsistency. MODELLED идеальная неоднозначность полос для трёх импульсов; без границ по аберрациям волнового фронта и потере контраста для однозначного диапазона | MODELLED |
| VM-098c5e7f | Устойчивость квантовой инерциальной счисляемой навигации | Составной бюджет положения по смещению, масштабному коэффициенту, VRW и затуханию стабильности в holdover | inertial::quantum_imu (QuantumNavBudget) | budget_tests (смещение против интегратора AccelModel; VRW против аналитического интеграла); tests/quantum_inertial_dead_reckoning_reference.rs (VRW против независимого двойного интегрирования шума белого ускорения методом Монте-Карло в numpy, наихудшее отклонение 0,42% в пределах ±3% на 6 временах выбега; смещение/масштабный коэффициент против замкнутого значения Groves 2013; круговые проходы holdover) | Независимое интегрирование SDE методом Монте-Карло в numpy для дважды проинтегрированного белого шума ускорения (проверяет аналитическую дисперсию VRW по подлинно независимому алгоритму) + опорное опубликованное значение Groves 2013 для членов смещения и масштабного коэффициента; показатели устройств CAI количественно описывают оборудование партнёра и остаются MODELLED | MODELLED |
| VM-1e713796 | Комплексирование датчиков GNSS/INS | Фильтр Калмана в пространстве ошибок с 15 состояниями, слабосвязанный (проверен на реальной поездке с IMU/GNSS относительно NaveGo); тесно связанный UKF по псевдодальности и доплеру и связанный фильтр часов и положения (только согласованность, вне проверенного утверждения) | fusion (gnss_ins_ekf, tightly_coupled, ukf, coupled) | fusion::tests (UKF==тождество с линейным KF; выбег при перерыве; NEES); tests/gnss_ins_sensor_fusion_reference.rs (50 случаев в сравнении с filterpy 1.4.5: апостериорные оценки линейного EKF слабо/тесно связанного и связанного PNT с точностью ≤2.4e-12; прогон UKF на 40 эпох, наихудшие |Δx| 1.9e-7 / |ΔP| 9.5e-6); tests/gnss_ins_navego_dataset_oracle.rs::loosely_coupled_rms_within_1p2x_of_navego (слабо связанное решение NaveGo v1.4 на реальной поездке NaveGo с IMU Ekinox и GNSS: горизонтальное СКО 0.912x, вертикальное 0.940x, СКО инновации положения 0.861x от NaveGo, среднее нормированное нововведение 0,395; пороги 1.2x, 1.2x, 1.2x и 1,5 зафиксированы до прогона) | NaveGo v1.4 (R. Gonzalez, LGPL-3.0, запущен как инструмент в GNU Octave, никогда не подключается как библиотека): его слабосвязанный ins_gnss на собственной реальной поездке наземного транспортного средства с IMU/GNSS Ekinox, оба решения оценены относительно эталонной траектории Ekinox. Оба фильтра читают одни и те же входные данные float32 с частотой 20 Гц, а конфигурация Kshana сопоставлена механически по опубликованным параметрам набора данных. Горизонтальное и вертикальное СКО положения Kshana и СКО инноваций положения укладываются в 1.2x от показателей NaveGo (измерено 0,912, 0,940 и 0,861), а её среднее нормированной инновации не более 1,5 (измерено 0,395: примерно 2.5x недостаточная уверенность при заявленных сигмах GNSS набора данных); допуски заданы до сравнения. Область: GNSS присутствует с частотой 5 Гц всю поездку, поэтому перерыв или выбег не проверяются, и проверка выявляет грубые дефекты фильтра, а не тонкую настройку (необработанные решения с поправкой на плечо рычага оказались бы вблизи вертикального порога); преобразование плеча рычага вычисляется в тестовой обвязке. Тесно связанный UKF и связанный фильтр часов и положения сохраняют проверки согласованности по filterpy 1.4.5 (линейные апостериорные до 2.4e-12) и остаются вне проверенного утверждения | VALIDATED |
| VM-4c656dcb | Устойчивость к подавлению без ГНСС | Геометрия бюджета линии J/S, C/N₀ с защитой от подавления, потеря захвата по каждому спутнику | jamming | jamming::tests (broadband_q_equals_the_spectral_separation_closed_form и cw_q_equals_the_spectral_separation_closed_form: таблица Q, CW и узкополосные 1, широкополосные и качающиеся 2, закреплены по замкнутым формам navsignal; a_cw_jammer_is_more_damaging_than_broadband_noise_at_equal_js); tests/gnss_denied_jamming_resilience_reference.rs (FSPL/J-S/эффективное C-N₀ против независимого повторного вывода в numpy бюджета линии Kaplan & Hegarty §9,4; C/N₀ реального JammerTest монотонно падает через порог 25 дБ-Гц); tests/jamming_jammertest_cn0_oracle.rs (предварительно зарегистрировано, заблокировано, не запускалось) | Уравнение бюджета линии C/N₀ с защитой от подавления, перекрёстно проверенное независимым повторным выводом в numpy (использует ту же замкнутую форму → InternalConsistency), плюс характеристика ухудшения C/N₀ по реальному JammerTest-2024. Раунд 2 для 0,30, заблокировано (остаётся MODELLED): измеренное падение C/N0 в JammerTest 2024 против предсказания бюджета линии (предварительно зарегистрировано 6a66994b, в пределах 3 дБ) не выполнялось, потому что положение и ориентация антенны F8.1 в Bleik и доля L1 в мощности многодиапазонной рампы 1.6.4 не задокументированы ни в каталоге испытаний, ни в официальном журнале | MODELLED |
| VM-ab66f655 | Обнаружение спуфинга | Объединённый для каждой эпохи показатель качества безопасности: χ² с поддержкой часов, RAIM, AGC, SQM | spoof, spoof_detect, spoof_monitors | tests/spoof_texbat_validation.rs (характеризация параметров TEXBAT); tests/spoof_detection_jammertest_oracle.rs::monitors_against_the_published_onsets_reproduce_the_recorded_disagreement (закрепляет вывод); tests/spoof_detection_jammertest_log_oracle.rs::engine_monitors_against_the_logged_onsets_reproduce_the_recorded_disagreement; tests/clock_library_tcxo_card_jammertest_oracle.rs (round_3_is_blocked_by_the_training_minimum; round_4_reproduces_the_recorded_finding; round_4b_reproduces_the_recorded_finding; D9) | Параметры сценариев TEXBAT (Humphreys 2012) — характеристика, а не зафиксированные векторы. Внешнее сравнение 0,30, находка (остаётся MODELLED): на JammerTest 2024 (Bleik; данные GPL-3.0) мониторы на уровне наблюдаемых (хи-квадрат с поддержкой часов, RAIM, отказ решения) не подняли тревогу в пределах 10 с ни у одного из 8 поддающихся оценке опубликованных начал спуфинга (где окно до начала было чистым, первая тревога пришла через 10,2–39 с после опубликованного начала слота), а три окна до начала содержали ложные тревоги монитора часов (81, 64 и 173 эпох). Первым наблюдаемым эффектом была потеря двухчастотного слежения за GPS, а не несогласованность RAIM. Опубликованные начала — это начала слотов расписания с точностью до минуты; то, что они предшествуют радиочастотному захвату, является интерпретацией, а не измерением. Раунд 2 для 0,30, относительно официального журнала JammerTest 2024 организаторов (разрешение до секунды; предварительно зарегистрировано 6a66994b с калиброванным по Адамару монитором часов с тремя состояниями без фиксации), находка (остаётся MODELLED): монитор подаёт тревогу в пределах 10 с на 4 из 10 зарегистрированных начал; на остальных шести он опаздывает на 18–211 с или даёт ложные тревоги часов до начала (1 на 2.1.4, 85 на 2.3.15). D9, раунд 3 (карточка приёмника по другим сеансам устройства JammerTest, предварительно зарегистрировано 2ec76864) заблокирован: 167 обучающих эпох против 3600. D9, раунды 4 и 4b (уровни шума из карточки класса модели u-blox ZED-F9P, Вроцлав 2021, предварительно зарегистрировано fb475550; 4b — раскрытый повторный прогон с исправленным извлечением, c9cc0d49), находка (остаётся MODELLED): ноль ложных тревог до начала на всех 10 зарегистрированных началах и 6 из 10 в пределах 10 с; 2.1.1, 2.3.5, 2.3.10 и 2.6.1 остаются запоздавшими (+211, +23, +18, +51 с), без изменений от уровня шума часов | MODELLED |
| VM-3c597524 | Уровень защиты времени при спуфинге | Граница в замкнутой форме для наихудшей необнаруженной ошибки времени = порог монитора + σ выбега генератора за задержку обнаружения CUSUM, сообщаемая как полоса уровня красного шума | tpl | tpl::tests (оракулы в замкнутой форме + CUSUM); examples/tpl_jammertest.rs (калибровка по реальному спуфингу JammerTest 2024); tests/tpl_jammertest_coverage_oracle.rs::tpl_against_measured_time_error_reproduces_the_recorded_disagreement (закрепляет вывод); tests/tpl_jammertest_log_oracle.rs::drift_state_tpl_against_the_logged_onsets_reproduces_the_recorded_disagreement | Составляется из проверенных (Validated) примитивов (allan/holdover по Ван Лоану, порог безопасности); калибровано на сценарии JammerTest 2024 2.1.1 (~1,01 мс реального смещения передаваемого времени против заявленных ≤51 нс). Мост над проверенными частями, сам по себе не внешняя проверка. Внешнее сравнение 0,30, находка (остаётся MODELLED): на сценариях спуфинга JammerTest 2024 измеренная необнаруженная ошибка передаваемого времени превышает номинальный TPL на 3 из 8 обнаруженных начал: 184,3 против 34,6 нс (2.1.4), 295,7 против 159,3 нс (2.3.5) и 143,0 против 69,0 нс (2.3.11); три из пяти оставшихся в пределах тривиальны (зафиксированная ложная тревога до начала). Вероятная причина: член выбега по калибровке на 60 с с нулевым шумом дрейфа не покрывает блуждание частоты TCXO приёмника за 15–39 с. Измеренная ошибка — это собственная оценка часов Kshana по одиночному определению положения относительно прямой, подогнанной к её собственным оценкам до начала, поэтому даже согласие не было бы полностью независимым. Раунд 2 для 0,30, относительно начал из официального журнала JammerTest 2024 и измеренной ошибки времени приёмника (предварительно зарегистрировано 6a66994b), находка (остаётся MODELLED): на 4 из 10 зарегистрированных началах необнаруженная ошибка превышает TPL с состоянием дрейфа (634,7 против 458,5 нс на 2.1.1, 232,6 против 16,2 нс на 2.3.5, 41,3 против 6,0 нс на 2.3.10, 218,6 против 47,4 нс на 2.6.3) | MODELLED |
| VM-2e84fba6 | Анализ цислунных миссий | STM CR3BP + дифференциальный корректор одиночной стрельбы; южная NRHO у L2 | cr3bp | cr3bp::tests (STM в сравнении с конечными разностями); tests/cislunar_mission_analysis_reference.rs (5 членов JPL L2-S NRHO: 9:2 + 4 соседа; наихудшие |ΔC| 1.5e-5, |ΔT|/T 9.6e-5, перилуний 0,7 km в единицах длины JPL) | NASA/JPL Three-Body Periodic Orbit Database (SSD, periodic_orbits.api; южное гало-семейство Земля–Луна у L2, методика Howell/Davis) — опубликованные извне период T, константа Якоби C и начальные условия перпендикулярного пересечения; корректор STM одиночной стрельбы kshana, запущенный от начального условия каталога с возмущением, сходится обратно к членам каталога | VALIDATED |
| VM-6a54cfeb | Альтернативное / дополнительное PNT | Сопоставление с картой гравитации, навигация по рельефу (TERCOM/SITAN), магнитные аномалии | altpnt, mapmatch, gravimeter, igrf | tests/alternative_complementary_pnt_reference.rs (CRLB привязки к карте; поле IGRF-14); mapmatch::tests; gravimeter::tests; igrf::tests; tests/gravity_map_real_field.rs (60-минутный эталонный тест без ГНСС на реальном поле EGM2008 степени 70, предварительно зарегистрированный в xval/icgem-egm2008/: при привязке 3106 м, так что порог < 500 м NOT MET и зафиксирован как не выполненный, а десятикратное сокращение дрейфа 70,6 км MET; плюс Монте-Карло ошибок карты с фиксированным начальным значением); altpnt::terrain::tests::emag2_format_grid_reproduces_the_synthetic_magnetic_channel и tests/emag2_real_grid.rs (читатель EMAG2v3, зависящий от наличия данных, на реальном фрагменте; навигационный результат по нему не заявляется); tests/terrain_slam_rbpf.rs (совместная оценка карты, RBPF в стиле FastSLAM, против SITAN с известной картой при коррелированной ошибке карты 15 м на 20 начальных значениях, предварительно зарегистрировано в xval/terrain-slam-rbpf/: средний выигрыш 1,5% и лучше в 10 из 20, так что пороги 10% и 12 из 20 NOT MET и зафиксированы как не выполненные; вреда на идеальной карте нет, MET) | Коэффициенты IGRF-14; согласованный фильтр CRLB из первых принципов. Поле эталонного теста реального гравитационного поля проверено внешне (строка «Синтез гравитационной аномалии по модели сферических гармоник»), но у его навигационного результата внешнего эталона нет | MODELLED |
| VM-93082325 | Синтез гравитационной аномалии по модели сферических гармоник | Гравитационная аномалия в сферическом приближении (Barthelmes STR09/02, ур. 126, ICGEM gravity_anomaly_sa) по полностью нормированным коэффициентам относительно уровенного эллипсоида в замкнутой форме (WGS84/GRS80) с членом нулевой степени, на сетке для сопоставителя карты гравитации | gravity_sh, altpnt::maps, gravimeter | tests/icgem_gravity_anomaly_oracle.rs (egm2008_n70_matches_cited_icgem_values в CI на десяти приведённых узлах ICGEM; egm2008_n70_gravity_anomaly_sa_matches_icgem по полным загруженным сеткам 0.25 deg Чада 9-15N 19-25E и Долины Смерти 35-38N 242-245E, 794 узла: СКО 1.3e-8 и 2.6e-8 mGal, максимум 2.9e-8 mGal при заранее зарегистрированных порогах 0,005 / 0,02 mGal, xval/icgem-egm2008/); gravity_sh::tests | ICGEM Calculation Service (GFZ Potsdam), независимая реализация: EGM2008, усечённая на степени 70, gravity_anomaly_sa, WGS84, без приливов, член нулевой степени, h = 0. Результат сервиса не несёт явной лицензии, поэтому сетки загружаются во время теста с закреплённым SHA-256 (tools/fetch_icgem_grid.sh), а только десять значений приведены с указанием источника | VALIDATED |
| VM-522a5c79 | Читатель цифровой модели высот SRTM на реальном рельефе | Собственноручно написанный парсер SRTM .hgt (16-битный, big-endian, северная строка первой, с учётом пустот) + билинейный сэмплер, читающий реальный тайл ЦМР из общественного достояния и воспроизводящий документированный съёмочный ориентир | altpnt::terrain | tests/terrain_nav_validation.rs (real_srtm_committed_badwater_tile_reads_real_relief — зафиксированная 6-угловосекундная децимация тайла SRTM v3 N36W117, находящегося в общественном достоянии, помещает бассейн Бэдуотер, самую низкую точку Северной Америки, на −78 m в пределах геодезического диапазона [−95,−70] m и считывает истинный рельеф восточного хребта тайла ~2,2 km; кроме того, на двух зафиксированных дословных срезах 361x361 с шагом 1 угловая секунда N36W119 и N36W117: real_srtm_tile_whitney_in_survey_band (4412,1 m в диапазоне [4380 4430] m вокруг геодезической отметки 4421 m), real_srtm_tile_badwater_in_survey_band (−78,0 m в [−95,−70] m) и gdal_cross_check (ближайший узел в точности равен GDAL 3.8.4 gdallocationinfo на полных тайлах во всех 8 заранее зарегистрированных точках, xval/srtm-ungate/; плюс оракулы разбора: вручную построенная билинейная средняя точка и синтетическая фикстура) | Тайл NASA/USGS SRTM v3 (1 угловая секунда) N36W117 — данные о высотах правительства США, PUBLIC-DOMAIN, из открытого зеркала AWS elevation-tiles-prod, прореженные до 6 угловых секунд и зафиксированные в tests/fixtures/terrain/ (см. NOTICE.md), плюс обрезки N36W117 и N36W119 в полном разрешении, поузлово сверенные с независимым читателем SRTMHGT из GDAL и с съёмочными ориентирами: гора Уитни (4421 м) и Бэдуотер (−86 м). Документированный ориентир бассейна Бэдуотер (−86 м, самая низкая точка Северной Америки) привязывает географически привязанное чтение. Навигационная привязка по сопоставлению рельефа/TERCOM, использующая ЦМР, остаётся Modelled (отдельная строка «Альтернативное / дополнительное PNT») | VALIDATED |
| VM-cf3cdcd3 | Воспроизводимость и гарантии качества программного обеспечения | Детерминированность, хеширование сценариев, SBOM и межплатформенные эталонные барьеры | report, scenario; CI (golden/determinism/SBOM) | tests/golden.rs, tests/determinism.rs, tests/cross_platform_golden.rs; tests/reproducibility_software_assurance_reference.rs (сформированный SBOM проходит проверку без ошибок по официальной схеме JSON CycloneDX 1,5 на всём поставляемом графе из 66 компонентов: функции по умолчанию + python + wasm, зависимости для разработки исключены) | Соответствие SBOM официальной схеме CycloneDX 1,5 JSON (+ допустимые идентификаторы SPDX) — внешний опубликованный стандарт, ноль ошибок проверки по всему графу зависимостей; часть о детерминизме показателей качества и побайтной воспроизводимости остаётся зафиксированной проверкой самосогласованности, поэтому строка остаётся MODELLED | MODELLED |
| VM-77f12e71 | Оценка обнаружения радиочастотных искажений методами ИИ/МО (13494) | Размеченный синтетический корпус искажений + независимая от детектора обвязка ROC/AUC/матрица ошибок/Pfa-Pmd; защита от утечки, стратифицированное разбиение, отчёт об оптимизме при сдвиге распределения (внутри и вне режима). Запускается из CLI и привязок как вид сценария impairment-eval (scenarios/impairment-eval.toml) |
impairment_eval | impairment_eval::tests (AUC идеальный=1/одинаковый=0.5/ничья=0,125, ROC монотонна, объединённый>0,8, разделение слоёв по классам, защита от утечки, воспроизводимый корпус, сдвиг распределения помечает оптимизм); dominance_demonstrators (достижим + воспроизводим + MODELLED-не-VALIDATED + разрыв оптимизма самосогласован) | Границы AUC в замкнутой форме (Манна–Уитни) + идеальный детектор-оракул; корпус СИНТЕТИЧЕСКИЙ (основан на параметрах, не полевые данные/IQ) | MODELLED |
| VM-d6a9346b | Исследование разрыва оптимизма при обнаружении радиочастотных искажений методами ИИ/МО и предиктор разрыва только по ID | Контролируемое синтетическое исследование разрыва оптимизма AUC между внутренним и внешним по отношению к распределению для опубликованных методов и обучаемых детекторов (логистическая регрессия / MLP с одним скрытым слоем): тенденции законов масштабирования по классам (ρ Спирмена + наклон по 1−тяжесть) и гребневой предиктор только по ID, оценивающий разрыв лишь по диагностике внутри распределения, оцениваемый с исключением по одному детектору и по одному классу. Воспроизводится через cargo run --release --example optimism_study |
impairment_study, impairment_ml, eval_stats | impairment_study::tests (оракульный AUC по классам≈1, выученный разрыв оптимизма>0, форма сетки + доверительный интервал бутстрепа охватывает среднее + положительный тренд масштабирования, признаки ID конечны, предиктор разрыва лучше «предсказать среднее» при ОБЕИХ перекрёстных проверках — с исключением по одному детектору и по одному классу — + детерминирован); impairment_ml::tests (логистическая регрессия разделяет + детерминирована + потери↓, MLP решает XOR, недоступный линейной модели + с фиксированным начальным значением); eval_stats::tests (бутстреп/DeLong/Спирмен/ридж против замкнутых форм) | Выведенные вручную статистики против замкнутых форм (бинормальная AUC Φ(d'/√2), дисперсия DeLong, ρ Спирмена со связанными рангами, точное восстановление OLS) + перекрёстная проверка с исключением по одному против базового уровня «предсказать среднее». Корпус СИНТЕТИЧЕСКИЙ (основан на параметрах, никогда не полевые данные/IQ), а разрыв оптимизма — это сдвиг тяжести от синтетики к синтетике, а НЕ результат перехода от симуляции к полю | MODELLED |
| VM-4565dcd3 | Квантовое и классическое PNT: компромисс и устойчивость без ГНСС (13503) | Приём измеренной ADEV (NNLS), таблица компромиссов (holdover по времени и по инерции + выигрыш), огибающая устойчивости по времени; оговорка о нижнем пределе приложена к артефакту. Запускается из CLI и привязок как вид сценария quantum-trade (scenarios/quantum-trade.toml) |
quantum_trade | quantum_trade::tests (восстановление ADEV по кругу, неотрицательность NNLS, оговорка о нижнем пределе есть/нет, выигрыш>1, монотонная огибающая + граница alt-PNT); dominance_demonstrators (измеренная ADEV определяется данными, а не нижним пределом по допущению, допущенный класс помечает нижний предел + оговорку, некорректная кривая отклоняется, MODELLED-не-VALIDATED) | Ядро подгонки измеренной ADEV→PSD (NNLS) сверено со scipy.optimize.nnls (tests/scipy_reference.rs / tests/quantum_vs_classical_pnt_trade_reference.rs) — независимое внешнее ядро; но ЧИСЛА компромисса количественно описывают (но никогда не подтверждают) часы партнёра/CAI, поэтому сам компромисс остаётся MODELLED, без ореола проверенности | MODELLED |
| VM-dd6c7403 | Среда космической погоды и плотность термосферы, определяемая активностью | Солнечные/геомагнитные индексы (определяющая таблица Kp↔ap), экзосферная температура Jacchia-1971 и плотность термосферы Jacchia 1971 (SAO Special Report 332: статические профили диффузии, воспроизводящие его таблицу 7, с суточными, геомагнитными, полугодовыми, сезонно-широтными и гелиевыми вариациями) относительно статической атмосферы USSA76. Запускается из CLI и привязок как вид сценария space-weather (scenarios/space-weather.toml) |
space_weather | space_weather::tests (Kp↔ap точно в узлах сетки + круговой проход + монотонность, среднее суточное Ap, T экзосферы против опубликованных опорных значений для солнечного минимума/среднего/максимума и приращения при бурях, плотность равна единице на опорном уровне, размах солнечного цикла в наблюдаемой полосе 5–10×, сценарий воспроизводим + MODELLED-не-VALIDATED + отклонение значений вне диапазона); dominance_demonstrators (достижим + воспроизводим + физичная T + MODELLED-не-VALIDATED); tests/space_weather_density_accelerometer_oracle.rs::jacchia71_finding_is_pinned | Определяющая таблица Kp↔ap + замкнутая форма экзосферной температуры Jacchia-1971 (совпадение до <1 К с опубликованными опорными значениями, tests/space_weather_reference.rs); плотность охарактеризована относительно pymsis NRLMSISE-00 (независимая модель NRL): размах солнечного цикла на 800 км составляет 10.4x против 13.6x у NRLMSISE-00. Пересмотр 0,30: калиброванный фактор активности первого порядка заменён на Jacchia 1971 (плотность сценария по умолчанию на 400 км 4.176e-12 -> 6.929e-12 кг/м3; reference_exospheric_temperature_k удалён, mean_exospheric_temperature_k добавлен). Раунд 2 для 0,30, измеренные плотности по акселерометрам TOLEOS CHAMP/GRACE/GRACE-FO (ESA Swarm DISC; предварительно зарегистрировано 20eed695), находка (остаётся MODELLED): усреднения по орбите на 400–500 км укладываются в коэффициент 2 при солнечном максимуме вне бурь (CHAMP 2001 521/521, GRACE-A 2002 120/120, GRACE-FO 2024 526/547), но Jacchia 1971 примерно в 1.7x слишком плотна в солнечный минимум 2008 (GRACE-A 412/544 в пределах коэффициента 2), поэтому плотность не подтверждена | MODELLED |
| VM-81fb8429 | Совместимость с CCSDS OEM (импорт эфемерид GMAT/Orekit/STK) | Импортёр CCSDS 502,0 OEM (parse_oem), терпимый к строкам COMMENT / дополнительным ключевым словам метаданных / блокам ковариации и точно обратный писателю; круговой проход + приём внешнего файла с проверкой согласованности скорости. Запускается из CLI и привязок как вид сценария oem-interop (scenarios/oem-interop.toml) |
oem | tests/ccsds_oem_interop_reference.rs (24 состояния / 2 фикстуры декодированы побайтно идентично независимым парсером oem, pos/vel Δ = 0); oem::tests (разбор OEM внешнего инструмента с дополнительными ключевыми словами/комментариями/ковариацией, круговое преобразование запись→чтение полного состояния, допускаются pos+vel+accel, отклоняются только положение и отсутствие обязательных метаданных, круговое преобразование сценария с высокой точностью + приём из внешнего источника); dominance_demonstrators (достижимо + воспроизводимо + круговое преобразование точно + MODELLED-not-VALIDATED) |
Независимый сторонний парсер CCSDS-502 oem 0.4.5 (MIT, https://pypi.org/project/oem/) — отдельная кодовая база, которая побайтно идентично декодирует выданные kshana OEM в EME2000/UTC (24 состояния в 2 фикстурах, pos/vel Δ = 0) и чей строгий читатель подтверждает токены метаданных; парсер kshana также согласуется с ним на включённом внешнем OEM. Два честных вывода о совместимости (библиотека oem отвергает принятое в kshana многосегментное представление по каждому спутнику и многозаписные строки ковариации) задокументированы в тесте — поэтому это подтверждает соответствующий стандарту обмен одним объектом, а не полное соответствие CCSDS-502 каждого варианта kshana |
VALIDATED |
| VM-c55b030d | Окно запуска и геометрия выведения (анализ миссий) | Двухтельные азимуты запуска (sin Az = cos i / cos lat), минимально достижимое наклонение, круговая скорость, восточная добавка от вращения Земли, Δv смены плоскости по dogleg и ежедневные возможности и, при заданных эпохе и строках IERS finals2000A, скорость площадки относительно истинного полюса (launch::site_rotation_speed_at). Запускается из CLI и привязок как вид сценария launch-window (scenarios/launch-window.toml) |
launch | launch::tests (запуск строго на восток достигает i=широте, KSC→ISS = 45° как в учебнике, полярный = с севера на юг, i<широты недостижимо, экваториальный бонус 465 м/с, смена плоскости на 10° ≈ 1,34 км/с + 180° = 2v, число ежедневных возможностей, сценарий воспроизводим/MODELLED + путь с изломом); dominance_demonstrators (достижим + воспроизводим + KSC→ISS 45° + MODELLED-не-VALIDATED); tests/launch_geometry_orekit_oracle.rs::burnout_azimuth_reproduces_the_target_inclination_in_orekit; tests/launch_geometry_orekit_oracle.rs::earth_rotation_speed_gap_is_recorded_as_a_finding; tests/launch_geometry_orekit_oracle.rs::true_pole_site_speed_matches_orekit_at_a_fresh_epoch_and_longitudes | Геометрия запуска в сферической тригонометрии в замкнутой форме против опорных опубликованных разобранных примеров (Vallado, Fundamentals of Astrodynamics, 4-е изд., алгоритм 37 азимут запуска + гл. 6 смена плоскости; tests/launch_window_ascent_geometry_reference.rs). Они используют ту же замкнутую форму, которую реализует kshana (проверка паритета с опубликованным значением / переписывания, InternalConsistency); MODELLED двухтельная задача, без модели треугольника скоростей вращающейся Земли / выведения / потерь на сопротивление. Внешнее сравнение 0,30 с Orekit 12,2 (Apache-2.0), находка (остаётся MODELLED): геометрия согласуется до округления (наклонение, прочитанное обратно из азимута отсечки по 158 случаям, наихудшее 2.6e-15 рад; минимальное наклонение, круговая скорость и dogleg delta-v до 3e-16), но скорость площадки от вращения Земли не достигает предварительно зарегистрированного порога 1e-6 относительно на широте 62,9 град (1.12e-6). Разрыв растёт как tan(lat), что согласуется со смещением полюса из-за движения полюса примерно на 5.8e-7 рад в земной системе Orekit, которое сферическое ω·R·cos(lat) не учитывает. Заявление не было сужено до прогона, поэтому строка не может быть повышена по этому сравнению. Раунд 2 для 0,30 (предварительно зарегистрировано 71bebf63): при наличии эпохи и строк IERS скорость площадки относительно истинного полюса (поле сценария site_rotation_speed_true_pole_m_s) согласуется с Orekit в пределах 1e-6 на 24 площадках по четырём долготам (наихудшее 4.9e-8), но номинальная скорость без эпохи, которую сценарий по умолчанию выдаёт как добавку от вращения Земли, по-прежнему не достигает порога на 1.12e-6, поэтому строка остаётся MODELLED до решения о выводе по умолчанию | MODELLED |
| VM-72711b98 | Коридор баллистического входа в атмосферу (Аллен–Эггерс) | Пиковое замедление (не зависит от баллистического коэффициента), скорость и высота при пиковой перегрузке и скорость пикового нагрева для баллистического входа в экспоненциальную атмосферу. Запускается из CLI и привязок как вид сценария reentry (scenarios/reentry.toml) |
reentry | reentry::tests (пиковая перегрузка не зависит от баллистического коэффициента + физичный диапазон g, растёт при более крутом γ / более быстром входе, скорость пиковой перегрузки = V_e·e^(−1/2) и пикового нагрева = V_e·e^(−1/6) быстрее, высота пиковой перегрузки физична + глубже при большем B, сценарий воспроизводим/MODELLED + вырожденная геометрия отклоняется); dominance_demonstrators (достижим + воспроизводим + доля V_e·e^(−1/2) + MODELLED-не-VALIDATED); tests/reentry_reconstruction_oracle.rs::reentry_overprediction_is_recorded_as_a_finding; tests/reentry_point_mass_reconstruction_oracle.rs::point_mass_peak_deceleration_matches_reconstructed_entries (только перекрёстная проверка); tests/reentry_point_mass_accelerometer_oracle.rs (заблокировано, не запускалось) | Аналитический вход Аллена–Эггерса в замкнутой форме, дополнительно перекрёстно проверенный численным интегрированием scipy 1,18 solve_ivp (DOP853) ТОГО ЖЕ ОДУ входа с одним сопротивлением (tests/ballistic_re_entry_corridor_reference.rs, 36 случаев, наихудшее a_max отн. 2.9e-9) — проверка численного интеграла против собственной аналитической формы, поэтому по-прежнему InternalConsistency, НЕ внешняя проверка. MODELLED баллистический (без подъёмной силы), без аэротермики/TPS — выходной результат нагрева — это скорость, а не тепловой поток. Внешнее сравнение 0,30, находка (остаётся MODELLED): относительно реконструкции входа SRC Stardust (Desai and Qualls, NASA NTRS 20080008567) пиковое замедление Аллена–Эггерса для напечатанного инерциального состояния входа (12,9 км/с, -8.2 град, H 7200 м) составляет 61,8 g против 32,89 g по лучшей оценённой траектории, +88 % при допуске 15 %: решение с постоянным углом траектории и без гравитации примерно удваивает пик для пологого входа быстрее убегания. На Stardust не было акселерометра, поэтому реконструкция — это оценка траектории. Раунд 2 для 0,30, заблокировано (остаётся MODELLED): интегрированное плоское решение материальной точки (reentry::simulate_planar_entry, US76, обратноквадратичная гравитация, кривизна) согласуется с лучшими оценёнными траекториями Stardust и Genesis в пределах 15 % (+11,3 %, +5,6 %), но эти максимумы — результаты моделирования агентств, а не измерения, поэтому это лишь перекрёстная проверка. Сравнение по акселерометру (предварительно зарегистрировано a94a283d) заблокировано из-за отсутствия читаемой копии анализа Hayabusa2 REMM (doi 10.57350/jesa.16) | MODELLED |
| VM-8f68cf22 | Геометрия следа и покрытия полезной нагрузки наблюдения Земли | Геометрия пространственного треугольника SMAD: угловой радиус Земли, ширина полосы обзора, GSD в надире, максимальный доступ вне надира и круговой период, плюс период узла первого порядка по J2 (eo_payload::j2_nodal_period) и расстояние между трассами на экваторе R_e (omega_E - dOmega/dt) T_nodal (eo_payload::ground_track_spacing_equator_j2) с флагом сплошного покрытия, для высоты орбиты, наклонения и поля зрения FOV/IFOV датчика. Запускается из CLI и привязок как вид сценария eo-coverage (scenarios/eo-coverage.toml); его наклонение по умолчанию — солнечно-синхронное из eo_payload::sun_synchronous_inclination, удобное значение по умолчанию, не входящее в проверенное утверждение |
eo_payload (j2_node_rate, j2_nodal_period, ground_track_spacing_equator_j2, sun_synchronous_inclination) | eo_payload::tests (угловой радиус 64° на 700 km + уменьшается с высотой, надир→зенит/нулевая дальность, горизонт→ε=0/максимальный центральный угол, ошибки за горизонтом, полоса обзора растёт с FOV / GSD с высотой, интервал между узлами ~2750 km, сценарий воспроизводим/MODELLED + отклонение неверных входных данных); dominance_demonstrators (достижимо + воспроизводимо + угловой радиус 64° + MODELLED-not-VALIDATED); tests/eo_payload_coverage_orekit_oracle.rs::eo_coverage_matches_orekit_and_geographiclib (высоты 400-1500 km, наклонения 1-98 deg, половина FOV 7.5-50 deg, IFOV 10-50 microrad, отклонение 30 и 89 deg: каждая величина в пределах своего заранее зарегистрированного порога, флаг непрерывности 168/168); tests/eo_payload_coverage_orekit_oracle.rs::exempt_flag_points_are_the_engines; регрессия tests/eo_payload_coverage_reference.rs | Orekit 12,2 (Apache-2.0) и GeographicLib 2,1 (MIT), обе запущены как отдельные программы, предварительно зарегистрированы (766823f3) до изменения движка и любого запуска эталона: величины для сферы в пределах 1e-9 относительно (наихудшие: угловой радиус 5.4e-16, полоса обзора 7.0e-13, доступ 1.9e-14), период 1e-12 (1.6e-16), GSD в надире 1e-7 (2.9e-10), период узла по J2 и расстояние между узлами в пределах 0,1 % от численного распространения J2 в Orekit с детектором узлов (1.2e-5 и 6.7e-5), флаг сплошности точен (168/168), а относительно эллипсоида WGS-84 лимб в пределах 0,3 град (0,186 град) и максимальная дальность по поверхности в пределах 0,5 % (3.2e-3). Исключение члена узловой регрессии не выдерживают 35 из 42 узловых точек. Область MODELLED: след на сферической Земле; без радиометрии, MTF, атмосферы, дрожания и бликов; наклонение по умолчанию для солнечно-синхронной орбиты не сравнивается. Более ранняя перекрёстная проверка по Skyfield/SGP4 сохранена как регрессия. Пересмотр 0,30: расстояние теперь несёт узловую регрессию J2 (сценарий по умолчанию 2756,37 -> 2752,17 км) | VALIDATED |
| VM-22d526a3 | Кадрирование TM/TC по CCSDS Space Packet (133,0) | Кодирование и декодирование первичного заголовка CCSDS 133.0-B Space Packet (версия/тип/вторичный заголовок/APID/флаги последовательности/счётчик/длина данных) + сценарий кадрирования. Запускается из CLI и привязок как вид сценария space-packet (scenarios/space-packet.toml) |
space_packet | space_packet::tests (биты заголовка соответствуют структуре CCSDS-133, кодирование→декодирование возвращает все поля, значения вне диапазона/усечённые отклоняются); tests/ccsds_space_packet_reference.rs (33 случая в сравнении со spacepackets 0.32.0, включая 12 сравнений полных пакетов; несовпавших октетов нет) | spacepackets 0.32.0 (us-irs/spacepackets-py, R. Mueller, Apache-2.0) — независимая сторонняя реализация CCSDS 133.0-B-2; encode_packet/decode_packet kshana совпали побайтно (6-октетный первичный заголовок для 33 случаев + полный закодированный пакет для 12) | VALIDATED |
| VM-870899be | Вторичный заголовок CCSDS Space Packet, контроль ошибок пакета и сегментация | Расширения CCSDS 133.0-B-2 Space Packet рядом с первичным заголовком: вторичный заголовок, несущий временной код CCSDS 301.0-B (CUC или CDS, явное или неявное поле P) и вспомогательные данные, поле контроля ошибок пакета CRC-16, сегментация крупного блока пользовательских данных и его сборка, потоковое декодирование с проверкой пропусков и порядка последовательности и пакеты PUS-TM. Выход первичного заголовка побайтно идентичен прежнему | space_packet (TimeCode, SecondaryHeader, packet error control, segmentation and reassembly, stream decoding) | tests/space_packet_ext_oracle.rs (пять заранее зарегистрированных порогов: CRC, коды времени, потоки, пропуски и порядок, PUS TM; несовпадений нет); space_packet::tests | Предварительно зарегистрировано (003ef3eb) до любого сравнения; четыре независимые реализации, ни одна не под GPL, ничего не включено в репозиторий: ccsdspy 2.0.1 (BSD-3-Clause) декодирует 34 пакета, записанных Kshana, в 5 потоках (первичный заголовок, поле P, грубое и точное время, поля CDS, вспомогательные данные, пользовательские данные, PEC), и оба сегментированных блока по 1000 октетов собираются из его пользовательских данных с 0 расхождений, а также он помечает потоки с пропущенным и переставленным пакетами, которые Kshana отклоняет; CRC для 8 сообщений и 57 полей PEC равен CPython binascii.crc_hqx и spacepackets-rs 0.18.0 (контрольное значение 0x29B1); 66 случаев временных кодов CUC и CDS равны записи и чтению spacepackets-rs 0.18.0 октет в октет (3 случая CDS также у spacepackets-py 0.32.0); 4 пакета PusTm из spacepackets-py 0.32.0 побайтно идентичны пакетам Kshana. Не охвачено: временные коды эпох агентств (7 случаев опираются на модульные тесты), кадры передачи TC и любой канальный уровень ниже пакета | VALIDATED |
| VM-893b479b | Экспорт SPICE SPK (типы 9 и 13) | Писатель и читатель ядер NAIF SPICE SPK типов 9 (Лагранж, неравные шаги времени) и 13 (Эрмит, неравные шаги времени) с форматом DAF, дескрипторами сегментов и каталогами эпох, а также экспорт CCSDS OEM в ядро SPK (эпохи UTC или TDB в эфемеридное время) | spk_writer (SpkSegment, to_bytes, from_bytes, eval, et_from_label, oem_to_spk_segments) | tests/spk_writer_spice_oracle.rs (опись, вычисление, побитовое и побайтовое тождество, преобразование эпох OEM; четыре запланированные проверки мутаций делают его красным) | CSPICE N0067 через spiceypy 8.3.0, ядро високосных секунд naif0012.tls, предварительно зарегистрировано (5059fd2a) до того, как SPICE прочитал любое ядро Kshana: опись четырёх ядер Kshana в SPICE точна; spkpvn и spkgeo на 5 516 эпохах и 690 вычислениях цепочек равны собственному вычислению Kshana бит в бит и остаются в пределах порога в каждом узле (наихудшее 0,022 от него); Kshana читает ядра, записанные SPICE, бит в бит идентично; при тех же входных данных ядра Kshana побайтно идентичны ядрам SPICE (0 различающихся байтов в четырёх файлах); эпохи OEM преобразуются в эфемеридное время в пределах 6.0e-8 с от str2et (порог 1e-6 с), и SPICE вычисляет экспорт OEM в пределах порога (наихудшее 0,060). Синтетические кеплеровы дуги: ничего о физической точности. Другие типы SPK не записываются | VALIDATED |
| VM-1970e41c | Типы SPICE SPK 3 и 21 (Чебышёв, расширенные линии разностей) | Писатель и читатель сегментов NAIF SPICE SPK типа 3 (многочлены Чебышёва для положения и скорости на фиксированных интервалах, степень от 0 до 27) и типа 21 (расширенные модифицированные разностные массивы, линии разностей интеграторов JPL, MAXDIM от 15 до 25), по заданным записям, в файлах, которые также содержат сегменты типов 9 и 13; выбор записей и вычисление в порядке читателей SPICE. Kshana не подгоняет коэффициенты Чебышёва и не порождает линии разностей | spk_writer (SpkType::Chebyshev3, SpkType::DiffLines21, SpkSegment, InterpolatedSpk) | tests/spk_3_21_spice_oracle.rs (опись, вычисление в обе стороны, побайтовое тождество); spk_writer::tests | CSPICE N0067 через spiceypy 8.3.0 (spkw03, spkw13 и, из той же библиотеки по её символу f2c, spkw21; spkpvn, spkgeo), предварительно зарегистрировано (e1cf80d8) до появления кода, синтетические записи получены из SHA-1 этого коммита: для трёх файлов (тип 3 степеней 0, 12 и 27 с 3–150 записями; тип 21 MAXDIM 15, 20 и 25 с 1–250 линиями, от нуля до двух записей каталога и цепочкой центров; типы 3, 21 и 13 в одном файле с комментариями) опись ядер Kshana в SPICE точна, ядра Kshana побайтно идентичны ядрам, которые SPICE записывает по тем же записям, а spkpvn и spkgeo равны читателю Kshana бит в бит на файлах Kshana и на файлах SPICE (48 876 компонентов в каждую сторону, порог 1e-12 относительно). Синтетические записи: ничего о физической точности; реальные ядра типа 21, произведённые JPL, в набор случаев не входят | VALIDATED |
| VM-c005fb99 | Сообщения CCSDS об ориентации (AEM, APM) | Писатель и читатель сообщений CCSDS 504.0-B-2 об ориентации в KVN и NDM/XML: AEM версии 2,0 (и 1,0 в KVN, с ATTITUDE_DIR, QUATERNION_TYPE и числовыми последовательностями поворотов) с типами ориентации по кватернионам, углам Эйлера и вращению и их вариантами производной, угловой скорости и нутации, несколько сегментов; APM версии 2,0 с блоками кватерниона, Эйлера, угловой скорости, вращения, инерции и манёвра; кватернион A-в-B для записи (504.0-B-2, приложение F) | adm (AemMessage, ApmMessage, quaternion_a_to_b), ndm_xml | tests/adm_orekit_oracle.rs (L1 Orekit читает 33 файла Kshana, L2 Kshana читает 31 файл Orekit, L3 135 поворотов записей; выводы закреплены); adm::tests; ndm_xml::tests | Парсеры и писатели Orekit 13.1.8 (Apache-2.0), запущенные как отдельная программа (xval/adm-orekit), предварительно зарегистрировано (7a6a05fe) до любого сравнения: Orekit разбирает каждое записанное Kshana сообщение (14 AEM KVN, 11 AEM XML, 4 APM KVN, 4 APM XML), и каждое значение в пределах своего порога (кватернионы 1e-14, углы 1e-9 град; наихудшее 0,054 от порога); Kshana разбирает 31 сообщение, которые Orekit записывает по тем же входным данным, в пределах каждого порога; поворот каждой из 135 записей кватернионов, Эйлера и вращения равен AemSegment.getAngularCoordinates в пределах 1e-12 (наихудшее 0,0071 от порога). Все 15 сообщений Kshana в XML проходят проверку по схеме NDM/XML 4.0.0 (зависит от наличия данных, загружается с закреплённым SHA-256). Находка: писатель APM в Orekit отказывается записывать манёвр без MAN_DELTA_MASS (необязательного в стандарте), поэтому манёвры APM охвачены только в направлении «Kshana записывает». Вне набора случаев: типы AEM 1,0 */RATE и XML, повторяющиеся блоки APM | VALIDATED |
| VM-0d74a24d | Сообщения CCSDS об орбитальных данных (OPM, OMM, OCM) | Писатель и читатель сообщений CCSDS 502.0-B-3 об орбитальных данных в KVN и NDM/XML: OPM 3,0 и 2,0 (вектор состояния, оскулирующие кеплеровы элементы, параметры космического аппарата, ковариация, манёвры, пользовательские параметры), OMM 3,0 и 2,0 (средние элементы по среднему движению или большой полуоси, параметры, связанные с TLE, с BSTAR или BTERM и AGOM, ковариация) и OCM 3,0 с траекторией (CARTP, CARTPV, CARTPVA; абсолютные или относительные эпохи), блоками физических свойств, ковариации (CARTP, CARTPV в порядке LTM), манёвров и пользовательскими; OMM полной точности из набора элементов SGP4 рядом с неизменным OmmFile::to_omm_kvn | odm (OpmMessage, OmmMessage, OcmMessage, Section, OcmBlock), ndm_xml | tests/odm_orekit_oracle.rs (L1 Orekit читает 30 файлов Kshana, L2 Kshana читает 25 файлов Orekit; выводы закреплены и утверждаются как повторяющиеся); odm::tests | Парсеры и писатели Orekit 13.1.8 (Apache-2.0) для OPM, OMM и OCM, запущенные как отдельная программа (xval/odm-orekit), предварительно зарегистрировано (cc6841da) до любого сравнения: 27 из 30 записанных Kshana сообщений (6 случаев OPM, 5 OMM и 5 OCM в KVN и XML для версии 3,0) разбираются в Orekit с каждым значением в пределах 1e-14 относительно и каждой эпохой в пределах 1e-9 с (904 значения, наихудшее 0,021 от порога), а Kshana читает все 25 сообщений, которые Orekit записывает обратно, в пределах тех же порогов (858 значений, наихудшее 0,020); все 14 сообщений Kshana в XML проходят проверку по схеме NDM/XML 4.0.0 (зависит от наличия данных). Находки, зафиксированные, сужающие заявление: Orekit требует ELEMENT_SET_NO (необязательного в 502.0-B-3), отказывается принимать COMMENT в пользовательских параметрах XML (схема это допускает), не записывает BTERM без BSTAR (поэтому BTERM и AGOM охвачены только в направлении «Kshana записывает») и прибавляет относительные эпохи OCM как секунды СИ, поэтому в TDB они отличаются от календарного чтения TDB примерно на 1.9e-10 с/с (UTC, TAI и TT согласуются). Прежний вывод OmmFile::to_omm_kvn, оборачивающий метаданные OMM в META_START/META_STOP, Orekit отвергает (записано). Вне области: блоки OCM PERT и OD, некартезианские наборы элементов, другие порядки ковариации | VALIDATED |
| VM-5949d2d2 | Бюджет ошибки ориентации и наведения, 3-DOF (AOCS) | Наихудший гравитационно-градиентный возмущающий момент ((3/2)(μ/R³)ΔI) как пик по ориентации (проверяемое утверждение), а также бюджет ошибки наведения по RSS для именованных вкладов 1σ с указанием доминирующего слагаемого (квадратичная сумма чисел, заданных вызывающей стороной, вне проверяемого утверждения). Запускается из CLI и привязок как вид сценария attitude-budget (scenarios/attitude-budget.toml) |
attitude_budget | attitude_budget::tests (гравитационно-градиентный момент GG обращается в нуль для симметричного тела, растёт при понижении, линеен по ΔI, квадратичная сумма RSS, сумма долей дисперсии равна 1); tests/attitude_gg_torque_reference.rs (20 случаев в сравнении с независимым моментом GG по полному тензору T=(3μ/R³)(n̂×(I·n̂)), численно максимизированным по ориентации с помощью linalg Hipparchus 3,1; наихудшее относительное 6e-15, + опубликованная полоса Wertz/Sidi O(1e-6) s⁻²); tests/attitude_gg_torque_basilisk_oracle.rs::gravity_gradient_torque_matches_basilisk (40 случаев в сравнении с GravityGradientEffector Basilisk 2.9.1: пик при ориентации 45 deg в пределах 1e-12 относительно, наихудшее 2.1e-15; выше пика момента нет при 2000 случайных ориентаций на случай, 3 диагональных и 5 общих тензорах инерции, 5 высотах) | Basilisk 2.9.1 GravityGradientEffector (AVSLab, ISC) — независимая реализация на C++ полного тензорного гравитационно-градиентного момента: пик Kshana (3/2)(μ/R³)ΔI равен моменту Basilisk при ориентации 45 градусов с относительной погрешностью до 1e-12 (наихудшая 2.1e-15) для 5 высот и 8 тензоров инерции и ограничивает момент Basilisk при 2000 случайных ориентациях для каждого случая; допуск зафиксирован до сравнения. Проверяемое утверждение: пик гравитационно-градиентного момента. Бюджет наведения по RSS — это квадратичная сумма чисел, заданных вызывающей стороной, без внешней истины, и он остаётся вне этого утверждения; написанная вручную максимизация полного тензора Hipparchus сохраняется как вспомогательная проверка внутренней согласованности. Моделирование контура управления, 6-DoF и гибких мод не выполняется | VALIDATED |
| VM-a9b472c1 | Прогнозирование проходов над наземной станцией (наземный сегмент) | Проходы видимости во временной области (AOS/TCA/LOS, максимальный угол места, длительность) для орбитального пропагатора движка над станцией выше маски угла места, с интерполированными моментами восхода и захода и суммарным доступом: passes::predict_passes, геометрический планировщик (без рефракции и времени распространения света). Вид сценария passes запускает предиктор видимых положений из строки «Apparent ground-station pass prediction with refraction and light time» |
passes | passes::tests (линейное пересечение при интерполяции и устойчивость к вырождению, проходы от полярных до средних широт, более высокая маска ⇒ не больше проходов); tests/ground_station_pass_prediction_reference.rs (22 сценария / 129 проходов в сравнении с Orekit 12,2 ElevationDetector; наихудшие |Δ| AOS/LOS 0,0000 s, максимальное возвышение 0,0014°, суммарный доступ 0,0001 s, число проходов совпадает) | Orekit 12,2 (CS GROUP, Apache-2.0) + Hipparchus 3,1 — независимая библиотека динамики полёта: ElevationDetector (поиск корней методом Брента) + EventsLogger по эфемеридам ITRF, станция как WGS-84 TopocentricFrame. AOS, LOS, максимальный угол места, число проходов и суммарный доступ совпали при одинаковых орбите, станции, маске и окне (зафиксированный набор данных; драйвер xval/orekit-passes) | VALIDATED |
| VM-81de805c | Прогнозирование видимых проходов над наземной станцией с учётом рефракции и времени распространения света | Проходы видимости (AOS, TCA, LOS, максимальный видимый угол места, длительность) набора элементов SGP4 над станцией WGS-84 на проверенном пути для околоземных орбит (IAU 2006/2000A, необязательные параметры ориентации Земли) с тропосферной рефракцией по ITU-R P.834-9 (уравнения 9–14, коэффициенты, напечатанные в Рекомендации) и временем распространения света на нисходящей линии; каждая поправка отключаема; моменты пересечения находятся делением пополам с точностью 1e-7 с, а кульминация — поиском золотого сечения. Запускается из CLI и привязок как вид сценария passes (scenarios/passes.toml); обе поправки по умолчанию включены |
passes (predict_passes_apparent, apparent_look_angles, ApparentOptions, p834_tau_s_deg, p834_tau_deg, p834_theta_m_deg, p834_apparent_elevation_deg, PassesScenario) | tests/pass_predictor_on_path_orekit_oracle.rs (60 случаев, 1210 проходов: AOS/LOS в пределах 3.4e-6 s, порог 5 ms; максимальное возвышение в пределах 5.5e-7 deg, порог 1e-3 deg; 8979 кажущихся направлений в пределах 8.8e-7 deg, порог 1e-4 deg); tests/earth_orbit_path_sgp4_erfa_oracle.rs (путь); passes::tests (p834_equations_9_and_14_are_consistent_and_vanish_toward_the_zenith; refraction_lengthens_passes_and_light_time_delays_them); tests/pass_predictor_apparent_orekit_oracle.rs (вывод round-1, закреплён; orekit_p834_coefficient_differs_from_the_recommendation_above_sea_level) | Orekit 13.1.8 (CS GROUP, Apache-2.0) с Hipparchus 4.0.3: TLEPropagator на тех же наборах элементов в TEME, которую Orekit строит по заявленному определению (её IERS 2010 TOD, повёрнутая на GAST - GMST), ElevationDetector и ElevationExtremumDetector с ITURP834AtmosphericRefraction и без неё, а также AngularAzEl с AngularRadioRefractionModifier для случая со временем распространения света; пересечения и максимум найдены средствами Hipparchus; 60 случаев (четыре орбиты, пять станций на уровне моря, маски 0, 5 и 10 градусов, 24 часа). Пороги зафиксированы до прогона (предварительная регистрация e947e69d, этап 3 из 72ea9eb0). Если пренебречь временем распространения света (9777 отказов) или заменить константу P.834 1,728 на 1,828 (7883 отказов), тест становится красным. Область применения: станции на уровне моря; коэффициент P.834 h*theta0^2 в Orekit равен 0,011380, тогда как Рекомендация печатает 0,01380 (зафиксировано), поэтому высоты над уровнем моря не сравниваются. Раунд 1, сравнение с TEME Orekit по умолчанию на основе IERS 1996, выдержал все пороги по проходам, но не выдержал порог по направлению из-за расхождения конвенций TEME в 72 мсд (зафиксировано) | VALIDATED |
| VM-ac9e18de | Адаптивное кодирование и модуляция DVB-S2 на проходе нисходящей линии LEO | Es/N0 нисходящей линии вдоль каждого прохода одного спутника над одной станцией (EIRP, потери в свободном пространстве, потери в атмосфере по закону косеканса, прочие потери, G/T, постоянная Больцмана, символьная скорость), наиболее эффективный MODCOD DVB-S2, который проходит порог квазибезошибочного приёма по ETSI EN 302 307-1 V1.4.1, таблица 13, плюс запас на реализацию на каждом шаге, объём данных ACM за проход и базовый уровень с постоянным кодированием, замыкающийся на маске и на наибольшей дальности. Запускается как вид сценария acm-link. Иллюстративные входные данные; MODELLED. |
contact_schedule (es_n0_db, select_modcod, fspl_db, atmospheric_loss_db, ccm_modcod, pass_capacity, AcmLinkScenario); passes::predict_passes_apparent | contact_schedule::tests::modcod_efficiency_closed_form_matches_the_printed_table; contact_schedule::tests::modcod_selection_is_monotone_and_honours_the_margin; contact_schedule::tests::link_budget_pieces_have_closed_forms; contact_schedule::tests::acm_link_defaults_run_and_acm_beats_ccm | Внутренняя согласованность: спектральная эффективность, вычисленная в замкнутом виде по K_bch из таблицы 5a и длинам кадров, согласуется с эффективностями, которые печатает таблица 13 (проверка правильности переноса таблицы порогов); составляющие бюджета линии согласуются со своими замкнутыми формами; выбор монотонен по Es/N0 и учитывает запас; ACM передаёт объём не меньше, чем при постоянном кодировании. Геометрия прохода берётся из отдельно VALIDATED предиктора видимых проходов. ЧТО НЕ ПРОВЕРЕНО: ни с внешним инструментом, ни с измеренной линией сравнение не проводилось; пороги — идеальные значения стандарта для AWGN, а не значения какого-либо модема; замирания в дожде, потери наведения вдоль прохода и пилот-сигналы не моделируются. | MODELLED |
| VM-41760091 | Планирование наземных контактов для нескольких спутников и нескольких станций с разрешением конфликтов | Кандидаты в контакты из каждого прохода «спутник — станция» с объёмом данных ACM; конфликты, когда одна антенна обслуживала бы два спутника в пределах времени перенацеливания либо один спутник передавал бы данные на две станции одновременно; взвешенная по приоритетам целевая функция доставки, ограниченная накопленным объёмом каждого спутника; ленивый жадный план по предельной ценности, базовый план «первым пришёл — первым обслужен» и точный метод ветвей и границ для не более чем 26 кандидатов с указанием разрыва оптимальности жадного плана. Запускается как вид сценария contact-schedule. Иллюстративные входные данные; MODELLED. |
contact_schedule (conflicts, objective, delivered, schedule_chronological, schedule_greedy, schedule_optimal, ContactScheduleScenario) | contact_schedule::tests::conflicts_cover_turnaround_and_one_station_per_satellite; contact_schedule::tests::greedy_is_feasible_and_the_exact_solver_beats_or_ties_it; contact_schedule::tests::exact_solver_matches_brute_force_and_plans_are_feasible; contact_schedule::tests::exact_solver_declines_above_the_limit; contact_schedule::tests::contact_schedule_defaults_run_reproducibly; contact_schedule::tests::scenarios_reject_bad_inputs | Внутренняя согласованность: точный метод ветвей и границ совпадает с полным перебором на малых случайных наборах, каждый план проверяется на допустимость по правилам конфликтов, а жадный план никогда не превосходит точный оптимум. ЧТО НЕ ПРОВЕРЕНО: ни с внешним планировщиком, ни с эксплуатационным планом сравнение не проводилось; контакты берутся целиком (без разбиения), накопленный объём фиксируется в начале окна, время наведения сверх фиксированного времени перенацеливания и бортовая память не моделируются. | MODELLED |
| VM-082eb065 | Односторонний бюджет линии (связь и проектирование линий) | Потери в свободном пространстве, C/N₀, Eb/N₀, запас и замыкание по уравнению линии CCSDS 401 / DSN 810-005 для EIRP/G·T/дальности/скорости/диапазона относительно требуемого Eb/N₀. Запускается из CLI и привязок как вид сценария link-budget (scenarios/link-budget.toml) |
linkbudget | linkbudget::tests (форма потерь в свободном пространстве, замыкание уравнения линии); tests/one_way_link_budget_reference.rs (DCT Galileo в X-диапазоне DESCANSO/JPL воспроизведён от начала до конца + 6 случаев FSL по ITU-R P.525 для центров диапазонов S/X/Ka DSN; наихудшие |ΔFSL| 4.6e-3 dB, |Δнесущая| 2.5e-2 dB) | Опубликованная таблица управления проектом телекоммуникаций дальнего космоса в виде зафиксированных числовых векторов: DESCANSO / J. H. Yuen (ed.), Deep Space Telecommunications Systems Engineering, JPL Pub 82-76, таблица 1-1 (Galileo, X-диапазон) — kshana заново собирает статьи таблицы и воспроизводит её опубликованные сквозные значения L_fs 290,54 дБ и Pr/N0 54,6 дБ-Гц; потери в свободном пространстве также сверены с ITU-R P.525 | VALIDATED |
| VM-0f818901 | Экономичная постановка «стоимость на единицу покрытия» и ROI | Стоимость за процент покрытия и ROI «покрытие на евро» на основе движка расчёта размера орбитальной группировки; стоимость спутника — это заданный вызывающей стороной диапазон низкая/номинальная/высокая (без выдуманных цен) | frugal (over walker) | frugal::tests (выведенная вручную стоимость на покрытие 48/96=0,5, отношение ROI 2,667, упорядочение границ + защита от нулевого покрытия) | Арифметика стоимости в замкнутом виде в сравнении со значениями, выведенными вручную; экономическая ПОСТАНОВКА для смоделированной величины покрытия, а не котировка и не проверенная модель стоимости | MODELLED |
| VM-a32735f9 | Влияние пропуска обнаружения на целостность (HPL/VPL с учётом контекста против предела тревоги) | Сопоставляет необнаруженное смещение от спуфинга или подавления с эффективной ошибкой → область Стэнфорда (доступно/недоступно/MI/HMI) относительно HAL/VAL для конкретного контекста (открытое небо или город) | integrity_impact (over raim) | integrity_impact::tests (один и тот же пропуск переходит Available→MI→HMI по мере ужесточения контекста; консервативный PL→Unavailable; HMI по осям; защита входных данных) | Использует классификацию Стэнфорда для RAIM, проверенную внешним образом (raim::classify_stanford); само сопоставление «пропуск обнаружения → предел тревоги» смоделировано и не является сертифицированным распределением целостности | MODELLED |
| VM-ba0eda3b | Паспорт параметров модели ошибок CAI с цитируемыми источниками (13503) | Диапазоны (наилучший/номинальный/консервативный) характеристик холодноатомного интерферометра — нестабильность смещения, случайное блуждание скорости и угла, стабильность масштабного коэффициента, частота выборки, ограниченная временем опроса, динамический диапазон при неоднозначности полос, — каждый с прослеживаемой ссылкой; передаётся в QuantumNavBudget без моделирования аппаратуры | inertial::cai_params (over inertial::quantum_imu) | inertial::cai_params::tests (физический VRW попадает в приведённую вилку VRW на всех 3 уровнях; необработанный диапазон неоднозначности полосы вычислен из k_eff·T²; консервативный бюджет дрейфует больше наилучшего; каждая вилка имеет источник + помечена флагом подтверждения; защита упорядочения вилок) | Внутренняя согласованность: цитируемый диапазон VRW сверен с физикой CaiAccelerometer::accel_asd, а необработанный динамический диапазон вычислен по пределу неоднозначности полос; числа — диапазоны MODELLED по обзору литературы (needs_source_confirmation), ни одно устройство не проверено, ореола проверки нет | MODELLED |
| VM-cea9b5d7 | Эталонный тест соответствия целостности времени — классификатор эпох по диаграмме целостности Стэнфорда | Классификация эпох TIB по диаграмме целостности Стэнфорда (номинально/недоступно/MI/HMI) | src/benchmark/stanford.rs | src/benchmark/stanford.rs::tests (четыре области + включающие границы + |ошибка| + недоступность при PL>AL); tests/tib_scorer_reference.rs (число классификаций против независимого numpy на фиксированном синтетическом наборе) | Независимая реализация правила четырёх областей на numpy (scripts/gen_tib_scorer_reference.py) на том же наборе выборок; метод Cited из диаграммы целостности Стэнфорд–ESA (Tossaint et al., ION GNSS 2007) и RTCA DO-229 WAAS MOPS. НЕ оракул точности ExternalDataset — тест не зависит от честности. | MODELLED |
| VM-00ec4aa5 | Эталонный тест соответствия целостности времени — оценка покрытия целостности | Оценка покрытия целостности TIB (доли HMI/MI/доступности + вердикт о покрытии оценкой с запасом) | src/benchmark/coverage.rs | src/benchmark/coverage.rs::tests (чистый/с недооценкой границы/полностью недоступный/пустой); tests/tib_scorer_reference.rs (числа + доли + coverage_ok против numpy с точностью до 1e-12) | Независимый пересчёт областей на numpy в tests/fixtures/tib/reference.json; только перекрёстная проверка механизма оценки, без утверждения о точности. | MODELLED |
| VM-28757f0d | Эталонный тест соответствия целостности времени — каталог неисправностей (параметрические генераторы) | Меню неисправностей TIB (расхождение доменов, скачок часов, дрейф в holdover, статическая/нарастающая/симметричная/асимметричная задержка, повтор в пределах свежести, избирательная по пути, кворум k из N) | src/benchmark/faults.rs | src/benchmark/faults.rs::tests (профили смещений, монотонный выбег, пометка необнаруживаемого множества, согласованность max_offset, ровно два необнаруживаемых класса) | Репрезентативные параметрические генераторы неисправностей (Modelled); необнаруживаемый набор (симметричная задержка, повтор в пределах свежести) Cited из Mizrahi RFC 7384 и Narula & Humphreys (IEEE JSTSP 2018). Внешнего оракула нет — каталог неисправностей не делает измеренных утверждений. | MODELLED |
| VM-06ca2957 | Эталонный тест соответствия целостности времени — вердикт о поглощении необнаруживаемого | Вердикт TIB о поглощении необнаруживаемого (симметричная задержка и повтор должны поглощаться PL и никогда не сообщаться как обнаруженные) | src/benchmark/scorecard.rs | src/benchmark/scorecard.rs::tests (эталонный PL поглощает; сломанный PL не поглощает и никогда не обнаруживает; вердикт покрытия для обнаруживаемого; свойство честности: для необнаруживаемого сценария недостижим никакой вердикт о покрытии/обнаружении) | Проверка свойства: перечисление Verdict структурно не может сообщить необнаруживаемую неисправность как обнаруженную (Mizrahi RFC 7384); поглощено ⟺ PL ≥ смещение. Оракула точности нет. | MODELLED |
| VM-58d5ea17 | Инженерия космической платформы (AOCS/тепловой режим/конструкции/двигательная установка/электропитание) | Не предоставляется — Kshana — симулятор навигационных характеристик, а не разработчик платформ | — | — | — | PARTNER |
| VM-4189e731 | Проектирование навигационной РЧ-полезной нагрузки и антенного оборудования | Не предоставляется — Kshana моделирует характеристики сигнала, а не аппаратуру полезной нагрузки или антенн | — | — | — | PARTNER |
| VM-8b51babd | Проектирование и доведение аппаратуры квантовой полезной нагрузки | Не предоставляется — только модели характеристик; аппаратура на холодных атомах и часы — зона ответственности партнёра | — | — | — | PARTNER |
| VM-3cd10418 | Обеспечение качества лётной аппаратуры (радиация/EEE/MAIT) | Не предоставляется — Kshana касается только обеспечения качества программного обеспечения; обеспечение качества лётной аппаратуры — зона ответственности партнёра | — | — | — | PARTNER |
| VM-b691fa8a | Лунное координатное время | Релятивистская скорость хода часов Земля–Луна (LTC/TCL) + цепочка TT/TAI/UTC + ансамбль | lunar_time | lunar_time::tests (скорость в замкнутой форме; круговое преобразование); tests/lunar_coordinate_time_reference.rs (члены собственного потенциала и векового хода LTC в сравнении с опубликованными значениями Ashby & Patla 2024 + геоцентрическая скорость Луны в сравнении с JPL DE440) | Ashby & Patla 2024, «A Relativistic Framework to Estimate Clock Rates on the Moon», Astronomical Journal 167:149 (NIST; основа для LTC LunaNet по IAU/IAG): собственный потенциал поверхности Луны L_m = 3.13881e-11 и вековой итог 56,02 мкс/сут совпали с опубликованными числовыми значениями; геоцентрическая скорость Луны сверена с JPL DE440 (de440s.bsp через SPICE) | VALIDATED |
| VM-77f54b2d | Самоописание гибридного оптического и радиочастотного отчёта | Отчёт hybrid-optical-rf указывает конфигурацию линии, с которой он действительно выполнялся (длина волны несущей, передающая и приёмная апертура, дальность, длительность импульса, время интегрирования, эффективности и потери, с разрешёнными значениями по умолчанию), и содержит блок единиц с единицей измерения и классом происхождения каждой величины, которую статья, вероятно, будет цитировать, включая следы ковариации передачи в квадратных метрах | hybrid_integrity | hybrid_integrity::tests (разрешённая конфигурация возвращается для значений по умолчанию и для переопределений, без прохода длины волны через метры туда и обратно; каждая запись units несёт и единицу, и класс происхождения; каждое поле, названное блоком units, действительно выдаётся, так что он не может документировать несуществующее) | Внешнего оракула нет, и быть не может: это самоописание, а не измерение. Оно записывается, потому что его отсутствие было дефектом — P5 пришлось брать длину волны несущей и передающую апертуру из значений по умолчанию в исходном коде и делать вывод, что голый variance выражен в квадратных метрах, по проверке внутренней согласованности. Вывод оказался верным, и именно поэтому это было важно: ничто не обнаружило бы ошибку, будь он неверным |
MODELLED |
| VM-7a793449 | Доступность гибридной оптической и радиочастотной линии на радиочастотной стороне | Отчёт hybrid-optical-rf указывает доступность радиочастотной линии, составленную из величин, которые движок уже вычисляет, а не из импортированной климатологии, и формулирует композицию как именованное правило: A_rf = I_closure * I_track, где I_closure — вердикт о замыкании одностороннего бюджета линии CCSDS-401 / DSN-810-005 (linkbudget::link_budget, запас Eb/N0 >= 0) на собственной дальности сценария, а I_track — вердикт контура слежения (jamming::lock_status) по C/N0, которое вернул ТОТ ЖЕ бюджет. Каждый множитель передаёт класс происхождения своих входных данных на выход, а множители, которые намеренно НЕ входят в произведение — геометрическая видимость, отказ из-за помех и климатология радиочастотных перерывов, — названы с указанием причины, а не молча принимаются равными 1. Разрешённое радиочастотное плечо дублируется в собственном блоке rf_link_configuration, а непрерывные величины рядом с индикатором (запас линии, запас по C/N0, дальности замыкания и слежения в замкнутом виде и использование дальности) — это обращения по дальности того же бюджета. Отчёт полностью указывает — в блоке и в записи единиц, на которую попадает читатель, — что эта величина ОГРАНИЧЕНА ЗАПАСОМ И ГЕОМЕТРИЕЙ и ДЕТЕРМИНИРОВАНА, тогда как оптическая доступность ОГРАНИЧЕНА ПОГОДОЙ И КЛИМАТОЛОГИЕЙ и вероятностна, поэтому их никогда нельзя приводить как сопоставимую пару процентов | hybrid_integrity, linkbudget, jamming | hybrid_integrity::tests (доступность равна произведению двух индикаторов, пересчитанных по собственным запасам отчёта, а эти запасы сами пересобираются из собственных EIRP, потерь в свободном пространстве, суммарных потерь, добротности, члена Больцмана, скорости передачи данных и требования с точностью до 1e-9 дБ; измерено, что значение равно 0 или 1, тогда как оптическая доступность в том же прогоне, как измерено, строго между ними; каждая строка фактора несёт класс происхождения из закрытого словаря field_schema; сообщённая дальность замыкания, повторно пропущенная через бюджет линии, возвращает запас от 0 до 1e-9 дБ и, как измерено, не зависит от дальности, на которой стоял прогон, на четырёх порядках, тогда как использование дальности меняется ровно в отношении дальностей; линия -40 дБВт сообщает доступность 0, LOST, и использование выше 1, а не долю; устаревшая заметка «ни одного радиочастотного аналога доступности этот движок не вычисляет» подтверждённо удалена, а замена подтверждённо называет новое поле; некорректный радиочастотный вход отклоняется, а не усекается) | Внешнего оракула нет, и ExternalDataset отклонён. Два входа — запас Eb/N0 и пересечение порога C/N0 — оба являются функциями MODELLED EIRP, добротности и сводного распределения потерь; записи об измеренной доступности для гибридной оптической и радиочастотной службы Земля–Луна, с которой можно было бы сверить составную величину, нет. Существующие проверки внутренние и названы таковыми: композиция пересчитывается по собственным опубликованным запасам отчёта, а не по внутренним значениям излучателя, а дальность замыкания проверяется повторным прогоном уравнения линии НА ней с требованием, чтобы запас обратился в нуль, — это круговая проверка обращения, а не независимая реализация. Честный предел величины записан в самом отчёте: это детерминированный индикатор 0/1, а не вероятность, потому что ничто в этом движке не измеряет распределение радиочастотных перерывов линии в этом диапазоне и этой геометрии. Этот недостающий вход назван в rf_availability.factors_not_included, а не выдуман, и именно его предоставление понадобилось бы для вероятностной радиочастотной доступности | MODELLED |
| VM-0a8f4175 | Сопоставимое сравнение оптической и радиочастотной дальнометрии | Отчёт hybrid-optical-rf выдаёт отношение оптической и радиочастотной дальнометрии вместе с ОДНОЙ конфигурацией, при которой оценивались оба плеча, в том же объекте: тот же односторонний путь, та же дальность и то же время накопления. Оптическое плечо — это фотонно-ограниченная граница Крамера — Рао по ToA движка для одностороннего числа фотонов; радиочастотное плечо — это тепловой джиттер слежения за кодом DLL (опережение–запаздывание) движка при C/N0, которое возвращает собственный бюджет линии движка для той же односторонней дальности. Шумовая полоса контура выводится, а не выбирается: B_L = 1/(2*integration_s) ставит радиочастотное плечо ровно на оптическое время накопления, а если вызывающая сторона переопределяет её так, что времена усреднения расходятся, отношение REFUSED — null, с указанием расхождения и обоих времён, — вместо того чтобы приводиться для двух рабочих точек. Отношение с ВЫБРАННЫМ параметрическим rf_position_sigma_m сценария не образуется, и отказ объясняет причину: этот вход не несёт никакой конфигурации. Опубликованный двусторонний оптический итог и точный множитель, связывающий его с плечом одностороннего сравнения, выдаются рядом с отношением, так что отчёт нельзя прочитать как содержащий две расходящиеся оптические сигмы | hybrid_integrity, optical_linkbudget, linkbudget, navsignal | hybrid_integrity::tests (отношение равно частному двух выданных ветвей с относительной точностью 1e-15, а обратное ему и децибельная форма согласуются; дальность и сигма времени каждой ветви связаны ровно через c; выданная общая конфигурация подтверждённо равна собственным дальности и времени интегрирования сценария, а дальность радиочастотной ветви подтверждённо равна дальности оптической; C/N0 радиочастотной ветви побитно совпадает с значением блока доступности, из одного бюджета линии, а не повторного вывода; свойство ОДИНАКОВОСТИ УСЛОВИЙ MEASURED, а не утверждается -- учетверение общего времени накопления вдвое уменьшает оптическую ветвь с точностью до 1e-12 и радиочастотную с точностью до 1e-7 и оставляет отношение неизменным с относительной точностью 3.19e-9, чего не смогла бы ветвь, тайно усредняющая по чему-то другому; переопределение rf_dll_bandwidth_hz, нарушающее общее время усреднения, делает отношение null с причиной, называющей оба времени, при том что обе ветви по-прежнему выдаются; односторонний прогон делает ветвь сравнения побитно равной выпущенному основному показателю со штрафным коэффициентом ровно 1, а двусторонний воспроизводит штраф 0.5/sqrt(геометрические потери обратного пути), пересчитанный по собственному geometric_loss_db отчёта с точностью до 1e-12) | Внешнего оракула для ОТНОШЕНИЯ нет, и ExternalDataset отклонён намеренно. У лежащей в основе радиочастотной цепочки он есть — tests/validate_p5_rf_ranging_precision.rs сверяет linkbudget::link_budget и navsignal::dll_code_jitter_chips с независимым набором на Python/NumPy и с жёстко заданным рабочим значением Kaplan & Hegarty (2.814e-3 чипа / 0,825 м при 45 дБ-Гц), а у оптической границы Крамера — Рао есть собственная строка в замкнутом виде. Ссылка на любой из этих якорей для данной строки была бы заимствованной проверкой, предотвращению которой служат инварианты матрицы: здесь величина — это ОТНОШЕНИЕ при конфигурации с MODELLED EIRP, добротностью, мощностью передачи и апертурой, и измеренного сравнения оптической и радиочастотной дальнометрии в общей рабочей точке, с которым его можно было бы сверить, не существует. Внутренне проверяется то, в чём отношение действительно может ошибиться: что оба плеча находятся в одной рабочей точке. Это измеряется масштабированием общего времени накопления с требованием, чтобы оба плеча менялись по одному закону квадратного корня, а отношение оставалось на месте, и обеспечивается тем, что отношение прямо отвергается, когда времена усреднения расходятся. Обе границы — пределы теплового и дробового шума, и обе исключают задержку в среде, ошибку часов и неоднозначность, поэтому исключение одинаково с обеих сторон; отчёт говорит об этом прямо, а не оставляет это на домысел | MODELLED |
| VM-0117d857 | Самоописание отчёта о бюджете линии | Отчёт о бюджете линии указывает каждую абсолютную константу, по которой вычислялся его собственный запас, — частоту несущей, использованную для потерь в свободном пространстве, EIRP, добротность, сводные потери и член Больцмана, — а также требуемое G/T, при котором запас равен нулю, константу линии (EIRP − потери − требуемое Eb/N0), которая является единственной комбинацией, которую может зафиксировать опубликованная таблица скорость/усиление, и, когда вызывающая сторона задаёт шумовую температуру системы, усиление приёмной антенны, которое подразумевает эта добротность | linkbudget | linkbudget::tests (по трём диапазонам, четырём порядкам дальности и обоим вердиктам замыкания запас и потери в свободном пространстве под ним пересчитываются по одному лишь отчёту с точностью лучше 1e-9 дБ; требуемая G/T, собранная из членов уравнения, совпадает с той же величиной, полученной как G/T минус запас, а повторный прогон на ней обнуляет запас; три бюджета с сильно различающимися EIRP, потерями и порогом, но равной константой линии дают одинаковое требование, тогда как 1 дБ на константе сдвигает его ровно на 1 дБ; разделение усиления отсутствует, пока не задана шумовая температура, а неположительная отклоняется; каждое поле, названное блоком units, действительно выдаётся) | Внешнего оракула нет: это самоописание поверх уравнения, уже проверенного по опубликованной таблице управления проектом (см. строку об одностороннем бюджете линии). Оно записывается, потому что его отсутствие было измеренным дефектом — для воспроизведения выпущенного d1_rate_gain_beamwidth.csv пришлось подбирать одну эффективную константу с точностью до 0,0034 дБ по всем тридцати строкам, а теперь движок и называет эту комбинацию, и доказывает тестом, что ни одна выпущенная таблица не могла бы разделить её три составляющие | MODELLED |
| VM-70c4fb1a | Таблица перехода лунного времени по классам часов | Один прогон бюджета лунного времени выдаёт строку перехода «часы — система отсчёта» для каждого класса часов при едином общем члене системы отсчёта, так что единственной переменной в сравнении остаются часы; каждая строка несёт переход, найденный двумя способами, — делением пополам по общей степенной кривой ошибки времени и алгебраическим обращением по доминирующему типу шума в строке, — с относительной разностью между ними | lunar_time_budget | lunar_time_budget::tests и lunar_time_budget_scenario::tests (все четыре класса присутствуют в одном прогоне и в порядке запрошенного подмножества; каждая строка согласуется со своей замкнутой формой с относительной точностью лучше 1e-12; масштабирование ошибки системы отсчёта в k раз масштабирует точку пересечения в k раз для часов с фликкер-FM и в k^2 раз для часов с белым FM, проверено при k=2 и k=3, что разделяет два класса шума; каждая строка воспроизводит пересечение для одних часов, о котором бюджет уже сообщал; каждая строка восстанавливает единый общий член системы отсчёта; неизвестное имя часов отклоняется) | Два разных вычисления одной и той же величины в кодовой базе, а не одно, переформулированное: деление пополам по степенной кривой IEEE-1139 ничего не знает о типе шума, тогда как замкнутая форма обращает доминирующий тип алгебраически, так что неверно классифицированный тип шума или плохая скобка проявляются как заметно не малая относительная разность. Четыре значения также воспроизводят опубликованную таблицу статьи с точностью до половины её последней напечатанной цифры, — но сама эта таблица была восстановлена по той же замкнутой форме, поэтому это проверка воспроизводимости, а не внешний оракул, а член системы отсчёта, относительно которого выполняется измерение, — это распределение Modelled | MODELLED |
| VM-2ed75c91 | Совместная ошибка UT1 и движения полюса на общем наборе строк | Одна таблица сообщает ошибку прогноза UT1, ошибку полюса при движении полюса и их квадратичную комбинацию на Луне на ИДЕНТИЧНОМ наборе эпох для каждого горизонта, выдавая эпохи, на которых измерялась каждая составляющая. Отдельно сценарий называет, какой вход EOP действует, и раскладывает перепись его строк, а также всегда выдаёт таблицу горизонтов «прогноз против окончательных значений» с явным указанием причины, по которой она пуста, когда это так | frame_eop, realtime_frame_eop | frame_eop::tests и realtime_frame_eop::tests (все три компонента несут равные, поэлементно идентичные, строго возрастающие наборы эпох по обоим реальным выпускам IERS; совместный набор сужается до пересечения, когда два блока Bulletin B действительно расходятся, а горизонт без общих строк опускается, а не заполняется нулями; пустота таблицы «прогноз против итога» указана в документе, а не подразумевается отсутствием поля; реальная вторая версия заполняет её, сверено строка за строкой; отсутствие более поздней версии — это ошибка, а не молчаливо пустая таблица); tests/joint_eop_table_astropy_erfa_oracle.rs::joint_table_and_predicted_vs_final_tables_match_astropy_and_erfa (таблицы 3, 4 и 6 сценария от начала до конца: наборы эпох точны, статистика UT1 и полюса в пределах 1e-9, комбинация у Луны в пределах 1e-5 от полного вращения ERFA, заявленный статус каждого случая «прогноз против итога»); tests/joint_eop_error_iers_ar2019_oracle.rs::bulletin_a_2019_prediction_error_matches_the_iers_realised_statistics (Kshana/IERS от 1,001 до 1,100 на сроках от 1 до 90 суток); перепись строк: tests/embedded_eop_vintage_astropy_preregistered.rs (строка автономных входных данных); регрессия round-1: tests/joint_eop_error_bulletin_a_oracle.rs::measured_error_against_the_iers_accuracy_formula_pole_agrees_ut1_does_not | astropy 8.0.1 utils.iers (BSD-3), читающий продукт IERS finals2000A по собственному правилу «Бюллетень B, иначе A», и pyerfa 2.0.1.5 (SOFA) — полные повороты от небесной к земной системе (c2i06a, sp00, pom00, c2tcio; угол вращения Земли по IERS 2010, уравнение 5,15, в точной арифметике), запущенные как отдельные программы на дословных строках замороженного finals2000A.all от 2026-09-30; зарегистрировано заранее (455b8fb5) с поправками A1 и A2, фиксирующими только численную точность оракула (обе раскрыты вместе с прогонами, за которыми последовали): каждый список эпох таблицы 3 совпал, статистики UT1 и полюса — в пределах 6e-16, комбинация — в пределах 1.9e-7, 12/12 случаев «прогноз против окончательных значений». Проверка комбинации не может различить ошибки члена полюса меньше примерно 1e-4 в относительном выражении, потому что в ней доминирует UT1; точность полюса опирается на проверку статистики полюса с точностью 1e-9. Правила набора эпох и запасного варианта — это генератор, повторяющий определения Kshana, а статусы пустой таблицы — проектное поведение без внешней истины. Величины: реализованные ошибки прогноза по таблице 3a годового отчёта IERS 2019, Kshana/IERS 1,001–1,100 на 1–90 сут (порог [0,8, 1,25], Measured). Перепись строк: astropy (строка с автономным входом). Раунд 1 (сохранён как регрессионный): по формуле точности, напечатанной в 178 выпусках Бюллетеня A, полюс согласуется в пределах 1.5x, а UT1 — нет, что проверяет формулу IERS по её реализованной ошибке | VALIDATED |
| VM-05ed14c3 | Автономный вход параметров ориентации Земли по умолчанию — настоящий продукт IERS | Значение по умолчанию для среды выполнения realtime-frame-eop — собственная встроенная копия дословной выборки IERS finals2000A (tools/finals2000A_20260930.txt: 174 последовательных суточных строк, MJD 61224–61397, вырезанных из finals2000A.all от 2026-09-30), содержащая все три вида строк, которые определяет формат, классифицированные по флагам IERS I/P (eop::row_vintage): 30 окончательных строк Бюллетеня B, 54 быстрых измеренных строк (флаг I без блока Бюллетеня B) и 90 прогнозов Бюллетеня A (флаг P). Голый запуск без аргумента-файла и без сети выдаёт заполненную таблицу по горизонтам, перепись rows = final_rows + rapid_rows + prediction_rows (174 = 30 + 54 + 90) и predicted_rows.n = 90 на MJD 61308–61397; граница «как выпущено» для сравнений «прогноз против окончательных значений» — последняя измеренная строка. Прежняя выборка из 32 строк (tools/finals2000A_2026.txt, у каждой строки флаг I) и пятистрочная выдержка только с окончательными значениями по-прежнему поставляются и проверяются: на них predicted_rows.n равно 0 — это свойство входного файла, а не результат разбора |
realtime_frame_eop, eop | tests/embedded_eop_vintage_astropy_preregistered.rs::vintage_of_every_row_matches_astropy_and_predictions_match_bulletin_a (шесть точных критериев: байты выборки; 174 строк; счётчики по версиям и полные списки MJD 30/54/90; флаг P и у движения полюса, и у UT1 в каждой прогнозной строке; перепись голого прогона по умолчанию; каждая прогнозная строка равна IERS Bulletin A Vol. XXXIX No. 039 в пределах последней напечатанной цифры, наихудшие 5.0e-5 arcsec и 4.9e-6 s); tests/embedded_eop_census_astropy_oracle.rs::vintage_census_matches_astropy (регрессионная фиксация прежней выборки из 32 строк под классификатором флагов: 20 итоговых, 12 оперативных, 0 прогнозных); tests/embedded_eop_census_astropy_oracle.rs::rows_called_prediction_only_are_flagged_measured_by_astropy (вывод round-1, сохранён); realtime_frame_eop::tests; tests/operational_eop_predictor_reference.rs | astropy 8.0.1 astropy.utils.iers.IERS_A (BSD-3-Clause), читающий те же байты собственным читателем, и таблица Бюллетеня A IERS, том XXXIX, № 039, скопированная число в число; зарегистрировано заранее (6fdae01b) с шестью точными критериями до запуска astropy. Все шесть выполнены: 30 окончательных, 54 быстрых и 90 прогнозных строк с равными списками MJD, у каждой прогнозной строки флаг P, перепись при запуске по умолчанию совпадает, а прогнозы совпадают с Бюллетенем A в пределах последней напечатанной цифры. Раскрыто: срез выбран простым срезом столбцов флагов и блока Бюллетеня B, который показал 30/54/90, до коммита; выборка — это дословный срез, вырезанный этим репозиторием из продукта IERS (SHA-256 в NOTICE набора данных). Проверяемое утверждение — классификация видов строк и перепись поставляемого входа по умолчанию и его прогнозных строк; произвольные пользовательские входы классифицируются по тому же правилу флагов, но в сравнение не входят. 0,30 раунд 1 (заменён): прежнее значение по умолчанию называло 12 строк с флагом I прогнозами Бюллетеня A; теперь движок классифицирует по флагу. ПЕРЕСМОТРЫ: ячейки запуска по умолчанию, которые изменились, перечислены от старых к новым в docs/revisions/M035-default-eop-recut-cell-changes.md (predicted_rows 12 -> 90, нижний предел полюса 0,06776 -> 0,05550 мсд, член ориентации Земли 14,01601 -> 14,01583 м, итог 20,09759 -> 20,09746 м и 67,03834 -> 67,03790 нс, строки таблицы 2 из tests/golden/realtime-frame-eop.csv и величины согласия эксплуатационного предиктора); более ранние — в docs/revisions/G12-default-eop-cell-changes.md | VALIDATED |
| VM-ee245f89 | Площадь захвата в зависимости от высоты и ширины луча | Двухосевой перебор взвешенной по диаграмме, ограниченной по высоте площади захвата поверхности по высоте передатчика и диаметру антенны с выдачей одной строки на рабочую точку, с шириной луча по половинной мощности, которую подразумевает каждый диаметр, а захват края диска сообщается как ПОРОГ — для каждой строки J/S на крае, его запас и мощность передачи, которая его замкнула бы; для каждой сетки — найденные пересечения либо явное утверждение, что край диска нигде на сетке не достигается, с указанием недостатка | antenna | antenna::tests и attack_surface::tests (сетка полна, и каждая захваченная доля лежит в [0 1]; захваченная доля не убывает с ростом мощности передачи в каждом узле; она НЕ монотонна по ширине луча или высоте, что закреплено собственным тестом, чтобы развёртку нельзя было позже сгладить; базовый узел воспроизводит существующую захваченную долю побитно; вычисление только для лимба побитно идентично последней точке полной развёртки; найденное пересечение лежит на пороге с точностью 1e-9 дБ и обрамлено) | Включение множеств: отношение «помеха/сигнал» входит как равномерное смещение в децибелах, поэтому захваченное множество при большей мощности передачи содержит множество при меньшей, и доля может только расти — свойство, которого диаграмма Эйри НЕ даёт по ширине луча или высоте, где захваченная область разбивается на кольца, а доля действительно немонотонна. Никакая опубликованная таблица не даёт захваченную долю диска для лунного орбитального передатчика в зависимости от высоты и ширины луча, поэтому для сверки этих ячеек нет ничего внешнего; диаграмма, лежащая в основе, отдельно Validated по опубликованным значениям функций Бесселя и сохраняет собственную строку | MODELLED |
| VM-b53e2911 | Воспроизводимость бюджета ошибки лунного времени | Сценарий lunar-time-budget публикует свои выходы в виде массивов как таблицу длинной формы («индекс сетки, время усреднения, член») рядом с отчётом, так что семь кривых x(tau) по членам и итог по сумме квадратов — это выход движка, а не то, что читатель восстанавливает по описанию метода | lunar_time_budget_scenario | lunar_time_budget_scenario::tests (все 57 времён усреднения x 8 членов присутствуют, индекс сетки идёт от 0 до 56 включительно и несёт по 8 строк; строка total равна корню из суммы квадратов семи соседних членов при каждом tau; таблица следует запрошенной сетке, а не зашитой в код; её выдача оставляет JSON отчёта побитно идентичным) |
Только самосогласованность: опубликованный итог сверяется с корнем из суммы квадратов членов в том же файле, а выдаваемая кривая воспроизводит выпущенный p3_time_budget_curve.csv по всем 57 точкам. Обе проверки используют собственные определения членов этого движка, поэтому ни одна не независима. Член часов опирается на опубликованные спецификации часов, но ВЕЛИЧИНЫ нижних пределов линии, системы отсчёта, релятивистского члена и эфемерид — документированные бюджетные распределения без внешнего оракула | MODELLED |
| VM-bc822667 | Лаборатория лунного станционного времени: holdover miniRAFS относительно LTC | Необязательный блок [time_lab] сценария lunar-time-budget моделирует часы лунной опорной станции (по умолчанию класс miniRAFS, любой названный класс или карточка устройства, подогнанная по заданным точкам стабильности), подстроенные под координатное лунное время, а затем свободно идущие или заново подстраиваемые каждые N секунд: кривая ошибки времени x(t) как корень из суммы квадратов степенного члена часов, постоянного остатка подстройки (ILLUSTRATIVE), постоянного остатка реализации LTC и включаемого по выбору члена скорости, зависящего от высоты станции; время после подстройки до 1, 10 и 100 нс (или заданных порогов) делением пополам рядом с обращением в замкнутом виде для доминирующего типа шума, а также доминирующий член на каждом заданном горизонте, всё с единицами измерения | lunar_time_lab (over clock_specs, lunar_time_budget, lunar_time) | lunar_time_lab::tests (free_run_clock_term_is_the_budget_clock_term: при выключенной коррекции член часов равен члену часов бюджета до бита для всех четырёх классов; bisection_matches_the_closed_form в пределах 1e-9 относительно для обоих классов шума; threshold_below_the_floor_is_flagged; steering_holds_and_resets; height_term_is_opt_in_and_linear; device_card_reproduces_a_named_class; bad_inputs_are_refused); tests/lunar_station_time_lab.rs (the_block_is_additive: документ по умолчанию, таблица и сводка не меняются, а блок добавляет только собственный объект и единицы; time_to_threshold_matches_the_closed_form_through_the_scenario; clocks_are_ordered_over_the_span_where_the_model_orders_them: optical < PHM < RAFS < miniRAFS от 1 с до 7e5 с, причём пересечение кривых PHM и RAFS между 7e5 и 8e5 с закреплено как раскрытое свойство моделей часов с одним типом шума; every_time_lab_field_has_a_unit; unknown_time_lab_fields_and_clocks_are_refused) | Только внутренняя согласованность: время до порога, найденное делением пополам, сверяется с обращением в замкнутом виде для доминирующего типа шума часов, а член свободно идущих часов — с собственным членом часов бюджета. Классы часов опираются на опубликованные суточные спецификации (их собственные строки); скорость LTC здесь заново не выводится и сохраняет собственную строку VALIDATED (Лунное координатное время); остаток подстройки ILLUSTRATIVE, остаток реализации — бюджетное распределение, тепловая модель не включена. Целевой уровень в наносекундах, описанный в материале ICG WG-B по лунному PNT за июнь 2024, приводится как утверждение источника, а не принимается как утверждение; ничто здесь не является утверждением о каких-либо реальных часах станции | MODELLED |
| VM-f7dcc8ff | Лунная геодезическая РСДБ | Задержка РСДБ в ближнем поле для земной базы, наблюдающей лунный маяк, + частные производные | lunar_vlbi | lunar_vlbi::tests (предел дальнего поля совпадает с delta_dor; поправка ближнего поля; частные производные конечными разностями); tests/lunar_vlbi_anise_oracle.rs::near_field_delay_disagrees_with_the_anise_light_time_difference | Задержка delta_dor для плоской волны (в той же кодовой базе) в пределе дальнего поля; частные производные конечными разностями. Внешнее сравнение 0,30 — вывод (остаётся MODELLED): по сравнению со сошедшимися временами распространения света ANISE 0,10 через DE440 (75 задержек на 2024-01-01 для трёх баз DSN, сформированных xval/anise-lunar-od без кода Kshana) ни одна задержка не укладывается в допуск 1 пс. Наибольший разрыв — 24 мкс, из-за аналитического центра Луны (около 200 км от DE440), единственной мгновенной геометрии без итерации по времени распространения света (3,6 мкс) и отброшенного движения полюса; частные производные маяка отличаются до 2.9e-3 в относительном выражении при пороге 1e-6. Утверждение из документации модуля о том, что приближения системы отсчёта ниже точности модели, на этом уровне не выполняется. Раунд 0,30 2: путь через ядра (lunar_vlbi::KernelGeometry) проверен по временам распространения света NAIF SPICE в собственной строке «Лунная геодезическая РСДБ, путь через ядра»; сравнение этого пути с ANISE (75/75 в пределах 1 пс, наихудшее 0,12 пс, tests/lunar_vlbi_anise_oracle.rs::kernel_delay_matches_the_anise_light_time_difference) — это только перекрёстная проверка вычисления ядер, потому что решение для времени распространения света в этой оснастке — собственное для проекта. Эта строка (аналитический путь по умолчанию) остаётся MODELLED с указанным выше выводом | MODELLED |
| VM-825d8922 | Лунная геодезическая РСДБ, путь через ядра | Задержка РСДБ в ближнем поле для земной базы, наблюдающей лунный маяк, с частными производными по маяку и станции, на пути через ядра (lunar_vlbi::KernelGeometry): Земля и Луна по DE440, главные оси Луны по DE440, ориентация Земли по ITRF93 с UT1 и движением полюса, каждое время распространения света сведено в барицентрической системе, частные производные с множителем времени распространения света 1/(c - u.V). Запускается как сценарий lunar-vlbi с заданными planetary_kernel_path, earth_orientation_kernel_path и moon_orientation_kernel_path; проверяемые выходы — ряд geometric_delay_s на пути через ядра и epoch_partials. На пути через ядра delay_s добавляет аналитический разностный член Шапиро, который не сравнивается, а delay_rate и near_field_correction_us не сравниваются |
lunar_vlbi (KernelGeometry, delay_partials_beacon_body, delay_partials_stations, LunarVlbiScenario); naif_kernel | tests/lunar_vlbi_spice_oracle.rs::kernel_delay_and_partials_match_spice_light_times_near_j2000 (75 задержек на 25 эпохах около J2000 для DSS-14, DSS-43 и DSS-63: задержки в пределах 1 ps, наихудшее 0,06 ps; частные производные маяка в системе тела в пределах 1e-6, наихудшее 7.4e-9; частные производные станций в ITRF93 в пределах 1e-6, наихудшее 3.8e-11); tests/lunar_vlbi_spice_oracle.rs::spice_2024_epochs_finding_is_unchanged; tests/lunar_vlbi_anise_oracle.rs::kernel_delay_matches_the_anise_light_time_difference (перекрёстная проверка вычисления по ядру); tests/naif_kernel_reader_check.rs; lunar_vlbi::tests | NAIF SPICE Toolkit N0067 (spiceypy 8.2.0, MIT): сошедшиеся ньютоновские времена распространения света (spkcpt/spkcpo, CN) от маяка, неподвижного в MOON_PA_DE440, до станций DSN DSS-14, DSS-43 и DSS-63 по станционному ядру NAIF earthstns_itrf93_260814.bsp с de440s, moon_pa_de440_200625, moon_de440_250416.tf, earth_latest_high_prec и naif0012; частные производные — пятиточечные центральные разности времён распространения света SPICE, а не формула Kshana 1/(c - u.V). Зарегистрировано заранее (a689c797, эпохи 2024) с порогами 1 пс для каждой задержки и 1e-6 в относительном выражении для каждой частной производной. Первый прогон не прошёл (17/75 задержек в пределах 1 пс, наихудшая 1.03e-11 с): SPICE хранит ET в одном double, шаг которого в 2024 округляет эпоху излучения на величину до 6e-8 с, около 6 пс времени распространения света, и остаток совпадает с этим округлением с корреляцией 0,99999 (зафиксировано; рецензент воспроизвёл это независимо). Поправка 66e365d4, написанная после этого результата и до появления её набора данных, перенесла тот же оракул и пороги на 25 почасовых эпох вблизи J2000, где шаг ET не превышает 1.5e-11 с: 75/75 задержек в пределах 1 пс (наихудшая 6.2e-14 с), 75/75 частных производных маяка (наихудшая 7.4e-9), 150/150 частных производных станции (наихудшая 3.8e-11). Вне утверждения: аналитический путь по умолчанию (ряд для Луны и средняя лунная система отсчёта, 24 мкс от ANISE через DE440, строка «Лунная геодезическая РСДБ»), разностный член Шапиро, который сценарий добавляет аналитически, среда распространения и перевод из барицентрической в геоцентрическую шкалу | VALIDATED |
| VM-3479c010 | Читатель ядер NAIF: контейнер DAF, SPK типа 2 и двоичный PCK типа 2 | Собственный читатель двоичных ядер NAIF движка на чистом Rust (naif_kernel): контейнер DAF (оба порядка байтов, связанные записи сводок), сегменты положения SPK типа 2 на многочленах Чебышёва, связанные через свои центры с наименьшим общим предком, и сегменты углов Эйлера двоичного PCK типа 2, превращаемые во вращение из J2000 в систему тела, с эпохами в виде двухчастного ET, чтобы смещение менее микросекунды сохраняло точность. Через него читают DE440 KernelEphemeris (ephem_provider) и пути через ядра lunar_vlbi, lunar_llr и lunar_vlbi_fim. Утверждение состоит в том, что он правильно читает ядра JPL; это не утверждение о точности DE440 или аналитических рядов движка для Солнца и Луны | naif_kernel (DafFile, SpkKernel, PckKernel); ephem_provider (KernelEphemeris) | tests/naif_reader_spice_oracle.rs::reader_matches_spice_and_anise_on_the_post_registration_grid (600 состояний de440s.bsp и 200 поворотов MOON_PA_DE440 на 200 эпохах 1849-2150 и случайных парах тел, выбранных из собственного хэша коммита предварительной регистрации, в сравнении со SPICE и ANISE на вырезанных ядрах, побитово идентичных ядрам NAIF: наихудшая разница 0,6 % от порога, 1.95e-3 m в абсолютном выражении); tests/naif_reader_spice_oracle.rs::reader_matches_spice_and_anise_on_the_full_naif_kernels_when_present (то же на полных файлах NAIF, SHA-256 проверена; зависит от данных); tests/naif_kernel_reader_check.rs (инженерная защита, не доказательство); naif_kernel::tests; ephem_provider::tests | Два независимых читателя ядер на одних и тех же файлах NAIF: NAIF SPICE Toolkit N0067 (CSPICE через spiceypy 8.2.0, MIT; spkezr и pxform) и ANISE 0.10.6 (Nyx Space, MPL-2.0; Almanac.translate и Almanac.rotate), оба запущены как отдельные программы на de440s.bsp и moon_pa_de440_200625.bpc. Зарегистрировано заранее (abcd9133) до появления какого-либо набора данных или значения оракула: начальное значение сетки — первые 16 шестнадцатеричных цифр хеша этого коммита, поэтому ни 200 эпох, ни пары тел нельзя было выбрать с оглядкой на результат; каждая эпоха также содержит Луну и Солнце относительно Земли. Пороги заранее зафиксированы по вычислению многочленов Чебышёва с двойной точностью (не более 15 коэффициентов, n^2 u = 2.5e-14 на вычисление, два вычисления и до двух переходов с каждой стороны): положение 1e-13 R + 1e-5 м, скорость 1e-13 V + 1e-10 м/с, где R и V — большая величина относительно наименьшего общего предка; элемент вращения 1e-13 W + 1e-15, где W — сумма коэффициентов покрывающей записи; ANISE добавляет 2 нс относительного движения для своих наносекундных эпох. Результат: каждое из 600 состояний и 200 вращений укладывается в свой порог относительно обоих оракулов, и на обрезанных, и на полных ядрах; наихудшее значение — 6.0e-3 порога (положение), 5.9e-3 (скорость), 3.7e-3 (вращение). Мутация: вычисление каждой записи при -s даёт 3597 несовпадений. Раскрыто: более ранняя проверка на 25 эпохах по SPICE (4.6e-5 м, tests/naif_kernel_reader_check.rs) была замечена до этой строки и не является её доказательством; первый прогон генератора набора данных прервался на пустом интервале сетки, не выдав ни одного значения, и был исправлен. Обе стороны читают DE440, поэтому согласие подтверждает читатель, а не эфемериды | VALIDATED |
| VM-e8fff17a | Земной GNSS на лунном расстоянии | Приём земного GNSS на лунном расстоянии: слой слабого сигнала, который называет таблица 1 в P7 и для которого у движка не было модели. Для каждого спутника и каждой эпохи вычисляются угол от оси относительно надира передатчика, затмевает ли Земля прямой путь, наклонная дальность и потери в свободном пространстве, коэффициент усиления передатчика под этим углом, принимаемая мощность и отношение несущей к спектральной плотности шума; затем агрегируются только линии, проходящие порог слежения, и перебирается полный оборот орбитальной группировки, так что ответом является РАСПРЕДЕЛЕНИЕ, а не один снимок. Результат определяют три факта, и отчёт указывает каждый из них: Земля видна под углом 13,90 градуса с радиуса орбитальной группировки, поэтому ПИК луча геометрически недоступен любому лучу, идущему к Луне; остаются край главного лепестка и боковые лепестки — режим, в котором LuGRE работал у Луны в 2025; а потери на трассе L1 составляют около 208 дБ, примерно на 25 дБ больше, чем платит наземный пользователь. MEASURED на встроенной геометрии класса GPS из 24 спутников на 64 эпохах одного орбитального периода: доступность СИГНАЛА 0,375 при наилучшей линии 30,93 дБ-Гц и доступность РЕШЕНИЯ 0,000 — не более двух одновременно отслеживаемых линий, а не четырёх, нужных для определения положения. Разделение этих двух доступностей и есть главное, и отчёт не допускает их смешения: земной GNSS на лунном расстоянии — слой уровня ВРЕМЕНИ, а не положения, и априорное значение для многослойной устойчивости должно брать доступность решения. Обусловленность выдаётся по той же причине: каждый видимый спутник лежит внутри конуса шириной в пару градусов, если смотреть с Луны, так что линии визирования почти параллельны по построению. Запускается как вид earth-gnss-lunar. Переформулировано по D7: утверждение на лунном расстоянии — это ОТНОСИТЕЛЬНОЕ отношение несущей к спектральной плотности шума между спутниками в одной эпохе по измеренным двумерным диаграммам передачи (NAVCEN, Block IIR/IIR-M) плюс геометрическая видимость; абсолютное C/N0 не заявляется (Parker et al. сообщают об общих потерях 7–12 дБ). |
earth_gnss_lunar | earth_gnss_lunar::tests (11 библиотечных тестов: половинный угол лимба Земли против замкнутой формы asin(R/r) с дополнительным утверждением, что КАЖДАЯ неэкранированная линия лежит вне этого конуса, так что проверка затмения и угол лимба не могут расходиться; предикат затмения проверен на ближней стороне, дальней стороне и в случае, когда тело находится ПОЗАДИ передатчика; потери на трассе ограничены правдоподобным диапазоном лунных расстояний на каждой линии; отслеживаемое множество показано как подмножество геометрически видимого и не пересекающееся с затмённым; монотонность в обоих направлениях - большее усиление приёма никогда не уменьшает число, более строгий порог никогда не увеличивает его; ни одной линии не приписано усиление больше осевого; приёмник внутри Земли отклоняется; развёртка подтверждённо РАЗЛИЧАЕТСЯ по эпохам; а доступность сигнала и решения подтверждённо различны, правильно упорядочены и согласованы со строками по эпохам); tests/earth_gnss_measured_montenbruck_oracle.rs::finding_genesis_nadir_counts_exceed_the_paper (закреплено); tests/lugre_relative_cn0_visibility.rs::too_few_iir_records_at_lunar_distance_for_the_relative_cn0_bar (закреплённый вывод) | Тождества в замкнутом виде и внутренняя согласованность; внешний оракул НЕ заявляется. Половинный угол лимба сверяется с asin(R_earth/r_orbit), а геометрия — с ним; потери в свободном пространстве, ядро DOP и распространение SGP4, которые здесь составляются, проверены внешне каждое в своей строке, и эта строка не заимствует их статус. ПОЧЕМУ MODELLED — из-за диаграммы передачи: усиление под углом задаётся равномерно освещённой круглой апертурой, то есть диаграммой Эйри, тогда как настоящая антенна GPS L1 — двенадцатиэлементная спиральная решётка с профилированным главным лепестком, пик которого смещён от оси, чтобы выровнять мощность по диску Земли, и с боковыми лепестками, не соответствующими диаграмме Эйри. Опубликованные измеренные диаграммы существуют и здесь не включены, поэтому верны порядки и порядки величин, но не дБ какого-либо отдельного спутника. ПЕРВАЯ РЕАЛИЗАЦИЯ ЭТОЙ СТРОКИ БЫЛА НЕВЕРНОЙ ТАК, ЧТО ЭТО СТОИТ ЗАПИСАТЬ: выражение Эйри верно только в передней полусфере, его аргумент зависит от sin(theta), и при theta около 180 градусов оно оборачивается и возвращает ПОЛНОЕ УСИЛЕНИЕ ПО ОСИ позади апертуры, — поэтому две самые сильные линии в первом отчёте принадлежали спутникам, направившим антенны от Луны, и только они проходили порог. Позади апертуры модель теперь применяет плоский нижний предел заднего лепестка, заданный как граница, а не как выдуманная форма диаграммы. Намеренно отсутствуют следующие факторы, каждый из которых делает бюджет ОПТИМИСТИЧНЫМ: нет ионосферных и тропосферных потерь на лучах, скользящих по лимбу, нет поляризационных потерь, потерь наведения и реализации, и принята сферическая Земля без рефракционного расширения. Положение Луны — ВХОДНОЕ значение, а не поиск по эфемеридам, потому что проверяются линия и геометрия луча. Для перевода этой строки в Validated нужны измеренная диаграмма передачи и нормальные точки LuGRE для сверки; ни того ни другого в репозитории нет, и здесь они не выдумываются. Раунд 0,30 2 — вывод (остаётся MODELLED): путь линии с измеренными входными данными (настоящие положения SP3, мощность передачи по блокам, табличные диаграммы передачи и приёма, гистерезис захвата и слежения) был сверен с Montenbruck et al. 2023, таблица 3, для GENESIS на 6000 км (зарегистрировано заранее 5b414f0a): средние для зенитной антенны согласуются в 5 из 6 случаев в пределах одного дБ от чувствительности из статьи; средние для надирной антенны на 1,0–2,4 спутника выше напечатанных, вероятно потому, что в статье использовались зависящие от азимута диаграммы боковых лепестков GPS, которые не опубликованы. Величины этой строки для лунного расстояния по-прежнему используют диаграмму Эйри как замену. 0,30+ D7 — вывод (остаётся MODELLED): переформулированная величина — РАЗНОСТЬ C/N0 между спутниками Block IIR/IIR-M, отслеживаемыми в одной эпохе, предсказанная по измеренным диаграммам L1 NAVCEN для каждого SVN (двумерным, в системе отсчёта рыскания) в сравнении с лётным C/N0 LuGRE (зарегистрировано заранее 768cb62b: 99 % видимых, СКО пар <= 3,0 дБ, медиана <= 2,0 дБ, не менее 50 записей и 30 пар) — имеет слишком мало данных: 26 подходящих эпох перелёта и лунной орбиты содержат 15 отслеживаемых записей IIR/IIR-M (в основном отслеживаются IIF и III) и одну пару. Все 15 предсказаны видимыми, а остаток единственной пары равен -0.06 дБ; ничего не заявляется | MODELLED |
| VM-b2d2f296 | Определение лунной орбиты: земной GNSS против наземных радиометрических измерений | Определение орбиты на околопрямолинейной гало-орбите (или эллиптической замороженной орбите) по двум независимым типам данных: псевдодальностям земного GNSS, принятым на борту (правило линии из строки «Земной GNSS на лунном расстоянии» плюс затмение Луной), и наземным двусторонним измерениям дальности и скорости изменения дальности с трёх станций Deep Space Network. Каждое — одношаговый пакетный метод наименьших квадратов около опорной орбиты с его формальной ковариацией; Монте-Карло с начальным значением (seed) для разности двух оценок проверяет, объясняют ли её две ковариации (q = d' (P_G + P_R)^-1 d, хи-квадрат с шестью степенями свободы при совпадении моделей), и что делает с этой статистикой немоделируемое ускорение. | lunar_infra::{orbit, gnss, od} | tests/lunar_infra_od_consistency.rs (порог O1: матрица перехода состояния, цепочкой за три суток и за один период, равна scipy DOP853 с относительной точностью 1e-6; порог C1: среднее q и доля внутри 95 %; порог C2: выборочный след относительно формального для каждого оценщика; порог C3, NOT MET и закреплён: при 3e-10 м/с2 немоделируемого ускорения превышение внутри 95 % составляет 0,0525, а не не менее 0,5 - бортовая оценка известна лишь с точностью до сотен метров, так что около десяти метров смещения скрываются внутри её ковариации); lunar_infra::orbit::tests, lunar_infra::gnss::tests, lunar_infra::od::tests, lunar_infra::la::tests | Независимая программа на scipy/numpy интегрирует те же уравнения в вариациях (порог O1). Ничто не сравнивается с измерением лунной орбиты. Оракул проверяет численные методы заявленных формул, а не физику, поэтому строка остаётся MODELLED. Ограниченная модель трёх тел: без Солнца, без лунных гармоник, ось вращения Земли вдоль нормали к орбите, ILLUSTRATIVE входные данные приёмника и станции. | MODELLED |
| VM-d2d0cc81 | Разрешение неоднозначностей фазы несущей на Луне: поверхность и орбитальный аппарат | Межприёмные однократно разностные фаза несущей и код земного GNSS на лунной поверхностной станции и орбитальном аппарате, с исключением разности часов для каждой эпохи, одной неоднозначностью на непрерывный проход и самым длинным проходом в качестве калибровки. Ковариация неоднозначностей с плавающей точкой — дополнение Шура; LAMBDA разрешает целые числа, вероятность, найденная методом бутстрэпа, приводится рядом с долей успеха целочисленных наименьших квадратов по Монте-Карло с начальным значением (seed) и сигмами положения для плавающего и фиксированного решений. Сообщается как найдено: при зарегистрированных 12 дБи задача двойных разностей неформируема (поправка 1 перенесла значение по умолчанию на 25 дБи после того, как были увидены только подсчёты доступности), а при 25 дБи целочисленная фиксация НЕ достигается — вне досягаемости (самое большее несколько процентов), хотя плавающее решение улучшается с длиной дуги. | lunar_infra::phase; lambda | tests/lunar_infra_carrier_phase.rs (порог Q1: успех по Монте-Карло не ниже границы бутстрепа минус три стандартные ошибки; Q2: нет падения с длиной дуги сверх трёх стандартных ошибок; Q4: LAMBDA равна полному перебору для 200 выборок размерности до пяти; Q3: проектная матрица с плавающими значениями равна независимому решению numpy с точностью 1e-9 для ковариаций неоднозначностей и положения, а бутстрепная частота NOT MET при 1e-9, закреплено: она отличается на относительную величину 1.7e-6, потому что нормальная функция распределения в LAMBDA — это приближение Абрамовица и Стегуна) | Независимое решение на numpy тех же нормальных уравнений по экспортированным строкам (Q3) и полный перебор целых чисел (Q4). Ни с какими измерениями фазы несущей GNSS или на Луне сравнение не проводится. MODELLED. | MODELLED |
| VM-0c52dc3e | Совместное оценивание лунной системы отсчёта: поверхностные станции и орбитальные аппараты | Информация Фишера для семипараметрического лунного датума системы отсчёта по лазерной дальнометрии с земных станций до пяти отражателей отдельно и с добавлением измерений дальности от орбитальных аппаратов до поверхностных станций: информационная матрица, ранг, сигмы Крамера — Рао, метрика вырожденности модуля лунной идентифицируемости и случайные наборы станций с начальным значением (seed). Орбита считается известной в лунных осях (её ошибка учитывается сигмой дальности орбитального аппарата). | lunar_infra::frame; lunar_datum; lunar_identifiability; lunar_llr_geometry | tests/lunar_infra_studies_3_5.rs (порог F1: след CRLB не растёт, а наименьшее собственное значение не убывает при добавлении линий с орбитальным аппаратом, в примере и в 20 случайных наборах с фиксированным начальным значением; порог F2: частные производные дальности равны независимой конечной разности numpy longdouble для прямой модели Родрига на 50 геометриях; порог F3: наименьшее собственное значение растёт не менее чем в 2.0x, найдено около 111x) | Независимая конечная разность прямой модели на numpy (F2). Ни с какими реальными решениями лунной системы отсчёта сравнение не проводится. Коэффициент зависит от предполагаемой известной орбиты и сигмы дальности 1 м. MODELLED. | MODELLED |
| VM-d415284a | Точность привязки систем отсчёта в космосе: совмещённые GNSS, РСДБ и лазерная дальнометрия | Точность по Крамеру — Рао межтехнологических смещений переноса, масштаба и поворота между системами отсчёта GNSS, РСДБ и лазерной дальнометрии, когда один космический аппарат несёт все три, с исключением положения аппарата в каждой эпохе и девятью мешающими параметрами локальной привязки с априорным значением, при переборе точности локальной привязки. Ковариации — методом квадратного корня (нормальные уравнения теряют разряды, когда технологии почти идеальны). | lunar_infra::tie; fim::crlb_srif | tests/lunar_infra_studies_3_5.rs (порог T1: сигмы смещения не падают по мере ослабления локальной привязки; T2: при сигмах методов, умноженных на 1e-6, сигма смещения каждой пары в пределах 1 % от sqrt(2), умноженного на сигму локальной привязки, найдено в пределах 3e-7; T3: информационная матрица равна независимой составной сборке numpy с точностью 1e-9). Первый прогон T2 с обращением нормальных уравнений не выполнил порог (1,3 % при привязке 0,1 м, значения ниже нижнего предела при 1 м); причина была численной, и ковариацию перенесли на квадратно-корневой путь до повторной оценки порога. | Независимая сложенная система на numpy с неизвестными положениями, исключёнными явными дополнениями Шура (T3). Ни с данными GRASP, Genesis или другой миссии сравнение не проводится. MODELLED. | MODELLED |
| VM-adb8542c | Чувствительность к числам Лява и либрации Луны | Информация Фишера для h2, k2, l2 и амплитуд физической либрации по лазерной дальнометрии (радиальное и горизонтальное приливное смещение, вращение отражателя), слежению за орбитальным аппаратом (ускорение k2 степени 2, проинтегрированное вдоль линии визирования, с удалённым трендом), поверхностному гравиметру (гравиметрический фактор 1 + h2 - 1,5 k2) и поверхностным часам (относительная скорость хода (1 + k2 - h2) W2/c2, привязанная к константам лунного времени). Номинальные значения h2 и l2 — точки линеаризации; исследование говорит, что к чему чувствительно, а не каковы эти числа. | lunar_infra::geodesy; lunar_od::degree2_tide_accel; lunar_time | tests/lunar_infra_studies_3_5.rs (порог G1: аналитические частные производные равны центральной конечной разности каждой прямой модели с точностью 1e-8; G2: информационная матрица 5x5 равна независимой сборке numpy с точностью 1e-6; G4: амплитуда прилива часов и её чувствительности к k2 и h2 равны независимому вычислению с точностью 1e-9; порог G3 NOT MET в части следа, закреплено: добавление семейства никогда не снижает наименьшее собственное значение (28 из 28), но след псевдообратной матрицы вырос в 12 из 28 добавлений, потому что добавленное семейство повысило ранг) | Независимая сборка по конечным разностям на numpy (G2) и вычисление в замкнутом виде (G4). Чувствительность к k2 для семейства орбитальных аппаратов — оценка верхнего края (состояние орбиты здесь поглощает лишь константу и тренд). Ни с какими измерениями лунных приливов или либрации сравнение не проводится; k2 взято из Lemoine et al. 2014 как номинальное. MODELLED. | MODELLED |
| VM-555a5784 | Дополнение DOP маяками на лунной поверхности | Геометрический фактор DOP с дополнением маяками для лунного поверхностного пользователя: строки линий визирования видимых спутников и строки дальнометрии видимых поверхностных маяков объединяются в одну матрицу плана и вычисляются через общее ядро DOP, а полученный DOP отображается в реализованную точность 1 сигма В МЕТРАХ через эквивалентную пользовательскую ошибку дальнометрии для каждого маяка, составленную как корень из суммы квадратов членов синхронизации часов, многолучевости и привязки. Видимость маяков — геометрический горизонт безвоздушной Луны для двух высот, у которого нет рефракционного расширения, и потому он точен, а не приближён. Запускается как вид сценария lunar-beacon, который сообщает результаты для одних спутников, спутников плюс маяков и более крупной орбитальной группировки как конкурирующего пути к той же геометрии. MEASURED на встроенной эталонной геометрии (пользователь на -80 градусах, три привязанных маяка, иллюстративная LCNS из шести спутников при t=0, маска 5 градусов): 5 видимых спутников дают PDOP 9,6941 и 3-D 1 сигма 11,222 м; добавление маяков, которые действительно выходят за горизонт, даёт PDOP 4,1160 и 4,765 м, выигрыш в 2,355 раза; служба из 24 спутников вместо этого даёт PDOP 2,4226 и 2,804 м, выигрыш в 4,002 раза. Отчёт печатает число ВИДИМЫХ маяков, а не настроенное, и на этой геометрии за горизонт выходит только ОДИН из трёх маяков: два боковых пункта находятся примерно в 333 км от пользователя при горизонте 86 км для антенны высотой 2 м, так что читателю не приходится считать, что вклад внесли все три |
lunar_beacon | lunar_beacon::tests (видимость по горизонту против замкнутой формы L01; DOP с усилением маяками против исходного; корень из суммы квадратов бюджета ошибок; соотношение DOP и метров); tests/validate_p2_beacon_before_after_table.rs (вся таблица «до/после» закреплена по зафиксированному эталону с относительной точностью 1e-9); tests/validate_p2_beacon_before_after_independent_dop.rs (та же геометрия через НЕЗАВИСИМЫЙ путь DOP, так что усиление проверяется не относительно ядра, которое его выдало); tests/validate_lunar_beacon_anise_visibility_dop.rs::beacon_visibility_and_augmented_dop_match_anise_and_numpy | Арифметика DOP — ядро crate::orbit::dop, отдельно проверенное внешне по gnss_lib_py в tests/dop_reference.rs; эта строка не заимствует заново статус той строки. Горизонт видимости маяков — замкнутая форма L01, а sigma = DOP x sigma_URE — стандартное соотношение GNSS (Kaplan and Hegarty, Understanding GPS/GNSS, раздел 7). В пределах этой строки само дополнение проверяется по независимому пути DOP в репозитории и привязано к зафиксированному эталону. ПОЧЕМУ MODELLED: проект орбитальной группировки, размещение маяков, высоты антенн и все три величины бюджета ошибок — иллюстративные входные данные, а не действующая съёмка или измеренная линия, поэтому приведённые метры — свойство выбранного сценария, а не какой-либо развёрнутой службы. ПРИМЕЧАНИЕ О ПРОИСХОЖДЕНИИ: эта возможность была заявлена в README и проверялась двумя тестами валидации, но НЕ имела строки в матрице и вида сценария, поэтому её нельзя было вызвать запуском вообще. Она была заявлена в тексте, отсутствовала в реестре и была недоступна в движке одновременно. Строка и вид добавлены вместе. Раунд 0,30 2 (зарегистрировано заранее db0eb9ec), заблокирован (остаётся MODELLED): видимость ANISE 0.10.6 и DOP на numpy на геометрии строки согласуются (видимые наборы точно, включая 72 случаев у горизонта и 48 случаев у маски; DOP в пределах 7.2e-13), но приведённые метры — это DOP, умноженный на иллюстративную ошибку дальнометрии 1,158 м по корню из суммы квадратов, без оракула; ограничение области, которое исключило бы их, ожидает решения владельца | MODELLED |
| VM-d5118eb1 | Слепота целостности к синфазным ошибкам | Точное разложение ошибки измерения в подпространстве чётности на часть, которую RAIM не видит, и часть, которую видит. Для линеаризованной модели снимка y = G·x + e любая ошибка dy однозначно раскладывается на СЛЕПУЮ составляющую в range(G) — поглощаемую как ошибка состояния S·dy и аннулируемую проектором невязки Pperp = I − G·S, а потому невидимую для ЛЮБОГО теста по невязке, а не только для конкретного порога, — и ОБНАРУЖИМУЮ составляющую в пространстве чётности. Модуль возвращает проектор, разложение и слепую долю, так что вызывающая сторона может количественно оценить, какую часть конкретной ошибки монитор снимка структурно не способен сообщить. Применительно к реальному межэфемеридному нижнему пределу: метровое расхождение DE440 и INPOP21a, а также DE440 и EPM2021 в геоцентрическом положении Луны поглощается почти целиком как ошибка положения пользователя (медианная слепая доля 1,000000; медианная слепая ошибка положения 2,3955 м и 2,0050 м) при невязке чётности на уровне 1e-15 м | lunar_common_mode | lunar_common_mode::tests (8 библиотечных тестов: разделение аддитивно и восстанавливает dy; ковариация общего режима даёт положительный уровень защиты общего режима, а ковариация только паритета даёт близкий к нулю; проектор аннулирует range(G)); tests/lunar_common_mode_integrity_reference.rs (разделение движка в сравнении с независимым вычислением numpy на побайтно идентичных входных данных по зафиксированной выборке из 366 эпох, относительная И абсолютная ошибка < 1e-3); tests/lunar_common_mode_parity_numpy_oracle.rs::common_mode_split_matches_numpy_lstsq_on_parity_bearing_inputs (1464 случая с паритетом на геометрии из 8 спутников и подмножестве из 6 спутников по обеим реальным парам межэфемеридных данных: blind_dx, невязка и нормы в пределах 1e-12 от |dy|, наихудшее 1.06e-14) | P2: numpy linalg.lstsq (LAPACK gelsd SVD, BSD-3) пересчитывает разложение по методу наименьших квадратов на зафиксированных входных данных С настоящей частью чётности (dy = E·Δs + w, w ~ N(0, 1 м), начальное значение (seed) 20261001) на геометрии из 8 спутников и подмножестве из 6 спутников, 1464 случаев по обеим реальным межэфемеридным парам, зарегистрировано заранее (f672a314): blind_dx, residual, blind_norm и detectable_norm в пределах 1e-12 относительно |dy|, а blind_fraction в пределах 1e-12 абсолютно (наихудшие blind_dx 1.06e-14, residual 4.4e-15, blind_fraction 3.1e-15). numpy сам строит G по зафиксированным положениям, тогда как движок использует нормальные уравнения с методом Гаусса — Жордана; косая левая обратная матрица делает тест красным при 5.5e-2 |dy|. Поправка 1 (86c53301, после первого прогона, раскрыта) ослабила только входное предусловие для доли чётности (каждый случай не менее 1e-3 и 95 % каждой геометрии не менее 0,05), но не порог согласия. Проверяемое утверждение, как допускает P2: линейная алгебра разложения на этих входных данных; величины межэфемеридного нижнего предела и иллюстративная лунная геометрия (8 узлов типа LCNS на 5000 км) — входные данные, а не проверенные, а слепота — известное свойство всех RAIM по снимку. Сравнение с numpy в раунде 1 (tests/lunar_common_mode_integrity_reference.rs) проверяло только тождество S·G = I, потому что его входные данные лежали в range(G); оно сохранено как регрессионное. Происхождение эфемерид: tests/fixtures/inter_ephemeris/NOTICE.md (JPL, IMCCE, IAA RAS) | VALIDATED |
| VM-2e12093e | Уровень защиты от синфазных ошибок и полная огибающая целостности | cmpl_horizontal ограничивает k-сигмовую горизонтальную ошибку положения, вносимую слепым классом общего режима, формируя blind_position_covariance = SCovS^T и проецируя её в ENU; integrity_envelope сообщает hpl_total = hpl_araim + cmpl. Различие, ради которого существует эта пара: тест ОСТАТКОВ RAIM/ARAIM доказуемо слеп к ошибкам из range(G), но УРОВЕНЬ ЗАЩИТЫ ARAIM — нет: его член без неисправностей уже ограничивает их вплоть до URA провайдера плюс номинальное смещение. Поэтому CMPL — это лишь межпровайдерный ИЗБЫТОК, который URA/ISM отдельного провайдера не перекрывает, а сумма — консервативная граница по неравенству треугольника, а не RSS, справедливая только там, где этот избыток ещё не входит в URA. | lunar_common_mode | lunar_common_mode::tests (common_mode_covariance_gives_positive_cmpl, parity_only_covariance_gives_near_zero_cmpl, envelope_sums_the_two_classes, state_map_matches_split) | Аналитическая алгебра проектора, проверенная сама по себе: ковариация, заключённая в range(G), должна давать положительный CMPL, ковариация, заключённая в пространстве чётности, — приблизительно нуль, а огибающая должна складывать два вклада, ортогональных в пространстве измерений. Синфазная ковариация, геометрия орбитальной группировки и k — репрезентативные входные данные Modelled, а НЕ сертифицированный бюджет, и не заявляется, что граница по треугольнику точна. ПРИМЕЧАНИЕ О ПРОИСХОЖДЕНИИ: cmpl_horizontal, blind_position_covariance и integrity_envelope — публичные и поставляемые, и их модульные тесты уже цитировались строкой о слепоте к синфазным ошибкам, но САМО УТВЕРЖДЕНИЕ ОБ ОГИБАЮЩЕЙ строки не имело — поэтому единственная оговорка, сохраняющая его честным, — что сумма является границей по неравенству треугольника, а не RSS, — нигде в реестре не была указана. Строка регистрирует утверждение и оговорку вместе. | MODELLED |
| VM-6fe5eca9 | Совместное многотехнологическое лунное OD + часы | Пакетное слияние РСДБ + лунной локальной дальнометрии + дальнометрии между спутниками для восстановления положений станций и орбитальной группировки и часов | lunar_combination (problem, model, estimate, formal_covariance); batch_ls (gauss_newton_qr) | lunar_combination::tests (восстанавливает смоделированную истину; РСДБ восстанавливает 3-D наблюдаемость станции; детерминированно); tests/lunar_joint_multi_technique_od_reference.rs (6 геометрий × 16 параметров, по 31 наблюдению, в сравнении с Левенбергом–Марквардтом Orekit 12,2 / Hipparchus на идентичных наблюдениях; восстановленное состояние, наихудшее |Δ| 1.4e-8 m); tests/lunar_joint_od_numpy_oracle.rs::joint_solve_linear_algebra_matches_numpy (шесть сетей, включая одну без РСДБ: шаги Гаусса–Ньютона в пределах 4.3e-11, формальные сигмы в пределах 1.9e-11, ошибки станций равны; на 0,36 переносимых математических входных данных, 2.4e-11 и 1.3e-11 на 0,30 входных данных) | P2: numpy 2.4.6 (numpy.linalg.lstsq с LAPACK gelsd, numpy.linalg.inv; BSD-3) пересчитывает каждый шаг Гаусса — Ньютона, сошедшееся решение взвешенных наименьших квадратов, формальные сигмы и ошибку станции на зафиксированных якобианах и наблюдениях шести смоделированных сетей, зарегистрировано заранее (5094bc31) при относительном пороге max(1e-8, 100 kappa eps). Первый прогон не прошёл для сети без РСДБ (6.1e-7 против 1e-8, обращение нормальных уравнений при обусловленности 1.4e5); исправление движка, написанное после этого результата (batch_ls::gauss_newton_qr, шаг QR по Хаусхолдеру, используемый estimate и formal_covariance), было перезапущено при неизменном пороге: шаги от 1.1e-14 до 2.4e-11, сигмы не более 1.3e-11. Проверяемое утверждение — линейная алгебра решения слияния на этих входных данных, а не физические величины смоделированной сети или её моделей наблюдений: строка о задержке лунной геодезической РСДБ остаётся MODELLED (её аналитический путь отличается от ANISE до 24 мкс), а у систем отсчёта есть собственные строки. Восстановление внесённой смоделированной истины и согласованность NEES остаются внутренними проверками; более ранняя перекрёстная проверка Orekit 12,2 / Hipparchus методом Левенберга — Марквардта (tests/lunar_joint_multi_technique_od_reference.rs) задействует batch_ls::gauss_newton, который estimate больше не вызывает, и сохранена как проверка этого примитива. Пересмотр 0,30: ошибки станций lunar-joint-od-clock по умолчанию 3,541344 -> 3,541350 м с РСДБ и 2183,119 -> 2183,558 м без (решение QR). Пересмотр 0,36 (STUDIO-15, переносимая математика; docs/revisions/STUDIO15-portable-math-rebaseline.md): 3,541350 -> 3,536885 м с РСДБ и 2183,558 -> 2184,021 м без, а решение без РСДБ останавливается после 5 итераций, а не 2 (остановка, ограниченная округлением, на плохо обусловленной сети); зарегистрированное заранее сравнение было перезапущено на заново экспортированных входных данных при неизменном пороге (numpy 2.4.6, все шесть сетей проходят) | VALIDATED |
| VM-f0e89ca3 | Информация Фишера и наблюдаемость по Крамеру — Рао | Информация Фишера M=HᵀWH, нижняя граница Крамера — Рао, ранг наблюдаемости и нуль-пространство дефекта датума (псевдообратная матрица Мура — Пенроуза), а также скаляры D/A/E/T-оптимального планирования эксперимента по симметричному собственному решателю Якоби | fim | tests/fim_observability_reference.rs (собственные значения в сравнении с numpy.linalg.eigh; ковариация CRLB в сравнении с σ²(XᵀX)⁻¹ через numpy.linalg.inv; GDOP/PDOP/HDOP/VDOP/TDOP GNSS из информационной матрицы в сравнении с numpy — всё совпало с точностью 1e-9); fim::tests (собственный решатель Якоби в сравнении со спектрами в замкнутой форме; CRLB в сравнении с замкнутыми формами Kay 1993 — постоянная в белом гауссовом шуме σ²/N и подгонка прямой σ²(XᵀX)⁻¹; достижение CRLB по Монте-Карло; тождество Мура–Пенроуза MM⁺M=M; нуль-пространство дефекта датума) | NumPy 2.4.1 (numpy.linalg.eigh / .inv; BSD-3-Clause, на основе LAPACK) — независимый сторонний эталон, вычисляющий те же однозначно определённые собственные значения, ковариацию Крамера — Рао σ²(XᵀX)⁻¹ и геометрические факторы DOP для GNSS другим алгоритмом (разделяй и властвуй из LAPACK + LU), чем циклический перебор Якоби Kshana и спектральная псевдообратная матрица; совпадение до 1e-9. Тот же класс внешних библиотек уже проверяет движок DOP (по gnss_lib_py) и ядра χ²/erf (по SciPy). Дополнительно сверено с замкнутыми формами CRLB по Kay (1993) и с достижением CRLB по Монте-Карло (внутренне) | VALIDATED |
| VM-e192c5ac | Наблюдаемость абсолютного положения лунных станций (дефект датума) | Наблюдаемость по информации Фишера для совместного лунного решения: без земных баз датум абсолютной системы отсчёта лежит в нуль-пространстве HᵀWH (положение станции ненаблюдаемо); ≥3 баз восстанавливают полный ранг и ограничивают ошибку станции по Крамеру — Рао, которую достигает оцениватель | lunar_combination (lunar_observability) + fim | lunar_combination::tests (ранг неполон без земных баз; три базы восстанавливают полный ранг — порог в 3 станции определяется рангом информации, а не ошибкой решения; CRLB станции достигается оценщиком с эффективностью 0,98; CRLB монотонно ужесточается с числом баз); tests/lunar_observability_numpy_oracle.rs::lunar_observability_matches_numpy_on_the_committed_jacobians | Аналитическая структура дефекта датума — ненаблюдаемая мода абсолютной системы отсчёта лежит в нуль-пространстве информации Фишера (в замкнутом виде), порог ранга совпадает с опубликованным обоснованием схемы из 3 станций, а оцениватель достигает получаемой CRLB по Монте-Карло. Сама лунная геометрия — репрезентативная сеть (не лётные эфемериды), поэтому строка остаётся MODELLED; лежащий в основе движок FIM/CRLB отдельно проверен по замкнутым формам Kay (1993). Раунд 0,30 2 (зарегистрировано заранее fab02df9), заблокирован (остаётся MODELLED): NumPy/SciPy пересчитывают ранг и дефект при заявленном пороге 1e-9, долю осей станции в нуль-пространстве (в пределах 8.4e-10) и CRLB станции (в пределах 1.2e-10) на 17 зафиксированных конфигурациях, созданных Kshana (P2). Не повышено: утверждение, что оцениватель достигает границы (эффективность по Монте-Карло около 0,98), не имеет оракула, а ограничение области, которое оставило бы его MODELLED, ожидает решения владельца | MODELLED |
| VM-0829ad8b | Реализация лунной системы отсчёта | Подгонка 7-параметрического датума Гельмерта + привязка ориентации ICRF по сети точек | lunar_frame_realise | lunar_frame_realise::tests (восстанавливает внесённое преобразование Гельмерта); tests/lunar_reference_frame_realisation_reference.rs (14 случаев в сравнении с независимым решателем Умеямы–SVD в замкнутой форме; наихудшие |Δ| сдвига 2.0e-5 m, поворота 5.3e-12 rad, масштаба 9.3e-2 ppb, СКО после подгонки 6.1e-9 m) | Независимый решатель взвешенного преобразования подобия Умеямы (Хорна) в замкнутом виде (numpy/scipy на основе SVD; Umeyama 1991 IEEE TPAMI, Horn 1987 JOSA A) — алгоритм, отличный от итеративной подгонки Гаусса — Ньютона в kshana, достигающий того же однозначно определённого оптимума взвешенных наименьших квадратов на побайтно идентичных сетях точек | VALIDATED |
| VM-b8cf831d | Объём навигационного обслуживания на Луне | Лунные DOP, покрытие и доступность класса Moonlight + обобщённые лунные уровни защиты ARAIM по объёму обслуживания | lunar_service | lunar_service::tests (DOP использует проверенное ядро повторно; PL сводится к случаю южного полюса); tests/lunar_navigation_service_volume_reference.rs (положение каждого спутника в MCI с точностью <1e-3 m + ТОЧНОЕ множество видимых спутников по всему перебору сетка×эпоха в сравнении с ANISE 0.10.2) | Независимый сторонний эталон — кеплеровский пропагатор ANISE 0.10.2 astro::Orbit (Nyx Space, MPL-2.0) — путь вычисления для двух тел в равноденственных элементах, отличный от кеплеровского метода Ньютона — Рафсона в kshana; положение MCI каждого спутника согласуется с точностью <1e-3 м, а выведенные число и набор видимых спутников совпадают точно в каждой точке сетки. Ядро DOP проверено по gnss_lib_py; целостность использует опубликованные параметры LunaNet/LCNS | VALIDATED |
| VM-82bb02b3 | Генерация расширяющих кодов LunaNet AFS (LSIS V1.0) | Коды Augmented Forward Signal из LSIS V1.0 (29 января 2025): первичный код AFS-Q из 10230 чипов, сформированный по построению пилота L1C из IS-GPS-800 с индексами IS-GPS-800J (те же 210 назначений, что печатает приложение D LSIS), коды Голда AFS-I из 2046 чипов, сформированные по g1 = x^11 + x^2 + 1 и g2 = x^11 + x^8 + x^5 + x^2 + 1 с задержкой G2 каждого PRN, восстановленной по файлу приложения 3 стандарта, четыре вторичных кода, третичные коды из 1500 чипов, временное назначение узлов по таблице 11 и ярусный пилотный код. Содержимое LSIS считывается во время выполнения из локального кэша, проверенного по SHA-256 и заполненного из размещённого NASA PDF, и никогда не распространяется заново | lunar_afs::codes, lunar_afs::lsis, lunar_afs::params (индексы IS-GPS-800J) | lunar_afs::codes::tests (регистры максимальной длины, баланс Лежандра, круговой проход задержки G2, композиция уровней); tests/lunar_afs_codes_lsis_reference.rs::afs_codes_finding_one_misprinted_table_cell (без кэша LSIS: четыре приведённых числа закрепляют вывод; с ним: 2 937 232 элементов кода и битов против файлов приложения 3 LSIS, напечатанные первые/последние 24 элемента кода, таблицы Лежандра D-1 и E-1 и инициализации G2 дают ровно одно расходящееся значение — ячейку «последние 24 элемента кода» для PRN 147 в таблице E-5, которая дублирует ячейку PRN 151, тогда как файл приложения 3 согласуется с генератором); строгий предварительно зарегистрированный тест afs_codes_match_lsis_v1_tables_and_annex3_bit_exact пропускается из-за этого расхождения | Эталон: значения, которые LSIS V1.0 печатает для проверки (таблицы C-1–C-5, D-1–D-6, E-1–E-6), и его электронные файлы кодов из приложения 3 при критерии нулевого расхождения, зафиксированном до сравнения. Критерий не выполнен из-за одной напечатанной ячейки, внутренне противоречащей собственному файлу приложения 3 стандарта, поэтому строка остаётся MODELLED; составлена заметка об опечатке. Те же чипы также равны чипам LANS-AFS-SIM (строка «Формирование основной полосы LunaNet AFS относительно независимого генератора при заданном состоянии его канала») | MODELLED |
| VM-036ec4a7 | Формирование основной полосы LunaNet AFS относительно независимого генератора при заданном состоянии его канала (LSIS V1.0) | Ядро формирования основной полосы AFS (LSIS-130: комплексная огибающая I + jQ, I = код Голда AFS-I, умноженный на кадр 500 символов/с при 1,023 Мчип/с, Q = ярусный пилот AFS-Q при 5,115 Мчип/с, вращение несущей, выравнивание чипов и символов) воспроизводит отсчёты независимого генератора, когда управляется записанным состоянием канала этого генератора (фазы и скорости кода, фаза и частота несущей, амплитуда по каналам). Не охвачено: модель узла, выводящая это состояние из Доплера, задержки и отношения несущей к спектральной плотности шума, разделение мощности 50/50, вычисляемое по отношению несущей к спектральной плотности шума (амплитуды берутся из симулятора), а также метаданные SigMF и запись 8-битных отсчётов | lunar_afs::waveform::render, lunar_afs::codes, lunar_afs::frame | tests/lunar_afs_waveform_lans_afs_sim_oracle.rs::afs_chips_match_lans_afs_sim (всегда 210 основных кодов AFS-Q; с KSHANA_LANS_RUN и кэшем LSIS все 630 кодов, несовпадений чипов нет); tests/lunar_afs_waveform_lans_afs_sim_oracle.rs::afs_frames_and_baseband_match_lans_afs_sim (с кэшем LSIS: 3 кадра, несовпадений символов нет; 24 зафиксированных окна по 2 ms, |rho| = 0,999990); tests/lunar_afs_waveform_lans_afs_sim_oracle.rs::afs_full_run_matches_lans_afs_sim (зависит от данных: весь прогон 23,9 s, |rho| = 0,999990, наихудший блок 2 ms 0,999948, фаза 8e-9 rad) | Библиотека: LANS-AFS-SIM (T. Ebinuma, BSD-2-Clause, коммит 480c6bf353717bafc04b5ee5bafb38ed90e61aae, сборка для S-диапазона, запускается как отдельная программа); отсчёты Kshana управляются только записанным состоянием канала симулятора, а сборка с печатью одной только трассы проверена как побайтно идентичная неисправленной. Пороги зафиксированы до прогона: ноль расхождений по чипам и символам, |rho| >= 0,999 за прогон и >= 0,99 на блок 2 мс, фаза в пределах 0,05 рад. Равные амплитуды I и Q — входные данные сравнения, поэтому разделение мощности им не проверяется. LANS-AFS-SIM читает свои третичные коды из файла приложения 3 LSIS, так что эта часть не независима от строки о кодах. LANS-AFS-SIM и PocketSDR-AFS имеют общего автора и считаются одной независимой реализацией. Ограничено наличием данных: сравнение с LANS-AFS-SIM требует локального кэша LSIS V1.0 (xval/lunar-afs/fetch_lsis.sh, проверка SHA-256) и без него пропускается с уведомлением | VALIDATED |
| VM-f847c909 | Канальное кодирование кадра LunaNet AFS, FID 0 (LSIS V1.0) | Кадр FID 0 из LSIS V1.0 длительностью 12 с и 6000 символов: шаблон синхронизации из 68 символов, подкадр 1 с BCH (51, 8) (порождающий многочлен 763 в восьмеричной записи), CRC-24 ((1 + X)·P(X)) на подкадрах 2–4, кодирование LDPC со скоростью 1/2 с напечатанными A, B^-1, C, D (приложение 1 к LSIS, считывается во время выполнения из проверенного по SHA-256 локального кэша) и прокалыванием по стандарту, блочный перемежитель 60 x 98; исчерпывающий декодер подкадра 1, помечающий TOI вне 0..99, и нормированный декодер LDPC min-sum, написанный только по H = [[A, B, 0], [C, D, I]] | lunar_afs::frame, lunar_afs::ldpc, lunar_afs::lsis | tests/lunar_afs_waveform_lans_afs_sim_oracle.rs::afs_frames_and_baseband_match_lans_afs_sim (с кэшем LSIS: 3 кадра, которые передаёт LANS-AFS-SIM, построенные из тех же FID, TOI и битов данных: различаются ноль из 18 000 символов); tests/lunar_afs_frame_coding_oracle.rs::bch_worked_example_and_crc24_check_value_are_bit_exact (рисунок 8 LSIS: 0x045 -> 0x229f61dbb84a0; контрольное значение CRC-24/LTE-A 0xCDE703; выполняется всегда); tests/lunar_afs_frame_coding_oracle.rs::ldpc_codewords_satisfy_the_printed_parity_check_matrices (100 кодовых слов, ни одной невыполненной проверки напечатанной H); tests/lunar_afs_frame_coding_oracle.rs::decoder_from_parity_check_matrices_recovers_every_frame (декодер только по H, без шума и при 3 dB Es/N0, и 10 полных кадров); lunar_afs::ldpc::tests::printed_b_inverse_inverts_printed_b; lunar_afs::frame::tests | Библиотека: LANS-AFS-SIM (T. Ebinuma, BSD-2-Clause, коммит 480c6bf353717bafc04b5ee5bafb38ed90e61aae), чьи собственные BCH, CRC, LDPC и перемежитель создают кадры, посимвольно идентичные кадрам Kshana для того же содержимого (ноль расхождений, порог зафиксирован до прогона). Подкреплено эталонными значениями: рабочим примером BCH с рисунка 8 LSIS V1.0 и контрольным значением CRC-24/LTE-A (каталог параметризованных алгоритмов CRC Грега Кука), оба совпадают побитово; а также тем, что PocketSDR-AFS декодировал каждый подкадр кадров, которые он синхронизировал в трёх прогонах, с успешным CRC и совпадающими битами подкадра 2. Проверка по чётности близка к внутреннему тождеству (она подтверждает, что напечатанная B^-1 обращает напечатанную B) и не засчитывается как оракул. Ограничено наличием данных: сравнение с LANS-AFS-SIM требует локального кэша LSIS V1.0 (xval/lunar-afs/fetch_lsis.sh, проверка SHA-256) и без него пропускается с уведомлением | VALIDATED |
| VM-8d800158 | Декодируемость LunaNet AFS в замкнутом контуре независимым приёмником (LSIS V1.0) | Запись Kshana AFS, захваченная, отслеженная и декодированная независимым программным приёмником и сопоставленная с собственными истинными метками записи. Это доказывает только соответствие стандарту и согласованность меток; это не утверждение о физике канала, распространении, принимаемой мощности или бюджетах линии, значения которых в записи — выбранные входные данные | lunar_afs::waveform (запись и метки истины), xval/lunar-afs/run_pocketsdr.sh | tests/lunar_afs_decodability_pocketsdr_v3_oracle.rs::third_run_finding_c1_c2_hold_g0_is_receiver_nondeterminism (третья предварительная регистрация: 2 узла, отслежено 4 канала, наихудшая ошибка Доплера 0,57 Гц, наихудшая ошибка смещения кода 0,008 элемента кода, все 6 кадров декодированы с правильным TOI через переход 99 -> 0 и совпадающий подкадр 2; G0 не выполнен в написанном виде — из-за собственной разницы между прогонами приёмника в его записях захвата); tests/lunar_afs_decodability_pocketsdr_4bit_oracle.rs::decodability_finding_five_violations (вторая: 5 нарушений); tests/lunar_afs_decodability_pocketsdr_oracle.rs::first_run_finding_no_acquisition_outside_the_receivers_4_bit_range (первая: недействительна); строгие тесты из трёх файлов пропускаются из-за их расхождений | Библиотека: PocketSDR-AFS (T. Ebinuma по PocketSDR 0,13 T. Takasu, BSD-2-Clause, коммит 5b23809f30d68518b7fad7a564fd0fac57cc497d, сборка для S-диапазона, копия с уровнем журнала только для печати) при критериях, зафиксированных до каждого прогона. Третье предварительно зарегистрированное сравнение полностью выполняет свои пороги декодирования и слежения C1 и C2, но не выполняет свою защиту G0 в том виде, как она записана (два прогона неизменённого приёмника различаются в одних и тех же четырёх записях захвата), а второе не дотянуло на 5 нарушений, поэтому строка остаётся MODELLED. LANS-AFS-SIM и PocketSDR-AFS имеют общего автора и считаются одной независимой реализацией; проверки напечатанных векторов в строке о кодировании кадров защищают от общего неверного прочтения | MODELLED |
| VM-2d449120 | Кросс-генераторное соответствие GPS L1 C/A | Расширяющие коды GPS L1 C/A (sdr::CaCode) и подкадры LNAV 1–3 (gps_lnav: квантование полей по IS-GPS-200 со значением числа пи из спецификации, упаковка в дополнительном коде, слова TLM и HOW, чётность по таблице 20-XIV с инверсией D29*/D30*, биты, решающие чётность, в словах 2 и 10), сравнённые бит в бит с gps-sdr-sim на его поставляемом brdc0010.22n (32 спутника) | gps_lnav, sdr | tests/gps_l1ca_gpssdrsim_cross_generator.rs::gps_sdr_sim_truncates_where_the_broadcast_integer_needs_rounding (закреплённый вывод); tests/gps_l1ca_gpssdrsim_cross_generator.rs::ca_codes_lnav_fields_and_parity_match_gps_sdr_sim_bit_exactly (строгий, пропускается из-за расхождения); gps_lnav::tests | gps-sdr-sim (MIT, коммит 28ca29a6, запускается как отдельная программа через зафиксированную оснастку), зарегистрировано заранее f88f2969 с побитовым порогом для (A) чипов C/A, (B) каждого вычисленного поля LNAV, (C) каждого бита чётности. ВЫВОД: (A) 0 из 32 736 чипов различаются, (C) чётность 0 из 1 920 слов различается, (B) 230 из 1 152 вычисленных полей различаются на одну единицу: eph2sbf в gps-sdr-sim усекает к нулю приведениями типов C там, где передаваемому целому нужно округление (каждое различающееся значение лежит в пределах 0,01 единицы от округлённого целого Kshana). Остаётся MODELLED: зарегистрированный порог был конъюнкцией | MODELLED |
| VM-a0dce0aa | Геометрия сигнала сцены GNSS IQ относительно независимого генератора основной полосы | Истина для каждого спутника генератора сцены IQ для сцены GPS L1 C/A по широковещательным эфемеридам (iq::scene: SatGeometry по широковещательным эфемеридам, порождаемая в записи истины TruthRecord): какие спутники выше горизонта, псевдодальность, фаза кода в первом отсчёте, доплеровский сдвиг несущей и углы наблюдения для неподвижного приёмника, в сравнении с состоянием канала, по которому gps-sdr-sim строит первый блок собственного выхода I/Q, для тех же эфемерид, приёмника и времени начала (ионосфера выключена с обеих сторон) | iq::scene (Scene, SatGeometry, TruthRecord) | tests/iq_gpssdrsim_cross_generator.rs::scene_geometry_matches_gps_sdr_sim_channels (11 каналов: наихудшая псевдодальность 1.6e-3 m при пороге 0,05 m, кодовая фаза 5.5e-6 чипа при 2e-4, Доплер 7.4e-5 Hz при 0,02 Hz, углы наблюдения 4e-9 градуса при 1e-4, множество видимых идентично); tests/iq_gpssdrsim_cross_generator.rs::harness_reproduces_the_gps_sdr_sim_program_channel_listing (стенд оракула в точности воспроизводит собственный напечатанный программой список каналов) | gps-sdr-sim (T. Ebinuma, MIT, коммит 28ca29a6) — независимый генератор основной полосы GPS L1 C/A, собранный собственным Makefile и запущенный как отдельная программа на его поставляемом brdc0010.22n в примерном месте из текста его справки (scripts/gen_iq_gpssdrsim_ref.sh); зафиксированная оснастка, скомпонованная с той же сборкой, печатает состояние канала (computeRange, computeCodePhase) за первым блоком программы. Пороги зафиксированы до запуска генератора (предварительная регистрация 7777da53). Область применения: геометрия GPS L1 C/A для неподвижного приёмника без ионосферы, тропосферы и часов приёмника; модели каналов, шум и содержимое навигационных данных сцены в эту строку не входят | VALIDATED |
| VM-3ed8a076 | Захват GNSS IQ на независимо сформированных отсчётах I/Q | iq::acq::acquire (параллельный поиск фазы кода по БПФ с порогом Marcum-Q для квадратичного закона) с репликой GpsL1Ca на 20 мс собственного 8-битного выхода I/Q gps-sdr-sim, декодированного декодером отсчётов iq::io (ci8, 2,6 МГц, 11 спутников, без шума): каждый PRN с 1 по 32 ищется в двух окнах по 10 мс, результат сравнивается с фазой кода и Доплером, которые промодулировал gps-sdr-sim | iq::acq (acquire, AcqConfig); iq::io (decode_samples); iq::scene (GpsL1Ca) | tests/iq_gpssdrsim_cross_generator.rs::acquisition_threshold_is_crossed_on_gps_sdr_sim_noise_free_samples (зафиксированный результат); tests/iq_gpssdrsim_cross_generator.rs::acquisition_finds_gps_sdr_sim_satellites_in_its_samples (строгий, игнорируется вместе с пробелом) | Отсчёты I/Q gps-sdr-sim (MIT, коммит 28ca29a6) и его собственное состояние канала, зарегистрировано заранее 7777da53: (B1) каждый смоделированный PRN захвачен, (B2) никакой другой PRN не захвачен, (B3) фаза кода в пределах 0,5 чипа, (B4) Доплер в пределах 125 Гц. ВЫВОД: B1, B3 и B4 выполняются в обоих окнах (наихудшие 0,195 чипа, 72 Гц), но B2 не выполняется: все 21 PRN, которые gps-sdr-sim не моделировал, также пересекают порог (статистика от 151 до 206 против 79,5; смоделированные PRN — 1 300 и выше). Порог задан для гауссова шума измеренной мощности отсчётов; gps-sdr-sim шум не добавляет, поэтому ячейки отсутствующего PRN содержат взаимную корреляцию других спутников. Остаётся MODELLED: зарегистрированный порог был конъюнкцией | MODELLED |
| VM-59bb0091 | Мониторы IQ, оцениваемые в кампаниях лабораторного воспроизведения: обнаружение, пропуски, ложные тревоги и показатели ложной тревоги в замкнутом виде | iq::campaign::detect и исполнитель кампании: необязательная таблица [monitors] запускает мониторы IQ на каждой ячейке за единый проход исполнителя. Мониторы мощности и спектра видят отсчёты после каждой цепочки входного каскада; мониторы C/N0, SQM и захвата видят обновления контуров каждого отслеживаемого канала. Каждая тревога оценивается по заявленным событиям: обнаружено или пропущено для каждой тройки (событие, вид тревоги, канал), время обнаружения и ложные тревоги вне событий за время их экспозиции. Для каждого теста указан показатель ложной тревоги в замкнутом виде: мощность на блок (точный хвост гамма-распределения), избыток спектра на блок (приближение), эксцесс (односторонний гауссов), импульсы (биномиальный потолок), SQM на усреднённое обновление (2Q(k) = Q(1/2, k^2/2), новое) и ARL0 для CUSUM по C/N0 (Siegmund). Без таблицы ячейки, ключи и дайджесты не меняются. Помеховый сигнал не синтезируется | iq::campaign (detect, runner, spec); iq::monitor (stats::gaussian_two_sided_pfa, sqm) | tests/iq_campaign_monitors.rs: m1_power_test_false_alarm_rate_matches_the_closed_form (73 из 5900 блоков при 99 % биномиальном интервале [40, 80] для P_fa 0,01), m2_sqm_false_alarm_fraction_is_within_a_factor_of_2_of_2q_k (delta 0,0160, ratio 0,0131 при 0,01), m4_cn0_false_alarms_stay_within_the_poisson_bound_of_arl0 (0 при 0), the_monitors_table_parses_and_validates; m3_every_attenuation_is_detected_within_twice_the_arl1 (строгий, игнорируется вместе с пробелом); тесты iq::campaign::detect; тесты iq::monitor::stats (gaussian_two_sided_tail_matches_known_values); tests/iq_campaign.rs (зафиксированные дайджесты не меняются без таблицы) | Собственные замкнутые формы мониторов на собственных сценах Kshana GPS L1 C/A (шум и законные сигналы; события ослабления собственных сигналов спутников) относительно порогов, зарегистрированных заранее в docs/design/MONITORS-IN-CAMPAIGN.md (382ab2f4). ВЫВОД: M1, M2 и M4 выполнены. M3 выполнен по обнаружению (18 из 18 ослаблений, P_md 0) и NOT MET по условию о времени: медианное время обнаружения — 1,001 с при 2 x ARL1 отсчётов = 0,433 с. CUSUM видит одну оценку на окно 1 с, поэтому граница по числу отсчётов меньше одного отсчёта. Только внутренняя согласованность: ни реальный приёмник, ни записанные помехи не проверяются | MODELLED |
| VM-6254a75d | ROC обнаружения мониторов IQ по оценённой кампании лабораторного воспроизведения | iq::campaign::detect (windows, roc) и iq::campaign::report::rocs: каждая ячейка кампании с мониторами хранит для каждого вида тревоги и канала максимум собственной тестовой статистики монитора по каждому заявленному окну события (положительные) и по разбитым на плитки окнам roc_window_s вне событий (отрицательные). Статистики — отклонение мощности блока, избыток PSD, эксцесс z, |z| SQM усреднённой метрики и CUSUM по C/N0. Отчёт объединяет их по видам в эмпирическую ROC на уровне окон с её AUC и рабочей точкой при заданном пороге, записанную как roc.json (kshana.campaign-roc/1) и раздел Detection ROC в report.html. Кампания без мониторов не пишет ни того ни другого | iq::campaign (detect, report, runner); iq::monitor::spectral (kurtosis_reference) | tests/iq_campaign_roc.rs: r2_with_nothing_to_detect_the_roc_sits_at_chance (AUC cn0_drop 0,500, sqm_delta 0,566, power_drop 0,639 на заданных событиях, которые ничего не ослабляют); r1_the_cn0_drop_roc_separates_6_db_attenuations (строгий, игнорируется вместе с пробелом); тесты iq::campaign::detect (the_roc_of_separated_and_of_identical_samples, windows_tile_the_time_outside_the_events) | Синтетические кампании на собственных сценах Kshana GPS L1 C/A (ослабления собственных сигналов спутников) относительно порогов, зарегистрированных заранее в docs/design/DETECTION-ROC.md (b47e358d). ВЫВОД: R2 выполнен (уровень случайности, когда обнаруживать нечего). R1 NOT MET: AUC cn0_drop 0,7855 против 0,95, потому что каждое отрицательное окно после события наследует затухание CUSUM от обнаружения (все 18 послесобытийных отрицательных достигают 81 или более; все 18 дособытийных остаются на 0). Только внутренняя согласованность: ни реальный приёмник, ни записанные помехи не проверяются | MODELLED |
| VM-c9318c63 | Калибровка моделей C/N0 и захвата открытого приёмника по результатам кампаний IQ с заявленной ошибкой прогноза | iq::labfit (campaign, cn0, iqfit, iqreport) и [input] campaign на kshana iq labfit, Python kshana.iq_labfit и инструмент labfit для MCP (только папки кампаний внутри его рабочего каталога): читает выходную папку kshana iq campaign по её ДАЙДЖЕСТУ и группирует оценённые ячейки в единицы подгонки (сигнал x структура контура x цепочка входного каскада x тип помехи, никогда не объединяются). Для каждой единицы подгоняет измеренное C/N0 к заявленному J/S в форме спектрального разделения. Q_eff не идентифицируется по данным C/N0 без независимого измерения мощностей помехи и сигнала, поэтому Q задаётся, а не подгоняется (таблица типов, q события или для неизвестного типа наиболее вредное заявленное значение, cw Q = 1). Подгоняемый параметр — идентифицируемое смещение delta_eff = delta - 10 log10 Q, а защита по корреляции сообщает о вырожденности. Ячейки C/N0 с захватом ниже 90 % цензурируются и перечисляются. Пороговое J/S задаётся напрямую и в замкнутом виде; модели слежения и эмпирического захвата связаны через модель C/N0 с интервалами срыва и повторного захвата. Кластерный бутстрэп по записям с начальным значением (seed) (1000 реплик) даёт перцентильные интервалы; 90 % интервалы прогноза получают из розыгрышей остатков; отложенные проверки с исключением одной записи делятся на интерполяцию и экстраполяцию; зарегистрированная заранее таблица [validation] хешируется, и каждый порог оценивается как PASS/FAIL. Отчёт kshana.labfit-iq/1 в виде JSON, CSV и сгенерированного Markdown с блоком единиц. Только синтетика (без записи третьей стороны, без сигнала помехи). Путь labfit по журналу приёмника не изменён |
iq::labfit (campaign, cn0, iqfit, iqreport, schema, mod); iq::cli::labfit | tests/iq_labfit_campaign.rs: bar_c_holdout_prediction_intervals_cover_between_80_and_98_percent (покрытие PI90 0,891 по 558 интервалам, 0,900 по 10 событиям времени до потери при каждой модели захвата), the_report_carries_its_inputs_censoring_validation_and_labels (входные данные, цензурирование, хеш и вердикты [validation], аудит блока единиц), the_cluster_bootstrap_reproduces_from_the_campaign_and_seed, a_validation_mode_fit_refuses_to_start_without_its_table; bar_a_prime_delta_eff_is_recovered_and_q_is_stated_not_fitted, bar_d_closed_form_threshold_matches_the_direct_estimate_within_1_db и bar_b_prime_ci_subset (строгие, игнорируются вместе с пробелом); bar_b_prime_full_set_of_50_campaigns (игнорируется, запускается перед выпуском); тесты iq::labfit::cn0 (точное вырождение Q-delta, восстановление delta при заданном Q, обращение замкнутой формы порога); тесты iq::labfit::iqfit (условия модели захвата точно воспроизводят модель C/N0); tests/iq_labfit_followup.rs (продолжение, зарегистрированное в 1e532f84: s1_delta_eff_on_the_stepped_campaign MET, s2_d_as_written_on_the_stepped_campaign с проверкой записанного NOT MET, r1_dwell_corrected_d_on_the_fresh_ramp_campaign MET, в режиме release) | Синтетическое восстановление параметров на собственных сценах Kshana GPS L1 C/A с известным профилем C/N0, наложенным по формуле из раздела 3,1, отслеженных и оценённых kshana iq campaign, относительно порогов, зарегистрированных заранее в docs/design/LABFIT-FROM-IQ.md (раздел 5,1, изменён 2026-10-12 в b7117bf, раздел 13). Оценщик C/N0 кампаний (M2M4) был зафиксирован в 5b13e3c2, отправлен до первой оценки порогов (закоммичен вместе с кодом подгонки, а не отдельно), после одного раскрытого диагностического прогона слежения. ВЫВОД по кампании с 18 событиями: (c) PASS; (a') NOT MET, ошибка delta_eff -1.097 дБ против 0,5 дБ (всё ещё -0.89 дБ в ячейках от 38 дБ-Гц и выше); (b') NOT MET, 0 из 50 кампаний покрывают истину (ошибка -1.189 +/- 0,093 дБ, интервал около 0,3 дБ); (d) NOT MET, замкнутая форма на 2,20 дБ ниже прямого J/S при потере, около подогнанного интервала срыва, умноженного на скорость нарастания (2,09 дБ); исходные положения (a) и (b) о Q — NOT MET, потому что Q не идентифицируется. ПОСЛЕДУЮЩАЯ ПРОВЕРКА (пороги зарегистрированы заранее в 1e532f84, docs/design/evidence/labfit-followup/RESULTS.md): на кампании со ступенчатым J/S delta_eff восстанавливается в пределах +0,185 дБ (S1 MET: ошибка нарастания — запаздывание оценщика); (d) в записанном виде выполняется на ней моделью контура слежения (0,45 дБ), но не эмпирической (6,42 дБ), поэтому S2 — NOT MET; на новой кампании с нарастанием (d) с подогнанными интервалами срыва, к которым добавлена скорость нарастания каждого события, укладывается в 1 дБ для обеих моделей (R1 MET), а (a') и (d) в записанном виде снова не выполняются (-1.25 дБ; 2,32 и 9,47 дБ). Проверяется метод, а не какой-либо приёмник: по синтетическим данным он не может быть VALIDATED | MODELLED |
| VM-b6918acf | Кодирование GPS LNAV, декодированное независимой библиотекой приёмника | Подкадры LNAV 1–3 Kshana (gps_lnav::encode_subframes) для 32 эфемерид brdc0010.22n, поданные в decode_word и decode_frame RTKLIB: чётность каждого слова, декодирование подкадров с согласованным выпуском данных и каждый декодированный параметр относительно целого числа Kshana и входного значения | gps_lnav | tests/gps_lnav_rtklib_decode_oracle.rs::rtklib_recovers_every_integer_and_differs_only_by_its_decimal_two_to_the_minus_43 (зафиксированный результат); tests/gps_lnav_rtklib_decode_oracle.rs::kshana_lnav_subframes_decode_in_rtklib_to_the_broadcast_parameters (строгий, игнорируется вместе с пробелом) | RTKLIB v2.4.2-p13 (BSD-2-Clause, коммит 71db0ffa) decode_word/decode_frame как отдельная программа, зарегистрировано заранее ca5f0142: R1 чётность и декодирование, R2 декодированное значение равно целому числу Kshana, умноженному на масштаб IS-GPS-200, в пределах 2^-52 в относительном выражении, R3 в пределах половины кванта входного значения. ВЫВОД: R1 — 960 из 960 слов и 96 из 96 подкадров; R3 — каждый параметр, неделя и опорные времена точны; R2 не выполняется для 41 значений (af1, delta-n, IDOT) на 1–4 единицы младшего разряда, потому что P2_43 в RTKLIB — десятичное 1.136868377216160E-13, на 2.6e-16 в относительном выражении отличное от 2^-43; деление на константу RTKLIB возвращает целое число Kshana во всех случаях. Остаётся MODELLED: зарегистрированный порог R2 был слишком жёстким для собственной константы оракула | MODELLED |
| VM-6649987c | Кодирование навигационного сообщения GPS LNAV | Подкадры LNAV 1–3 по IS-GPS-200 (gps_lnav::encode_subframes: квантование с округлением до ближайшего каждого параметра часов и орбиты при масштабных множителях и значении числа пи из спецификации, упаковка в дополнительном коде, слова TLM и HOW, чётность по таблице 20-XIV с инверсией D29*/D30*, биты, решающие чётность, в словах 2 и 10) — сообщение, которое передаёт генератор сигнала GPS L1 C/A | gps_lnav | tests/gps_lnav_rtklib_integer_oracle.rs::kshana_lnav_integers_decode_in_rtklib_from_an_unseen_broadcast_file (32 спутника навигационного файла IGS от 2 марта 2025: 960 из 960 слов проходят проверку чётности RTKLIB, 96 из 96 подкадров декодируются, 608 из 608 декодированных целых чисел эфемерид равны числам Kshana, каждый вход в пределах половины кванта, неделя и времена точны); gps_lnav::tests | RTKLIB v2.4.2-p13 (BSD-2-Clause, коммит 71db0ffa) readrnx разбирает ежедневный широковещательный файл IGS BRDC00IGS_R_20250610000_01D_MN.rnx, а decode_word/decode_frame декодируют слова Kshana, запускается как отдельная программа; зарегистрировано заранее d4d9eb9d до получения файла, порог точного совпадения целых чисел. Мутация: усечение вместо округления даёт 235 отказов. Более ранние сравнения того же кодировщика записаны как выводы: с gps-sdr-sim, который усекает (230 полей), и со масштабированными значениями RTKLIB, чья десятичная константа 2^-43 не уложилась в порог в одну единицу младшего разряда (41 значений). Последующая проверка интегратором (остаётся MODELLED): сравнение согласуется, и мутация набора чётности тоже делает его красным, но предварительная регистрация d4d9eb9d попала в публичную ветку в 20:02:29 UTC, через две секунды после коммита с результатом 1783f904 (20:02:27 UTC), в котором уже есть выход RTKLIB для этого файла, поэтому порядок «зарегистрировано до получения файла» показать нельзя; новая регистрация, отправленная до получения невиданного широковещательного файла, решила бы вопрос | MODELLED |
| VM-7151fa5e | Захват и оценка C/N0 на реальных лунных IQ | Параллельный поиск фазы кода (acquisition::pcps_acquire: переносимое БПФ, когерентное свёртывание, некогерентное накопление, порог хи-квадрат для вероятности ложной тревоги по всему поиску), уточнение, разомкнутая мгновенная корреляция с доплеровским сдвигом кода и оценщик C/N0 M2M4, запущенные на пакетах IQ LuGRE L1 с 4-битными отсчётами, считанных через realdata::ion_sdr | acquisition, portable_math, realdata::ion_sdr, realdata::lugre | tests/lugre_acquisition_gnss_sdr_oracle.rs::finding_dc_artefacts_and_no_contemporaneous_flight_cn0 (зафиксированный результат, зависит от данных); tests/lugre_acquisition_gnss_sdr_oracle.rs::acquisition_and_relative_cn0_on_lugre_iq_match_gnss_sdr_and_the_flight_receiver (строгий, игнорируется вместе с пробелом); acquisition::tests; realdata::ion_sdr::tests; realdata::lugre::tests | GNSS-SDR 0.0.19 (GPL-3.0, отдельная программа, зафиксированная конфигурация) на девяти неповерхностных пакетах L1 и ИСХОДНОМ C/N0 лётного приёмника (LuGRE Mission Data, Zenodo 16411687, CC BY 4,0), зарегистрировано заранее 768cb62b. ВЫВОД: читатель Kshana декодирует все 288 сравниваемых интервалов так же, как независимый конвертер; GNSS-SDR объявляет положительными 266 из 288 поисков, и Kshana согласна во всех 266 решениях, но лишь 250 локализованы в ячейке GNSS-SDR (A2 не выполняется); ветвь C/N0 пуста, поскольку ни одна лётная эпоха RAW не лежит в пределах 30 с от какого-либо пакета (ближайшая — 141 с). Большинство положительных — артефакты: голые уровни дополнительного кода несут среднее -0.5 по I и Q, линию нулевой частоты на 32 дБ выше шума в полосе 1 кГц, которую захватывают оба приёмника. Два пакета (OP5, OP12) были исключены по ошибке: прочтение их метаданных с отброшенными цифрами было принято за противоречие их заголовкам; реальная причина состояла в том, что читатель не мог прочесть отсчёт шире слова (с тех пор исправлено). Остаётся MODELLED | MODELLED |
| VM-0823eb57 | Захват на реальных лунных IQ относительно предсказанного по орбите Доплера (решение по мощности отсчётов) | acquisition::pcps_acquire с решением по мощности отсчётов на девяти неповерхностных пакетах LuGRE L1 с уровнями mid-rise; разности Доплера между захваченными спутниками сравниваются с разностями, предсказанными по окончательным орбитам ESA и реконструированной Firefly траектории Blue Ghost | acquisition, realdata::ion_sdr | tests/lugre_acquisition_predicted_doppler_oracle.rs::noise_alone_crosses_the_sample_power_threshold_on_lugre_iq (зафиксированный результат, зависит от данных); tests/lugre_acquisition_predicted_doppler_oracle.rs::acquired_doppler_differences_on_lugre_iq_match_the_orbit_prediction (строгий, игнорируется вместе с пробелом) | Предсказанный Доплер по окончательным орбитам ESA/ESOC и реконструированной траектории NAIF CLPS (xval/lugre-predicted-doppler/predict.py, независимо от Kshana), зарегистрировано заранее 0d1839d2. ВЫВОД: все 288 поисков пересекают порог на шуме (статистики мощности отсчётов около 430–520 против 346,3), поэтому P1 выполняется тривиально, и P3 выполняется (274 из 288 предсказаны видимыми), а P2 не выполняется для 4033 из 4036 пар. Ограниченный по полосе входной каскад повышает шум каждой ячейки примерно в 1,46 раза (зафиксировано: уровень шума 292 против белого шума 200 на OP2 PRN 1), чего статистика мощности отсчётов не видит. Остаётся MODELLED | MODELLED |
| VM-547ca1d6 | Захват на реальных лунных IQ с оценкой по предсказанному по орбите Доплеру | acquisition::pcps_acquire с решением по усреднению ячеек (пик относительно средней ячейки сетки, устойчивое к шуму с ограниченной полосой) на девяти неповерхностных пакетах LuGRE L1 с уровнями mid-rise; разности Доплера между захваченными спутниками сравниваются с разностями, предсказанными по окончательным орбитам ESA и реконструированной Firefly траектории Blue Ghost | acquisition, realdata::ion_sdr | tests/lugre_acquisition_cell_average_doppler_oracle.rs::strong_pairs_match_the_prediction_only_with_the_doppler_sign_reversed (зафиксированный результат, зависит от данных); tests/lugre_acquisition_cell_average_doppler_oracle.rs::cell_average_acquisitions_on_lugre_iq_match_the_orbit_predicted_doppler (строгий, игнорируется вместе с пробелом) | Предсказанный Доплер по окончательным орбитам ESA/ESOC и реконструированной траектории NAIF CLPS (xval/lugre-predicted-doppler/predict.py, независимо от Kshana), зарегистрировано заранее a81a9a4e. ВЫВОД: P1 и P3 выполняются (4 пакета, 12 из 12 захватов предсказаны видимыми), но P2 не выполняется для 8 из 8 пар. Две самые сильные пары совпадают с предсказанием по величине при обратном знаке (OP2 PRN 18/24: +7670,0 Гц измерено, -7693.9 предсказано; OP17 PRN 11/30: +11155,0, -11114.4), так что зарегистрированный порядок с I в младшем полубайте — сопряжённый к порядку пакетов; шесть обнаружений чуть выше порога не совпадают ни с одним знаком. Разброс Доплера при уточнении (от 30 до 50 Гц между двумя прогонами) также был недооценён регистрацией. Остаётся MODELLED | MODELLED |
| VM-2a6bb218 | Захват на отложенных реальных лунных IQ относительно предсказанного по орбите Доплера | acquisition::pcps_acquire (решение по усреднению ячеек, вероятность ложной тревоги 1e-7) с refine_doppler_coherent на пакетах LuGRE L1, записанных на лунной поверхности (I в старшем полубайте, уровни mid-rise); разности Доплера между захваченными спутниками относительно разностей, предсказанных по окончательным орбитам ESA и посадочному ядру Firefly | acquisition, realdata::ion_sdr, realdata::lugre | tests/lugre_surface_acquisition_doppler_oracle.rs::each_surface_acquisition_is_a_single_predicted_visible_satellite (зафиксированный результат, зависит от данных); tests/lugre_surface_acquisition_doppler_oracle.rs::surface_acquisitions_match_the_orbit_predicted_doppler (строгий, игнорируется вместе с пробелом) | Предсказанный Доплер по окончательным орбитам ESA/ESOC и посадочному ядру NAIF CLPS Firefly (xval/lugre-predicted-doppler/predict_surface.py, независимо от Kshana), зарегистрировано заранее 2108e6ff на пакетах, никогда не открывавшихся ранее. ВЫВОД: проверка на нетривиальность не проходит; ни один пакет не содержит двух захватов. OP40 исключён (метаданные называют отсутствующий файл); OP38, OP73, OP77_0, OP77_1 ничего не захватывают и не показывают ложной тревоги при 1e-7 (наибольшие статистики от 325 до 356 против 385,9); OP74 и OP76 захватывают PRN 31, а OP78_0 и OP78_1 — PRN 12, каждый по одному, все предсказаны видимыми. Остаётся MODELLED. Раскрытые отклонения: зарегистрированный порог Доплера 10 Гц опирается на синтетическое Монте-Карло когерентного уточнения, а не на разброс уже виденных пакетов, о котором просил интегратор; OP40 был исключён до прогона, потому что его метаданные называют файл отсчётов, которого нет в поставке набора данных | MODELLED |
| VM-c771c187 | Совместная геометрия связи и навигации на Луне | Топоцентрические углы наблюдения для каждого спутника (азимут по часовой стрелке от севера, угол места) и наклонная дальность в названном селенографическом пункте при заданном положении спутника в связанной с Луной системе пункта (проверяемое утверждение). Точность дальнометрии по сигналу в пространстве задаётся параметром сценария, так что перебор по объёму обслуживания выдаёт ТРЕБОВАНИЕ к дальнометрии, а не «прошёл/не прошёл» при одной фиксированной сигме; этот параметр — проектный вход вне проверяемого утверждения | lunar_service | lunar_service::tests (топоцентрическая геометрия в сравнении с вычисленной вручную: над головой, строго на север/восток/запад, антиподальная и вырожденное полярное направление на восток; экспортируемый флаг видимости согласуется с независимым фильтром видимости на полном переборе 6 h; экспорт по умолчанию выключен и доказуемо ничего больше не меняет; уровни защиты строго линейны по заданной сигме, а лежащая под ними геометрия не затрагивается); tests/lunar_service_geometry_oracle.rs::look_angles_match_anise_at_selenographic_sites (768 отсчётов на 8 пунктах, 12 эпохах и 8 спутниках в сравнении с ANISE 0.10.2: азимут и возвышение в пределах 1e-6 deg, дальность и положение пункта в пределах 1 mm; наихудшие 2.2e-12 deg, 2.1e-13 deg, 5.6e-9 m) | ANISE 0.10.2 (Nyx Space, MPL-2.0, запускается как инструмент из xval/anise-service-geometry, двоичный файл lunar-look-angles-xval, который не вызывает код Kshana): собственная процедура ANISE для азимута, угла места и дальности (azimuth_elevation_range_sez) для пунктов, построенных её конструктором по широте, долготе и высоте на Луне pck00011 (сфера 1737,4 км), со спутниками, повёрнутыми в MOON_PA_DE440 через moon_pa_de440_200625.bpc. 768 отсчётов для 8 пунктов (4 названных пункта и 4 других, выше и ниже горизонта), 12 эпох и 8 спутников согласуются в пределах 1e-6 градуса по азимуту и углу места и 1 мм по дальности и положению пункта (зафиксировано до сравнения); измерено 2.2e-12 градуса, 2.1e-13 градуса и 5.6e-9 м. Утверждение: размещение пункта и углы наблюдения при заданном положении спутника в связанной с пунктом системе. Собственная реализация Kshana лунной связанной системы по среднему вращению и параметр точности дальнометрии вне его; модульные тесты геометрии в замкнутом виде сохраняются как вспомогательные проверки | VALIDATED |
| VM-2120aea3 | Лунные дифференциальные PNT | Дифференциальная опорная станция класса NovaMoon: подавление синфазной ошибки + остаток, растущий с базой + уровни защиты DGNSS | lunar_dpnt | lunar_dpnt::tests (синхронная составляющая часов сокращается точно; остаток растёт с базой; повторно используется PL SBAS; число спутников соблюдается до предела построителя в 24, поэтому более крупная орбитальная группировка не может незаметно вернуть меньшую); tests/lunar_differential_pnt_reference.rs (остаток одиночной разности + позиционное решение WLS в сравнении с lsq() из RTKLIB, скомпилированным из исходного кода на C) | Тождество дифференциального подавления ошибок + повторное использование механизма PL SBAS по DO-229E; решение с однократными разностями + WLS дополнительно сверено с lsq()/matinv() из RTKLIB (Takasu, BSD-2-Clause, скомпилированный C) — независимый код решателя, но та же алгебра разностей линий визирования первого порядка, так что по-прежнему InternalConsistency | MODELLED |
| VM-a157b399 | Экспорт для лунной интероперабельности | Экспорт лунной системы отсчёта, времени и эфемерид, согласованный с LunaNet/IOAG (CCSDS OEM + KIF), с проверкой соответствия при круговом обходе | lunar_interop | lunar_interop::tests (OEM содержит лунные REF_FRAME/TIME_SYSTEM; метаданные времени проходят круговой обмен; конверт KIF); tests/lunar_interoperability_export_reference.rs (выданный kshana лунный OEM повторно разобран независимой библиотекой Python oem: токены REF_FRAME/TIME_SYSTEM/CENTER + состояние по эпохам с точностью формата; испорченный экспорт отклоняется); tests/lunar_interop_oem_oracle.rs::recorded_two_reader_outcome_is_for_todays_export |
Лунный экспорт OEM из kshana, заново разобранный независимой сторонней библиотекой oem (R. J. Anderson): токены системы отсчёта и времени и состояние для каждой эпохи согласуются с точностью записи (1 мм / 1e-9 км/с), а экспорт с отброшенным TIME_SYSTEM отвергается — структурный круговой обход обмена; физическая семантика лунной системы отсчёта и времени проверяется их собственными строками, поэтому эта строка остаётся MODELLED. Внешнее сравнение 0,30 — вывод (остаётся MODELLED): второй независимый читатель, разборщик CCSDS OEM из Orekit 12,2 (Apache-2.0, строгие значения по умолчанию), отвергает оба лунных файла, потому что не реализует системы времени LTC и TCL (он декодирует OEM крейта в EME2000/UTC и декодирует лунные файлы, когда TIME_SYSTEM заменён на TDB); oem 0.4.5 декодирует их в пределах записанной точности только за счёт отступления от неподдерживаемой системы времени. Обмен этими лунными файлами с распространёнными читателями CCSDS не установлен |
MODELLED |
| VM-ce44f2a8 | Оценка по рамкам устойчивости PNT | Подоценки по измерениям для семи собственных категорий устойчивости Kshana (не термины DHS), функций RDRR RethinkPNT и критериев Yang, каждая помечена Modelled с указанием своего драйвера; предварительный уровень RPCF с условием ограниченной деградации. Самооценка на основе моделирования, никогда не сертификация. | resilience::arch, resilience::score, resilience::diversity, resilience::timeline | resilience::score::tests (монотонность, границы составного показателя, ограничение уровня, смоделированное происхождение); resilience::diversity::tests (обратный индекс Симпсона, общая причина отказа, SPOF) | Выведенные вручную формулы для каждой метрики: разнообразие по обратному Симпсону, взвешенный среднеарифметический композит, ограниченные и неограниченные длительности по временной шкале, лестница уровней по слабейшему звену | MODELLED |
| VM-2605d9ce | Исследование нестабильности решений по оценке устойчивости | Количественно показывает, как одна композитная оценка или уровень RPCF переупорядочивает архитектуры при допустимом симплексе весов и ансамбле угроз (доля смен top-1, дисперсия тау Кендалла, доля смен уровня, диапазоны рангов); анализ «заявлено против измерено» и схлопывания разнообразия. | resilience::stats, resilience::study, resilience::panel | resilience::stats::tests (ручной пример тау Кендалла, симплекс Дирихле, доля переключений); resilience::study::tests (контроль устойчивости, свидетельство неустойчивости, заявленное против измеренного, коллапс разнообразия) | Тождества ранговых статистик в замкнутом виде (тау в [-1,1] со значениями, вычисленными вручную; детерминированное Дирихле с начальным значением) и построенные устойчивые и неустойчивые свидетели | MODELLED |
| VM-54e60db6 | Репрезентативность демонстрации и разрывы до полёта | Реестр честности для каждого результата, уточняющий выход демонстрации: его внешние опоры, смоделированные допущения, разрывы до полёта и репрезентативный диапазон TRL, с принудительными инвариантами (Validated требует внешней опоры; Modelled требует разрыва и не может заявлять выше TRL 4). | representativeness | representativeness::tests (validated-needs-external-anchor, modelled-needs-gap, modelled-TRL-ceiling, malformed-band, поля JSON) | Инварианты в замкнутом виде, соответствующие дисциплине «репрезентативность обоснована + разрывы до полёта выявлены» для compliance; привязаны к границе между статусом верификации и видом оракула | MODELLED |
| VM-029c96cc | Свидетельства компромисса «квантовое против классического» (общая форма) | Один воспроизводимый объект TradeEvidence (фиксированная рамка: сценарий + seed + движок; общие значения «квантовое против классического» для каждого показателя качества с корректной по знаку выгодой, необязательный 95% доверительный интервал, метка validated/modelled), несущий запись о репрезентативности, так что каждая квантовая вертикаль PNT сообщает компромисс одинаково честно. | qtrade | qtrade::tests (полярность выигрыша: больше — лучше / меньше — лучше, точно оборачивает реальный TradeResult, недобросовестные доказательства отклоняются, для FoM со статусом validated нужен внешний якорь, детерминированный JSON) | Тождества выгоды и победителя в замкнутом виде + точная обёртка существующего quantum_trade::TradeResult; честность привязана к реестру репрезентативности и меткам верификации | MODELLED |
| VM-868d3124 | Библиотека моделей ошибок квантовых устройств | Карточки устройств (оптические/на захваченных ионах/на ионах ртути + классические часы, повторно используемые из holdover/clock_state; холодноатомный интерферометр; классические линии передачи времени и линии на запутанных/одиночных фотонах), каждая несёт запись о репрезентативности; линия на запутанных фотонах добавляет модель точности синхронизации, ограниченной дробовым шумом (~jitter/sqrt(R*tau), штраф за тёмные отсчёты, систематический нижний предел). | quantum_devices | quantum_devices::tests (карточки часов честные и упорядоченные; точность запутанности ~1/sqrt(tau); обнаруженная скорость -10x/10 дБ; темновые отсчёты ухудшают; границы систематического минимума; карточка смоделирована и допустима) | Повторно используемые коэффициенты часов и CAI (holdover/clock_state, опубликованные значения) + тождества дробового шума и потерь в замкнутом виде для линии на запутанных фотонах | MODELLED |
| VM-6c2f0424 | Доверенное квантовое время (передача времени + защищённое распространение + аномалии) | Сквозная цепочка передачи времени «квантовая против классической» (инерционный ход часов + точность линии в квадратуре), повторно используемый уровень защиты времени, показатель безопасности по атакам с задержкой и повтором (1-P_md) и вероятность обнаружения аномалии часов + задержка CUSUM, выдаваемые как честный TradeEvidence с записью о репрезентативности. | timetransfer_chain | timetransfer_chain::tests (точность улучшается с интегрированием; квант может и выиграть, и проиграть; PL конечен и положителен; FoM безопасности в [0 1] и растёт с задержкой атаки; Pd аномалии монотонна; обмен is_honest) | Квадратурный бюджет в замкнутом виде на повторно используемых проверенных ядрах (ADEV по Stable32/NIST; граница TPL; обнаружение analytic_pd/pmd); честность привязана к реестру репрезентативности | MODELLED |
| VM-ad83abe1 | Квантовая навигация без GNSS | Квантовое (холодноатомный интерферометр) против классического счисления пути навигационного класса по INS при отсутствии GNSS: рост ошибки положения, holdover до порога положения и компромисс «квантовое против классического» как честный TradeEvidence; честное замечание о наблюдаемости (смещение ненаблюдаемо без решения, поэтому ошибка растёт). | quantum_nav_od | quantum_nav_od::tests (квантовый превосходит классический при длительном перерыве; преимущество зависит от длительности перерыва; обмен is_honest); tests/gnss_free_quantum_navigation_reference.rs (рост позиционной ошибки при счислении пути в сравнении с независимым двойным интегрированием в Octave + опубликованным якорем шума Freier-2016) | Повторно используемые инерциальные бюджеты, сверенные с независимым двойным интегрированием в Octave того же ОДУ счисления пути (другая среда выполнения, общая модель → ReferenceImpl) плюс опубликованный краткосрочный шум Freier-2016 как односторонняя опора; композит «квантовое против классического» остаётся MODELLED | MODELLED |
| VM-67830b35 | Обнаружение неисправностей и аномалий для квантовых систем PNT | Каталог квантовых неисправностей с метками (скачок частоты/дрейф/потеря захвата часов; скачок смещения/пропадание датчика), AUC ROC статистики обнаружения с бутстрэп-доверительным интервалом и минимально обнаружимая неисправность при фиксированной частоте ложных тревог; монитор с квантовыми часами обнаруживает меньшие неисправности, чем классический, и выдаётся как честный TradeEvidence. | quantum_faults | quantum_faults::tests (известные значения аналитической AUC; эмпирическая бутстреп-AUC охватывает замкнутую форму; квантовый обнаруживает меньшие отказы / более высокая AUC; преимущество исчезает для огромных отказов; каталог из 5 классов; обмен is_honest) | Гауссова AUC в замкнутом виде = Phi(mu/(sigma*sqrt2)), сверенная с внешне проверенной eval_stats::bootstrap_auc_ci (по scikit-learn) + аналитические пороги обнаружения | MODELLED |
| VM-5a7431e2 | Динамика ориентации твёрдого тела без моментов | Уравнения вращательного движения Эйлера (I ω̇ = τ − ω × Iω, главные оси и общий тензор инерции), связанные с кинематикой ориентации на кватернионах (q̇ = ½ q ⊗ ω) и распространяемые интегратором RK4 с фиксированным шагом, который заново нормирует кватернион на каждом шаге | attitude_dynamics | attitude_dynamics::tests (apply/solve обратны, нулевой момент у сферического волчка, неподвижная точка на главной оси, сохранение энергии и импульса на коротком прогоне, q̇=½q⊗ω, знак скорости симметричного волчка + прецессия по конусу тела); tests/attitude_dynamics_reference.rs (200 000-шаговых прогонов без момента: |q|=1 с точностью 1e-10, кинетическая энергия T=½ωᵀIω сохраняется с относительной точностью 1e-9, |Iω| и вектор инерциального импульса сохраняются с относительной точностью 1e-9/1e-8, как для трёхосной, так и для общей недиагональной инерции; прецессия по конусу тела для симметричного волчка, сплюснутого и вытянутого, воспроизведена с точностью 1e-6 в сравнении с аналитическим λ=ω₃(I_a−I_t)/I_t); tests/attitude_dynamics_basilisk_oracle.rs::torque_free_motion_matches_basilisk (две общие недиагональные инерции, 1e4 s без момента в сравнении с хабом КА Basilisk 2.9.1 с RKF78: кватернион в пределах 1e-9, наихудшее 3.3e-11; угловые скорости тела в пределах 1e-9 rad/s, наихудшее 3.4e-12) | Basilisk 2.9.1 — распространение твёрдого тела космического аппарата (AVSLab, ISC; ориентация MRP через собственные связанные уравнения ступицы, svIntegratorRKF78 при относительном допуске 1e-12), независимая реализация уравнений твёрдого тела без моментов: кватернион RK4 Kshana (dt 0,01 с) и угловые скорости тела согласуются в пределах 1e-9 на 1e4 с для двух общих недиагональных тензоров инерции (наихудшие 3.3e-11 и 3.4e-12 рад/с); допуск зафиксирован до сравнения. Проверяемое утверждение: движение без моментов; член внешнего момента не сравнивается. Проверки законов сохранения и симметричного волчка сохраняются как вспомогательная самосогласованность. Среда с гибким телом, контуром управления и внешним моментом не моделируется | VALIDATED |
| VM-c1723806 | Динамика относительного движения Клохесси — Уилтшира / Хилла | Относительное движение преследователя вокруг цели на круговой опорной орбите в системе LVLH: линеаризованные уравнения Клохесси — Уилтшира (ẍ−2nẏ−3n²x=0, ÿ+2nẋ=0, z̈+n²z=0), решаемые матрицей перехода состояния Φ(n,t) размера 6×6 в замкнутом виде (Clohessy–Wiltshire 1960; Vallado, алгоритм 48) с условием ограниченной относительной орбиты ẏ₀=−2n·x₀ и поправкой второго порядка в замкнутом виде (cw_dynamics::second_order_correction, отклик CW на квадратичные члены точных уравнений для круговой орбиты ведущего; Karlgaard и Lutze 2003, Newman, Lovell и Pratt 2015), составленной как cw_dynamics::propagate_second_order. Проверяемый выход — propagate_second_order; одна линейная Φ характеризуется относительно нелинейной истины, но не проверяется | cw_dynamics (propagate, second_order_correction, propagate_second_order) | cw_dynamics::tests (Φ(0)=I, развязанные поперечные гармонические колебания); tests/cw_dynamics_reference.rs (Φ в замкнутой форме в сравнении с независимым интегрированием тех же уравнений Хилла методом RK4 с фиксированным шагом с точностью <1e-6 на трети орбиты; Φ(t)Φ(−t)=I с точностью 1e-9; условие ограниченности ẏ₀=−2n·x₀ замыкает полное состояние через один период с точностью 1e-9 без векового дрейфа вдоль трассы за 10 орбит; чисто радиальное смещение дрейфует на аналитические −12π·x₀ за орбиту); tests/cw_dynamics_orekit_oracle.rs::cw_second_order_matches_nonlinear_orekit_within_1mm (четыре случая при 100 m на трети орбиты в 500 km: наихудшее 1.15e-7 m при пороге 1e-3 m); tests/cw_dynamics_orekit_oracle.rs::cw_disagreement_with_orekit_is_recorded_as_a_finding (одно линейное Φ: от 1,2 до 6,3 mm, закреплено) | Orekit 12,2 (Apache-2.0) NumericalPropagator, два тела, LOFType.QSW, запускается как отдельная программа (набор данных не менялся с раунда 1). Порог 1e-3 м, зарегистрированный заранее, на каждом отсчёте каждого случая; исправление движка второго порядка было перезапущено против него без изменений (поправка 8c8e768d, написанная до появления пропагатора, с раскрытием того, что разрывы первого порядка были известны). propagate_second_order согласуется в пределах 1.15e-7 м (C1), 9.8e-8, 5.4e-8 и 2.2e-8 м; уменьшение члена второго порядка вдвое даёт отказ при 1.85e-3–3.14e-3 м. Одна линейная Φ отклоняется от нелинейной истины на 1,2–6,3 мм при 100 м за треть орбиты (отброшенный член второго порядка; её строгий тест оставлен игнорируемым), поэтому она характеризуется, а не проверяется. Сохранённые внутренние проверки: Φ против интегрирования уравнений Хилла методом RK4, Φ(t)Φ(−t)=I, тождества ограниченной орбиты и дрейфа −12π·x₀ и масштабирование остатка третьего порядка члена второго порядка. Область применения: круговая орбита ведущего, разделения около 100 м, до трети орбиты; без эксцентриситета (Tschauner–Hempel), членов J2 и дифференциального сопротивления; допущение малого разделения | VALIDATED |
| VM-40e51f3e | Пассивная геолокация излучателя по TDOA/FDOA | Определение положения излучателя (источник помех или спуфер, либо оппортунистический источник для обратной PNT) по разности времён прихода в сети приёмников — пересечение гиперболоидов τᵢ=(Rᵢ−R₀)/c, решаемое методом наименьших квадратов Гаусса — Ньютона, — и, добавляя разность частот прихода (разности скоростей изменения дальности) при движущихся приёмниках, совместное восстановление положения и скорости; с нижней границей Крамера — Рао для ковариации положения по геометрии измерений | geolocation | geolocation::tests (прямая→обратная TDOA без шума с точностью 1e-6 м; J·CRLB=I при симметричной положительно определённой ковариации; след дисперсии положения по CRLB не возрастает при добавлении приёмника; совместная TDOA+FDOA восстанавливает положение+скорость движущегося излучателя; <4 приёмников отклоняются); tests/geolocation_reference.rs (круговые преобразования на четырёх геометриях с сетью, разнообразной в 3D; оценщик Гаусса–Ньютона достигает своей границы Крамера–Рао — эмпирическая ковариация ошибки следует за аналитической границей на 4000 испытаниях Монте-Карло); tests/geolocation_crlb_published_oracle.rs (ho_chan_1993_maximum_tdoa; ho_xu_2004_fig7_with_the_authors_corrected_source; ho_xu_2004_bound_matches_the_authors_code; finding_ho_chan_ottawa_printed_values_are_not_the_bound и finding_ho_xu_fig7_printed_source_is_not_the_plotted_one, зафиксированы) | Самосогласованность оценивателя и геометрии: круговые обходы прямое→обратное, тождество Фишера/CRLB J·CRLB=I, монотонность GDOP и достижение оценивателем собственной границы Крамера — Рао при шуме Монте-Карло — проверки внутренней согласованности, НЕ внешний набор данных, поэтому строка остаётся InternalConsistency. MODELLED пассивная геолокация — модель точечного источника по линии визирования; без многолучевости и NLOS, смещения часов приёмника и членов атмосферной рефракции. Раунд 0,30 2 относительно Ho и Chan 1993 и Ho и Xu 2004 (зарегистрировано заранее f89018b8, 1 % от каждого напечатанного значения) — вывод (остаётся MODELLED): граница TDOA с ограничением на поверхность воспроизводит геометрические множители 40 Н (-0.11 %, -0.02 %) и максимальное TDOA; совместная граница TDOA+FDOA воспроизводит рис. 6 (+0,06 %, -0.17 %) и, в источнике, который называет собственный код авторов для рис. 7 (поправка, написанная после того, как этот результат был увиден, раскрыта), рис. 7 (+0,11 %, -0.02 %); она равна опубликованному коду границы авторов (в стиле BSD, запущен в GNU Octave) с точностью 3e-12; решатель максимального правдоподобия со взвешиванием по ковариации достигает напечатанной границы (от +0,3 до +0,4 %). Множители для Оттавы, которые статья печатает по Монте-Карло (251, 7,1), отличаются на +1,3 % и +4,4 %, вне порога 1 % | MODELLED |
| VM-e29a09f4 | Пиковое торможение баллистического входа в атмосферу по 3-DoF в сравнении с опубликованным номиналом Stardust | Вход материальной точки по 3-DoF над вращающейся сферической Землёй через стандартную атмосферу США 1976, интегрируемый методом RK4 из инерциального состояния входа, с выдачей пикового торможения и его высоты; планетарное относительное состояние входа выводится из инерциального. Запускается как вид сценария entry-heating. |
entry_eo_ascent::entry_heating (simulate_entry, inertial_to_relative, EntryHeatingScenario) | tests/entry_stardust_published.rs (пик 35,44 g против опубликованных 33,4 g, +6,1 %, порог 10 %; скорость входа относительно планеты 12,551 km/s против 12,6, порог 0,1 km/s); entry_eo_ascent::entry_heating::tests (энергия во вращающейся системе падает ровно на работу сопротивления; вакуумный выбег сохраняет энергию Якоби; невращающийся баллистический случай совпадает с плоской материальной точкой модуля reentry; замкнутая форма Аллена–Эггерса в своём режиме) | Номинал Stardust по Desai, Mitcheltree и Cheatwood (1999, NASA NTRS 20050042027): максимальное торможение 33,4 g при 12,6 км/с относительно планеты со стартовой массой 45,8 кг, траектория POST по 6-DoF с полной аэродинамической базой данных; граница входа по Desai, Lyons, Tooley и Kangas (NTRS 20090004445): радиус 6503,14 км, инерциальная скорость 12,9 км/с при -8.2 градуса. Пороги зарегистрированы заранее в xval/entry-stardust/PREREGISTRATION.md до какого-либо прогона на этих входных данных; оба выполнены с первого прогона. ЧТО НЕ ПРОВЕРЕНО: один опубликованный случай и одна величина (пиковое торможение, которое в баллистическом приближении не зависит от баллистического коэффициента); широта и курс входа предполагаются; нагрев, тепловая нагрузка и точка посадки с ним не сверялись; материальная точка с постоянным C_D, а не 6-DoF. | VALIDATED |
| VM-953d1c01 | Конвективный нагрев критической точки при входе (Sutton-Graves) на входе по 3-DoF | Конвективный тепловой поток в критической точке q = k sqrt(rho/R_n) V^3 с константами Sutton-Graves для земного воздуха и атмосферы Марса (NASA TR R-376, 1971), его пик и интегральная тепловая нагрузка вдоль входа по 3-DoF, баллистического или с подъёмной силой при постоянном крене, на Земле или Марсе. | entry_eo_ascent::entry_heating (stagnation_heat_flux, simulate_entry) | entry_eo_ascent::entry_heating::tests::heat_flux_relation_has_the_published_form_and_constants; entry_eo_ascent::entry_heating::tests::lift_lowers_peak_deceleration_and_heat_flux_of_a_shallow_entry; entry_eo_ascent::entry_heating::tests::mars_entry_runs_with_the_mars_constants; tests/entry_stardust_published.rs (фиксирует 746 Вт/см2 для Stardust без порога) | Внутренняя согласованность: соотношение и константы, как напечатано в NASA TR R-376, проверка сходимости по половинному шагу и ожидаемый порядок пиков нагрева и торможения. ЧТО НЕ ПРОВЕРЕНО: ни одно опубликованное значение нагрева не сравнивалось (статьи по Stardust дают проектный предел и оценку конвективного плюс излучательного нагрева около 1200 Вт/см2, с которой конвективное одно соотношение сравниться не может); нет излучательного нагрева, поправки на температуру стенки или каталитичность и отклика тепловой защиты. | MODELLED |
| VM-f981b758 | Радиометрия электрооптического формирователя изображений, MTF, относительный отклик края и NIIRS по GIQE 4 | Бюджет отношения сигнал/шум надирного формирователя изображений (ламбертова яркость сцены, уравнение камеры, дробовой, темновой, считывающий шум и шум квантования), системная MTF на частоте Найквиста как произведение дифракции неперекрытой апертуры, апертуры детектора, линейного смаза и гауссова дрожания, отклик края и относительный отклик края, интегрированные по этой MTF, Q = lambda F / p, и NIIRS по GIQE версии 4 без компенсации MTF. Запускается как вид сценария eo-radiometry. |
entry_eo_ascent::eo_radiometry (Imager, snr_budget, giqe4_niirs, EoRadiometryScenario) | entry_eo_ascent::eo_radiometry::tests::diffraction_mtf_has_its_closed_form_values; entry_eo_ascent::eo_radiometry::tests::a_pure_pixel_aperture_has_a_ramp_edge_and_rer_one; entry_eo_ascent::eo_radiometry::tests::a_gaussian_blur_has_the_normal_cdf_edge; entry_eo_ascent::eo_radiometry::tests::snr_budget_scales_as_shot_noise_when_signal_dominates; entry_eo_ascent::eo_radiometry::tests::giqe4_switches_coefficients_at_rer_0_9_and_falls_with_gsd | Замкнутые формы: дифракционная MTF на половине частоты среза, край-рампа в один пиксель для чистой апертуры детектора (RER 1), край по нормальной функции распределения для гауссова размытия (RER = erf(0.5/(sigma sqrt 2))), масштабирование дробового шума и коэффициенты GIQE 4 как опубликовано (Leachtenauer et al., Applied Optics 36(32), 1997). ЧТО НЕ ПРОВЕРЕНО: ни с каким внешним формирователем изображений, измеренной MTF или оценённым изображением сравнение не проводилось; GIQE — эмпирическая регрессия с собственной ошибкой; нет рассеянного света, атмосферной MTF, компенсации MTF и наложения спектров. | MODELLED |
| VM-a47a618a | Потери на силу тяжести, сопротивление, управление и противодавление при выведении ракеты | Плоский гравитационный разворот при выведении многоступенчатого аппарата над невращающейся сферической Землёй через стандартную атмосферу США 1976 (плотность и давление) с толчком по тангажу, тягой, уменьшенной противодавлением сопла, отсечками ступеней на точных границах шагов, а также потерями на силу тяжести, сопротивление, управление и противодавление, интегрируемыми рядом с состоянием. Запускается как вид сценария ascent-losses. |
entry_eo_ascent::ascent (simulate_ascent, AscentScenario); reentry::us76_pressure | entry_eo_ascent::ascent::tests::the_loss_identity_holds_to_integration_error; entry_eo_ascent::ascent::tests::vertical_vacuum_burn_has_only_gravity_loss_and_stays_vertical; entry_eo_ascent::ascent::tests::us76_pressure_has_the_standard_values; entry_eo_ascent::ascent::tests::a_larger_kick_lowers_burnout_flight_path_angle | Внутренняя согласованность: точное тождество скорость отсечки = сумма Isp g0 ln(m0/mf) минус четыре интегрированные потери (остаток ниже 1e-6 м/с), уравнение Циолковского для вертикального вакуумного разгона, где единственная потеря — сила тяжести, и давления US76 на уровне моря и на тропопаузе. ЧТО НЕ ПРОВЕРЕНО: потери ни одного опубликованного аппарата не сравнивались; нет вращения Земли, пассивного участка, дросселирования и наведения сверх толчка; постоянный C_D; это не оптимизатор траекторий. | MODELLED |
| VM-8e1d443b | Двустороннее уравнение TWSTFT, бюджет неопределённости и стабильность линии с фликкерной и суточной невзаимностью | Двустороннее уравнение TWSTFT, решаемое для T_A - T_B с задержками передачи и приёма станций, ионосферной асимметрией вверх/вниз в Ku-диапазоне, разностью задержек ответчика и членами Саньяка, относительно его точной прямой модели; квадратурный бюджет неопределённости с TDEV линии как членом типа A; двусторонний ряд с белым и фликкерным фазовым шумом (Kasdin-Walter), суточной невзаимностью и постоянным остатком взаимности; а также скорость, СКО остатка, TDEV и ADEV поданных рядов часов станций Circular T, MJD-CSV или IGS RINEX. Запускается как вид сценария time-transfer-budget. |
twstft_budget (counter_readings, solve_offset, combined_uncertainty, flicker_phase, two_way_series, series_stability); time_transfer_budget (TimeTransferBudgetScenario, read_series) | twstft_budget::tests (двустороннее уравнение точно восстанавливает смещение; член Саньяка равен замкнутой форме петли BIPM; ионосферный член следует разносу частот, а тропосфера сокращается; фликкерная фаза даёт плоскую TDEV; суточный остаток поднимает TDEV около половины суток; смещение из-за нарушения взаимности сдвигает смещение, но не TDEV; стабильность ряда убирает скорость дрейфа); time_transfer_budget::tests | Внутренняя согласованность: прямая модель и решённое уравнение согласуются до 1e-15 с, член Саньяка равен независимой форме контура BIPM 2A omega/c^2 модуля, ионосферный член равен 40,3 TEC (1/f_up^2 - 1/f_down^2)/c, а шумовые процессы показывают ожидаемые формы TDEV. ЧТО НЕ ПРОВЕРЕНО: ни одно реальное измерение TWSTFT или отчёт о калибровке не сравнивались; заданные задержки и неопределённости — входные данные, а не измеренные; стабильности поданных рядов сообщаются, а не проверяются. | MODELLED |
| VM-c6005488 | Численные методы атмосферы на наклонной оптической трассе: дисперсия Рытова, сцинтилляция, вероятность замирания гамма-гамма, усреднение по апертуре, оптическая толщина облаков и ясного воздуха | Cn2 Хафнагеля — Валли, интегрируемый вдоль наклонной трассы, для дисперсии Рытова плоской и сферической волны (восходящая и нисходящая линии), индекс сцинтилляции Эндрюса — Филлипса и параметры гамма-гамма, вероятность замирания и запас на замирание гамма-гамма, коэффициент усреднения по апертуре при слабой турбулентности, оптическая толщина облака для столба жидкой воды и оптическая толщина ясного воздуха по видимости Ким плюс Рэлей, заменяющие сводные атмосферные потери бюджета оптической линии, когда задана атмосфера. Запускается внутри вида сценария optical-atmosphere. |
optical_atmosphere (rytov_variance, scintillation, gamma_gamma_cdf, fade_margin_db, aperture_averaging_factor, cloud_optical_depth, clear_air_optical_depth); optical_linkbudget (optical_link_budget_atmosphere) | tests/optical_atmosphere_reference.rs (предварительно зарегистрированные пороги A1-A3 относительно независимого оракула mpmath: 216 узлов сетки Рытова, наибольшая относительная ошибка 3.4e-7 при пороге 1e-6, сцинтилляция — наибольшая 4.5e-16, фактор апертуры — наибольшая 5.7e-16, 96 вероятностей замирания гамма-гамма, наибольшая 1.3e-12 в log10, оптическая толщина облаков и ясного неба — наибольшая 6.6e-16); tests/optical_atmosphere_no_moved_output.rs (порог A5: бюджет линии с суммарными потерями и существующие выходные данные доступности площадки побитово совпадают с базовым коммитом на 1 000 наборах параметров) | Численные методы сравниваются с независимой программой (xval/optical-atmosphere/oracle.py, mpmath 1.4.1 при 30 знаках, квадратура tanh-sinh по исходной переменной высоты и плотности гамма-гамма через функцию Бесселя K), не имеющей общего кода с Kshana, при порогах, зафиксированных до появления какой-либо реализации (xval/optical-atmosphere/PREREGISTRATION.md). ПОЧЕМУ MODELLED: этот оракул вычисляет те же опубликованные формулы, поэтому он проверяет реализацию заявленных формул, а не атмосферу; ни пример проверки ITU-R, ни измеренная запись сцинтилляции или ослабления на наклонной трассе не используются (значения ITU — открытый вопрос лицензирования, и в репозиторий они не включены). Уровень профиля Cn2, видимость, масштабные высоты аэрозоля и молекул, длина пути усреднения по апертуре и подгонка моментов для применения усреднения по апертуре к параметрам гамма-гамма — заявленные входные данные или соглашения. Строка источника в модуле фиксирует, что один широко копируемый обзор печатает второй показатель сцинтилляции как 7/6, где Andrews и Phillips дают 5/6; реализована форма 5/6 | MODELLED |
| VM-9fc2c823 | Доступность оптического наземного пункта, зависящая от погоды, и разнесение пунктов с корреляцией по расстоянию | Доступность оптической линии относительно заявленного запаса линии по логнормальному климату облачной жидкой воды (количество по ITU-R P.840, ослабление по геометрической оптике) и независимому замиранию из-за турбулентности по гамма-гамма, запас линии, необходимый для целевых доступностей, и потолок, который никакой запас не поднимает, логнормальные длительности перерывов, гипотетические варианты техник улучшения и сетевая доступность по однофакторной гауссовой копуле, у которой парная корреляция равна exp(-расстояние/длина декорреляции). Запускается как вид сценария optical-atmosphere. |
optical_weather; optical_sitediv; optical_techniques; optical_atmosphere_scenario | tests/optical_atmosphere_identities.rs (порог A4: rho = 0 равно независимому объединению, а rho = 1 — лучшей одиночной площадке с точностью 1e-12, и ноль нарушений монотонности по числу площадок и по корреляции; первый прогон этого порога промахнулся на 3e-9, потому что используемая нормальная ФР была формой Абрамовица–Стегуна с точностью 1.5e-7, то есть дефектом реализации, замещённым ФР через неполную гамма-функцию при неизменном пороге); optical_weather::tests и optical_sitediv::tests (монотонный запас, потолок облачности в замкнутой форме, тождества длительности простоя, обращение поиска запаса) | Внутренняя согласованность: пределы в замкнутом виде и монотонность модели разнесения, замкнутая форма потолка облачности и логнормальные тождества перерывов. Внешний оракул НЕ заявляется, и сравнение с ним не проводилось: ни измеренная доступность оптической наземной станции, ни запись прямой видимости без облаков не используются. ПОЧЕМУ MODELLED: климат облаков (вероятность облачности, медиана и разброс столба жидкой воды, длительности перерывов), независимость облаков и турбулентности, форма гауссовой копулы, длина декорреляции и каждый выигрыш техники — допущения; поставляемые сценарии задают ILLUSTRATIVE климаты, а не набор данных. Для повышения этой строки нужны цитируемая измеренная запись доступности и порог, зарегистрированный до сравнения | MODELLED |
| VM-fe158525 | Непрерывность синхронизации и дальнометрии при оптических перерывах | Распределение длительностей перерывов оптического пункта, связанное с дисперсией инерционного хода часов в замкнутом виде из модели holdover: ошибка синхронизации и дальнометрии при заявленных квантилях перерывов, holdover до порога синхронизации, доля перерывов и времени перерывов внутри него и доступность синхронизации A + U E[min(D, T_h)]/E[D] для классических и квантовых классов часов. Запускается внутри вида сценария optical-atmosphere. |
optical_outage_holdover (couple, clock_psds); holdover (coast_phase_sigma, holdover_seconds, phase_to_range_m) | tests/optical_atmosphere_identities.rs (порог A6: ошибка времени на один простой равна holdover::coast_phase_sigma, а ошибка дальности равна phase_to_range_m бит в бит для 9 часов, 3 средних длительностей, 3 разбросов и 4 квантилей); optical_outage_holdover::tests | Внутренняя согласованность с модулем holdover, бит в бит; внешний оракул НЕ заявляется. Спектральные плотности классов — синтезированные нижние пределы при большом tau, которые модуль holdover уже несёт, поэтому величины наследуют его заявленную оговорку: holdover до жёсткого порога определяется предполагаемым нижним пределом красного шума, а не цитируемой девиацией Аллана. Длительности перерывов — логнормальная модель с заявленными параметрами, а не измеренная запись длительности облаков | MODELLED |
| VM-48b43298 | Запас оптической линии во времени: одна реализация погоды пункта с начальным значением (seed) | Включаемая по выбору таблица [timeseries] (длительность, шаг, seed) заставляет вид optical-atmosphere также записывать для каждого пункта одну реализацию с начальным значением заявленной модели пункта во времени: эпизоды облачности (ясные промежутки экспоненциальны, облачные перерывы логнормальны с заявленными средним и разбросом, доля времени в облаках задана заявленной вероятностью облачности), один логнормальный столб жидкой воды на каждый эпизод облачности, один отсчёт сцинтилляции гамма-гамма на шаг и по ним запас линии, замирания из-за облаков и сцинтилляции и флаг работоспособности линии, с реализованными доступностью, долей облачности, числом перерывов и самым долгим перерывом. Без таблицы результат — документ 0,37. Розыгрыши проходят через переносимые маршруты распределений и математики, поэтому native и wasm32 дают одни и те же байты. |
optical_timeseries (site_series, SiteModel, SeriesSpec, Series); optical_atmosphere_scenario (TimeseriesSpec) | tests/optical_atmosphere_timeseries.rs (пороги T1-T6 из xval/optical-atmosphere/PREREGISTRATION-timeseries.md, зафиксированные до первого прогона: то же начальное значение — те же байты, другое начальное значение — другие байты; нет ключа без таблицы; за 8760 ч с шагом 600 с, начальные значения 37 и 38, реализованная доступность каждой из трёх площадок по умолчанию в пределах 6 пунктов от заданной (наибольшее 3,3), а реализованная доля облачности в пределах 5 пунктов от заданной вероятности (наибольшее 2,1); запас равен бюджету минус два замирания, а «вверх» равно запасу не отрицательному на каждом шаге; в модуле нет непереносимых математических вызовов; слишком длинные прогоны и неверные шаги отклоняются) | Только внутренняя согласованность; внешний оракул НЕ заявляется, и для реализации погоды его не существует. Проверки сравнивают один розыгрыш со статистическим выходом той же модели, поэтому успех говорит, что генератор выбирает из заявленных распределений (доступность и доля облачности розыгрыша лежат в зарегистрированных заранее допусках относительно заявленных величин), а не что какой-либо реальный пункт ведёт себя так. Ряд — одна реализация, а не климат: его доступность отличается от заявленной на ошибку выборки розыгрыша, а отсчёты сцинтилляции на разных шагах независимы, что является заявленным упрощением процесса, декоррелирующего за миллисекунды. Погодные входные данные остаются допущениями сценария. | MODELLED |
| VM-d599af85 | Читатель файлов орбитальных данных TRK-2-18 и модель марсианского 2-стороннего Доплера с рампами | Читатель файлов орбитальных данных DSN (TRK-2-18): группы записей по 36 байт (метка файла, идентификатор, орбитальные данные, рампы по станциям, смещения часов, сводка, конец файла), а в каждой записи орбитальных данных — метка времени от 1950, задержки нисходящей и восходящей линии, наблюдаемая, станции, тип данных, диапазоны, достоверность, канал, космический аппарат, 46-битная опорная частота и время сжатия; время начала и конца рамп, скорости и начальные частоты. Поверх него — модель 2-стороннего Доплера X-диапазона с рампами (интегрированные восходящие рампы, круговое время распространения света с Шапиро и тропосферой, станции DSN через цепочку CIO по IAU 2006/2000A и EOP IERS, время станции) и пакетное определение орбиты марсианского орбитального аппарата (поле GMM-3, третьи тела, SRP, сопротивление). | odf (parse_odf, Odf, OdfObservation, OdfRamp, seconds_1950); mars_od (DopplerModel, RampTable, compress_two_way, MarsDynamics, fit, fit_damped); naif_kernel (SPK type 1); gravity_pds (SphericalHarmonicField::from_shadr) | tests/mro_odf_reader_label_oracle.rs (реальный ODF MRO, 2007-304/305, относительно своей метки PDS: число записей, позиции групп, станции, время начала и окончания и типы данных совпадают; число строк таблицы в конце файла расходится на одну, несогласованность метки, зафиксировано как результат); odf::tests (круговой обмен построенной вручную записи, эпоха 1950); tests/mro_odf_short_arc_od_oracle.rs (зависит от данных, SHA-256 входных данных зафиксирован, ежемесячный CI с обязательными реальными данными: доплеровский сдвиг, предсказанный по навигационной реконструкции MRO mro_psp5, на оцениваемых проходах DSS 63 и DSS 14, 12,5 мГц СКО, порог 30 мГц, выполнен; зарегистрированное определение орбиты орбиты не дало, зафиксировано как результат; прогон 2 с демпфированным оценщиком, зарегистрированный отдельно: орбита 0,36 км СКО и 0,53 км максимум относительно mro_psp5, выполнено, доплеровский сдвиг после подгонки 48,6 мГц при 30 мГц, не выполнено, зафиксировано как результат; считыватель SPK типа 1 относительно CSPICE, 5e-7 м); mars_od::tests | Метка PDS3, которую процесс подготовки навигационных данных DSN выдал вместе с файлом (NASA PDS Geosciences Node, MRO-M-RSS-1-MAGR-V1.0), сверена с порогами, зарегистрированными заранее в xval/mro-odf/PREREGISTRATION.md до появления читателя. MODELLED, потому что один зарегистрированный порог (строки таблицы конца файла, 121 в файле против 120 в метке) не выполнен; метка здесь внутренне противоречива. Этап 2 (xval/mro-od/PREREGISTRATION.md, поправки A1 и A2 до оценённого результата): Доплер, предсказанный по реконструкции навигационной группы MRO (mro_psp5, NAIF), совпадает с наблюдаемым 2-сторонним Доплером с рампами с точностью 12,5 мГц на проходах, не использованных при разработке, порог выполнен; зарегистрированное определение орбиты не удалось на оценённой дуге (нормальная матрица не положительно определена) и орбиты не дало, поэтому пороги по орбите не выполнены. Прогон 2 (xval/mro-od/PREREGISTRATION-RUN2.md, демпфированный оцениватель, та же дуга и пороги, поправка к оценке R2-A1 раскрыта в docs/revisions) сошёлся: оценённая орбита в пределах 0,36 км СКО (0,53 км максимум) от реконструкции, пороги выполнены, но СКО Доплера после подгонки — 48,6 мГц против порога 30 мГц, не выполнено, поэтому строка остаётся MODELLED. ЧТО НЕ ПРОВЕРЕНО: ни одна оценённая орбита не выполнила все зарегистрированные пороги; ионосфера, солнечная плазма и большая часть смещения антенны (радиальное смещение 1,5 м подгоняется на проходе разработки) не моделируются. | MODELLED |
| VM-7aee30d8 | Управление ориентацией с замкнутым контуром по обратной связи MRP на силовых маховиках | Инерциальное управление ориентацией жёсткого корпуса с тремя и более сбалансированными силовыми маховиками: закон обратной связи MRP L_r = -K sigma_BR - P omega_BR (Шауб и Джункинс), моменты двигателей маховиков минимальной нормы G_s u = -L_r с ограничением по пределу каждого маховика, связанная динамика корпуса и маховиков, в которой момент инерции корпуса включает момент инерции вращения маховиков, кватернионная кинематика, RK4 с экстраполятором нулевого порядка. Запускается как вид сценария aocs (контур по истинному состоянию). |
aocs (AocsConfig, required_torque, motor_torques, rates, rk4_step, simulate, mrp_from_quaternion); aocs_kind (AocsScenario) | tests/aocs_basilisk_oracle.rs (3 случая, по 601 отсчёту: MRP наихудшее 2.4e-14, порог 1e-9; угловая скорость тела 1.6e-15 rad/s, порог 1e-9; скорость маховика 2.9e-11 rad/s, порог 1e-6; приложенный момент двигателя 1.2e-13 N m, порог 1e-9; моменты при t = 0 в пределах 1e-12 N m; насыщение достигнуто в обоих инструментах); aocs::tests (угловой момент сохраняется, отображение минимальной нормы, ветвь MRP, сходимость при насыщении); aocs_kind::tests | Basilisk 2.9.1 (AVSLab, ISC; bsk запускается как отдельный инструмент, не подключается как библиотека и не включается в код): корпус космического аппарата, reactionWheelStateEffector (BalancedWheels, ограничение момента включено), simpleNav, inertial3D, attTrackingError, mrpFeedback (без интегрального члена) и rwMotorTorque при dt = 0,1 с с его RK4 — в сравнении с собственной реализацией Kshana на трёх случаях (три ортогональных маховика; четырёхмаховичная пирамида; четырёхмаховичный случай с насыщением), пороги предварительно зарегистрированы в xval/aocs-basilisk/PREREGISTRATION.md до написания кода и прогона. Все пороги выполнены с первого прогона. ЧТО НЕ ПРОВЕРЯЛОСЬ: шум датчиков в контуре, интегральная обратная связь, наведение со слежением, трение маховиков, вибрации, ограничения скорости и мощность, коэффициенты усиления какого-либо реального космического аппарата; сравнение проверяет реализацию закона и динамики относительно независимой, но не лётный регулятор. | VALIDATED |
| VM-4f433858 | Оценка ориентации мультипликативным EKF по гироскопу и звёздному датчику | Мультипликативный EKF Леффертса — Маркли — Шустера: состояния ошибки ориентации в связанной системе координат и смещения гироскопа, распространение по угловой скорости гироскопа за вычетом оценки смещения и дискретному шуму процесса Фаренкопфа (случайное блуждание угла и скорости), обновления по звёздному датчику с невязкой 2 vec(q^-1 q_st) в форме Джозефа и мультипликативный сброс; дискретный имитатор гироскопа и звёздного датчика по Фаренкопфу. Вид aocs может замкнуть контур управления по этой оценке. |
aocs_mekf (Mekf, GyroSim, attitude_error, spd_solve6); aocs_kind (estimator) | aocs_mekf::tests::mekf_is_consistent_over_monte_carlo_seeds (40 начальных значений, среднее шестистепенное NEES за вторую половину в пределах от 4,5 до 7,5); aocs_mekf::tests::star_tracker_updates_bound_the_attitude_error; aocs_mekf::tests::attitude_error_is_the_body_frame_small_angle; aocs_kind::tests::estimator_loop_runs_and_reports_consistency | Внутренняя согласованность: нормированная квадратичная ошибка оценивания фильтра относительно истины, смоделированной по тем же моделям датчиков на начальных значениях Монте-Карло, и сходимость оценок ориентации и смещения. ЧТО НЕ ПРОВЕРЯЛОСЬ: внешний оцениватель и лётные данные не сравнивались (в Basilisk 2.9.1 нет модуля MEKF); модели датчиков учебниковые, без неточности установки, масштабного коэффициента и влияния поля зрения звёздного датчика. | MODELLED |
| VM-7a50fbac | Определение ориентации по Вахбе, TRIAD и QUEST | Оптимальная трёхосная ориентация по взвешенным векторным наблюдениям (направления на звёзды, Солнце и по магнитометру): детерминированный двухвекторный TRIAD, q-метод Давенпорта (точный минимизатор функции потерь Вахбы — оптимальный кватернион является собственным вектором наибольшего собственного значения матрицы Давенпорта K размера 4×4, который находится симметричным методом Якоби), и QUEST (корень характеристического уравнения K по методу Ньютона/секущих с началом в Σ весов, затем восстановление кватерниона по вектору Гиббса) | wahba | wahba::tests (A(единичный кватернион)=I; решатель собственных значений Якоби удовлетворяет Kv=λv и сохраняет след на известной симметричной матрице; K симметрична); tests/wahba_reference.rs (TRIAD, q-метод Давенпорта и QUEST воспроизводят оптимальную DCM из scipy.spatial.transform.Rotation.align_vectors на безшумных взвешенных наборах векторов с точностью <1e-9 rad по не зависящему от системы углу ошибки ориентации; кроме того, q-метод восстанавливает известный поворот при λ_max=Σ весов и нулевых потерях Вабы, решение q-метода минимизирует потери Вабы при возмущении, QUEST согласуется с оптимальным q-методом с точностью <1e-7 rad, а оптимальная оценка превосходит двухвекторный TRIAD по СКО ошибки ориентации на 2000 зашумлённых испытаниях Монте-Карло) | scipy.spatial.transform.Rotation.align_vectors (SciPy 1,13; Virtanen и др., Nature Methods 2020) — решение задачи Вахбы по Кабшу/Маркли через SVD, действительно независимый алгоритм (SVD матрицы профиля ориентации) и независимая кодовая база по отношению к собственному разложению матрицы K Давенпорта и методу характеристического корня QUEST в kshana, вычисляющие ТУ ЖЕ однозначно определённую оптимальную по Вахбе ориентацию. На незашумлённых наборах взвешенных векторных наблюдений TRIAD, q-метод и QUEST воспроизводят оптимальный поворот scipy с точностью <1e-9 рад (сравнение через не зависящий от знака угол ошибки ориентации). Статистическое утверждение Монте-Карло с шумом «оптимальный метод лучше TRIAD» остаётся MODELLED (внешнего оракула нет); только наблюдения единичными векторами направлений — без моделирования поля зрения, смещения и временной корреляции датчика, а QUEST вырождается при 180° (этот случай покрывает q-метод) | VALIDATED |
| VM-0430afb5 | Статистики обнаружения при захвате GNSS квадратичным детектором | Квадратичный (некогерентный) детектор захвата при поиске по фазе кода × Доплеру: вероятность ложной тревоги (центральное χ² с 2M степенями свободы), порог, достигающий целевой P_fa (обратная функция χ² CDF, найденная бисекцией), и вероятность обнаружения (нецентральное χ² с параметром нецентральности 2M·ρ для отношения сигнал/шум ρ после корреляции в одной ячейке), с обобщённой Q-функцией Маркума Q_M(a,b)=1−F_{χ'²(2M,a²)}(b²) | acquisition | acquisition::tests (центральный случай Marcum-Q Q_1(0,b)=exp(−b²/2); тождество P_d=Q_M(√(2Mρ),√γ); круговое преобразование P_fa↔порог по M и P_fa; монотонность ROC — P_d растёт с SNR, падает с порогом, P_d→P_fa при SNR→0; выигрыш некогерентного накопления повышает P_d при фиксированном P_fa; Marcum-Q монотонна по a и b и ограничена в [0 1]); tests/acquisition_reference.rs (обобщённая Marcum Q_M(a,b), P_d, P_fa и обращение P_fa→порог сопоставлены со scipy.stats.ncx2/chi2 на сетке (M,a,b)/(M,P_fa)/(M,SNR) с точностью ~1e-6) | scipy.stats.ncx2 / scipy.stats.chi2 (SciPy 1,13; Cephes/Boost) — алгоритм, независимый от ряда неполной гамма-функции в kshana (raim::chi2_cdf / noncentral_chi2_cdf), а именно цепная дробь для нецентрального и центрального χ²; вычисляет то же однозначно определённое ЯДРО статистик обнаружения: обобщённую Q-функцию Маркума Q_M(a,b)=ncx2.sf(b²,2M,a²), вероятность обнаружения P_d, вероятность ложной тревоги P_fa и обращение P_fa→порог, с совпадением до ~1e-6 — на том же основании независимости, что и строка Validated «статистическое ядро целостности RAIM/ARAIM». Только ЯДРО: усреднение по ячейкам CFAR и потери при попадании на границу бинов кода и Доплера остаются MODELLED | VALIDATED |
| VM-83b35149 | Разрешение целочисленных неоднозначностей фазы несущей GNSS (LAMBDA) | Целочисленная фиксация неоднозначностей методом наименьших квадратов по схеме LAMBDA: целочисленное (Z) декоррелирующее преобразование с сохранением объёма (целочисленная редукция размера по Гауссу для множителя L D Lᵀ) + точный поиск целочисленного метода наименьших квадратов методом ветвей и границ в глубину по Шнорру — Эйхнеру, с проверкой отношения на двух лучших кандидатах (проверенное утверждение); плюс замкнутая формула вероятности успеха бутстрэп-фиксации P_s=∏(2Φ(1/(2σ_{i|I}))−1), проверяемая только внутренне и вне проверенного утверждения | lambda | lambda::tests (L D Lᵀ восстанавливает Q); tests/lambda_reference.rs (Z-преобразование унимодулярно |det Z|=1 при Q_z=ZᵀQZ положительно определённой, сохраняет определитель и снижает суммарную внедиагональную корреляцию; ILS Шнорра–Эйхнера совпадает с полным перебором на 300 случайных ковариациях; полный конвейер декорреляция→поиск→обратное преобразование равен прямому ILS, а Z⁻ᵀZᵀ круговым образом возвращает целые числа; замкнутая форма успешности бутстрэпа совпадает с Монте-Карло на 200k испытаний последовательного условного округления с точностью <0,01); tests/lambda_rtklib_oracle.rs::ils_solution_matches_rtklib_lambda_on_300_covariances (фиксированные целые равны результату lambda() из RTKLIB v2.4.2-p13 на 300 случайных ковариациях, n от 2 до 10, 226 из них не решаются округлением; два наилучших квадрата нормы согласуются с относительной точностью 1e-9, измерено 5.6e-13) | RTKLIB v2.4.2-p13 lambda() (его исходный файл lambda.c, Т. Такасу, BSD-2-Clause), независимая редукция LAMBDA и поиск MLAMBDA, скомпилированные из C и запускаемые как инструмент, на 300 случайных ковариациях (n от 2 до 10): у целочисленного метода наименьших квадратов единственный минимизатор, поэтому зафиксированные целые числа должны совпасть (0 расхождений), а две наименьшие квадратичные нормы, участвующие в проверке отношения, должны совпасть с относительной точностью 1e-9 (измерено 5.6e-13); допуск зафиксирован до сравнения. Проверенное утверждение: решение ILS и две его лучшие нормы. RTKLIB не вычисляет вероятность успеха бутстрэп-фиксации, и она по-прежнему проверяется внутренне по Монте-Карло процесса округления; инварианты Z-преобразования и полный перебор остаются вспомогательными проверками. Только декорреляция по Гауссу (перестановки переупорядочивания полной редукции LAMBDA ускоряют поиск, но не меняют ни точный ответ ILS, ни вероятность бутстрэп-фиксации) | VALIDATED |
| VM-7db8a5ce | Прицеливание в B-плоскости и гравитационный манёвр в приближении сопряжённых конических сечений | Геометрия гиперболического пролёта (a=−μ/v∞², e=1+r_p·v∞²/μ, угол поворота δ=2·asin(1/e), прицельный параметр |B|=|a|·√(e²−1)), система координат точки прицеливания в B-плоскости Ŝ/T̂/R̂ и разложение B·T̂/B·R̂, а также гравитационный манёвр в приближении сопряжённых конических сечений (модуль v∞ сохраняется, направление отклоняется на δ, гелиоцентрическое Δv=2·v∞·sin(δ/2) без расхода топлива) с параметром Тиссерана T_P=a_P/a+2√((a/a_P)(1−e²))cos i | bplane | bplane::tests (скаляры пролёта удовлетворяют замкнутым формам с двумя согласующимися тождествами |B| и |B|>r_p; угол поворота убывает с радиусом перицентра и достигает пределов δ→0 / δ→π; отклонение сохраняет скорость v∞ и поворачивает ровно на δ; величина Δv гравитационного манёвра равна 2·v∞·sin(δ/2) и ограничена 2·v∞; оси B-плоскости ортонормированы и ⊥ Ŝ при |B|²=(B·T̂)²+(B·R̂)²; параметр Тиссерана инвариантен при отклонении, сохраняющем v∞, которое всё же меняет a,e,i, и равен 3−(v∞/v_circ)²); tests/bplane_gmat_oracle.rs::bplane_matches_gmat_over_a_hyperbolic_grid; tests/bplane_heliocentric_oracle.rs::assist_delta_v_matches_gmat_asymptotes_and_c3; tests/bplane_heliocentric_oracle.rs::heliocentric_elements_and_tisserand_match_gmat_and_sbpy; tests/bplane_heliocentric_oracle.rs::tisserand_matches_kasuga_jewitt_2019_table_8_1 | GMAT R2026a (Apache-2.0, запускается как отдельная программа) на 192 гиперболических околоземных состояниях: B.T, B.R и |B| в пределах 1e-6 км (худший случай 1.35e-8 км), угол поворота и обе асимптоты в пределах 1e-9 рад (худший случай 9.3e-15 рад); изменение скорости при манёвре по C3 и асимптотам GMAT в пределах 1e-9 v_inf (худший случай 5.6e-14); гелиоцентрические большая полуось, эксцентриситет и наклонение на 350 гелиоцентрических состояниях до и после манёвра в пределах 1e-9 относительной погрешности и 1e-12 рад (худшие случаи 2.2e-14 и 4.1e-14 рад); параметр Тиссерана относительно sbpy 0.6.0 (BSD-3) на элементах GMAT в пределах 1e-9 (худший случай 1.3e-15) и относительно 3 - C3/v_c^2 (8.9e-16); и замкнутая формула Тиссерана относительно таблицы 8,1 Касуги и Джуитта (2019) для 12 объектов в пределах границы округления, принятого в публикации (худший случай — 0,39 от неё; опубликованное расчётное значение уровня P1). Предварительно зарегистрировано (436293bf; гелиоцентрическое исправление 6fd9f5e6); поправка 374c806b, написанная после генерации файлов оракула и до получения любого значения Kshana, расширила фильтр входного наклонения с 1e-2 до 1e-3 рад, сохранив больше хуже обусловленных состояний. Область MODELLED: двухтельный пролёт в приближении сопряжённых конических сечений на круговой планетной орбите, без перехода через сферу влияния, возмущений при сближении и эфемерид | VALIDATED |
| VM-e01b501b | Формирование диаграммы антенной решётки CRPA для защиты от подавления | Подавление в антенне с управляемой диаграммой приёма: комплексные векторы наведения решётки a(û)=exp(j·k·pₙ·û), детерминированное наведение нулей (единичное усиление в направлении на космический аппарат, точные нули в направлении до N−1 источников подавления через вектор минимальной нормы w=Aᴴ(AAᴴ)⁻¹b) и адаптивные веса MVDR w=R⁻¹a_sv/(a_svᴴR⁻¹a_sv), самостоятельно направляющие глубокие нули на сильные помехи (с собственным ядром комплексной линейной алгебры, написанным с нуля) | crpa | crpa::tests (тождества комплексной арифметики, включая z/z=1, |exp(jθ)|=1, zᴴz=|z|²; детерминированное формирование нулей даёт точное единичное усиление по SV и нули помех <1e-9 на 4-элементной ULA при 3 помехах; решётка из N элементов не способна подавить >N−1 помех, а при меньшем их числе формирует нули минимальной нормы; MVDR остаётся без искажений в направлении SV, пока нуль помехи монотонно углубляется с ростом мощности помехи до <1e-3 при 60 dB); tests/crpa_reference.rs (весовые векторы MVDR и формирования нулей минимальной нормы и получающиеся усиления отклика решётки сопоставлены с независимым вычислением numpy/scipy LAPACK с точностью ~1e-9) | numpy.linalg / scipy.linalg (комплексное решение LAPACK zgesv) — кодовая база линейной алгебры, независимая от собственного комплексного ядра kshana, написанного с нуля; вычисляет ТЕ ЖЕ однозначно определённые веса: MVDR w=R⁻¹a_sv/(a_svᴴR⁻¹a_sv) и наведение нулей минимальной нормы w=Aᴴ(AAᴴ)⁻¹b, а также получающиеся коэффициенты усиления диаграммы решётки, с совпадением до ~1e-9 — тот же класс оракула, что и в строках Validated DOP (gnss_lib_py) и информации Фишера (numpy). MODELLED: узкополосная решётка из одинаковых изотропных элементов в дальней зоне — без взаимной связи, рассогласования элементов, конечной полосы (STAP) и ошибки оценки вектора наведения | VALIDATED |
| VM-9715be87 | Степенной шум часов по IEEE-1139 + предел фликкер-FM | Пятикоэффициентное преобразование спектральной плотности мощности в вариацию Аллана по IEEE-1139 S_y(f)=Σh_α f^α → σ_y²(τ) (белый и фликкерный PM, белый, фликкерный FM и случайное блуждание FM), предел фликкер-FM σ_y=√(2 ln2·h_{-1}) как полноправный подгоняемый член и неотрицательная подгонка семейства FM в базисе {(2π²/3)τ, 2 ln2, 1/(2τ)}, восстанавливающая предел, который базис дрейфа {1/τ,τ,τ³} представить не может | powerlaw | powerlaw::tests (каждый чистый тип шума показывает характерный наклон ADEV в двойном логарифмическом масштабе — белый ЧМ −½, фликкер-ЧМ 0, ЧМ случайного блуждания +½, белый ФМ −1; член фликкер-ЧМ — плоский уровень, равный √(2 ln2·h_{-1}) на пяти декадах τ; подгонка семейства ЧМ круговым образом возвращает известные h_{-2},h_{-1},h_0 из синтетической кривой с точностью <1e-6; а уровень кривой, где доминирует фликкер, здесь восстанавливается, тогда как подгонка по дрейфовому базису (quantum_trade::qparams_from_adev_curve) ошибается более чем на 10% при больших τ — закрытие задокументированного пробела); tests/powerlaw_oadev_reference.rs (σ_y(τ) сопоставлена с замкнутыми формами Noise.adev из allantools 2024,06 по ряду τ для всех пяти типов шума, плюс подтверждение уровня h_a цепочкой «генератор Касдина allantools → оценка oadev») | allantools 2024,06 (А. Валлин; коэффициенты Касдина и Уолтера 1992 / Верно 2015) — независимая сторонняя кодовая база и линия цитирования, вычисляющие ТО ЖЕ однозначно определённое преобразование IEEE-1139 из спектральной плотности мощности в σ_y(τ) для каждого из пяти типов степенного шума. powerlaw::allan_deviation в kshana совпадает с замкнутыми формулами allantools (белый и фликкерный FM, RW-FM и белый PM с относительной точностью <5e-9; фликкерный PM до ~1e-5 — подлинный признак независимости, поскольку kshana использует табличную константу 1,038 из NIST-SP-1065, а allantools — полное выражение 3γ−ln2), а предел фликкер-FM √(2 ln2·h_{-1}) совпадает с allantools по всей шкале — тот же порог, который проходят строки Validated MDEV/TDEV/Theo1/MTIE. MODELLED: стационарная степенная модель — без члена детерминированного дрейфа (τ²); коэффициенты отдельных устройств и измеренные пределы остаются Modelled | VALIDATED |
| VM-a09fe6fd | Обмен блоками ковариации в CCSDS OEM | Сериализация и разбор блока CCSDS 502,0 OEM COVARIANCE_START…COVARIANCE_STOP — ковариационной матрицы положения и скорости размера 6×6, записанной как её нижний треугольник из 21 элемента (канонический порядок от CX_X до CZ_DOT_Z_DOT) с необязательным COV_REF_FRAME; дополняет существующие запись и разбор вектора состояния OEM, так что ковариации определения орбиты и фильтров проходят круговое преобразование в стандартном формате | oem (covariance_block_kvn, parse_covariance_block) | oem::tests (симметричная положительно определённая ковариация проходит круговое преобразование KVN→разбор до округления f64 и остаётся симметричной; блок выдаёт ровно 21 элемент нижнего треугольника — i+1 на строку матрицы — с COV_REF_FRAME и без; блок с неверным числом значений и отсутствующий блок оба отклоняются); tests/ccsds_oem_covariance_reference.rs (независимая библиотека oem 0.4.5 разбирает сегмент OEM, выданный kshana, и восстанавливает симметричную 6×6, совпадающую с входной ковариацией kshana с точностью до округления f64; с возмущённым отрицательным контролем и проверкой того, что oem отвергает вариант с меткой CX_X) | oem 0.4.5 (MIT, https://pypi.org/project/oem/) — ТОТ ЖЕ независимый парсер CCSDS-502, которому доверяет проверенная независимо строка «Совместимость CCSDS OEM», совершенно отдельная кодовая база (собственный токенизатор KVN, конечный автомат раздела ковариации и сборка матриц в numpy). kshana выдаёт полный сегмент OEM с блоком COVARIANCE нижнего треугольника из голых чисел без меток; oem разбирает его и восстанавливает симметричную 6×6, совпадающую с входной ковариацией kshana поэлементно с точностью до округления f64 — настоящее круговое преобразование обмена «библиотека против библиотеки» (сравнение с восстановлением в oem, а не с повторным разбором kshana), закрывающее прежний пробел строки «нет сторонней фикстуры» | VALIDATED |
| VM-2c655ce6 | Рост ошибки инерциальной навигации/TRN при выбеге и пересечения порогов | Бюджет ошибки положения в зависимости от длительности выбега, построенный по коэффициентам IMU: каждый источник ошибки (смещение акселерометра, смещение гироскопа, случайное блуждание скорости, случайное блуждание угла, масштабный коэффициент в крейсерском полёте и при устойчивой удельной силе) распространяется через девятисостоятельную модель ошибок локально-горизонтной INS с обратной связью Шулера (inertial::coast::ErrorDynamics по Гроувзу, 2-е изд., гл. 14: ошибки ориентации, скорости и положения, вертикальный канал с градиентом силы тяжести, радиусы WGS-84 и нормальная сила тяжести, горизонтальная платформа, движущаяся на север с заданной скоростью, latitude_deg и height_m; систематические члены через расширенную матричную экспоненту, случайные блуждания по Ван Лоану), одночлены плоской Земли сохранены только как leading_order_m; вклады объединяются по заявленному правилу (rss / linear-sum / deterministic-sum-with-stochastic-rss); длительности выбега, при которых достигаются заданные вызывающей стороной пороги положения (10 м и 50 м по умолчанию), находятся прямым сканированием по первому пересечению (first_crossing_s, так как ограниченные по Шулеру кривые немонотонны), с указанием доминирующего источника при каждом пересечении; и режим с ограничением по TRN, дающий наибольший интервал между привязками по рельефу, при котором каждый порог выдерживается. Запускается как вид сценария ins-trn-coast |
inertial::coast (ErrorDynamics, ErrorSource, source_error_m, CoastModel, Contribution, Combination, TrnFixMode, first_crossing_s, InsTrnCoastScenario); вид сценария ins-trn-coast |
tests/ins_coast_schuler_navego_oracle.rs::coast_error_model_matches_the_corrected_navego_runs (48 точек, шесть членов ошибки при 30 s до 3600 s, тактический класс, 45 deg с. ш., горизонтально и с ориентацией на север: каждая точка в пределах 5 %, наихудшее +3,70 % у случайного блуждания скорости при 1200 s); inertial::coast::tests (the_error_model_follows_the_leading_order_law_on_a_short_coast; a_bias_error_is_schuler_bounded; doubling_the_coast_scales_each_contribution_by_two_to_its_own_power; every_contributions_closed_form_crossing_agrees_with_the_engines_bisection; the_located_crossing_puts_the_model_on_the_threshold_it_searched_for; the_bias_law_matches_the_engines_stochastic_dead_reckoner_stepped_forward; the_velocity_random_walk_law_matches_a_monte_carlo_of_the_engines_dead_reckoner; the_scale_factor_law_matches_a_double_integration_of_the_engines_imu_error_model; a_full_reset_fix_makes_every_inter_fix_excursion_identical; the_largest_fix_interval_holding_a_threshold_puts_the_peak_on_that_threshold; an_error_free_imu_never_reaches_a_threshold_and_says_so_instead_of_reporting_zero; every_published_field_carries_a_unit_and_a_provenance_class; the_scenario_runs_through_the_engines_public_dispatch_and_is_reproducible); tests/ins_coast_navego_montecarlo_oracle.rs::finding_laws_hold_to_600_s_and_overstate_beyond (вывод round-1 о законах ведущего порядка для плоской Земли, сохранён как регрессия) | NaveGo v1.4 (коммит 24d9488, LGPL-3.0), запускается как отдельная программа в GNU Octave 8.4.0: прогоны свободного инерциального выбега с тем же профилем ошибок IMU, с одной исправленной численной мёртвой зоной в обновлении кватерниона (qua_update.m: условие на скорость ниже 1e-8 рад/с заменено на wnorm == 0, применено к копии времени выполнения и однократно проверено на совпадение; при этом условии медленно дрейфующая ориентация платформы замирала и обрывала обратную связь Шулера). Предварительно зарегистрировано (4262b969) с исправленным генератором до его запуска; движок (440b3877) зафиксирован до открытия любого исправленного вывода; тот же порог 5 %, 48 точек, члены, начальные значения и статистика, что в раунде 1. Результат: 48/48 в пределах 5 % (худшие значения: +3,70 % для случайного блуждания скорости при 1200 с, +3,33 % для случайного блуждания угла при 1800 с); при 3600 с NaveGo/Kshana дают 2375.4/2376.2 м для смещения акселерометра и 130 885/131 675 м для смещения гироскопа. Обнуление обратной связи Шулера по транспортной скорости не проходит проверку (+695 % при 3600 с). Раскрыто: одноканальные предсказания Шулера и значения NaveGo раунда 1 были известны; в модели нет подгоняемого параметра. Область применения: кривые ошибок по членам при классе Tactical, 45 град с. ш., горизонтальная платформа, направленная на север, до 3600 с; пересечения, правило объединения и режим TRN — детерминированные функции этих кривых. Коэффициенты класса IMU (диапазоны Гроувза 2013, таблица 4,1) и остаточная ошибка привязки TRN остаются входными данными MODELLED. Раунд 1 (заменён): одночлены плоской Земли, теперь leading_order_m, завышают оценку после 600 с (в 2.2–8 раз за час). Редакция 0,30: изменяются все выходные данные ins-trn-coast (пик TRN поставляемого сценария 52,932679 -> 44,711834 м) | VALIDATED |
| VM-c58f1105 | Соотношение времени апертуры между навигацией и связью | Один прогон принимает план контактов (список окон aos_s/los_s, в каждом из которых апертуру запрашивают для навигации или связи — тот же словарь окон, который выдаёт passes::predict_passes, преобразованный aperture_duty::windows_from_passes), число апертур и явную политику арбитража, и возвращает долю времени навигации, долю времени связи, долю простоя и простой на каждый сеанс. Политика является входным параметром с документированным значением по умолчанию (navigation-priority; также communications-priority и невытесняющая first-come-first-served), а отчёт содержит применённую политику, её полное определение и определения долей и простоя, потому что приведённая доля времени без правила арбитража невоспроизводима. Расписание строится точным заметанием интервалов по границам окон, поэтому окно, заканчивающееся точно там, где начинается следующее, никогда не конкурирует, а апертуро-секунды навигации, связи и простоя накапливаются независимо в этом одном заметании. Запускается как вид сценария aperture-duty-cycle |
aperture_duty | aperture_duty::tests (окно, которое заканчивается ровно тогда, когда начинается следующее, не конкурирует, а сдвиг его на секунду раньше стоит ровно одной секунды — защита от ошибки на единицу; перекрывающиеся окна сверх числа апертур переводят сеанс с меньшим рангом в простой, интервал конкуренции зафиксирован; политика арбитража определяет, какая услуга занимает апертуру, числа всех трёх политик зафиксированы на одном плане; политика «первым пришёл — первым обслужен» не вытесняет сеанс, уже занявший апертуру; сеанс, проигравший арбитраж в начале, получает апертуру, когда она освобождается; три нагрузки учитывают каждую доступную апертурную секунду для 3 политик × 4 чисел апертур; добавление апертуры никогда не увеличивает простой ни одного сеанса, измерено на 200 псевдослучайных планах × 3 политиках × каждом числе апертур; достаточное число апертур для каждого сеанса не оставляет простоя вообще; горизонт отчёта обрезает план и задаёт знаменатель нагрузки; список предсказанных проходов становится планом контактов без второго типа окна; числа нагрузки встроенного плана — это выходные данные движка для одной и двух апертур; отчёт указывает политику, давшую числа; каждая приведённая величина несёт единицу и класс происхождения; сценарий воспроизводим и объявляет себя MODELLED; сценарий отклоняет план, который не может спланировать); api::tests::aperture_duty_cycle_kind_round_trips_through_the_dispatch | Внутренняя согласованность по трём величинам, вычисляемым разными выражениями в одном заметании и затем обязанным сойтись. Апертуро-секунды навигации, связи и простоя накапливаются раздельно — простой из (апертуры − |обслуженные|) на каждый элементарный интервал, а не как остаток, — и их сумма проверяется на равенство апертуры × horizon_s, что сразу нарушается при неверно заданной границе, дважды учтённом или пропущенном интервале; кроме того, отдельно требуется, чтобы обслуженное время по сеансам складывалось в два итога по обслуживанию. Структурные свойства планировщика измеряются, а не предполагаются: проверяется, что обслуженное время не убывает с ростом числа апертур на 200 псевдослучайных планах для всех трёх политик (неочевидно для невытесняющей политики, где лишняя апертура меняет распределение занятости на каждой последующей границе), а арифметика границ закреплена на паре касающихся окон и окон с перекрытием в одну секунду, где ошибка на единицу иначе осталась бы незамеченной. Связка с предсказателем проходов проверяется по выходным данным passes::predict_passes: при одной апертуре и отсутствии конкурирующего обслуживания апертуро-секунды навигации равны собственной суммарной длительности проходов, вычисленной предсказателем. Внешний оракул не заявляется, и его не существует: возможность заменяет расчёт вручную, а не проверяется по нему, прилагаемый план контактов иллюстративный, а не лётный, и ни один эксплуатационный планировщик не публикует пару «план плюс ответ» с указанным правилом арбитража — доля времени, вычисленная при неуказанной политике, несопоставима с вычисленной при указанной, а зависимость от политики измерена (доли навигации 100/150 против 50/150 на одном и том же плане). Время перенацеливания и смены режима, объём данных, состояние буфера, энергия и замыкание линии связи исключены в подписи отчёта, а не моделируются молча |
MODELLED |
| VM-054931b7 | РЧ-подавление лунной поверхностной навигации (J/S по каждому спутнику) | Лунное отношение мощности помехи к мощности сигнала, эффективное C/N₀ и срыв слежения для пользователя на селенографической поверхности при подавлении с лунной поверхности (или с возвышения) для иллюстративной орбитальной группировки класса Moonlight/LCNS по открытым источникам. Объединяет открытую цепочку подавления (j_over_s_db, effective_cn0_dbhz, rx_antenna_gain_db, lock_status, q_factor, nominal_cn0_dbhz, free_space_path_loss_db) с открытой геометрией лунного неба (lunar_service::LunarConstellation + topocentric, lunar::selenographic_to_mcmf); геометрия и радиометрия заново не выводятся. В отличие от земного вида jamming, сигнальное звено не является фиксированной принимаемой мощностью: изотропная принимаемая мощность каждого спутника равна его собственной EIRP по бюджету линии минус FSPL(наклонная дальность), поэтому J/S меняется от спутника к спутнику с лунной дальностью и углом места. Выдаёт ОДНУ СТРОКУ НА КАЖДУЮ ВИДИМУЮ ЛИНИЮ (эпоха, спутник) в JSON и в артефакте *.table.csv, причём обе принимаемые мощности, разностью которых является J/S, напечатаны рядом; агрегированные показатели качества приводятся рядом с этой таблицей, но не вместо неё. Запускается как вид сценария lunar-jamming |
lunar_jamming (composing jamming, lunar_service, lunar) | lunar_jamming::tests (17 тестов библиотеки: j_over_s_equals_the_difference_of_two_independent_link_budget_runs; the_report_prints_both_link_budget_legs_so_the_difference_is_checkable_from_it; the_scenario_reports_one_j_over_s_row_per_visible_satellite_and_never_a_median; a_single_median_j_over_s_would_misreport_the_outcome_that_the_table_reports; a_closer_jammer_raises_j_over_s_by_exactly_the_free_space_loss_difference; a_more_distant_satellite_is_the_weaker_signal_so_it_carries_the_higher_j_over_s; j_over_s_is_invariant_to_the_user_antenna_boresight_gain; a_narrowband_jammer_leaves_no_higher_effective_cn0_than_broadband_at_equal_js; a_selenographic_jammer_gets_its_range_from_the_shared_lunar_geometry; a_strong_enough_jammer_takes_every_lunar_link_below_the_tracking_threshold; no_jammer_is_a_clean_sky_lunar_baseline_with_an_undefined_j_over_s; raising_the_elevation_mask_can_only_remove_rows_never_change_the_ones_that_remain; every_emitted_numeric_field_has_a_unit_and_a_provenance_class; the_csv_table_carries_every_row_of_the_json_table; the_run_is_deterministic_and_the_dispatch_surface_is_populated; bad_inputs_are_rejected_rather_than_producing_a_number); api::tests::lunar_jamming_kind_round_trips_through_the_dispatch_with_a_per_satellite_table | Перекрёстная проверка композиции независимым путём кода в репозитории: каждое J/S по линии заново получается как разность двух бюджетов линии, вычисленных через linkbudget::received_signal_power_dbw, потери в свободном пространстве в котором задаются единственным выражением 20·log10(4πRf/c), а не трёхчленной суммой, которую использует jamming::free_space_path_loss_db — оба совпадают с точностью < 1e-9 дБ в каждой строке (измеренный худший случай 7.11e-14 дБ, то есть округление чисел с плавающей точкой). Лежащая в основе цепочка помех, которую она объединяет, отдельно привязана к внешнему эталону в tests/gnss_denied_jamming_resilience_reference.rs (независимый вывод J/S и эффективного C/N₀ на numpy/scipy, привязанный к Kaplan и Hegarty, §9,4, а также измеренное C/N₀ JammerTest 2024, Zenodo 10.5281/zenodo.15910563); лунная геометрия, которую она объединяет, — это геометрия lunar_service/lunar с собственными оракулами. Проверенные здесь тождества в замкнутой форме: вдвое меньшее удаление источника подавления добавляет ровно 20·log10(2) дБ к каждой строке; J/S строго инвариантно к усилению пользовательской антенны по оси, тогда как C/N₀ изменяется ровно на это усиление; маска по углу места не меняет ни одной оставшейся строки с точностью до бита. Сама строка остаётся ReferenceImpl/Modelled: измеренной кампании по лунному подавлению, с которой можно было бы провести проверку, не существует, а орбитальная группировка — иллюстративная геометрия класса Moonlight/LCNS по открытым источникам, а не лётные эфемериды | MODELLED |
| VM-296d9afc | Лунный контур отказа в обслуживании с полосой неопределённости по измеренному разбросу C/N₀ | Отчёт lunar-jamming больше не опирает контур отказа в обслуживании на одно скалярное значение. Он выдаёт полное измеренное распределение C/N₀ полезного сигнала по таблице по спутникам — n, min, p05, p25, медиана, p75, p95, max, среднее, выборочное стандартное отклонение и собственная асимметрия выборки (p95 − медиана) − (медиана − p05) — рядом со строками по линиям, которые не изменились. Затем контур приводится для каждой из этих порядковых статистик по ОБОИМ критериям отказа в обслуживании, которые распознаёт движок, и ни один не подменяет другой: действующему критерию отношения мощностей (J/S = 30 дБ, тот же порог, что используют attack_surface и tracking_loop, и критерий столбца denial выпущенной таблицы лунного подавления линий связи) и критерию срыва слежения (эффективное C/N₀ падает до tracking_threshold_dbhz), по которому оценивается столбец links[].status самого отчёта. Каждая точка контура задана по обеим осям плоскости отказа — EIRP источника подавления, требуемая при удалении сценария, и удаление, достаточное для отказа при EIRP сценария, — так что полоса является интервалом на тех же осях, на которых строится график контура. Границы полосы — это contour(p05) и contour(p95): то же замкнутое отображение, применённое к собственным квантилям выборки, а не сигма, подогнанная под выборку, и не медиана ± k·stdev, и отчёт говорит об этом в строке band_definition рядом с числами. stdev выдаётся для преемственности и ничем не используется. У квантиля, у которого C/N₀ уже не выше порога слежения, нет конечного подавляющего J/S; эти столбцы выдаются как null со счётной причиной, а не как бесконечность или ограниченный радиус |
lunar_jamming (denial_js_db, range_for_free_space_path_loss_m, Cn0Distribution, DenialContourPoint, ContourBand, DenialContour; inverting jamming::effective_cn0_dbhz, jamming::j_over_s_db and jamming::free_space_path_loss_db) | lunar_jamming::tests (10 тестов библиотеки: the_contour_is_the_exact_inverse_of_the_functions_the_rows_were_scored_with; the_band_is_the_measured_quantiles_pushed_through_the_contour_not_a_sigma; the_asymmetry_the_band_carries_is_the_samples_own_shape_bent_by_the_criterion; the_contour_is_monotone_in_cn0_measured_over_a_dense_sweep_not_assumed; the_band_recovers_the_split_verdict_the_single_scalar_contour_lost; the_distribution_is_the_tables_own_order_statistics_and_keeps_the_rows; a_link_already_below_the_threshold_gets_a_null_contour_point_not_a_number; a_clean_sky_run_has_no_contour_at_all_rather_than_an_empty_one; the_denial_threshold_is_the_same_thirty_decibels_the_rest_of_the_engine_uses; the_units_block_describes_the_contour_and_names_nothing_the_report_omits) | Внутренняя согласованность относительно собственных прямых функций движка — всё, что эта возможность может честно заявить. Каждая точка контура — замкнутое обращение, и каждое обращение проверяется прогоном его ответа обратно через ПРЯМУЮ функцию, по которой оценивались строки самого отчёта: столбец J/S через jamming::effective_cn0_dbhz (она должна вернуть tracking_threshold_dbhz с точностью < 1e-9 дБ·Гц), столбец удаления через jamming::free_space_path_loss_db и jamming::j_over_s_db (то же J/S с точностью < 1e-9 дБ), столбец EIRP через jamming::j_over_s_db при собственном удалении сценария. Далее проверяется, что контур является ГРАНИЦЕЙ множества отказа, а не точкой внутри него: lock_status теряет слежение по строгому неравенству, поэтому измеряется, что вердикт меняется с DEGRADED на LOST при отклонении J/S на 1e-4 дБ по обе стороны от контура, чего контур с ошибкой на эпсилон не выдержал бы. Сильнейшая проверка выполняется по линиям, а не по квантилям: применение того же отображения к собственному C/N₀ каждой строки в точности воспроизводит столбец статуса отчёта — 0 расхождений на 38 из 38 строк в документированной рабочей точке (kind = lunar-jamming, все входные параметры по умолчанию, кроме jammer.range_m = 25 000 м), где 26 строк имеют статус LOST, а 12 — нет. Монотонность измерена, а не предполагается: 20 001 отсчётов на [tracking_threshold + 1e-3, 80] дБ·Гц, 0 нарушений строго убывающего удаления и строго возрастающей требуемой мощности, так что порядок квантилей в полосе продемонстрирован, а не заявлен. ExternalDataset отклонён, а вместе с ним и Validated: измеренной кампании по лунному подавлению, с которой можно было бы сравнить радиус отказа, не существует, орбитальная группировка — иллюстративная геометрия класса Moonlight/LCNS по открытым источникам, а не лётные эфемериды, а входные данные контура (EIRP, мощность источника подавления, коэффициенты усиления антенн, шумовая температура) — репрезентативные величины. ReferenceImpl также рассматривался и отклонён — обратное и прямое выражения представляют ОДНУ И ТУ ЖЕ алгебру, прочитанную в двух направлениях, поэтому круговая проверка ловит ошибки переписывания и знака, но не является независимой реализацией; назвать её перекрёстной проверкой означало бы заимствованную независимость, для предотвращения которой существуют инварианты матрицы. Что даёт полоса — измерено и указано, а не заявлено: в этой рабочей точке контур по одному скаляру равен 27,402916 км и относит 25 км к стороне отказа для всех 38 строк, тогда как полоса 21,256108 .. 29,921360 км содержит рабочую точку и потому отражает разделение, которое на самом деле показывает таблица. Два критерия также измерены как расходящиеся — полоса по отношению мощностей (38,186527 .. 53,691675 км) вообще не содержит 25 км, — поэтому печатаются оба | MODELLED |
| VM-ef715cd6 | Мощность обнаружения межмодального монитора целостности | Отчёт hybrid-optical-rf показывает, что межмодальный монитор хи-квадрат действительно способен ОБНАРУЖИТЬ, а не только то, что он проходит случай без неисправностей: минимальное обнаруживаемое смещение по каждой отслеживаемой оси (восток, север, вертикаль, часы) при заявленных в сценарии вероятностях ложной тревоги и пропуска обнаружения, кривую мощности обнаружения по обе стороны от него, кратность смещения без шума, при которой реализованная статистика впервые пересекает порог, и время до обнаружения для линейно нарастающего смещения с заданной скоростью. Неисправности также вносятся через настоящий монитор, и возвращаемая им статистика приводится рядом с аналитическим предсказанием | hybrid_integrity | hybrid_integrity::tests (кривая мощности обнаружения идёт от частоты ложных тревог при нулевом отказе до 1 − P_md при минимальном обнаруживаемом смещении; минимальное обнаруживаемое смещение, поданное обратно через noncentral_chi2_cdf при пороге, применённом самим монитором, возвращает P_md с точностью 1e-9 на каждой оси и через публичный помощник; смещение, реально внесённое в РЧ-оценку, сдвигает собственную статистику монитора ровно на вычисленное вручную b²/(σ_rf² + σ_opt²); смещение без шума обнаруживается выше √(T/λ*)×MDB и пропускается ниже него, а ряд внесённых значений охватывает это пересечение; мощность обнаружения монотонна по величине отказа и одинакова на всех четырёх осях в кратных MDB; Монте-Карло статистики монитора с начальным значением на 200,000 выборок воспроизводит аналитическую мощность в пределах 4σ в четырёх точках кривой; MDB по времени зафиксировано выше предела тревоги по времени, и это измеренная слабость, а не свойство; измерено, что квантиль Вильсона–Хилферти расходится с точным порогом монитора примерно на ~4%, что фиксирует, почему он не использовался; величина нарастания равна ровно MDB/скорость и масштабируется обратно скорости, а неположительная скорость даёт null, а не ноль); tests/hybrid_fault_power_scipy_oracle.rs (report_detection_power_matches_scipy_chi2_and_ncx2; report_detection_power_matches_scipy_with_comparable_sigmas) | Два внутренних оракула, без внешнего набора данных. (1) Замкнутое круговое преобразование: минимальное обнаруживаемое смещение получается обращением хвоста нецентрального хи-квадрат по параметру нецентральности (raim::pbias) и проверяется подстановкой получившегося параметра нецентральности обратно в raim::noncentral_chi2_cdf при собственном пороге монитора, что должно вернуть P_md. (2) Внесение и анализ: смещение записывается в РЧ-оценку одной оси, и cross_raim::run_cross_raim запускается заново, так что статистика, сравниваемая с аналитическим параметром нецентральности, — это та, которую вычислил сам монитор, а не повторный вывод. Начальное значение Монте-Карло самой статистики входит в тесты как третья проверка; в отчёт оно сознательно НЕ включено, потому что выборочная оценка была бы медленнее и невоспроизводима с точностью до бита. ExternalDataset отклонён: величина — это мощность обнаружения ЭТОГО монитора при распределении сигм ЭТОГО сценария, а величины сигм, на которые масштабируется MDB, — репрезентативные входные данные Modelled, а не измерения. ReferenceImpl также рассматривался и отклонён — Монте-Карло выбирает ту же статистику, которую описывает анализ, поэтому он ловит ошибки переписывания и коэффициентов, но не является независимой реализацией монитора. Раунд 2 0,30 (предварительно зарегистрирован 0135a9e4), заблокирован (остаётся MODELLED): SciPy 1.18.1 chi2/ncx2/brentq воспроизводят порог отчёта (в пределах 5.4e-12), MDB по осям, кривую мощности, кратность пересечения и время до обнаружения для нарастающего смещения (в пределах 5.3e-10) на пяти конфигурациях; у статистик внесённых неисправностей нет независимого оракула, а величины сигм — входные данные Modelled, поэтому определение области применения ждёт решения владельца | MODELLED |
| VM-b67b5596 | Повторный рост ковариации после передачи относительно предела тревоги | Отчёт hybrid-optical-rf раскрывает модель шума процесса фильтра и указывает, сколько времени решение после передачи остаётся в пределах предела тревоги: для обоих направлений передачи он берёт ковариацию по осям, оставшуюся после передачи, распространяет её вперёд при заданном шуме процесса типа случайного блуждания и сообщает момент, когда 1σ, масштабированная по коэффициенту охвата, достигает горизонтального, вертикального и временного пределов тревоги, какой из пределов срабатывает первым, постоянную времени удвоения дисперсии и выборочный профиль выбега, охватывающий пересечение. Спектральные плотности шума процесса, коэффициент охвата и пределы тревоги — всё это входные параметры с документированными значениями по умолчанию | hybrid_integrity | hybrid_integrity::tests (движение по инерции начинается ровно со следа ковариации, который сообщает блок передачи управления, для обоих направлений, так что воспроизведённая диагональ не может отклониться от сообщённой передачи; сообщённое время пересечения пересчитывается по собственной сигме передачи управления, СПМ шума процесса и коэффициенту покрытия отчёта, а граница лежит внутри предела тревоги непосредственно перед ним и вне его сразу после; время движения по инерции масштабируется строго обратно СПМ шума процесса и сокращается при ужесточении предела тревоги; движение по инерции с нулевой СПМ сообщает null, а не нулевое время, потому что «никогда» — это не «немедленно»; выданный профиль пересекает предел ровно один раз и охватывает сообщённое пересечение; время удвоения дисперсии и время пересечения предела тревоги зафиксированы раздельно: они различаются на восемь порядков после жёсткой оптической ступени и в пределах одного порядка после мягкой РЧ-ступени; выход из оптической модальности даёт больше времени движения по инерции, чем выход из РЧ, ровно на разность ковариаций, делённую на скорость роста по горизонтали; а random_walk_time_to_limit различает случаи «уже вне предела», «пересекает в момент t» и «никогда не пересекает») | Внешнего оракула нет. Пересечение — решение роста дисперсии случайного блуждания в замкнутой форме, и тесты пересчитывают его независимо по значениям, которые публикует сам отчёт, а не по внутренним данным генератора. Начальная ковариация зафиксирована с точностью до бита по следу, уже сообщённому существующим блоком передачи, поэтому выбег не может распространять ковариацию, которой никто больше не видел. Спектральные плотности шума процесса — репрезентативные входные данные MODELLED, и времена пересечения масштабируются прямо вместе с ними, что тест масштабирования формулирует как измеренное свойство, а не как утверждение. ExternalDataset сознательно отклонён: время выбега — прямая функция двух спектральных плотностей Modelled и пределов тревоги, которые сами репрезентативны, а измеренного выбега при оптико-радиочастотной передаче на Луне, с которым можно было бы сравнить, не существует. Внешнему оракулу здесь потребовалась бы опубликованная кривая роста ковариации после передачи или точности holdover для сопоставимого приёмника с указанной моделью шума процесса, проверенная с заданным допуском | MODELLED |
| VM-73e5efd2 | Диаграмма антенны вне оси в экспорте лунной геометрии | Экспорт геометрии по каждому спутнику содержит для каждой пары (эпоха, спутник) угол вне оси НА СПУТНИКЕ и коэффициент усиления передачи в направлении площадки по реальной диаграмме равномерно освещённой круглой апертуры (Эйри) и сообщает число спутников в луче по этой диаграмме РЯДОМ с числом спутников в луче по симметричному приближению «усиление — ширина луча» (θ_3dB[град] = √(31000/G_lin)); разность выдаётся как явная поправка по линиям, в спутниках на эпоху и как худшая отдельная эпоха. Оба подразумеваемых коэффициента использования апертуры для приближения выдаются (0,641 для правила 70·λ/D градусов, с которым оно приводится, 0,920 для равномерной круглой апертуры), чтобы эффективность, которую оно молча предполагает, была указана, а не выводилась. По умолчанию отключено: блок появляется только тогда, когда заданы и площадка экспорта, и апертура | lunar_service, antenna | antenna::tests и lunar_service::tests (точка половинной мощности, найденная бисекцией по диаграмме, совпадает с опубликованным x Эйри = 1,61634 и даёт точную ширину 1,02899·λ/D, фиксируя, что общепринятый коэффициент 1,02 приходится на −2,955 дБ, а не на −3,010 дБ; диаграмма строго убывает на 400 точках от оси до первого нуля; алгебра подразумеваемого КПД проходит круговой расчёт с точностью 1e-12 и воспроизводит 0,641 / 0,920; угол от оси совпадает с tan θ = R·sin γ/(r − R·cos γ) в 20 точках и оба предела с точностью 1e-12; приближённый конус содержит реальный луч построчно; итоговые числа равны построчным признакам, которые они обобщают, а поправка равна их разности; вердикт по каждой строке можно пересчитать по одному выданному отчёту; каждое выданное числовое и логическое поле имеет единицу и класс происхождения; невозможная апертура не выдаёт блока; при ненастроенной антенне экспорт сохраняет ровно свои шесть прежних ключей, 0 изменённых листьев и 0 удалённых); tests/validate_lunar_export_offboresight_spice.rs (flown_orbiter_export_matches_spice_geometry_and_scipy_pattern; documented_working_point_matches_anise_propagation_and_scipy_pattern) | Смешанный случай, и области разделены, а не объединены. Лежащая в основе ДИАГРАММА проверена по внешнему эталону и сохраняет собственную строку (эталонные данные scipy.special.j1 с точностью < 0,05 дБ в tests/validate_p1_orbital_footprint.rs, а здесь ещё и опубликованная абсцисса половинной мощности Эйри x = 1,61634, найденная бисекцией, а не предполагаемая). ГЕОМЕТРИЯ проверяется по замкнутой тригонометрии треугольника, записанной другим выражением, чем проверяемое скалярное произведение. ВКЛЮЧЕНИЕ реального луча в приближённый конус — выведенная алгебра (28.019/√η против 29,479 градуса на λ/D), поэтому поправка может быть неположительной только при η ≤ 0,9035. Но сами ЧИСЛА спутников в луче внешнего оракула не имеют: ни в одной опубликованной таблице не указано, сколько спутников оболочки класса Moonlight/LCNS удерживают южнополярную площадку в луче половинной мощности данной антенны, а орбитальная группировка — иллюстративное приближение по открытым источникам, а не лётные эфемериды. Поэтому измеренное расхождение в документированной рабочей точке — 0 линий в луче по реальной диаграмме против 28 по приближению, −2,33 спутника на эпоху, худшая эпоха 3, на 76 оценённых линиях — является находкой MODELLED о приближении, закреплённой как литерал регрессии (ближайшая строка отстоит на 0,069° от любого края луча, что на четыре порядка больше любого расхождения в последней цифре), а не внешне проверенным числом охвата. Назвать строку ExternalDataset на основании собственной внешней привязки диаграммы означало бы заимствованную проверку, для предотвращения чего существуют инварианты матрицы. Раунд 2 0,30 (предварительно зарегистрирован d9755d28), заблокирован (остаётся MODELLED): геометрия SPICE и функции Бесселя SciPy воспроизводят угол вне оси (худший случай 3.0e-5 град), усиление Эйри и признаки попадания в луч на 6 336 строках состояний реальных орбитальных аппаратов и в документированной рабочей точке; но на реальной геометрии признаки расходятся по идентичности спутника (ближайшая линия отстоит на 1,66 град от края луча), видимость при 5 град проверяется как признак, а не как числовой угол места, признак симметричного приближения применяет эмпирическое правило 31000/G к проверенному углу без проверки самого правила, а подразумеваемые коэффициенты использования не имеют оракула; определение области применения ждёт решения владельца | MODELLED |
| VM-ddc4cb42 | Срыв слежения и затягивание спуфингом в контуре слежения при помехах | Срыв слежения, вычисленный по динамике контуров, а не по отношению мощностей: тепловое дрожание 1σ несущей (Костас) и кода (некогерентный опережающий/запаздывающий) в зависимости от C/N₀ с потерями на возведение в квадрат, относительно заданных правил 3σ_PLL + θ_e ≤ 45° и 3σ_DLL + запаздывание по скорости ≤ d/2 чипа; пороги C/N₀ срыва и повторного захвата с указанием определяющего контура и гистерезисом, ВЫВЕДЕННЫМ из более широкой полосы затягивания, а не заявленным; заявленное время до срыва слежения по двухпороговому детектору захвата с подтверждающими задержками, приводимое отдельно от физического времени ухода фазы (среднее время Витерби между проскальзываниями циклов, в log₁₀ с, так как оно охватывает сотни порядков); наибольшая скорость смещения кода и скорость изменения доплеровской частоты несущей, которые контуры жертвы способны отслеживать; и РАДИУС ОТКАЗА, следующий из динамики контуров, приводимый рядом с существующим радиусом по отношению мощностей, причём их разность со знаком является отдельным именованным полем. Запускается как вид сценария tracking-loop |
tracking_loop (composing sdr, jamming) | tracking_loop::tests (джиттер дискриминатора Костаса в разомкнутой петле относительно sdr::correlate, пошагово прогнанного на синтетической ПЧ с начальным значением, 3 объединённых реализации шума × 900 эпох, согласуется до 0,63% на 35-45 дБ-Гц, причём член потерь на возведении в квадрат должен подходить как минимум в 3 раза лучше формы без потерь на возведении в квадрат везде, где это разрешимо; насыщение арктангенсного дискриминатора около 32 дБ-Гц проверяется утверждением, а не просто заявляется, так что предел применимости зафиксирован; σ в замкнутой петле относительно шагового цикла Костаса sdr на 4000 эпох до 3,7%; запаздывание DLL первого порядка на линейном нарастании относительно шагового sdr DLL до 0,17%; bessel_i0 относительно табличных I₀ до 7.4e-8; ширина гистерезиса должна попадать в [5·log₁₀ r, 10·log₁₀ r] по 4 отношениям × 2 временам интегрирования × 3 полосам); api::tests::tracking_loop_kind_round_trips_through_the_dispatch; tests/tracking_loop_gnss_sdr_oracle.rs::finding_is_pinned | Собственный коррелятор sdr движка (sdr::correlate / synth_if / CaCode), пошагово запускаемый на начальном значении синтетической ПЧ при откалиброванном C/N₀ — отдельный путь кода, получающий те же числа численной корреляцией дискретизированных IQ, а не алгебраическим выражением для дрожания, то есть другой путь, а не пересказ, — плюс стандартные табличные значения модифицированной функции Бесселя I₀ для члена проскальзывания циклов. Теория контуров по Kaplan и Hegarty, гл. 8 и по Витерби и Гарднеру для времени проскальзывания. Строка остаётся ReferenceImpl/MODELLED: перекрёстная проверка находится в той же кодовой базе, а проверка bessel_i0 подтверждает одну специальную функцию, а не модель слежения, поэтому повышение строки на этом основании было бы самообслуживающей маркировкой. Для ExternalDataset потребовался бы записанный набор необработанных ПЧ-данных с эталонным C/N₀ и размеченным моментом срыва слежения (класс TEXBAT/OAKBAT); в этом дереве такого набора нет, и даже с IQ эти наборы не публикуют эталонного состояния контуров по эпохам, поэтому заявленное время срыва слежения можно было бы проверить лишь по детектору захвата какого-то другого приёмника, что является модельным выбором, а не оракулом. Полосы контуров, время интегрирования, разнос коррелятора, коэффициент затягивания, задержки, мощность источника подавления и коэффициенты усиления антенн — репрезентативные значения диапазона, а не паспортные данные. Раунд 2 0,30, GNSS-SDR 0.0.19 (GPL-3.0, запускается как программа) на независимо сгенерированной ПЧ (предварительно зарегистрировано 6ef7698c, поправки к методу измерения раскрыты), результат-находка (остаётся MODELLED): дрожание PLL и DLL замкнутого контура совпадает в пределах 8 % при 35–45 дБ·Гц, динамическая нагрузка 10 Гц/с — в пределах 1 %, а запаздывание кода по скорости первого порядка — в пределах 2 %; при 30 дБ·Гц дрожание PLL на 21 % выше, а дрожание DLL на 32 % ниже, измеренные пороги по правилу 15 градусов лежат на 1,5 дБ выше, чем у движка, а контур второго порядка проскальзывает на 0,5–2 порядка чаще, чем даёт оценка времени проскальзывания первого порядка. Редакция 0,30: время проскальзывания Костаса теперь использует SNR контура rho/4 (проскальзывания на полцикла); значение по умолчанию jitter_table log10_mean_time_to_cycle_slip_s падает с 11,58 до 2,10 при пороге 25,47 дБ·Гц | MODELLED |
| VM-3ee0ae6e | Ковариация координат станций лунного РСДБ по расписанию слежения | Частные производные задержки, накопленные по расписанию баз × эпох в информационную матрицу Фишера, обращаются в ковариацию координат станций и сигму станции по каждой координате, заменяя предполагаемую изотропную связь равного распределения по скалярной точности задержки. Состояние содержит координаты станций в земной системе (ITRS), поэтому якобиан — это инерциальная частная производная, повёрнутая матрицей GCRS→ITRS каждой эпохи, а вращение Земли делает эти координаты наблюдаемыми — отчёт ИЗМЕРЯЕТ развёртку линии визирования в земной системе и склонение маяка, а не предполагает их. Ранг, дефект датума, число обусловленности, информационный спектр и нуль-пространство свободной сети выдаются при каждом прогоне, а при дефиците ранга главная сигма публикуется как NULL со статусом, а не считывается из почти вырожденного обратного. Значение равного распределения c·σ_τ·√(g/N) для ТОГО ЖЕ расписания печатается рядом с вычисленным вместе с их отношением, а также изотропная оценка по следу √(p/trace(M)), которую AM-HM делает жёсткой нижней границей. Запускается как вид сценария lunar-vlbi-fim |
lunar_vlbi_fim (composing lunar_vlbi, fim, cio, lunar_frame, frames) | lunar_vlbi_fim::tests (24 библиотечных теста: аналитический якобиан в сравнении с центральной конечной разностью lunar_vlbi::vlbi_delay_s, взятой по маршруту, который прямо поворачивает собственные координаты состояния и ни разу не обращается к частной производной, согласуется с точностью < 1e-6 от 1/c на столбец, две информационные матрицы согласуются с точностью < 1e-6 от наибольшего диагонального элемента, а ковариации — с относительной точностью < 1e-5; ортогональная единичная геометрия, ковариация которой равна c·σ_τ по каждой оси в замкнутой форме с точностью 1e-12, — это также единственный случай, где связь равнораспределения точна; спектр ковариации и 3-D сигма каждой станции инвариантны относительно жёсткого поворота всей сети с точностью 1e-9, при блочной фиксации C_rot = R·C·Rᵀ И явном утверждении, что сигмы по осям действительно сдвинулись, так что тест не может пройти вхолостую; ковариация масштабируется точно как σ² и как 1/N; граница следа AM-HM никогда не нарушается; замыкание задержек τ_ik = τ_ij + τ_jk закреплено с точностью до одной ULP на задержках и строках якобиана, причём избыточная базовая линия добавляет информацию, но не ранг; одна эпоха признана с дефицитом ранга и нулевым главным показателем; более длинная дуга при том же числе наблюдений обусловлена лучше; блок маяка показан ненаблюдаемым при этом расписании; пренебрегаемая частная производная дифференциального эффекта Шапиро измеряется конечной разностью во время прогона и выдаётся, а не отбрасывается); tests/lunar_vlbi_campaign_spice_oracle.rs::lunar_vlbi_fim_matches_spice_geometry_and_numpy (сеть с привязкой по умолчанию и свободная сеть: якобиан, построенный по SPICE, расписание из 16 наблюдений идентично, сигмы станций в пределах 2.2e-3, собственные значения 2.3e-3, обусловленность 2.4e-3, главный показатель 1.0e-3, луч зрения 0,018 deg, склонение 0,007 deg, при порогах 1 % и 0,1 deg; свободная сеть с рангом 8/9 и нулевым главным показателем, нуль-пространство на 0,006 deg в стороне; NumPy на зафиксированном якобиане с точностью 2e-13) | Независимый путь внутри репозитория. Каждая строка якобиана заново получается центральной конечной разностью lunar_vlbi::vlbi_delay_s, вычисляемой по собственным земным и лунным связанным координатам состояния, повёрнутым вперёд по цепочке систем координат, — путь, который не вычисляет производных и не разделяет ни одного выражения с аналитическими частными производными, — и информационные матрицы, построенные двумя путями, совпадают с точностью < 1e-6 от наибольшего диагонального элемента. Ядро линейной алгебры, которое здесь используется (information_matrix, crlb, sym_eig), отдельно привязано к внешнему эталону numpy.linalg.eigh / numpy.linalg.inv в tests/fim_observability_reference.rs, а наблюдаемая задержка несёт собственный оракул дальнего поля delta-DOR из lunar_vlbi; строка не заимствует ни тот, ни другой статус. Проверенные здесь тождества в замкнутой форме, обозначенные как таковые: масштабирование σ² и 1/N и √(p/trace(M)) как нижняя граница AM-HM, которую вычисленная сигма превзойти не может и которая совпадает со значением равного распределения лишь на изотропной геометрии, — поэтому измеренное отношение в точности равно анизотропии, которую отбросило предположение. Внешнее сравнение 0,30 (Библиотека: NAIF SPICE CSPICE N0067 через spiceypy 8.2.0, MIT; DE440, ITRF93 earth_latest_high_prec, MOON_PA), предварительно зарегистрированное (50863551) вместе с прогоном чувствительности к ошибке модели на стороне движка: каждая строка якобиана перестраивается центральными разностями сошедшихся ньютоновских разностей светового времени по геометрии SPICE (уравнение светового времени — короткий скрипт по положениям SPICE; геометрию обеспечивает SPICE), с расписанием, перестроенным по углам места SPICE. Расписание, ранг, дефект, информационный спектр, число обусловленности, сигмы станций, главная сигма, оценка по следу, отношения к равному распределению, нуль-пространство свободной сети, развёртка линии визирования и склонение маяка совпадают в пределах предварительно зарегистрированных 1 % / 0,1 град, что лежит выше известной аналитической ошибки Луны движка (3.2e-3 по сигмам, измерена до прогона). NumPy 2.3.5 повторяет линейную алгебру на зафиксированном якобиане движка с точностью 2e-13 (P2). Validated как граница Крамера — Рао для заявленного сокращённого набора параметров на заявленных иллюстративных входных данных: эфемериды центра Луны, часы, тропосфера и параметры ориентации Земли в обоих ветвях зафиксированы, поэтому это не точность реальной кампании | VALIDATED |
| VM-7e8c3aaf | Ковариация координат точки лунной поверхности по расписанию задержек РСДБ, отдельная от ковариации земных станций | Третий вариант выбора датума, all-stations-fixed, который фиксирует каждую земную станцию и оценивает только связанные с Луной координаты МАЯКА, — конфигурация, для которой на самом деле приводится неопределённость точки лунной поверхности, так как координаты земных станций являются входными данными модели задержки, а не её неизвестными. Он существует потому, что ковариация на уровне станции и ковариация точки поверхности — РАЗНЫЕ ВЕЛИЧИНЫ, разделённые плечом ρ/B, и ничто раньше не мешало приводить одну вместо другой. Выдаваемый блок beacon_link содержит ρ, наибольшую базу, плечо, форму равного распределения для точки поверхности c·σ_τ·(ρ/B)·√(g/N), вычисленную сигму маяка по каждой координате и их отношение — отношение равно null, а не вводит в заблуждение, когда маяк не оценивается или матрица имеет дефицит ранга. B принимается равной НАИБОЛЬШЕЙ имеющейся базе, самой благоприятной, поэтому отношение может только занижать. Запускается как datum = "all-stations-fixed" с estimate_beacon = true, что отклоняется с сообщением, называющим недостающий вход, если маяк не оценивается |
lunar_vlbi_fim (composing lunar_vlbi, fim, cio, lunar_frame, frames) | lunar_vlbi_fim::tests (7 тестов библиотеки: каждое написание датума проходит круговой обмен через parse/as_str, а неизвестное отклоняется; удержание каждой станции без маяка отклоняется с ошибкой, называющей estimate_beacon; плечо рычага проверяется на РАВЕНСТВО ρ/B, а равнораспределение маяка на РАВЕНСТВО равнораспределению станции, умноженному на него, оба с точностью 1e-15, с дополнительной проверкой, что плечо рычага превышает 10, так что два бюджета на этой геометрии нельзя перепутать; опубликованная база образца зафиксирована на 10726,748 км, а его расписание на 49 отсчётов, как проверено, даёт строго меньше 49 взаимно видимых наблюдений; спектр маяка на одной базе, как измерено, охватывает не менее пяти десятичных порядков, а получающееся отношение, как проверено, выше 1 по AM-HM и выше 100 на деле; раскладка «станция плюс маяк», как проверено, имеет дефицит ранга при том, что ОБА вычисленных поля равны null, а смоделированное сравниваемое по-прежнему сообщается. Плюс защита самого образца: ключ верхнего уровня, вставленный после массива таблиц, вместо этого становится данными станции, поэтому точка вставки проверяется, а разобранный сценарий проверяется на наличие ключа — режим отказа здесь состоит в прогоне, который молча использует другую конфигурацию, чем названа в тесте) |
Тождества в замкнутой форме, внешний оракул не заявляется и недоступен. Плечо проверяется по ρ/B, а две формы равного распределения — друг по другу с точностью 1e-15 — это алгебраические тождества, поэтому они ловят ошибку подключения и ничего больше, и обозначены как таковые. Существенный результат MEASURED, а не заявлен: задержка по фиксированной базе ограничивает НАПРАВЛЕНИЕ на маяк, поэтому составляющая по линии визирования попадает в информационную матрицу только через член дальности ближнего поля, а тест считывает получающуюся анизотропию с выданного спектра, а не выводит её. AM-HM делает √(p/trace(M)) жёсткой нижней границей, поэтому связь по изотропному равному распределению может только ЗАНИЖАТЬ, а отношение вычисленного к равному распределению — это в точности отброшенная анизотропия. MEASURED на паре типа Голдстоун/типа Канберра, хорда которой равна 10726,748 км: за 112 выбранных дней 36 вообще не допускают ни одной эпохи взаимной видимости при маске 10°, наибольшее число взаимно видимых эпох — 17 из расписания в 49 отсчётов, а на 73 пригодных днях трёхкомпонентное отношение составляет от 113,9× до значений на четыре порядка больше, медиана 1513×, тогда как при ограничении двумя поперечными направлениями, которые линия визирования не обделяет, получается от 3,94× до 25,8×, медиана 7,8×. ЧЕГО ЭТА СТРОКА НЕ ЗАЯВЛЯЕТ: что какое-либо из этих чисел является свойством реальной кампании. Она устанавливает, что величина для точки поверхности теперь ВЫЧИСЛЯЕТСЯ, а не предполагается, и что её нельзя молча подменять величиной на уровне станции. Остаётся ReferenceImpl/MODELLED: опубликованной ковариации точки поверхности лунного РСДБ, по которой можно было бы проверить, не существует, станции и площадка маяка иллюстративные, а не съёмочные, эфемериды, часы, тропосфера и параметры ориентации Земли ЗАФИКСИРОВАНЫ, так что это граница Крамера — Рао для сокращённого набора параметров, оптимистичная сама по себе. Та же величина на пути ядра (маяк на Луне DE440) проверена в собственной строке «…, путь ядра»; на этом аналитическом пути наименьшая сигма маяка на 3,9 % ниже оракула SPICE этой строки, поэтому эта строка остаётся MODELLED | MODELLED |
| VM-b762f53b | Ковариация координат точки лунной поверхности по расписанию задержек РСДБ, путь ядра | Ковариация маяка при всех зафиксированных станциях в сценарии lunar-vlbi-fim (все земные станции зафиксированы, связанные с Луной координаты маяка оцениваются отдельно) с маяком, помещённым на Луну JPL DE440, считываемую собственным читателем ядер движка (planetary_kernel_path; lunar_vlbi_fim::epoch_geometry_with, ephem_provider::KernelEphemeris). От аналитического пути отличается только центр Луны; вращение тела IAU 2015, станции, вращение Земли и линейная алгебра те же. Проверенные выходные данные — набор наблюдений, информационный спектр 3 x 3, ранг и число обусловленности, три связанные с телом сигмы маяка и их RMS, плечо и отношение вычисленного к равному распределению на расписании по умолчанию. Запускается как сценарий lunar-vlbi-fim с datum = "all-stations-fixed", estimate_beacon = true и заданным planetary_kernel_path |
lunar_vlbi_fim (epoch_geometry_with, schedule, schedule_jacobian); ephem_provider (KernelEphemeris); naif_kernel | tests/lunar_vlbi_surface_point_spice_oracle.rs::surface_point_covariance_kernel_path_matches_spice_geometry_and_numpy (16 наблюдений идентичны; ранг 3/3; собственные значения в пределах 5.9e-5; обусловленность 5.9e-5; сигмы маяка в пределах 1.7e-3 при 1e-2; СКО 2.9e-5; рычаг 1.4e-8; сигмы P2 3.9e-14 при 1e-9); lunar_vlbi_fim::tests | Обязательная ветвь Library: NAIF SPICE Toolkit N0067 (spiceypy 8.2.0, MIT) на de440s, earth_latest_high_prec (ITRF93 с UT1 и движением полюса) и лунных системах DE440, маяк закреплён в MOON_ME; каждая строка якобиана — центральная разность 3 км сошедшейся ньютоновской разности светового времени (собственный код светового времени оракула M069, импортированный), а не частная производная Kshana; видимость перестроена по углам места WGS-84; eigh и inv из NumPy 2.3.5 / SciPy 1.18.1 (BSD-3-Clause, LAPACK). Ветвь P2: NumPy на зафиксированном якобиане движка. Предварительно зарегистрировано (4a51256) до появления эталонных данных и оракула, с порогами 1 % для собственных значений, обусловленности, сигм, RMS и отношения, 1e-4 для плеча, точное совпадение набора наблюдений и ранга; P2 1e-9. Раскрыто: сравнение только на стороне движка аналитической Луны и Луны из ядра (3,9 % по сигме y) было выполнено до предварительной регистрации, чтобы выбрать путь ядра, и указано в ней. Результат: обе ветви согласуются, худший случай 1.7e-3 (сигма y маяка 0,081211 м против 0,081351 м). Мутация: транспонирование вращения тела в частной производной маяка проваливает обе ветви. Обе стороны читают DE440, поэтому согласие подтверждает геометрию и линейную алгебру на DE440, но не сам DE440. Вне утверждения: точность точки поверхности в реальной кампании (часы, тропосфера и ориентация Земли зафиксированы; иллюстративные станции и площадка маяка) и аналитический путь по умолчанию (строка выше, остающаяся MODELLED: на аналитической Луне сигма y на 3,9 % ниже этого оракула) | VALIDATED |
| VM-337e1bd0 | Лунный дифференциальный PNT — бюджет остаточных ошибок линии поправок | Три члена, которые дифференциальная поправка приобретает между эпохой вычисления и эпохой использования, каждый из которых прежде оставался нерасчитанным запасом: ошибка привязки опорной станции (коррелирована по спутникам, не зависит от базы, передача положения ~1:1 и доказуемо не усиливается DOP), старение поправки (замороженный вектор ошибки орбиты, заново спроецированный на линию визирования, на которую собственный распространитель движка помещает спутник на одну задержку позже, плюс дрейф часов c·σ_y(τ)·τ по откалиброванному степенному закону) и равномерное квантование линии связи по точной полной шкале ±(orbit_err + clock_err) с дисперсией step²/12. Приводится в областях дальности и положения, рядом с существующими остаточной ошибкой и уровнем защиты, но не вместо них, с кривой по задержке рядом с единичным значением | lunar_dpnt | lunar_dpnt::tests (чисто аддитивная защита, разница набора ключей которой — ровно {correction_link, units}, а каждое прежнее значение побитово идентично литералам, снятым до изменения; ошибка привязки НЕ декоррелирует с базой, тогда как орбитальный член декоррелирует, и она сохраняется при нулевой базе, где орбитальный член строго равен нулю — структурная проверка, ловящая подключение члена не в то место; ошибка станции в 1 м переносится 1:1 и, как доказано, не усиливается DOP; нулевая задержка воспроизводит невозрастной остаток бит в бит, а остаток монотонен по задержке, причём выданная кривая равна прямым прогонам; шаг квантования уменьшается ровно вдвое на бит, а σ² = step²/12, и полная шкала следует вводимым величинам; каждый член, отключённый по очереди, восстанавливает два других в квадратуре; равные σ по спутникам распространяются точно в σ·PDOP, и этот PDOP согласуется с orbit::dop; каждое выданное поле несёт единицу и класс происхождения, проверено в обоих направлениях) | Тождества в замкнутой форме и самосогласованность: дисперсия step²/12 равномерного квантователя, точное распространение ковариации (GᵀG)⁻¹GᵀRG(GᵀG)⁻¹, вырождающееся в σ·PDOP при равных σ, передача члена привязки 1:1 как следствие û_user ≈ û_ref и квадратурное замыкание при отключении. Перекрёстная проверка PDOP по orbit::dop использует ту же нормальную матрицу [−û, 1], поэтому это проверка согласованности, и она названа таковой, а не независимым оракулом. ExternalDataset недоступен и не заявляется: ни у одной лунной поверхностной станции нет опубликованной съёмочной точности, ни у одной лунной линии дифференциальных поправок нет опубликованной задержки или формата сообщений, а результат квантования — замкнутая формула, а не измерение. RTKLIB — уже внешний оракул кода для ядра одиночных разностей и взвешенных наименьших квадратов — можно было бы запустить с намеренно неверно привязанной базой, чтобы подтвердить передачу привязки 1:1, но это независимый код над той же алгеброй первого порядка по линии визирования. ВЕЛИЧИНЫ — MODELLED: значение привязки по умолчанию — собственное распределение этого крейта на реализацию лунной системы координат, а не измеренная станция, задержка и число бит — ILLUSTRATIVE входные данные, а рост самого ВЕКТОРА ошибки эфемерид вещания вообще не моделируется — об этом сказано в выдаваемой строке закона старения, потому что именно этот член с наибольшей вероятностью будет доминировать в реальной линии | MODELLED |
| VM-367e840f | Карта охвата и точности лунной опорной станции | Развёртка Монте-Карло лунной дифференциальной модели PNT по южнополярной сетке пользователей и суткам эпох (вид lunar-station-coverage): для дифференциальной опорной станции на известной южнополярной площадке — по каждой точке и по региону — процентильная скорректированная и нескорректированная ошибка положения (3-D, горизонтальная, вертикальная), доступность с причиной для каждой недоступной эпохи (user_lt4, station_missing_sat), охват относительно порога, заданного до прогона, уровни защиты DO-229E, радиус охвата по азимутальным секторам и бюджет линии поправок на станции и в худшей точке. Это не заявление о характеристиках какой-либо реальной системы; не связано с каким-либо ведомством и не одобрено им |
lunar_station (over lunar_dpnt, lunar_service) | tests/lunar_station_coverage_reference.rs (one_point_one_epoch_one_trial_reduces_to_lunar_differential_pnt: до 1e-12 м с шумом приёмника и без него; zero_baseline_floor_is_zero_in_every_trial: 0 до 1e-9 м; survey_floor_matches_the_survey_transfer_prediction: p95 в пределах полосы 5 %, заявленной до прогона; coverage_is_non_decreasing_in_the_threshold; corrected_error_grows_with_distance_along_an_azimuth; three_satellites_are_unavailable_with_a_reason_and_no_error; a_satellite_the_station_does_not_see_is_reported; deterministic_for_a_seed_and_moved_by_another; the_work_guard_refuses_an_oversized_grid; the_bundled_scenario_states_a_source_for_every_input; the_result_is_labelled_modelled_with_the_honesty_statement); tests/lunar_station_numpy_oracle.rs (предварительно зарегистрированный пересчёт numpy, записанный вместе с его промахом); lunar_service::tests::south_polar_ring_grid_is_the_published_comparison_grid; tests/lunar_differential_pnt_reference.rs, а также реестр и кросс-платформенные эталонные значения без изменений (аддитивность); tests/field_units_global.rs (каждое выданное поле описано, без исключений) | Арифметика, пересчитанная независимым скриптом numpy на выгруженных случаях (scripts/gen_lunar_station_ref.py, numpy 2.5.4; предварительно зарегистрирована в tests/fixtures/lunar_station/PREREGISTRATION.md, зафиксирована отдельно в 9caedf97 до первого прогона): на 20 случаях с включёнными всеми членами ошибки видимые множества и статус идентичны, необработанные ошибки дальности совпадают с точностью 1.4e-14 м, векторы и модули ошибки положения — с точностью 1.4e-9 м при пороге 1e-6 м, а p95 каждой точки равно numpy.percentile с точностью до бита; поправки станции НЕ ВЫПОЛНИЛИ свой порог 1e-9 м (худший случай 3.73e-9 м, 15 из 20 случаев), а вместе с ними и скорректированные ошибки дальности: проверка в 60-значной арифметике показала, что обе стороны лежат в пределах округления двойной точности от точного значения, так как член привязки — разность двух дальностей порядка 1e7 м, единица последнего разряда которых равна 1.86e-9 м; записано, не подгонялось. Вид в точности сводится к виду lunar-differential-pnt при одной точке, одной эпохе и одном испытании. Модель ошибок, модель декорреляции и каждый порог — собственные для этого проекта или ILLUSTRATIVE; ничто здесь не является заявлением о какой-либо реальной системе | MODELLED |
| VM-2ecad2c1 | Маски горизонта лунного рельефа по заданному профилю или полярной ЦМР | Зависящие от азимута маски горизонта для каждой площадки для вида lunar-station-coverage (опорная станция и каждая точка пользователя) и сетки moonlight-service-volume с её площадкой экспорта по каждому спутнику (каждая строка экспорта получает clears_terrain) в формате таблицы линии горизонта 0,36 (skyline::Skyline, линейно по азимуту с замыканием на 360 град; заданный профиль и горизонт ЦМР на одной площадке объединяются как их поточечный максимум): заданный [terrain] station_horizon или user_horizon с указанием источника и/или горизонт, найденный трассировкой лучей по южной полярной стереографической ЦМР (сеточная полярная раскладка LRO LOLA, считываемая из дескриптора, фиксирующего её размер и SHA-256, или тайл широты и долготы realdata::lola_dem с [terrain] dem_tile_path, воспроизводимый с его SHA-256) по большим кругам лунной сферы с точной кривизной, с заданной высоты мачты, с заданным шагом по азимуту и дальностью. Спутник учитывается на площадке, когда он выше плоской маски mask_deg и горизонта на своём азимуте (lunar_service::topocentric); эпоха, в которой горизонт оставляет менее четырёх спутников в точке, где плоская маска даёт четыре, учитывается как причина недоступности terrain_masked. Включённая в поставку ЦМР — фрагмент продукта LOLA LDEM_75S_240M, находящегося в общественном достоянии, с передискретизацией блочным средним 5 x 5 до 1200 м (data/lunar-dem/NOTICE.md). При отсутствии каждая площадка сохраняет плоскую маску, а каждый документ побайтово идентичен | lunar_terrain (over skyline, lunar_service::topocentric_basis); lunar_station; lunar_service (coverage_masked, masked_visible) | lunar_terrain::tests (bare_sphere_horizon_is_the_dip: трассировка луча воспроизводит -acos(R / (R + a)) до 1e-3 град при каждом азимуте; a_cone_on_a_lat_lon_tile_matches_the_analytic_cone: тот же конус, снятый на плитку широта/долгота в 0,005 град, согласуется с аналитическим конусом до 0,25 град; a_lat_lon_tile_is_none_outside_and_wraps_longitude; crater_in_plateau_matches_the_closed_form: кратер с плоским дном на сфере, наблюдатель в центре и в 4 км и 7 км от него, относительно замкнутой формы возвышения кромки atan2((R + H) cos s - (R + a), (R + H) sin s), где s из сферического уравнения пересечения кромки, до 0,01 град при каждом азимуте; rasterised_cone_matches_the_analytic_cone: конус, растеризованный на полярную стереографическую сетку 200 м и считанный через сэмплер сетки, согласуется с аналитическим конусом до 0,25 град; projection_round_trips_through_the_rasteriser_layout; bilinear_reproduces_a_plane_exactly; stated_horizon_goes_through_the_skyline_rules; an_empty_skyline_is_exactly_the_flat_test); tests/lunar_station_terrain.rs (without_terrain_the_document_has_no_terrain_keys; a_zero_horizon_under_a_positive_mask_is_the_flat_run, для обоих видов; a_horizon_only_removes_satellites_and_a_wall_removes_everything: user_lt4 сохраняет своё плоское число, а эпохи, которые стоит горизонт, — это terrain_masked (сама доступность может вырасти, потому что горизонт может скрыть спутник, которого станция не видит), а горизонт 89 град на станции не оставляет ничего доступного; bad_terrain_sections_are_refused; the_vendored_crop_loads_and_is_oriented_as_the_source: днища кратеров Шеклтон и Хауорт низкие, массив Малаперт высокий, зеркальное отражение — нет; the_station_site_horizon_from_the_crop; service_volume_dem_points_outside_the_crop_keep_the_flat_mask; a_lat_lon_dem_tile_gives_the_station_the_crop_horizon: плитка, пересэмплированная из включённого фрагмента, даёт станции горизонт фрагмента до 0,22 град (граница 0,5 град, заданная до прогона), с эхом плитки и единицами, а dem_path вместе с dem_tile_path отклоняется; the_export_site_is_masked_by_the_terrain: каждая строка экспорта проходит рельеф ровно тогда, когда она видна и находится на уровне горизонта площадки по своему азимуту или выше, геометрия не смещается, а CSV получает столбец только с рельефом; the_horizon_matches_the_preregistered_numpy_ray_cast); tests/prediction_frozen.rs, а также реестр и кросс-платформенные эталонные значения без изменений (аддитивность) | Поверхности в замкнутой форме (InternalConsistency): понижение горизонта голой сферы, кратер на плато на сфере с наблюдателем в центре и вне его, а также аналитический конус относительно его собственной растеризации. На реальном фрагменте независимая трассировка лучей на numpy (scripts/gen_lunar_terrain_ref.py, numpy 2.5.3; предварительно зарегистрирована в tests/fixtures/lunar_terrain/PREREGISTRATION.md, зафиксирована отдельно в edbb9b02 до появления скрипта) согласуется на пяти площадках: высоты площадок с точностью 1.0e-11 м и все 1800 углов возвышения горизонта с точностью 5.5e-10 град при порогах 1e-6, числа усечённых лучей совпадают точно; это проверяет арифметику, а не рельеф. Ни одно опубликованное значение полярного горизонта или освещённости не воспроизведено: включённый фрагмент 1200 м сглаживает рельеф масштаба меньше километра, который разрешают опубликованные исследования освещённости, поэтому горизонты ЦМР — это линия визирования MODELLED над передискретизированной реальной ЦМР, а не проверенный горизонт. Площадка станции и орбитальная группировка остаются ILLUSTRATIVE; ничто здесь не является заявлением о какой-либо реальной системе | MODELLED |
| VM-aa6de9e6 | Многолучевость и аппаратные члены приёмника лунной опорной станции | Необязательный раздел [receiver] вида lunar-station-coverage (LRS-02): зависящая от угла места сигма многолучевости sigma(el) = a + b exp(-el / el0) у пользователя и на станции (функциональная форма RTCA DO-229 для воздушных судов, её a = 0,13 м, b = 0,53 м, el0 = 10 град по умолчанию; на Луне любое значение ILLUSTRATIVE), белая у пользователя и марковская первого порядка Гаусса по эпохам на станции (rho = exp(-dt / tau)); тепловой шум кода DLL по разности опережающего и запаздывающего sigma = L_c sqrt(B_L d / (2 C/N0) (1 + 2 / ((2 - d) T C/N0))); межканальные смещения по каналам, постоянные в течение испытания, у пользователя и на станции. Члены станции входят в её поправки, члены пользователя — в необработанные и скорректированные измерения, каждый на собственном потоке с начальным значением. При отсутствии каждый документ не меняется | lunar_receiver; lunar_station | lunar_receiver::tests (multipath_is_the_do229_form; dll_noise_matches_a_hand_computation: 0,825279 м при 45 дБ-Гц, 0,5 Гц, d = 1, 20 мс; bad_sections_are_refused); tests/lunar_station_ext.rs (receiver_absent_or_silent_is_the_plain_run; zero_baseline_multipath_is_the_difference_of_two_receivers: выборочная сигма sqrt(2) a в пределах 6 %; station_multipath_is_gauss_markov: корреляция лага 1 exp(-dt / tau) в пределах 0,01, единичная дисперсия в пределах 2 %; inter_channel_biases_are_constant_over_a_trial); tests/prediction_frozen.rs и эталонные значения без изменений (аддитивность) | Замкнутые формулы и статистика собственных выборок модели (InternalConsistency): формула DLL относительно ручного расчёта, форма DO-229, разность двух приёмников при нулевой базе, корреляция Гаусса — Маркова на лаге 1. Измерений лунной многолучевости или приёмника, с которыми можно было бы сравнить, не существует; значения ILLUSTRATIVE, и ничто здесь не является заявлением о каком-либо реальном приёмнике | MODELLED |
| VM-2c796f73 | Рост ошибки эфемерид лунной опорной станции за время задержки поправки | Необязательный вход orbit_err_growth_m_per_s вида lunar-station-coverage (LRS-03): поправка, применённая через latency_s после вычисления, упускает рост g latency_s ошибки вещательной орбиты, где g изотропно с 3-D среднеквадратичной скоростью, выбирается для каждого спутника и испытания на собственном потоке с начальным значением (1-сигма скорость по дальности tau / sqrt(3)), сверх повторной проекции замороженной ошибки на линию визирования. При отсутствии каждый документ не меняется. Дополнение K5 к сравнению с опубликованными утверждениями, предварительно зарегистрированное отдельно, запускает K5 при 0,001, 0,01 и 0,1 м/с (ILLUSTRATIVE) | lunar_station (orbit_growth_range_sigma_m) | tests/lunar_station_ext.rs (growth_absent_or_zero_is_the_frozen_error_run; the_growth_term_has_the_closed_form_sigma: разность ошибки линии с ростом и без роста имеет выборочную сигму rate tau / sqrt(3) в пределах 6 % по 1600 выборкам; linear_growth_is_the_first_order_propagated_error: ошибка скорости dv, распространённая внутренним двухтельным интегратором от орбиты сценария, смещает положение на dv tau в пределах 1 % при 60 с и 600 с); tests/lunar_station_published_oracle.rs::k5_growth_addendum_run (игнорируется, записанное дополнение) | Замкнутая сигма члена роста и проверка распространения первого порядка (InternalConsistency). Дополнение K5 (tests/fixtures/lunar_station_published/ADDENDUM-LRS03.md, предварительно зарегистрировано отдельно в 59d88248): K5 не выполняется при каждой скорости, скорректированное p95 3-D 369,8 м, 2315 м и 22797 м против порога 1,5 м (292,96 м записано без роста), как заявлено до прогона. Ни один публичный источник не даёт скорости роста для Луны: ILLUSTRATIVE | MODELLED |
| VM-bc66e5ef | Режимы решения лунной опорной станции: ограничение по высоте, три спутника, окно для неподвижного пользователя | Необязательный раздел [solution] вида lunar-station-coverage (LRS-06): строка псевдоизмерения высоты up . dx = e_h с заданной 1-сигмой, взвешенная относительно строк дальности, минимум в три спутника, допускаемый только вместе с ней, и решение взвешенным методом наименьших квадратов по последним window_epochs эпохам с общим неподвижным положением и одними часами на эпоху (ответ фильтра для неподвижного положения без шума процесса по тем же данным; ошибки эпох считаются независимыми). При отсутствии мгновенное решение и каждый документ не меняются. Дополнение к сравнению с опубликованными утверждениями в стиле решения источников, предварительно зарегистрированное отдельно | lunar_solution; lunar_station (solution_figures) | lunar_solution::tests (one_epoch_without_height_is_the_snapshot_solve: равно lunar_dpnt::position_error_vector_from_range_errors до 1e-8 м, слабая строка высоты ничего не меняет, жёсткая фиксирует ошибку по высоте; three_satellites_need_the_height_row; a_window_shares_the_position; bad_sections_are_refused); tests/lunar_station_ext.rs (the_default_solution_mode_is_the_snapshot_solve: каждая величина до 1e-6 относительно; height_aiding_and_a_window_do_what_they_say); tests/lunar_station_published_oracle.rs::solution_style_addendum_run (игнорируется, записанное дополнение) | Редукция мгновенного решения и замкнутые случаи решателя (InternalConsistency). Дополнение (tests/fixtures/lunar_station_published/ADDENDUM-LRS06.md, предварительно зарегистрировано отдельно в 001ca100) с ограничением по высоте 1 м, тремя спутниками и окном в 6 эпох (ILLUSTRATIVE настройки; источники указывают фильтр, ограничение по высоте и три спутника, но не их настройки): K1–K5 не выполняются, K6 выполняется, 1 из 6 как в записанном прогоне; скорректированная ошибка 3-D по p95 для R300 падает с 280,6 м до 2,11 м (горизонтальная 0,90 м, не оценивается), а охват остаётся 0. Предположение окна о независимости играет в его пользу. Это не заявление о какой-либо реальной системе | MODELLED |
| VM-315f29f2 | Точность и охват лунной опорной станции по сравнению с опубликованными утверждениями | Вид lunar-station-coverage, запущенный при открытых предположениях опубликованных материалов о лунной дифференциальной опорной станции (четыре навигационных спутника на замороженных эллиптических орбитах с периодом 24 ч, SISE 10 м 95 %, шум кода 0,30 м, задержка поправки 1 с и 600 с, привязка станции с субдециметровой точностью, опубликованная примерная площадка станции, южнополярные окружности 300 км и 600 км) и оценённый по числовым утверждениям источников по шести односторонним порогам, предварительно зарегистрированным до прогона: охват всего южного полюса при субметровом p95 (K1, K2), субметровое и дециметровое скорректированное p95 (K3, K4), субметровое значение, сохраняемое при задержке 600 с (K5), и точность, сохраняемая при базе от 10 км до 500 км (K6) | lunar_station (over lunar_dpnt, lunar_service) | tests/lunar_station_published_oracle.rs::recorded_finding_one_of_six_bars_passes (записанные величины относительно зарегистрированных порогов); tests/lunar_station_published_oracle.rs::published_claims_comparison_run (игнорируется, около 7 с в режиме release: повторно запускает шесть зарегистрированных случаев и проверяет записанные величины) | Эталон: числовые утверждения пяти открытых источников, зарегистрированные с URL, датой получения, SHA-256 и лицензией в tests/fixtures/lunar_station/SOURCES.md (arXiv:2602.08432v3; слайды IOAG Cislunar PNT Workshop 2025 и 2026; UNOOSA ICG WG-B Lunar PNT, июнь 2024), переписаны со ссылками на страницы в tests/fixtures/lunar_station_published/CLAIMS.md. Пороги, случаи и входные данные были предварительно зарегистрированы в tests/fixtures/lunar_station_published/PREREGISTRATION.md (редакция 2, 05bf9a19, зафиксирована отдельно до прогона). Первый прогон 0,36, результат-находка (остаётся MODELLED): проходит 1 из 6 порогов. Охват равен 0,00 на обеих окружностях при требовании >= 0,95, а скорректированная ошибка 3-D по p95 равна 280,6 м (300 км) и 293,0 м при задержке 600 с, против <= 1,5 м. Дециметровый порог (K4) не мог быть пройден при шуме кода источников 0,30 м, что отражает противоречие между источниками, а не результат модели. K6 выполняется (отношение 1,39 при <= 1,5), но, будучи отношением двух величин, определяемых геометрией, не служит свидетельством о декорреляции ни в одну сторону. Причина: элементы орбит спутников не опубликованы, а на ILLUSTRATIVE элементах из дерева пользователь и станция имеют общие четыре спутника выше 5 град лишь в 8,2 % (300 км) и 6,3 % (600 км) эпох, при почти вырожденной геометрии (нескорректированное p95 3,8 км против < 10 м у источников). В моделированиях источников использовались фильтр, ограничение по высоте и три спутника в общей видимости, чего мгновенный вид не моделирует. Поэтому сравнение не подтверждает и не опровергает опубликованное утверждение «субметровая точность на всём южном полюсе». Оно показывает, что результат этой модели зависит от орбит, которые не опубликованы. Это не заявление о какой-либо реальной системе; не связано с каким-либо ведомством и не одобрено им | MODELLED |
| VM-dc6ee511 | Ядро уровня защиты ARAIM для Луны | Шаг от геометрии к ковариации для лунного уровня защиты — (GᵀG)⁻¹ по геометрии со всеми видимыми спутниками и по каждой подгеометрии с одиночной неисправностью, с проекцией на местную вертикаль и следом горизонтального блока — и его статистическое ядро: множитель детектора Бонферрони, гауссов верхний хвост каждой гипотезы неисправности и решение корня, отображающее бюджет риска целостности на уровень защиты, на лунном объёме обслуживания из 7 точек | lunar_service (lunar_protection_level, lunar_protection_level_with_sigma), lunar (lunar_araim_with_sigma), raim (araim_raim) | tests/lunar_protection_level_reference.rs (7 случаев объёма обслуживания — южно-полярный, средних широт, экваториальный, приподнятое нагорье — от 6 до 19 спутников, σ_URE 10/30/60 m, P_HMI от 1e-3 до 1e-7, уровни защиты от 1.7e2 до 6.9e3 m: HPL/VPL в сравнении с составным оракулом RTKLIB + SciPy, наихудшие |Δ| 1.061e-8 m и 1.044e-8 m при допуске 1e-6 m; DOP в сравнении с собственной (GᵀG)⁻¹ RTKLIB с относительной точностью 1.790e-14; K_fa в сравнении со scipy.stats.norm.isf с относительной точностью 2.716e-11; три отрицательных контроля — сдвиг спутника на 5 km, относительное изменение σ_URE на 1e-6 и более жёсткий на 0,1 % P_HMI — каждый, по измерениям, сдвигает уровень защиты не менее чем в 171× допуска; и защита от устаревшей фикстуры, побитово закрепляющая зафиксированную геометрию за тем, что выдают собственные код орбитальной группировки и код видимости движка, так что зелёный результат не переживёт изменение орбитальной группировки под ним) | Объединены две признанные сторонние реализации, обе запускаются офлайн, эталонные данные заново сгенерированы сквозным образом и проверены на побайтовое совпадение. RTKLIB 2.4.2-p13 (Т. Такасу, BSD-2-Clause), коммит 71db0ff, src/rtkcmn.c, скомпилированный из исходного кода C с -ULAPACK: lsq() → matinv() → ludcmp()/lubksb() обращает нормальную матрицу LU-разложением Краута с частичным выбором ведущего элемента, алгоритмом, не связанным с написанным вручную обращением Гаусса — Жордана invert4() в kshana; numpy.linalg.inv (LAPACK getrf/getri) заново обращает каждую как третье независимое обращение, согласуясь с RTKLIB с относительной точностью 1.112e-12. SciPy 1.17.0 / NumPy 2.4.1 (BSD-3-Clause) предоставляют norm.isf, norm.sf (Cephes ndtri/ndtr) и optimize.brentq — против ряда неполной гамма-функции Numerical Recipes, обратной функции по бисекции и 200-шаговой бисекции в kshana; при этом прямая sf в SciPy — иной численный путь в дальний хвост, чем 1 − Φ в kshana, поэтому сокращение в глубоком хвосте измеряется, а не повторяется. Вертикальная ось — радиальный единичный вектор (определение местной вертикали на сферической Луне), а горизонтальная дисперсия — след горизонтального блока, так что соглашение об азимуте восток/север не является общим. ЭТОЙ СТРОКОЙ ЯВНО НЕ VALIDATED: σ_URE, априорная вероятность неисправности по спутнику и иллюстративная орбитальная группировка класса Moonlight/LCNS — входные данные MODELLED, переданные оракулу как есть; а ФОРМА уравнения целостности MHSS для одиночной неисправности переписана из той же опубликованной границы, которую реализует kshana, — общая замкнутая формула есть общее предположение, поэтому эта строка охватывает неверное вычисление этого уравнения, а не неверный его выбор. Ни одна сторонняя реализация ARAIM MHSS недоступна (RTKLIB не имеет точки входа для уровня защиты, такого дистрибутива в PyPI нет, Stanford MAAST написан на MATLAB), что остаётся предстоящим улучшением | VALIDATED |
| VM-b4123360 | Уровни защиты ARAIM MHSS относительно опубликованных эталонных векторов | Само уравнение уровня защиты по разделению решений при множественных гипотезах: взвешенный метод наименьших квадратов по всем видимым спутникам и по режиму каждой неисправности на геометрии восток/север/вверх с одним состоянием часов на орбитальную группировку, сигмы подрешений, сигмы разделения решений и односторонние проекции номинального смещения, пороги Бонферрони K_fa, распределение риска неконтролируемой неисправности и VPL/HPL, решающие уравнение риска целостности. Запускается как вид сценария araim-reference-check |
araim_reference (araim_reference_protection_levels, published_vectors), raim (araim_protection_level, araim_integrity_risk, normal_quantile) | tests/araim_reference_vectors.rs (2 опубликованных вектора + 6 отрицательных контролей, фикстура tests/fixtures/araim_reference/wgc_araim_reference_vectors.txt: отказ от номинального смещения промахивается мимо опубликованного VPL на 2,6457 m, ошибка ISM в 10 % — на 0,2798 m, K_fa при 57 режимах вместо 12 — на 0,4015 m, ошибка дисперсии целостности +2 %/+5 % — на 0.0750/0.1971 m, а ошибка +1 % сдвигает его лишь на 0,0339 m, что указано как предел разрешения проверки, а не скрыто; ответы двух документов каждый промахивается мимо ответа другого более чем на допуск, поэтому векторы не взаимозаменяемы; зафиксированная фикстура и скомпилированные константы — две независимые транскрипции, совпадение которых утверждается, так что опубликованное значение нельзя отредактировать с одной стороны, чтобы проверка прошла; а C_int − C_acc = σ²_URA − σ²_URE = 0,3125 m² выполняется для всех 40 транскрибированных дисперсий, это арифметическое тождество, которое нарушила бы опечатка при транскрипции) | Рабочая группа C ЕС и США, Техническая подгруппа ARAIM, Reference Airborne Algorithm Description Document v3.1 (20 июня 2019), приложение D, разобранный числовой пример — опубликованные ВХОДНЫЕ ДАННЫЕ (геометрическая матрица для 10 спутников и 2 орбитальных группировок, диагонали C_int/C_acc, b_nom, P_sat, P_const, константы LPV-200) и опубликованные ВЫХОДНЫЕ ДАННЫЕ (VPL 18,3 м, HPL 13,45 м, EMT 7,2998 м, σ_v_acc 1,3694 м, K_fa_3 5,1083 и шесть промежуточных величин неисправности орбитальной группировки), получено 2026-09-20, SHA-256 источника 7f42934488c5c2261363439fabd48385e39526df34d514f395e22b6990b6bdb7. Совпадение при СОБСТВЕННОМ заявленном допуске эталона TOL_PL = 5e-2 м: VPL 0,0074 м, HPL 0,0437 м; EMT и σ_v_acc — до их напечатанной точности. Отчёт Milestone 3 той же подгруппы (2016), приложение A, §A.IX излагает тот же пример, но внутренне противоречив: опечатка в знаке в строке 3 матрицы G (+0,7477 там, где документ 2019 печатает −0,7477; при плюсе собственное σ_v_acc документа получается 0,8690 м против опубликованного 1,47 м), и K_fa_3 вычислен для 57 режимов неисправности, тогда как документ задаёт N_fault_max = 1, то есть 12, поэтому его EMT следует порогу для 57 режимов, а VPL/HPL — нет. Ни одна соответствующая реализация не может воспроизвести все его выходные данные одновременно. Его геометрические промежуточные величины воспроизводятся точно, а его уровни защиты записаны как измеренные расхождения (VPL 0,0171 м, HPL 0,0842 м, EMT 0,4806 м), исключены из показателя приёмки; допуск не расширялся, чтобы их поглотить. ОБЛАСТЬ ПРИМЕНЕНИЯ: только N_fault_max = 1 — подмножества с несколькими событиями отклоняются, а не усекаются, а исключение, проверка согласованности по хи-квадрат и шаг повторного распределения при двойном учёте остаются MODELLED | VALIDATED |
| VM-23634551 | ARAIM с одновременными гипотезами неисправности нескольких спутников | araim_reference::add_v42_subset_plan: правило определения подмножеств ADD v4.2 (P_THRES, FC_THRES, контролируемые подмножества с наименьшим числом исключённых — первыми), обобщённое с пар на одновременные сочетания до max_order событий спутников и орбитальных группировок, с точным априорным значением P_no fault prod q_e; add_v42_protection_levels_to_order запускает на нём путь уровней защиты ADD v4.2 (порядок 2 — в точности существующий путь). raim::araim_subset_raim (по желанию): расширенный RAIM по этому набору гипотез, каждое контролируемое подмножество — один режим (p_fault, T, b, sigma) в сумме риска целостности, ненаблюдаемые подмножества переносятся в неконтролируемый риск, бюджет масштабируется по распределению ADD неконтролируемого риска, а при обнаружении неисправности сообщается подмножество с наибольшим нормированным разделением. Априорные значения, требующие более глубоких подмножеств, чем max_order, отклоняются, а не усекаются | araim_reference (add_v42_subset_plan, add_v42_protection_levels_to_order); raim (araim_subset_raim, SubsetRule) | tests/raim_multi_sv_subsets.rs (deeper_orders_change_nothing_when_pairs_suffice; triples_are_refused_at_order_two_and_planned_deeper: N_fault,max >= 3, неконтролируемый риск в пределах P_THRES, подмножество, исключающее три или более спутника, контролируется, а более десяти контролируемых априорных вероятностей независимо выведены заново как P_no fault q^k с точностью 1e-12; a_two_satellite_fault_is_found_as_a_pair: без тревоги при отсутствии отказа, а смещение 30 м на двух спутниках обнаруживается с парой как подмножеством наибольшего нормированного разделения); tests/araim_reference_vectors.rs и tests/integrity_araim_stanford_oracle.rs без изменений (путь порядка 2 — это проверенный по MAAST) | Внутренняя согласованность (InternalConsistency): сведение порядка 2 к пути ADD v4.2, проверенному MAAST, независимый повторный вывод априорных значений и построенная неисправность двух спутников. Прогонов MAAST или RTKLIB для сочетаний сверх пар не проводилось, поэтому более глубокие наборы гипотез и уровни защиты RAIM подмножеств внешне не проверены. araim_subset_raim разделяет упрощения araim_dual_raim (одна сигма для целостности и точности, одни часы, простой нормальный хвост): он не соответствует ADD | MODELLED |
| VM-f6b7e282 | RAIM рядом с показателями качества holdover часов | Необязательный раздел [integrity] вида clock (clock_integrity::run): по заданной площадке и предустановкам орбитальных группировок (geometry::sky_geometry), на каждой эпохе целостности, пока временная шкала GNSS не подавлена, мгновенный RAIM (raim::snapshot_raim: проверка по хи-квадрат для чётности, уровни защиты по наклону) по спутникам выше маски с гауссовыми невязками с начальным значением и заданной сигмой и необязательным заданным смещением; отдельный блок integrity_fom с вердиктами по эпохам, уровнями защиты и доступностью. Эпохи с подавлением сообщаются как недоступные, а не экстраполируются; показатели качества holdover не меняются, а без раздела выход побайтово идентичен | clock_integrity (run, sky_at, IntegrityCfg); scenario (Scenario::integrity); report (RunResult::integrity_fom); api (clock dispatch) | tests/clock_integrity.rs (the_block_is_separate_and_absent_by_default: величины holdover не меняются, 111 эпох отказа недоступны без уровня защиты, отклонено при runs > 1; protection_levels_are_the_snapshot_raims_on_the_same_sky: HPL и VPL каждой выбранной эпохи в точности равны snapshot_raim с нулевой невязкой на том же заданном небе, а прогон без отказа не вызывает тревоги; a_stated_bias_is_detected_while_it_lasts: смещение 60 м вызывает тревогу ровно на 10 эпохах, которые оно охватывает; every_integrity_field_has_a_unit); clock_integrity::tests; эталонные значения часов без изменений | Внутренняя согласованность (InternalConsistency): уровни защиты — это уровни snapshot_raim, который проверен по RTKLIB в собственной строке, пересчитанные на той же геометрии; поведение без неисправностей и с внесёнными неисправностями. Небо — репрезентативная предустановленная геометрия (а не датированный альманах), невязки синтетические, а сигма, пределы тревоги и вероятности — заданные входные данные; ничто здесь не является заявлением о доступности реального приёмника | MODELLED |
| VM-313f2545 | Пространственная, зашумлённая наблюдаемость длины дуги для нескольких семейств в цислунном пространстве | Порог наблюдаемости по длине дуги в цислунном пространстве в ПРОСТРАНСТВЕННОЙ шестисостоятельной CR3BP, а не в плоской четырёхсостоятельной, для семейств DRO, гало L2 и почти прямолинейных гало L2, с шумом измерений, входящим в грамиан, и с приведением ДВУХ критериев, так как единственного честного нет: опубликованного критерия ранга, который доказуемо инвариантен к гомоскедастической сигме измерений (отбеливание умножает матрицу наблюдаемости на скаляр, оставляя относительный спектр сингулярных чисел, а значит ранг, дефект и обусловленность неизменными), и критерия оцениваемости — первой дуги, на которой формальная неопределённость положения 1σ начального состояния ведущего аппарата падает ниже заданной границы, — единственного, который действительно меняется с шумом. Каждый порог сопровождается скобкой сетки эпох, в которой он лежит; недостигнутый критерий равен null с указанием причины. Плоский режим остаётся режимом по умолчанию, а семейства вне плоскости в нём отклоняются, а не сплющиваются в состояние, которое не может их представить | cislunar_observability, observability_gramian, intersat_range, cislunar_srif | cislunar_observability::tests и observability_gramian::tests (документ по умолчанию зафиксирован бит в бит через FNV-1a его JSON, сводки и SVG, причём значения по умолчанию, заданные явно, как проверено, ничего не меняют, а восемь ключей расширения, как проверено, ОТСУТСТВУЮТ, чтобы снимок нельзя было заново сгенерировать в сравнение с самим собой; аддитивный блок units исключён из заморозки тем, что он вырезается, а остаток заново хешируется относительно константы, зафиксированной до его появления, что доказывает, а не предполагает, что ничего выпущенного не сдвинулось; инвариантность ранга при гомоскедастической сигме проверена при σ = 0, 0,1, 1, 10, 100 м; σ_pos, как проверено, масштабируется строго линейно с σ до 1e-6 относительно; нулевое пространство DRO, как проверено, — это в точности координатные оси z и ż с разделением двух причин — строка дальности между компланарными космическими аппаратами имеет û_z = 0, а внеплоскостной блок CR3BP точно развязывается при z = 0; пространственные якобианы относительно центральных конечных разностей и относительно независимой 3-D наблюдаемой скорости изменения дальности крейта; внеплоскостные семейства отклоняются в плоском режиме) |
Независимый ранг по строчно-ступенчатой форме методом исключения Гаусса с частичным выбором ведущего элемента подтверждает каждый вердикт о ранге в шестисостоятельном случае — другой алгоритм, не разделяющий кода с проверяемым путём через собственные значения/SVD. Матрица перехода состояния CR3BP размера 6×6, которую она использует, несёт собственный оракул ReferenceImpl относительно вариационного интегрирования SciPy, а начальные условия для гало/NRHO берутся из корректора, воспроизводящего опубликованную южную орбиту Gateway L2 9:2. Существующая ветвь фильтра информации с квадратным корнем явно НЕ засчитывается как подтверждение: она использует те же якобианы и сводится к той же нормальной матрице, поэтому это проверка согласованности между двумя численными механизмами, и выдаваемая метка расширения говорит об этом. НЕ привязана к внешнему эталону, и потому ExternalDataset отклонён, а не заимствован из строки STM: сами пороговые длины дуг зависят от конструкции орбитальной группировки MODELLED, сетки эпох и — измеримо, до 40 раз — от допуска на сингулярные числа. Опубликованное плоское значение 2,09 ч точно воспроизводится при rel_tol = 1e-6 и само зависит от допуска (10,25 ч при 1e-4, 0,42 ч при 1e-8), что является свойством критерия, а не орбиты. Ни один публичный набор данных не публикует порог наблюдаемости по длине дуги для выбранной цислунной орбитальной группировки. MEASURED РЕЗУЛЬТАТ: пространственный шестисостоятельный порог равен 22,17 ч для NRHO L2 и 40,42 ч для гало L2 и НЕ СУЩЕСТВУЕТ для плоского семейства DRO, на котором выводилось опубликованное утверждение, — ранг 4 из 6 с дефектом датума 2 и двумя строго нулевыми собственными значениями, структурный дефект, который не устраняется никакой длиной дуги | MODELLED |
| VM-9ab85050 | Ошибка прогноза ориентации Земли в операционном стиле, измеренная как «прогноз против окончательных значений» | Подгонка методом наименьших квадратов смещения и скорости по замыкающему окну плюс основные периодические члены — годовой, полугодовой и два основных зональных прилива для UT1; Чандлеровский, годовой и полугодовой для полюса — с экстраполяцией и переносом вперёд последней невязки в окне: класс, который использует Bulletin A IERS, вместо предсказателя постоянства, на котором основывался опубликованный горизонт. Оценка единственным честным способом: прогноз на T+h, построенный по оперативным строкам Bulletin A на момент T или ранее, измеряется относительно окончательного значения Bulletin B, ОПУБЛИКОВАННОГО ПОЗЖЕ, на T+h, а рядом оценивается постоянство на том же наборе эпох относительно тех же окончательных значений. Целевая эпоха без опубликованного окончательного значения отбрасывается, а не переоценивается по оперативному столбцу; периодический член, который окно не может ограничить, сообщается как отвергнутый с указанием циклов, которые окно реально охватывает; неполное окно отклоняется, а не молча сокращается | frame_eop, realtime_frame_eop | frame_eop::tests, realtime_frame_eop::tests и tests/operational_eop_predictor_reference.rs (восстановление коэффициентов аналитического сигнала до 1e-9 при 365-суточном окне; подгонка смещения плюс скорости, равная замкнутому наклону и сдвигу обычных наименьших квадратов до 1e-12 на реальных строках; ДВА детектора заглядывания вперёд, которые портят быстрые столбцы UT1 и полюса каждой строки после эпохи выпуска — оставляя итоговые значения Bulletin B нетронутыми — и требуют побитово идентичного выхода, проверено мутацией: 10 тестов становятся красными при ослаблении барьера подгонки ровно на одни сутки; независимо перестроенный список эпох; блок Bulletin B цели обнуляется, и показано, что эпоха покидает таблицу; допуск членов проверен при окнах 6, 15, 150 и 365 суток; монотонные счётчики строк; и замороженный снимок отчёта по умолчанию до изменения, проверяемый поле в поле без допуска, который дополнительно проверяет, что снимок не содержит новых ключей, чтобы его нельзя было молча заново сгенерировать в сравнение с самим собой); tests/operational_eop_predictor_bulletin_a_oracle.rs::predictor_mae_against_bulletin_a_and_the_pcc_range_finding; tests/operational_eop_ls_ar_bulletin_a_oracle.rs::ls_ar_predictor_against_bulletin_a_finding; tests/eop_prediction_beyond_table.rs (необязательное расширение EopSeries::with_ls_ar_prediction за последней строкой: ответы внутри таблицы побитово идентичны, строки прогноза равны ls_ar_predict, аргументы системы отсчёта за таблицей следуют прогнозу, а не обрезаются; внутренняя согласованность) | Три независимых пути, ни один из которых не является опубликованным показателем точности прогноза. (1) Аналитический сигнал с известными коэффициентами — единственный способ задействовать периодический механизм, так как ни один из зафиксированных рядов не достаточно длинен, чтобы допустить годовой член. (2) Учебниковое решение методом наименьших квадратов в замкнутой форме, иная алгебра, чем у проверяемого матричного решения, на реальных строках. (3) Подлинные архивные строки прогноза Bulletin A, которые публикует реальный продукт 2026, сравниваемые по заблаговременности как статистика СОГЛАСИЯ и явно не как ошибка: 0,256 мс при 1 сут, 0,695 мс при 2 сут, 1,252 мс при 3 сут, с дрейфом до 3,885 мс при 9 сут. Поэтому это КЛАСС Bulletin A, близкий при малой заблаговременности, а не сам Bulletin A. Невязки «прогноз против окончательных значений» — реальные измеренные величины на реальных строках IERS, но их величина проверяется только по НАПРАВЛЕНИЮ сравнения, а не по опубликованной IERS цифре точности — чтение реального продукта есть происхождение данных, а не оракул. MEASURED: на 1-е сутки операционный предсказатель даёт ошибку в системе Луны 3,78 м против 11,39 м у постоянства (в 3,01 раза), на 2-е — 10,23 м против 21,72 м (в 2,12 раза), на 3-и — 20,33 м против 30,57 м (в 1,50 раза) — и он ХУЖЕ при заблаговременности более трёх суток (0,87 раза при 5 сут, 0,43 раза при 10), что отчёт выдаёт, а не показывает лишь горизонты, которые ему льстят. НЕ воспроизведены: авторегрессионный фильтр невязок и табличная редукция зональных приливов, 365-дневное операционное окно недостижимо при зафиксированных данных, и в этом репозитории НЕТ архивированной более ранней версии ряда, поэтому таблица архивных версий не содержит строк, а не оценивает синтезированную. Внешнее сравнение 0,30, результат-находка (остаётся MODELLED): при оценке относительно тех же окончательных значений по 178 архивным выпускам Bulletin A с окном крейта по умолчанию в 15 суток средняя абсолютная ошибка UT1 предсказателя в 2.4–12.6 раза больше, чем у Bulletin A, при 1–10 сут (порог 1.5 раза) и составляет 5,32 мс при 10 сут, вне диапазона 0,36–3,13 мс 2nd EOP PCC; для полюса — в 1.5–1.85 раза больше, чем у Bulletin A (в пределах 1.5 раза только при 6 и 7 сут); не выполняются 19 из 21 предварительно зарегистрированных условий. Исправление к пути (3): строки продукта 2026, с которыми проводилось сравнение, несут флаг IERS I (измерено), а не P, поэтому эти цифры согласия относятся к измеренным оперативным значениям, а не к прогнозам Bulletin A. Раунд 2 0,30, предсказатель по методу наименьших квадратов плюс авторегрессия с аналитически удалёнными зональными приливами, относительно 178 архивных выпусков Bulletin A при пороге раунда 1 (предварительно зарегистрировано c93605b4), результат-находка (остаётся MODELLED): выполняются 12 из 21 условий; средняя абсолютная ошибка UT1 составляет от 1,73 до 2.11 величины Bulletin A при 2–10 сут (порог 1.5 раза), тогда как полюс в пределах 1.27 раза при любой заблаговременности. Редакция 0,30: теперь, когда входные данные офлайн классифицируются по флагу IERS, цифры согласия пути (3) относятся к реальным прогнозам Bulletin A (0.256/0.695/1.252/3.885 мс при 1/2/3/9 сут против оперативных строк -> 0.133/0.421/0.839/2.786 мс) | MODELLED |
| VM-55f1a043 | Лунный датум системы координат по кампании наблюдений | Семипараметрический датум Гельмерта, полученный по СМОДЕЛИРОВАННОЙ КАМПАНИИ НАБЛЮДЕНИЙ, а не восстановленный по внесённому преобразованию. Земные станции наблюдают каталог маяков на лунной поверхности с указанными источниками по явному расписанию; частные производные задержки лунного РСДБ накапливаются в информационную матрицу Фишера координат маяков и преобразуются через схему Гельмерта A = [I₃ | [p]ₓ | p] в H = AᵀM_bA, так что сообщаемая точность датума является функцией программы наблюдений — строго линейной по сигме задержки и монотонной по дуге через либрацию, которую измеряет отчёт. Дефект датума является предметом, а не сноской: ранг, дефект, число обусловленности, спектр, ненаблюдаемые направления в семипараметрическом базисе, самое слабое направление даже при полном ранге и доля каждого параметра в нём выдаются при каждом прогоне, а любой параметр, не ограниченный кампанией, публикуется как NULL со статусом. Корреляция ошибок маяков MEASURED, а не предполагается — строго нулевая при зафиксированных станциях и печатается с её ценой, когда они оцениваются. Запускается как вид сценария lunar-frame-campaign |
lunar_frame_campaign (composing lunar_vlbi, lunar_vlbi_fim, fim, lunar, lunar_frame_realise, frames, cio, lunar_frame) | lunar_frame_campaign::tests (21 тест библиотеки: конструкция Гельмерта относительно центральной конечной разности от lunar_frame_realise::apply_helmert — модуля, ДЛЯ КОТОРОГО предназначен датум, который не вычисляет производной и поэтому фиксирует соглашение о знаке [p]ₓ — все 84 элемента конструкции согласуются до < 1e-6; чистый сдвиг сети, считанный обратно как чистый сдвиг с утечкой < 1e-6 в остальные шесть параметров; сигма датума строго линейна по сигме задержки до 1e-8 при 3-кратном изменении по всем семи параметрам; дуга 16 ч, как измерено, хуже, а дуга 48 ч, как измерено, лучше, чем 24 ч, причём выданный перебор по либрации упорядочен так же; наихудшая ось сдвига, как проверено, ЯВЛЯЕТСЯ доминирующей осью отдельно измеренного направления на Землю в системе, связанной с телом, и хуже остальных более чем в 5×, физический оракул, о котором ничего не сообщалось решателю; три коллинеарных маяка дают дефект, при котором каждая сигма датума равна NULL, а нулевые направления выдаются в базисе из семи параметров; offblock_fraction и межмаячная корреляция в точности 0,0 при зафиксированных станциях и обе > 0 при оцениваемых; величины с внесённым преобразованием в блоке сравнения показаны равными независимому прогону этого сценария до 1e-14 относительно, а не перенесёнными; защита от появления внесённого/восстановленного датума где-либо в документе; выдача реализации лунной системы координат зафиксирована побайтово FNV-1a-64 по json‖summary‖svg для трёх форм входных данных, отпечаток снят до начала работы); tests/lunar_vlbi_campaign_spice_oracle.rs::lunar_frame_campaign_finding_stations_estimated_p2_precision (с условием; строгий lunar_frame_campaign_matches_spice_geometry_and_numpy по-прежнему игнорируется); tests/lunar_frame_campaign_mpmath_oracle.rs::lunar_frame_campaign_datum_matches_mpmath_extended_precision (результат; решение основателя 2026-10-02, вариант A: эта строка остаётся MODELLED и не заимствует статус отдельной строки; относительно 50-значного оракула mpmath, предварительная регистрация 804662d5, сигмы датума движка при оцениваемых станциях находятся в пределах их априорной границы обратной ошибки, расхождение 9.7e-6 на 2024-01-01, а порог 1e-9 был ниже того, чего достигает любой путь двойной точности: лучший, проекция QR в NumPy, расходится на 5.5e-9; свидетельство подкрепляет отдельную строку «Lunar frame datum covariance with the stations estimated, against 50-digit extended precision»); tests/lunar_frame_campaign_pinv_fallback.rs::finding_step0_fresh_beacon_information_falls_back (зафиксирован); tests/lunar_frame_campaign_cond_bar_oracle.rs::finding_p2_condition_scaled_bar_not_met_on_the_estimated_scenarios (зафиксирован) | Тождества в замкнутой форме и независимый путь внутри репозитория, внешний оракул не заявляется. Схема Гельмерта — единственная новая производная в модуле — заново выводится центральной конечной разностью lunar_frame_realise::apply_helmert, путём, не разделяющим ни одного выражения с аналитической формой. Накопление, которое она использует, принадлежит lunar-vlbi-fim, чей якобиан там сравнивается конечными разностями с lunar_vlbi::vlbi_delay_s, а ядро линейной алгебры которого отдельно привязано к внешнему эталону numpy в tests/fim_observability_reference.rs — эта строка не заимствует ни тот, ни другой статус. Физический оракул структурный, а не численный: частная производная задержки по маяку — это ближнепольная РАЗНОСТЬ двух почти параллельных единичных векторов, поэтому хуже всего определяемым направлением сдвига ДОЛЖНО быть связанное с телом направление на Землю, и тест подтверждает вычисленный ответ по отдельно измеренному направлению. MEASURED: сигма сдвига по кампании 6,3975 м против ошибки восстановления 0,3125 м в сценарии с внесённым преобразованием (в 20,5 раза точнее), тогда как вращение и масштаб идут В ДРУГУЮ сторону — в 2,32 и 13,5 раза хуже: путь с внесением предполагает одну изотропную сигму и потому распределяет свою ошибку равномерно по семи параметрам, чего наблюдаемая задержка не делает. Ранг 7/7, но обусловленность 3.8e5, с одним направлением на 99,57 % чисто сдвиг в сторону Земли, в сорок раз хуже любого другого. ЧЕГО ЭТА СТРОКА НЕ ЗАЯВЛЯЕТ: что цифра по кампании верна в абсолютном выражении. Она устанавливает, что цифра теперь ВЫВОДИТСЯ из расписания, геометрии и модели ошибок, а не из подложенного ответа. Остаётся ReferenceImpl/MODELLED: опубликованной пары «кампания лунного РСДБ плюс ковариация датума» не существует, сеть станций и сигма задержки — ILLUSTRATIVE входные данные (каталог маяков имеет источник, кампания — нет), наблюдения считаются независимыми, тогда как тропосфера и часы реального сеанса коррелированы между близкими сканированиями, а эфемериды, часы, тропосфера и параметры ориентации Земли ЗАФИКСИРОВАНЫ. Внешнее сравнение 0,30, результат-находка (остаётся MODELLED): при перестроении каждой строки якобиана маяка по световым временам NAIF SPICE (DE440, ITRF93, MOON_ME; предварительно зарегистрировано 50863551) расписание, ранг Гельмерта, сигмы датума (в пределах 4.7e-3), обусловленность, самое слабое направление (0,07 град), развёртка либрации и порядок дуг совпадают на шести сценариях в пределах предварительно зарегистрированных 1 % / 0,2 / 0,05 град. NumPy на зафиксированном якобиане движка совпадает с точностью 3e-14 при зафиксированных станциях. При оцениваемых станциях различие составляет 6.8e-6 против предварительно зарегистрированного 1e-9, посылка которого об обусловленности оказалась неверной (обусловленность Гельмерта 2.1e8; независимые пути NumPy расходятся на 3e-6; вклад запасного варианта псевдообратной матрицы движка 1e-9 не исключён), поэтому строка не повышается на этой предварительной регистрации. Повторная регистрация 0,36 с порогом, масштабированным по обусловленности (предварительно зарегистрировано b887eb05; t = max(1e-12, 10 kappa 2^-53) по обусловленности совместной информации и её редукции Гельмерта), результат-находка (остаётся MODELLED, NOT MET): шаг 0 исключает запасной вариант псевдообратной матрицы как причину расхождения 6.8e-6 (ни одна матрица до матрицы Гельмерта не переходит на запасной вариант в шести исходных сценариях, наименьший запас — коэффициент 2,6), ветвь SPICE по-прежнему выполняется на всех шести, а NumPy совпадает в пределах порога на шести из восьми сценариев (по умолчанию, две дуги, сигма задержки 3x, коллинеарный дефект и новый прогон с зафиксированными станциями 2026-12-01; худший случай — 0,13 от порога). Он не выполняется на stations_estimated (сигмы датума до 6.8e-6, обусловленность 9.1e-6, норма с отброшенной независимостью 3.5e-6, при t = 5.9e-7), а на новой дате у маяка на южном полюсе нет наблюдений, поэтому информация о маяке имеет дефицит ранга (запасной вариант псевдообратной матрицы до матрицы Гельмерта в обоих новых сценариях), и неизменный оракул NumPy не может вычислить stations_estimated_fresh (вырожденная матрица). Результаты: docs/design/evidence/mr05-lunar-datum-cond/RESULTS.md | MODELLED |
| VM-ca139c50 | Подтверждение порога по длине дуги в цислунном пространстве независимым оценивателем | Пакетный оцениватель наименьших квадратов, который ВОССТАНАВЛИВАЕТ начальное состояние ведущего аппарата по смоделированным межспутниковым измерениям на растущих префиксах той же сетки эпох, которую использует таблица «ранг против дуги», с частными производными измерений, взятыми как центральные конечные разности составной прямой модели. Он не использует ничего из механизма, которым измерялся порог, — ни строки аналитического якобиана, ни вариационной матрицы перехода состояния, ни разложения по сингулярным числам или собственным значениям, ни допуска на ранг, ни фильтра информации с квадратным корнем — и разделяет лишь динамику, начальные условия, скалярную наблюдаемую и сетку эпох, каждая из которых названа в выдаваемом документе. Два критерия, оба развёрнуты: восстановление без шума (аналог ранга) и оцениваемость по Монте-Карло (аналог оцениваемости, измеренный относительно известной истины, а не предсказанный по ковариации). Запускается как вид сценария cislunar-arc-recovery |
cislunar_arc_recovery, batch_ls | cislunar_arc_recovery::tests и tests/cislunar_arc_recovery_reference.rs (обе границы и их отношения зафиксированы на опубликованной сетке; измеренная кривая ошибки сравнивается с формальной ковариацией построчно с границей в два раза по каждой строке и границей по геометрическому среднему; ОТРИЦАТЕЛЬНЫЙ КОНТРОЛЬ — плоское DRO с шестью состояниями — проверяет, что критерий МОЖЕТ не выполниться и что нерегуляризованный оценщик расходится за 1e6 км, а не возвращает правдоподобную малую ошибку; инвариантность к параметризации проверена на каждом префиксе до 1e-3 относительно; защита по исходному тексту, которая вырезает комментарии, строковые литералы и тестовый модуль и затем падает при любом упоминании якобиана, STM, ранга SVD или механизма SRIF, проверена мутацией внесением запрещённого вызова; проверка только в тестах, что конечные разности равны аналитическим строкам, так что линеаризация заведомо хороша, а аналитический путь в оценщике по-прежнему отсутствует; детерминированность проверена побайтово; выпущенный документ cislunar-observability зафиксирован по набору ключей, каноническому отпечатку и строке сводки) | Отдельный оцениватель в этой кодовой базе на другом алгоритме и непересекающемся пути кода: нелинейный взвешенный метод Гаусса — Ньютона с частными производными по конечным разностям, чей вердикт читается как измеренная ошибка восстановления состояния в км и мм/с. У него нет общих выражений с путём грамиана через ранг и ковариацию, а разделение ОБЕСПЕЧИВАЕТСЯ проверкой исходного текста, а не заявляется. MEASURED на опубликованной плоской сетке DRO: критерий ОЦЕНИВАЕМОСТИ CORROBORATED — измеренная граница Монте-Карло 5,739130 ч против формальной 5,739130 ч (отношение 1,0000), а измеренный RMS воспроизводит формальное 1σ на 21 длинах дуг с геометрическим средним отношением 0,9804. Критерий РАНГА NOT corroborated как граница восстанавливаемости: оцениватель восстанавливает с 0,782609 ч против 2,086957 ч у грамиана, отношение 0,375, а при 1,826087 ч — последнем префиксе, который чтение ранга оценивает в 3 из 4 — восстанавливает до 1.96e-5 от априорного смещения. Граница восстановления неподвижна на трёх десятичных порядках собственной границы, тогда как порог по рангу охватывает от «никогда» до 0,782609 ч на четырёх порядках rel_tol, и они совпадают точно при rel_tol = 1e-8. Этот диапазон сначала был записан как достигающий 0,260870 ч; эта цифра была АРТЕФАКТОМ, порождённым чтением ранга, которое насчитало 4 направления по 2 строкам измерений ниже уровня шума f64, и она исправлена здесь, а не оставлена. Чтение ранга теперь ограничено неравенством Сильвестра с выдачей причины, а исправленный диапазон насыщается точно на дуге, где независимый оцениватель восстанавливает, что усиливает перекрёстную проверку этой строки, а не ослабляет её: опубликованное значение 1e-6 — консервативное СОГЛАШЕНИЕ о сингулярных числах, а не утверждение о восстанавливаемости. Та же картина в пространстве: NRHO 9,290323 ч против 21,677419 ч, гало 22,978723 ч против 39,829787 ч, с точным согласием по оцениваемости в обоих случаях. Плоский шестисостоятельный DRO не восстанавливается ни на какой дуге, независимо воспроизводя структурный дефект датума этого семейства оценивателем, которому о нём ничего не сообщали. НЕ привязано к внешнему эталону — динамика и начальные условия общие с проверяемым анализом, и ни один публичный набор данных не публикует такой порог — поэтому ExternalDataset отклонён | MODELLED |
| VM-69906ae2 | Лунный объём обслуживания по реальной, полученной геометрии орбитальной группировки | Принимает табличную эфемериду состояний с центром в Луне (результат вычисления по ядру SPK/BSP) или опубликованное определение орбитальной группировки через ephemeris_path, выполняет по ней тот же перебор охвата / DOP / уровня защиты и выдаёт подразумеваемое им требование к точности дальности σ_URE РЯДОМ с неизменными иллюстративными кеплеровскими и возмущёнными результатами, а их разность — как отдельную именованную величину. Каждая цифра несёт класс происхождения, который отличает полученное из ядра от полученного из опубликованных элементов и от смоделированного, так что в последующем цитировании их нельзя спутать |
lunar_ephemeris, lunar_service | lunar_ephemeris::tests (разбор формата и системы отсчёта; интерполяция Лагранжа точна в узлах и на линейном треке вне узла; элементы ICRF проходят редукцию IAU 2015 и побайтово равны явному применению icrf_to_iau_moon; круговой обмен истинной↔средней аномалии относительно прямого решения Кеплера; искажённые файлы отклоняются с названной причиной). lunar_service::tests (при незаданном ephemeris_path набор ключей отчёта и SHA-256 зафиксированы; кеплерова строка равна самостоятельному кеплерову прогону поле в поле; тождество σ_required · HPL_max / σ_URE = AL, затем СКВОЗНОЙ повторный прогон при вычисленном требовании, достигающий 100 % доступности уровня защиты, и повторный прогон на 1 % выше него, не достигающий её; каждое выданное числовое поле обоих новых блоков пройдено по выданному JSON на предмет единицы и класса происхождения; зафиксированные образцы сопоставлены с таблицами источников спутник в спутник; горизонт за концом таблицы отклоняется); tests/lunar_service_requirement_orekit_oracle.rs::lncss_b_dense_finding_is_unchanged; tests/lunar_service_volume_orekit_oracle.rs::service_volume_matches_orekit_on_identical_ephemeris_and_grid |
ГЕОМЕТРИЯ внешняя и снабжена хешем: три набора эталонных данных, числа которых берутся только из документов, полученных с URL, датой получения и SHA-256, и воспроизводимых зафиксированными генераторами, которые проверяют хеш источника и ПРЕРЫВАЮТ работу, а не выдают число, — опорная орбитальная группировка демонстрации совместимости LANS (NASA NTRS 20250009447, SHA-256 d1b916be…), примеры LNCSS (NAVIGATION 70(4) navi.613, CC BY, SHA-256 4e294687…) и подлинные эфемериды летавших космических аппаратов LRO, Danuri, Chandrayaan-2 и CAPSTONE, вычисленные по собственным восстановленным ядрам JPL через Horizons. Публичного ядра орбитальной группировки лунной навигации НЕ существует — Moonlight/LCNS, LCRNS и LNSS не летают, и NAIF ничего для них не публикует, — и ничего не придумывалось. ВЫВЕДЕННОЕ требование к σ_URE НЕ имеет внешнего оракула (никто не публикует точность дальности, которой требует лунный HPL 50 м на этом объёме обслуживания), поэтому оно проверяется по собственному алгебраическому тождеству и независимо — повторным прогоном всего перебора при вычисленном требовании с подтверждением того, что доступность там переключается. MEASURED: опубликованному проекту из 8 спутников требуется σ_URE 2,9044 м при охвате 100 % против 0,3591 м при 37,85 % у иллюстративной орбитальной группировки — пересмотр опубликованного числа в 8,09 раза по правилу программы R4. Качественный вывод сохраняется (класс LNIS в 30 м по-прежнему не замыкает южнополярный HPL 50 м), но недостаток был преувеличен в восемь раз. Демонстрация LANS с 5 спутниками даёт НОЛЬ выборок уровня защиты — пять спутников не могут обеспечить шесть в видимости, нужные набору гипотез об одиночной неисправности, — и поле требования ОТСУТСТВУЕТ, а не выдумывается; то же для четырёх реальных космических аппаратов при охвате 0 %. InternalConsistency — честный вид: ВХОДНЫЕ данные внешние и снабжены хешем, но величина, о которой эта строка, проверена только относительно самой себя. Внешнее сравнение 0,30, результат-находка (остаётся MODELLED): относительно статистик примеров LNCSS из navi.613 на 346 узлах сетки 4 из 12 статистик доступности выходят за предварительно зарегистрированные 2 процентных пункта (случай A: -4.0, +22,5 и -3.6 п. п.; случай B: -12.1 п. п.). Вероятные причины: элементы прочитаны в неверной системе координат, двухтельная задача Кеплера на 15 суток против незаявленной модели сил в статье и сетка, не воспроизводимая по тексту. Половина по PDOP не могла быть оценена (LANS не печатает числовой статистики); тест сравнения зафиксирован и игнорируется. Раунд 2 0,30, результат-находка (остаётся MODELLED): относительно оракула Orekit 12,2 / Hipparchus 3,1, вычисляющего весь отчёт (распространение Orekit, видимость и DOP через DOPComputer, уровни защиты MHSS, составленные в Hipparchus, требование, решаемое для каждой выборки; предварительно зарегистрировано d3ce97b2), на всех пяти полученных геометриях и двух сетках 155 из 160 значений совпадают в пределах предварительно зарегистрированных порогов (2 п. п., 5 %, 1 %), включая требование sigma_URE для LNCSS A и C (3,879072208 м с обеих сторон для случая A) и отсутствующее требование для LANS и орбитальных аппаратов. LNCSS B на плотной сетке не проходит по статистикам худшей выборки (sigma_required 0,000923 против 0,001511 м, hpl_max 1.63e6 против 0.99e6 м), где почти вырожденные геометрии (PDOP около 1e6) усиливают согласие по положению на уровне метра; требование по p95 согласуется (1,6343 против 1,6357 м). Требование по худшей выборке некорректно поставлено на вырожденной геометрии. Относительно navi.613: 4 из 12 по-прежнему вне 2 п. п. (закреплено) | MODELLED |
| VM-30a97898 | Единица измерения и происхождение объявлены для каждой сообщаемой величины | Машиночитаемая схема, задающая единицу измерения, класс происхождения и определение для каждого числового поля каждого отчёта сценария, плюс единый глобальный контроль, который запускает каждый зарегистрированный вид сценария и завершается неудачей, если у выданного числового поля нет того или другого. Словарь происхождения закрыт, и каждый класс несёт уровень доказательств, причём два класса намеренно отображены на inherits-scenario-label и depends-on-input, а не получают уровень, которого класс не определяет |
field_schema | tests/field_units_global.rs (запускаются все 61 зарегистрированных видов, по одной форме документа на каждый: каждый числовой лист должен соответствовать записи в собственном блоке единиц этого документа; некорректная запись считается отсутствующей для КАЖДОГО вида, исключённого или нет, поэтому заглушка не даёт покрытия; список исключений не может превышать закреплённый потолок, перечисленный вид, оказавшийся полностью покрытым, ЗАВАЛИВАЕТ проверку, чтобы список нельзя было раздувать, а зарегистрированный вид, отсутствующий в таблице запуска, тоже её заваливает, чтобы новый пакет не мог проскользнуть неисследованным — что и произошло, поймав оба вида, добавленных после начала этой работы; односторонний храповик на накопленный список описанного, но неопределённого; и проверка актуальности закоммиченного документа схемы); field_schema::tests | Сам выдаваемый документ: каждый числовой лист должен разрешаться в запись в собственном блоке units этого документа. Внешнего реестра единиц, по которому можно было бы проверить ОБЪЯВЛЕННУЮ единицу, нет, поэтому объявленная единица — рецензированное утверждение, а не проверенное: контроль проверяет ПОЛНОТУ и КОРРЕКТНОСТЬ ФОРМЫ, а не истинность, и Validated было бы неверно, потому что ничто внешнее не подтверждает, что m — правильная единица для поля с именем _m. Независимая перекрёстная проверка по суффиксу имени была проведена по 1 434 полям, описанным В ТОТ МОМЕНТ: из 691 с суффиксом, несущим единицу, 40 расходятся с объявленной единицей, и все 40 объяснены (суффиксы «в секунду», минимумы, апертуро-секунды, ньютон-метры против суффикса, похожего на нанометр), поэтому неверной единицы не выявлено. Эта перекрёстная проверка с тех пор не повторялась, а охват вырос сверх неё — цифра оставлена такой, какой была реально измерена, а не пересчитана на текущий итог. На момент этого изменения (0.27.0) охват вырос с 7 из 56 видов до 60 из 61 и с 389 из 1354 полей до 1 742 из 1 744 (docs/field-units-schema.json, который поддерживается актуальным проверкой на устаревание). НЕ осталось ни одного непокрытого вида (потолок 0, FUT-28, 0,36): последним был sweep-nd, у которого два столбца задаются вызывающей стороной, поэтому их единицы — данные; теперь они описаны как mixed - see note, а единица каждого положения считывается из собственной таблицы единиц ПЕРЕБИРАЕМОГО пакета в key_units и metric_units (или берётся из объявленной unit оси, которая должна совпадать с единицей пакета, если существуют обе; null, если нет ни той, ни другой, — указано, а не угадано). cislunar-observability был предпоследним и сошёл со списка, когда его выпущенный документ получил блок units: закрепление аддитивности, которое называло units запрещённым ключом, теперь ДОКАЗЫВАЕТ, что добавление аддитивно, — уберите блок обратно, и документ по-прежнему даёт хеш, равный двум константам, зафиксированным до его появления, так что выпущенное значение, сдвинувшееся под добавлением, всё равно не пройдёт. Работа также выявила двенадцать дефектов единиц или документации в существующем коде, о которых сообщено, а не исправлено в рамках R1 |
MODELLED |
| VM-93ef37db | Лунный датум системы координат по РЕАЛЬНОЙ кампании наблюдений | Ковариация семипараметрического датума Гельмерта, у которой два смоделированных входа заменены измеренными: расписание — эпохи передачи с Земли 337 архивных нормальных точек лазерной локации Луны ILRS (с 2015-04-08 по 2015-06-27, Grasse MeO 7845 и Matera MLRO 7941, все пять решёток уголковых отражателей), а вес каждого наблюдения — собственная архивная точность этой точки bin_rms/√n_raw — медиана 5,13 мм односторонней дальности, считанная из файла. Координаты станций IERS ITRF2020, координаты отражателей JPL DE430, таблица 7. Запускается как вид сценария lunar-llr-datum. Проверенное утверждение (0,36) узкое: на аналитическом пути по умолчанию вычисление ковариации датума согласуется с независимым оракулом SPICE по световому времени и NumPy на новых измеренных нормальных точках; это не точность LLR и не свидетельство того, что аналитическая Луна точна |
lunar_llr, realdata::llr_crd (composing fim, cio, frames, ephem, lunar_frame, lunar_frame_campaign) | tests/lunar_llr_real_data.rs (11 тестов: все 15 зафиксированных файлов CRD побайтно идентичны своим записанным дайджестам; все 349 записей учтены, 337 использованы и 12 пропущены по названной причине; каждая архивная дальность внутри реальной огибающей перигея/апогея; веса показаны как РАВНЫЕ bin_rms/√n_raw; координата вдоль луча зрения лучше всего определена для каждой решётки, а развёртка либрации, которая её обеспечивает, измерена отдельно; невязка и её независимое подтверждение по JPL Horizons; чувствительность к наклону геометрии на 0.1 градуса; сравнение со смоделированной кампанией показано равным независимому прогону этого сценария; побитовая фиксация R1 для трёх ранее существовавших лунных пакетов систем отсчёта); lunar_llr::tests (12: частная производная дальности в сравнении с центральной конечной разностью смоделированного времени пролёта с относительной точностью < 1e-6; световое время — сошедшийся лунный круговой пробег; сигма датума точно линейна по масштабу весов с точностью 1e-9; блочная диагональность точна; отсутствующий каталог данных отклоняется, а не подменяется; изменённая строка каталога выявляется собственным столбцом радиуса); realdata::llr_crd::tests (7: семантика полей, переход через полночь, отказ принимать не-UTC шкалу времени и неподдерживаемую версию формата, и никакой подменной сигмы для пустого интервала); tests/validate_llr_datum_spice_oracle.rs (llr_datum_finding_tz_sigma_one_percent_gap, закреплено; reported_residual_is_the_engine_to_spice_light_time_gap); tests/validate_llr_datum_analytic_fresh_2025.rs::llr_datum_analytic_moon_matches_spice_and_numpy_on_fresh_2025_normal_points (151 ранее не виденная нормальная точка за 2025-Q2; сигмы и нормы, наихудшее 1.11e-3 из 1e-2, обусловленность 8.95e-4 из 2e-2, отношения 1.79e-3 из 2e-2, учёт, ранги и связь точны) | Тождества в замкнутой форме, независимый путь внутри репозитория и, начиная с 0,36, независимый библиотечный оракул SPICE и NumPy на новых измеренных данных (ниже); опубликованной пары «ковариация датума лунной LLR» для проверки не существует, поэтому никакая точность не заявляется. Единственная новая производная — частная производная дальности по связанному с телом положению отражателя — заново выводится центральной конечной разностью двустороннего светового времени, которое она дифференцирует, путём, не разделяющим ни одного выражения с аналитической формой. Физический оракул структурный: частная производная дальности ЕСТЬ удвоенная линия визирования, поэтому связанная с телом координата вдоль среднего направления на Землю должна определяться гораздо лучше двух координат в плоскости неба, до которых дотягивается только либрация, — измерено от 50,7× до 71,7× по пяти решёткам относительно развёртки либрации, которую отчёт измеряет независимо, причём печатаются и изотропное предсказание для малых углов, и поперечная анизотропия, объясняющая разрыв. ЧТО ИЗМЕНИЛОСЬ: расписание, число наблюдений и вес каждого наблюдения теперь измерены; используются 337 из 349 архивных точек, а 12 не используемых пропускаются и учитываются, потому что в ITRF2020 нет положения для Apache Point. MEASURED: сигма сдвига датума 1.851746e-2 м против 6,3975 м в СМОДЕЛИРОВАННОЙ кампании (в 345 раз), вращение в 36 раз, масштаб в 24 раза — отношение между лазерно-дальномерной сетью и сетью с задержками РСДБ, поэтому это находка, а не проверка. Ранг информации об отражателях 15/15 при межрешёточной связи, в точности равной 0; ранг Гельмерта 7/7, обусловленность 2.4e4. ЧЕГО ЭТА СТРОКА НЕ ЗАЯВЛЯЕТ: что цифра верна в абсолютном выражении. Реальное решение LLR одновременно оценивает орбиту Луны, физические либрации, ориентацию Земли, координаты станций и приливные и релятивистские параметры и сообщает дециметры (собственные 0.12–0.27 м таблицы 7 DE430), тогда как эта граница намного меньше; это граница Крамера — Рао для заданного сокращённого набора параметров, а не точность. Вне проверенного утверждения (modelled, не проверено): эфемериды центра Луны и ориентация тела IAU 2015 смоделированы, а тропосфера, приливы, эксцентриситет станции, движение полюса, UT1-UTC, релятивистская задержка и часы станций отсутствуют. Их совокупная величина ОПУБЛИКОВАНА, а не обоснована — односторонняя дальность «наблюдённое минус вычисленное» 156 494 м RMS по 337 точкам, — а их влияние на ковариацию ОГРАНИЧЕНО, а не обосновано: повторное решение всего датума с каждой частной производной, наклонённой на 0,1° (вдвое больше измеренного наклона эфемериды в худшей эпохе, знак чередуется), сдвигает результат на 0,288 %. ВНЕШНЯЯ ПРОВЕРКА (раунд 2 0,30, предварительно зарегистрирована 6b27964a), результат-находка (остаётся MODELLED): двустороннее световое время SPICE (DE440, ITRF93, лунная ориентация DE440) с частными производными по конечным разностям и обратная матрица numpy на тех же 337 измеренных нормальных точках и весах согласуются по учёту, по обоим рангам, нулевой связи, остаточному RMS (2.1e-5) и 15 из 16 цифр ковариации. Сигма сдвига по z на 1,03 % выше при предварительно зарегистрированном пороге 1 %. С центром Луны из DE440 она падает до 0,049 % (c51f8b2, данные уже видели), а на новых нормальных точках 2019 года датум с Луной из ядра выдерживает каждый порог (строка «…, центр Луны из ядра»), где аналитическая Луна также остаётся в пределах порогов (худший случай 3.8e-3, только для сведения), так что это сравнение не различает модели Луны. ПРОГОН АНАЛИТИЧЕСКОГО ПУТИ НА НОВЫХ ДАННЫХ (0,36, предварительно зарегистрирован 31f5283 до получения любой точки): неизменный оракул SPICE и NumPy на 151 использованных нормальных точках EDC CRD v2 за 2025-04..06 (год, который ни один тест не использовал; файлы получены заново, а оракул перезапущен независимо, см. NOTICE эталонных данных) при тех же порогах: учёт, ранги, числа по решёткам и нулевая связь равны; сигмы и нормы — худший случай 1.11e-3 (порог 1 %), обусловленность 8.95e-4 (2 %), отношения поперёк/вдоль — худший случай 1.79e-3 (2 %); SPICE O-C 10,79 м. VALIDATED на этом основании только как проверка вычисления ковариации по библиотеке; аналитический остаточный RMS на этом срезе равен 222 км, поэтому пороги не различают модели Луны (как и в строке с ядром). Результаты: docs/design/evidence/mr06-llr-analytic-fresh/RESULTS.md | VALIDATED |
| VM-945ce00a | Геодезия лунной опорной станции: добавленные уголковый отражатель и маяк РСДБ относительно датума по пяти решёткам | Необязательные входы extra_reflectors и extra_beacons сценария lunar-llr-datum добавляют блок station_geodesy: информацию Гельмерта по пяти решёткам из архивного среза лазерной локации Луны плюс информацию, которую вносят в семипараметрический датум добавленный уголковый отражатель (дальность измеряется в архивные эпохи нормальных точек, когда станция локации выше своего горизонта, каждая с архивным весом этой нормальной точки) и добавленный маяк РСДБ (наблюдаемый сетью и расписанием lunar-frame-campaign при зафиксированных земных станциях, через частные производные задержки lunar-vlbi-fim) на заданных площадках; решение пересчитывается, с 1-сигмой каждого параметра Гельмерта до и после, их отношением, нормами до и после и экстремальными собственными значениями разности Фишера. При отсутствии или пустом значении отчёт не меняется | lunar_llr (над lunar_frame_campaign::beacon_information, schedule_for и solve_datum_information, lunar_vlbi_fim) | tests/lunar_station_geodesy.rs (empty_or_absent_extra_lists_are_bit_identical: пустые списки и базовый пример дают отчёт и сводку по умолчанию байт в байт; an_added_site_never_increases_any_variance: наименьшее собственное значение H_after - H_before неотрицательно с точностью до 1e-9 от наибольшего, каждое отношение сигм после/до не превышает единицы, и оба добавленных пункта наблюдаются; the_rest_of_the_report_is_the_five_array_result; every_station_geodesy_field_has_a_unit; a_beacon_list_inside_the_campaign_block_is_refused); scenarios/lunar-station-geodesy-baseline.toml и scenarios/lunar-station-geodesy-with-station.toml (то же архивное расписание и тот же блок кампании VLBI) | Только внутренняя согласованность: каждая добавленная площадка — отдельная точка, а лазерная дальность или задержка РСДБ при зафиксированной станции затрагивает одну точку, поэтому её информация A_p^T M_p A_p положительно полуопределена и складывается; тест проверяет по этому разность Фишера и каждую дисперсию. Результат по пяти решёткам — существующая строка по реальным данным, и он не меняется. Добавленный отражатель повторно использует эпохи, запланированные для пяти существующих решёток, — ILLUSTRATIVE расписание, а сеть, расписание и сигма задержки добавленного маяка — ILLUSTRATIVE входные данные lunar-frame-campaign; площадка — ILLUSTRATIVE южнополярное положение. С южнополярной площадки Земля видна низко над горизонтом или не видна вовсе, что выражают существующие тесты углов обзора; ни одна из площадок не облучается непрерывно. Цифры — границы Крамера — Рао для сокращённого набора параметров, а не решённый датум и не заявление о какой-либо реальной станции | MODELLED |
| VM-97d8ec7c | Лунный датум системы координат по РЕАЛЬНОЙ кампании наблюдений, центр Луны из ядра | Ковариация семипараметрического датума Гельмерта lunar-llr-datum по архивным нормальным точкам ILRS и их измеренным весам на пути ядра: геоцентрический центр Луны считывается из JPL DE440 собственным читателем ядер движка (planetary_kernel_path; lunar_llr::llr_geometry_with, ephem_provider::KernelEphemeris). От аналитической строки отличается только центр Луны; ориентация IAU 2015, отсутствующие движение полюса и UT1, каталоги, правила отбора, веса и линейная алгебра те же. Проверенное утверждение лишь в том, что ковариация датума на этом пути согласуется с независимым оракулом SPICE и NumPy на новых, ранее не виденных нормальных точках. Сравнение не различает модели Луны и не проверяет центр Луны: на том же срезе аналитическая Луна также проходит каждый порог, предварительно зарегистрированная мутация (чтение Луны из ядра с опозданием на один час) не была обнаружена, и центр Луны с ошибкой около 4 650 км также проходит (см. текст оракула). Это не свидетельство того, что Луна из ядра улучшает датум. Запускается как сценарий lunar-llr-datum с planetary_kernel_path (и normal_points_dir для другого среза) |
lunar_llr (llr_geometry_with, LunarLlrDatumScenario); ephem_provider (KernelEphemeris); naif_kernel | tests/validate_llr_datum_kernel_moon_fresh.rs::llr_datum_kernel_moon_matches_spice_and_numpy_on_fresh_normal_points (447 ранее не виденных нормальных точек за 2019-Q2; сигмы и нормы в пределах 4.0e-5 из 1e-2, обусловленность 1.6e-5 из 2e-2, отношения 7.6e-5 из 2e-2, учёт и ранги точны); tests/validate_llr_datum_kernel_moon.rs (диагностика по ранее виденным данным 2015, 0,049 % по tz; не является доказательством для этой строки); lunar_llr::tests | NAIF SPICE Toolkit N0067 (spiceypy 8.2.0, MIT), двусторонние световые времена на DE440, ориентация Земли ITRF93 и лунная ориентация DE440 (MOON_ME) с частными производными по конечным разностям 100 м, а также информационная матрица и обратная матрица numpy 2.3.5 (BSD-3-Clause, LAPACK): неизменный генератор сравнения аналитической строки (6b27964a), запущенный на новом срезе (нормальные точки EDC CRD, 2019-04..06), предварительно зарегистрированном в 830d945a до получения какой-либо его части, при порогах аналитической строки (1 % для сигм и норм, 2 % для обусловленности и отношений, точный учёт, ранги и связь) и его самопроверке оракула (SPICE O-C 10,86 м < 100 м). Каждая величина выдерживается, худший случай 7.6e-5. Мутации: запланированная задержка Луны на один час НЕ обнаружена (ковариация зависит от разброса линий визирования, а не от их времени); структурная мутация, выбранная впоследствии и раскрытая как таковая, — отбрасывание частной производной нисходящего звена — проваливает каждую сигму. Находка: на этом срезе аналитическая Луна также проходит (худший случай 3.8e-3), поэтому порог не различает модели Луны, и это подтверждает ковариацию на новых данных, а не улучшение от Луны из ядра. Проверка интегратора на сгибе (не предварительно зарегистрирована): Луна из ядра, считанная относительно барицентра Земля — Луна вместо Земли (остаточный RMS 4 649 км), и эпоха ядра без TT минус UTC (69 с; остаток 2,6 км) обе по-прежнему проходят каждый порог, а отбрасывание sqrt(n_raw) из измеренных весов проваливает все 16 величин с порогами; сравнение чувствительно к весам, частным производным и линейной алгебре, но не к центру Луны. Обе стороны читают DE440: это подтверждает вычисление на DE440, но не сам DE440. Вне утверждения: точность LLR (граница Крамера — Рао для сокращённого набора параметров) | VALIDATED |
| VM-e3875438 | Встроенная аналитическая лунная эфемерида — её ЗАЯВЛЕННАЯ ГРАНИЦА ТОЧНОСТИ проверена по реальным данным | ephem::moon_position, маломощный геоцентрический лунный ряд, к которому крейт возвращается при отсутствии ядра DE/SPK, измеренный относительно реальной лазерной локации Луны и относительно опубликованной планетной эфемериды на том же промежутке. Эта строка подтверждает границу, которую модуль заявляет о себе, а НЕ точность: подтверждено, что ряд не хуже, чем он утверждает, но не подтверждено, что он хорош | ephem (moon_position), lunar_llr, realdata::llr_crd | tests/lunar_llr_real_data.rs::the_analytic_moon_series_disagrees_with_jpl_by_the_same_amount (12 еженедельных геоцентрических состояний, наихудший угол эпохи утверждается < 0,3° и СКО < 5e5 m относительно собственного задокументированного заявления модуля, плюс утверждение, что невязка LLR согласуется с радиальным расхождением с точностью < 5×); ::the_measured_residual_is_the_ephemeris_error (337 реальных нормальных точек) | ДВА независимых внешних набора данных, не имеющих ничего общего. (1) 337 архивных нормальных точек лазерной локации Луны ILRS (EUROLAS Data Center, DGFI-TUM, с 2015-04-08 по 2015-06-27, пять решёток уголковых отражателей, зафиксированы с SHA-256 по файлам и скриптом повторной загрузки и проверки): односторонняя дальность «наблюдённое минус вычисленное» 156 494 м RMS, с координатами станций из IERS ITRF2020 и координатами отражателей из JPL DE430, таблица 7, поэтому остаток определяется рядом для центра Луны. (2) Геометрические геоцентрические состояния Луны JPL Horizons на том же промежутке: 112 567 м RMS по радиусу, 195 655 м RMS по вектору, худшая эпоха 360 324 м = 0,0536°. Остаток дальности реагирует на РАДИАЛЬНУЮ часть ошибки эфемериды, поэтому (1) и (2) — одна и та же величина, полученная двумя путями, и они согласуются в пределах 1,39×, что даёт сценарию lunar-llr-datum основание относить свой остаток на счёт эфемериды. Собственная документация модуля движка заявляет ~0,3° / ~несколько·10² км; оба измерения укладываются в неё, угловое утверждение — с запасом в 5,6 раза. ОБЛАСТЬ ПРИМЕНЕНИЯ, указанная так, чтобы читатель не мог ошибиться: это подтверждает заявленную ГРАНИЦУ, а не цифру точности. Ряд остаётся непригодным для любого применения, требующего лучше ~1e5 м, и это ограничение составляет содержание строки не меньше, чем согласие. Воспроизводится офлайн зафиксированными скриптами получения и проверки | VALIDATED |
| VM-f553cc1c | Целостность контроля — зелёный результат, означающий то, что он говорит | Три структурные проверки самого процесса верификации, каждая из которых закрывает класс дефектов, доходивших до канонического контроля как перемежающийся или ложный красный результат. (1) Каждый построенный путь ко временному файлу в исходных текстах Rust должен содержать компонент, уникальный для каждого вызова; идентификатор процесса отвергается, потому что cargo запускает тесты библиотеки как параллельные потоки ОДНОГО процесса, а идентификатор процесса у всех них общий. (2) Каждое побайтовое или хеш-закрепление должно заявлять рядом с собой или в заголовке своего модуля, что оно охватывает и что намеренно исключает, — чтобы сквозное изменение позволяло с первого взгляда увидеть, какие закрепления затронуты, а какие незаметно превратились в детекторы изменений на уровне всего репозитория. (3) Зелёный результат можно заявлять только по ПОЛНОМУ набору тестов: scripts/gate.sh запускает cargo test --all, фиксирует настоящий код выхода без конвейера на пути и записывает квитанцию с названием коммита, числом интеграционных бинарных файлов, числом тестов и длительностью; проверка перед отправкой отклоняет отправку коммита, который не назван ни в одной действительной квитанции, на чистом дереве. Повторяемость отдельно выборочно проверяется scripts/check-repeatability.sh, который запускает набор тестов библиотеки N раз и завершается неудачей, если набор проходящих тестов различается. |
scripts/gate.sh, scripts/check-gate-receipt.sh, scripts/check-repeatability.sh, scripts/install-gate-hook.sh | tests/source_guards.rs (9 тестов: оба сторожа по всему дереву исходников, а также мутационные образцы, оценивающие каждого сторожа в обоих направлениях — шаблон F22, обнаруженный на обоих сталкивающихся путях, принятое поставляемое исправление с атомарной последовательностью, неполное исправление, обнаруженное ровно на том пути, где потерян уникальный компонент, принятые дескриптор временного файла и унаследованный уникальный каталог, отвергнутые настенные часы; необъявленное закрепление отмечено, объявленное принято, область без исключения отвергнута, объявление в документирующем комментарии объемлющего теста принято и показано, что оно не переходит на следующий тест; и каждая форма записи закрепления — шестнадцатеричная, десятичная, строка дайджеста, длина в байтах, именованное число байт, эталонный файл — распознаётся, тогда как константы алгоритмов, начальные значения ГПСЧ и проверки малой мощности — нет) | Замкнутая форма: каждая проверка запускается на фиксированном заведомо плохом фрагменте, на котором она должна сработать, и фиксированном заведомо хорошем, на котором она должна молчать; оба — литеральные константы, на которые детектор повлиять не может. Два заведомо плохих фрагмента — дефекты F22 и F25 в их первоначальном виде. Это ВНУТРЕННИЙ оракул, и строка соответственно MODELLED: он доказывает, что проверки отличают дефект от его исправления, а не то, что описываемые ими классы исчерпывающи. Заявленные слепые зоны — общее состояние, не являющееся путём, закрепление, заданное короткой именованной константой, редкая гонка, которую три прогона не выбирают, и квитанция, которую может подделать любой, кто способен записать файл, — выписаны в документации модуля tests/source_guards.rs и в заголовке каждого скрипта, а не оставлены на обнаружение. | MODELLED |
| VM-22bf3eed | Составной временной PL — скалярная специализация MHSS (H=1_N) | Скалярный TPL по разделению решений по разнородным источникам по времени; PL определяется шумом подмножества с худшим исключением + смещением UTC(k) | src/integrity/tpl_scalar.rs | integrity::tpl_scalar::tests (ранг 1, слияние/исключение, доминирование смещения, перекрёстная проверка IR); tests/tpl_scalar_numpy_oracle.rs::scalar_mhss_pl_matches_numpy (300 зафиксированных случаев: оценки подмножеств numpy lstsq, общая ковариация разделения, PL по scipy brentq; PL с относительной точностью 1e-9, наихудшее 1.2e-10; определяющее подмножество точно) | P2: numpy 2.3.5 linalg.lstsq и scipy 1.18.1 (norm.isf, norm.sf, brentq) пересчитывают собственными алгоритмами оценки взвешенного метода наименьших квадратов по подмножествам, общую ковариацию разделения sqrt(Δ Σ Δᵀ), смещения и по ним уровень защиты на 300 зафиксированных входных данных (tests/fixtures/tpl_scalar_numpy_oracle); PL совпадает в пределах 1e-9 относительной погрешности (худший случай 1.2e-10), а определяющее исключаемое подмножество идентично, допуск зафиксирован до сравнения. Множители, априорные значения и мажоранты смещения — входные данные, а структура уравнения PL (список режимов, разделение ir/2, проекция смещения) — заявленный вход, как и в строке ядра уровня защиты ARAIM для Луны; проверенное утверждение — линейная алгебра и PL на этих входных данных, а не физические величины временного сценария. Происхождение ARAIM: Blanch 2015 / Joerger 2014 | VALIDATED |
| VM-802ee366 | Составной временной PL — прохождение holdover с начальным значением P0 | PL(τ)=max(TPL_handover,HPL(τ)); полунепрерывность снизу PL(0+)≥PL(0−); бегущий максимум K(IR/2); показатели фазы τ/τ³/τ⁵ | src/integrity/composed_pl.rs | integrity::composed_pl::tests (монотонность, нижняя граница P0, K(IR/2), показатели степени, полунепрерывность снизу) | Тесты свойств (монотонность, отсутствие падения при передаче) + проверка показателей относительно holdover::coast_phase_variance | MODELLED |
| VM-ff51b519 | Составной временной PL — покрытие огибающей holdover, многолетний режим (tau>=90d) | Огибающая бегущего максимума мажорирует (без пробоя) реальный метрологический ряд при каждой проверенной задержке tau>=90d на непересекающемся сегменте; малая tau (<=30d) — раскрытая граница Modelled | src/integrity/composed_pl.rs | tests/cti_holdover_coverage_reference.rs | Ряд BIPM Circular-T [UTC-UTC(USNO)] с шагом 5 суток, MJD 56074-60429 (872 точки, webtai API); непересекающиеся подгонка и проверка, многолетнее покрытие без пробоя | VALIDATED |
| VM-47843371 | Составной временной PL — огибающая LIL п. н. (невозможность + согласованность) | Конечного худшего случая holdover нет (супремум броуновского движения расходится); HPL с распределением по IR согласуется с огибающей Хартмана — Винтнера при IR→0 | src/integrity/lil_envelope.rs | integrity::lil_envelope::tests (расходимость, порог, доминирование при ужесточении по IR) | Тождество замкнутой огибающей п. н. √(2Dt·lnln t) + проверка доминирования HPL; шов невозможности Baweja arXiv:2606,24210 | MODELLED |
| VM-cce187eb | Мажоранта целостности смещения прослеживаемости разнородных UTC(k) | Мажоранта смещения по источнику b = (U/k_cov)·Phi^-1(1-tail/2) + старение, раздувающая опубликованную расширенную неопределённость типа B до распределённого хвоста целостности; связана с tpl_scalar как bias_s | src/integrity/hetero_budget.rs | integrity::hetero_budget::tests + tests/hetero_budget_reference.rs; tests/hetero_budget_utc_k_oracle.rs::overbound_exceedance_on_real_utc_k_finding (зависит от данных: при отсутствии ряда BIPM пропускается с сообщением); tests/hetero_budget_utc_k_realised_overbound_oracle.rs::realised_offset_overbound_finding; tests/utck_bound_prospective_oracle.rs (D9, раунд 3, проспективный, ещё не выполнен: Circular T 465 вышел 2026-10-12, а предварительно зарегистрированное правило 1000 значений требует выпусков примерно до 468) | Независимое воспроизведение замкнутой формы мажоранты средствами numpy + stdlib statistics (InternalConsistency). Ряд BIPM Circular-T [UTC-UTC(USNO)] — лишь ЦИТИРУЕМЫЙ вход: это ТОТ ЖЕ ряд, который уже Validated для строки покрытия holdover R4, и он здесь НЕ проверяется повторно; воспроизведение его значений ничего не доказывает для R2. Глубокий хвост целостности — Modelled. Внешнее сравнение 0,30, результат-находка (остаётся MODELLED): по файлам BIPM UTC-UTC(k) для отдельных лабораторий (102 лабораторий, 105 024 строк с опубликованными неопределённостями) мажоранта b = 2,576 u при хвосте 1e-2 превышается в 50,8 % строк (Клоппер — Пирсон 95 %: от 50,4 до 51,1 %) и более чем в 1 % строк у 101 из 102 лабораторий. Опубликованная u — неопределённость определения BIPM для UTC-UTC(k), а не граница смещения, которое регулярно достигает многих u; мажоранта в заданном виде не ограничивает реальное смещение прослеживаемости UTC(k). Раунд 2 0,30, мажоранта реализованных смещений UTC-UTC(k), обученная на данных BIPM Circular T за 2015–2022 и проверенная на данных за 2023–2026 (предварительно зарегистрировано ca0921a4, совокупное превышение не более 1e-2), результат-находка (остаётся MODELLED): совокупное превышение равно 0,0333 (694 из 20 826 строк по 82 лабораториям; 0,0127 без 430 строк, для которых по правилу нет границы). D9, раунд 3, совокупная иерархическая граница старения (utck_bound), предварительно зарегистрирована fb475550 и оценивается проспективно по выпускам Circular T начиная с 465: ещё не запущена (выпуск 465 опубликован 2026-10-12 примерно с 285 проверочными значениями; предварительно зарегистрированное правило в 1000 значений требует выпусков примерно до 468, а для прогона нужны архивные файлы по лабораториям от 2026-09-30, поскольку BIPM с тех пор переписал 87 из 113) | MODELLED |
| VM-15e05692 | Коррелированная кросс-ковариация смещений прослеживаемости (распределение, небезопасное при общем режиме) | Кросс-ковариация смещений N×N с внедиагональными элементами rho·b_i·b_j для источников, разделяющих реализатор UTC(k); ДОКАЗАНО correlated_fused_bias >= independent_fused_bias (наивное независимое распределение занижает объединённое смещение -> оптимистично -> небезопасно) | src/integrity/hetero_budget.rs | integrity::hetero_budget::tests (correlated_fused_bias_dominates_independent_when_correlated, rho_one_single_realizer_recovers_linear_sum) + tests/hetero_budget_reference.rs | Независимое воспроизведение на numpy кросс-ковариации и неравенства объединённых смещений «коррелированное против независимого» (InternalConsistency). Репрезентативный набор источников; сценарий Modelled. | MODELLED |
| VM-56cdbf21 | Обобщённое (GLS) отбеливание общего режима (Эйткен) + тождество Махаланобиса | Написанное вручную разложение Холецкого Omega=LL^T и отбеливание прямой подстановкой z=L^-1 r (Cov(z)=I при Cov(r)=Omega); квадрат Махаланобиса z^T z = r^T Omega^-1 r | src/integrity/gls_commonmode.rs | integrity::gls_commonmode::tests + tests/gls_reference.rs + tests/gls_whitening_numpy_oracle.rs::whitening_and_mahalanobis_match_numpy_lapack (201 зафиксированный случай SPD: множитель, отбелённая невязка, оператор отбеливания и квадрат Махаланобиса в сравнении с numpy LAPACK с относительной точностью 1e-12, наихудшее 7.9e-16) | P2: numpy 2.3.5 linalg.cholesky (LAPACK potrf), solve (gesv) и inv на 201 зафиксированных в репозитории входных SPD-матрицах (tests/fixtures/gls_whitening_numpy_oracle) проверяют написанный вручную множитель, отбелённый остаток и оператор отбеливания; квадрат Махаланобиса проверяется по solve(Omega, r), который не использует разложение Холецкого, так что тождество z^T z = r^T Omega^-1 r подтверждается независимым путём. Всё в пределах 1e-12 по относительной погрешности (наихудший случай 7.9e-16), допуск зафиксирован до сравнения. Наибольшее число обусловленности равно 19,3, поэтому плохо обусловленные матрицы не охвачены. Отбеливание GLS/Aitken 1935 имеет уровень Cited. | VALIDATED |
| VM-caf931b4 | Статистика согласованности общего режима (отказ общего опорного источника, невидимый для разделения решений) | Статистика счёта (1^T Omega^-1 r)^2/(1^T Omega^-1 1) ~ chi^2_1 для сдвига общего режима, который разделение решений (контрасты, ортогональные 1) увидеть не может; сдвиг общего режима увеличивает её, тогда как попарные разделения остаются плоскими | src/integrity/gls_commonmode.rs | integrity::gls_commonmode::tests (common_mode_shift_inflates_statistic_but_not_contrasts, post_fit_common_mode_statistic_is_zero) + tests/gls_reference.rs; tests/gls_common_mode_statistic_numpy_oracle.rs::common_mode_statistic_matches_numpy_lapack | Независимое воспроизведение статистики в numpy и проверка свойства: инъекция общего режима увеличивает её (InternalConsistency). Смоделированный сценарий. 0,30 раунд 2 (предварительно зарегистрирован f9aa360d), заблокирован (остаётся MODELLED): numpy 2.3.5 LAPACK gesv воспроизводит значение статистики на 261 зафиксированных случаях (в пределах 3.5e-15 для хорошо обусловленных, 1.2e-9 при числе обусловленности до 6.1e7); нулевой закон chi-square(1) является цитируемой теоремой, а плоские попарные разделения — тождеством, для которого нет выходных данных движка для сравнения, поэтому определение области применения ожидает решения владельца | MODELLED |
| VM-cdc08a73 | Оценка необнаруживаемого общего режима для остатка вне Omega | Потолок необнаруживаемого общего режима: наибольшая величина отказа вдоль направления d, которая ускользает ОДНОВРЕМЕННО от разделения (alpha_ss = T_ss / отбелённая норма контраста d) и от статистики общего режима (alpha_cm = sqrt(T_cm 1^T Omega^-1 1) / |1^T Omega^-1 d|); приводится как min(alpha_ss, alpha_cm). При положительно определённой Omega два слепых направления (d, пропорциональное 1, и 1^T Omega^-1 d = 0) взаимно исключают друг друга, поэтому потолок КОНЕЧЕН для каждого ненулевого d; он бесконечен только для нулевого направления или не положительно определённой Omega. Направление вне смоделированной общей оси слепо только для статистики общего режима и ограничено разделением | src/integrity/gls_commonmode.rs | integrity::gls_commonmode::tests (separation_alone_is_blind_to_common_mode, degenerate_direction_or_non_pd_gives_no_finite_ceiling, every_nonzero_direction_under_pd_omega_has_a_finite_ceiling); tests/gls_outside_omega_bound_numpy_oracle.rs::undetectable_common_mode_ceiling_matches_numpy_lapack (256 зафиксированных случая: alpha_ss, alpha_cm и минимум с относительной точностью 1e-12 на 210 хорошо обусловленных и граничных случаях, наихудшее 3.3e-15; 40 плохо обусловленных до обусловленности 1.3e8 в пределах заявленной границы, масштабируемой по обусловленности, наихудшее 1.1e-9; шесть точных бесконечностей) | P2: numpy 2.3.5 linalg.solve (LAPACK gesv, LU без разложения Холецкого) пересчитывает alpha_ss (порог, делённый на отбелённую норму контраста d после удаления его общего коэффициента режима по GLS), alpha_cm и их минимум на 256 зафиксированных входных наборах (Omega, d, T_ss, T_cm) (tests/fixtures/gls_outside_omega_bound_numpy_oracle), включая чисто общережимные направления, направления вне смоделированной общей оси, а также случаи нулевого направления и не положительно определённой матрицы, которые должны давать +inf; предварительно зарегистрировано (d070699a; поправка 8a44267b, до любого сравнения, с уточнением матричной формы); допуски зафиксированы до сравнения. Текст возможности исправлен решением владельца (2026-10-02): в нём говорилось, что оценка бесконечна для направления вне общей оси, что противоречило коду и этому сравнению. То, что идеализированный детектор с одним контрастом даёт нижнюю границу необнаруживаемой величины для реального детектора подмножества, остаётся на уровне Modelled | VALIDATED |
| VM-af0a23f0 | Идентифицируемость лунного датума: линейная алгебра разложения | Маргинал по дополнению Шура для блока {луноцентр-X, масштаб} информации Фишера 7-параметрического датума Гельмерта: скалярная метрика вырожденности lambda_min(S), CRLB начала координат по X и корреляция начала координат и масштаба | lunar_identifiability | tests/lunar_datum_identifiability_reference.rs::decompose_matches_scipy_reference (16 синтетических матриц SPD 7x7 от хорошо обусловленных до почти вырожденных на {0 3}; lambda_min по Шуру / CRLB начала координат / |corr| в сравнении с SciPy/NumPy с относительной точностью <1e-9) | Независимый эталон на SciPy/NumPy (scripts/gen_datum_identifiability_ref.py -> tests/fixtures/datum_identifiability/scipy_ref.csv): дополнение Шура, его собственные значения и обратная матрица 2x2, вычисленные независимой библиотекой. Охват ограничен ЛИНЕЙНОЙ АЛГЕБРОЙ разложения; ВЕЛИЧИНЫ лунной корреляции и CRLB для реальной геометрии остаются MODELLED. | VALIDATED |
| VM-bed29386 | Классификация нуль-пространства лунного датума (аддитивность рангов LLR + снятие дефекта либрацией) | Классификация проблемы датума при внутренних измерениях дальности: одно наблюдение дальности даёт ранг 1 (6-мерное нуль-пространство); пара «начало координат по X — масштаб» почти вырождена, а физическая либрация DE440 снижает дефект до нуля, при этом пара остаётся почти вырожденной | lunar_identifiability, lunar_datum | tests/lunar_datum_identifiability_reference.rs (single_internal_range_row_has_six_dim_datum_null_space; extending_the_librating_arc_lifts_the_origin_scale_degeneracy); tests/lunar_datum_sosnica_oracle.rs::origin_scale_correlation_and_crlb_disagree_with_the_published_geometry | Геометрическая структура, воспроизведённая движком, плюс тождество Шура 2x2 в замкнутой форме; согласуется по СТРУКТУРЕ с Sosnica et al. 2025 (arXiv:2510,15484), чьи опубликованные величины здесь НЕ воспроизводятся. Классификация структурная; величины корреляции и CRLB для реальной геометрии — MODELLED (координаты и ориентация отражателей зафиксированы). 0,30 внешнее сравнение, вывод (остаётся MODELLED): по сравнению с Sosnica et al. 2025 корреляция начала координат и масштаба по информации Фишера для дальности (-0.993 / -0.988) отличается от опубликованной -0.97 не более чем на 0,05, но на собственной пятиотражательной геометрии статьи корреляция 7-параметрического преобразования Гельмерта с равными весами составляет -0.78 (опубликованное значение опирается на погрешности отдельных отражателей, которые в статье не приведены), а CRLB начала координат (от 0,6 до 1,2 мм при шуме дальности 3 мм) на 96–98 % ниже приведённых в статье 3,07 см при допуске 20 %. Величины не воспроизведены | MODELLED |
| VM-4c9a19f6 | Информация о лунном датуме по нескольким методам (LLR + лунный VLBI + дальность до орбитального аппарата) | Строки якобиана датума для дальности LLR до отражателей на Земле, дифференциальной задержки лунного VLBI по двум станциям и дальности «орбитальный аппарат — маяк» по 7-параметрическому датуму, объединённые в единую согласованно предобусловленную информацию Фишера; показывает, что нерадиальное (орбитальное или разнесённое по глубине) слежение устраняет вырожденность «начало координат по X — масштаб», тогда как поперечный VLBI помогает лишь косвенно | lunar_datum, lunar_identifiability | lunar_datum::tests (аналитические производные LLR/VLBI/орбитального аппарата в сравнении с конечными разностями); lunar_identifiability::tests (adding_an_offradial_technique_collapses_the_origin_scale_degeneracy; transverse-vs-radial через crlb_diag) | Перекрёстные проверки аналитических и конечно-разностных частных производных каждого метода (внутренние); НАПРАВЛЕНИЕ улучшения — геометрический факт. Расположение маяков, расписания и шум — MODELLED и представительные (см. tests/fixtures/llr_geometry/NOTICE.md). | MODELLED |
| VM-dff22468 | Поставщик ориентации лунных главных осей DE440 | Вращение MOON_PA_DE440 в J2000 для произвольных эпох в интервале от 2014-01-01 до 2030-12-31 TDB посредством геодезической интерполяции R0·Exp(f·Log(R0ᵀR1)) между узлами зафиксированного в репозитории суточного ряда из 6 209 строк (функции try_ возвращают OrientationSpanError вне этого интервала, безошибочные функции паникуют; значения никогда не обрезаются); встроено на этапе компиляции, поэтому во время выполнения нет обращений к файловой системе, и сборка WASM содержит его | lunar_orientation | lunar_orientation::tests (de440_moon_pa_reproduces_fixture_rows, de440_moon_pa_shows_real_libration); tests/lunar_pa_frame_realisation_guard.rs::the_orientation_series_interpolation_error_is_tens_of_metres_not_sub_metre; tests/lunar_pa_orientation_spice_oracle.rs::interpolated_rotation_matches_direct_kernel_evaluation_off_node (2 000 случайных эпох вне узлов в сравнении с SPICE pxform на двоичном PCK: угол поворота в пределах 1.7e-5 rad, наихудшее 1.7e-6 rad, 3 m на среднем радиусе) | NAIF SPICE Toolkit (CSPICE N0067 через spiceypy 8.2.0, запускается как инструмент): pxform от MOON_PA_DE440 к J2000, вычисляющая двоичный PCK JPL moon_pa_de440_200625.bpc напрямую с собственным файлом системы отсчёта NAIF moon_de440_250416.tf, в 2 000 случайных эпохах вне узлов во встроенном окне. Угол поворота между матрицами Kshana и SPICE укладывается в 1.7e-5 рад (30 м при среднем радиусе 1737,4 км, зафиксировано до сравнения); измеренный наихудший результат — 1.7e-6 рад (3 м), RMS — 7.8e-7 рад, а наихудший результат на 6 000 дополнительных эпох, выбранных верификатором, — 1.75e-6 рад. Суточные узлы сами были извлечены из того же файла (scripts/gen_de440_moon_pa.py, SHA-256 фикстуры 3076f81ef95d83f5efa240ed4c7ccb422f109407dde841fcf28d42dc63586eb7), поэтому это сравнение проверяет интерполяцию между ними, что и является утверждением. Обнаружено этим сравнением и исправлено: прежняя поэлементная линейная интерполяция с ортогонализацией Грама — Шмидта сохраняла ось, но не угол вращения 13,2 град/сут и давала ошибку до 2.0e-4 рад (340 м) вблизи четвертных точек; прежняя оценка около 14 м получалась из проверки, которая выбирает только середины интервалов. Ряд охватывает период с 2014-01-01 по 2030-12-31, а вне него возникают ошибки (раунд 2); его узлы за 2024–2025 годы воспроизводятся из того же файла с точностью 4.3e-13. Приведённое выше сравнение SPICE вне узлов охватывает только 2024–2025 годы, то есть проверенное окно; расширенные узлы получены из того же файла и тем же скриптом, но вне узлов не сравнивались. Геометрическая основа для анализа идентифицируемости, а не продукт определения ориентации с точностью лучше метра | VALIDATED |
| VM-338ed616 | Геометрическая основа лунного датума LLR (отражатели в системе главных осей, наземные станции, аналитические частные производные дальности) | Пять ближних к Земле решёток уголковых отражателей в метрах в связанной системе главных осей PA и наземные станции LLR в геодезических координатах; размещение отражателей из связанной системы в инерциальную через ориентацию PA по DE440; аналитические частные производные дальности «Земля — отражатель» по 4-параметрическому датуму; и информационная матрица Фишера только по LLR, показывающая вырожденность «луноцентр X — масштаб», которая и обосновывает 7-параметрический анализ | lunar_llr_geometry | lunar_llr_geometry::tests (reflector_and_station_catalogs_are_well_formed, analytic_partials_match_finite_difference, llr_one_way_range_is_earth_moon_scale, zero_datum_reproduces_nominal_range, llr_only_fisher_shows_strong_com_x_scale_degeneracy); tests/lunar_pa_frame_realisation_guard.rs; tests/llr_datum_degeneracy_reference.rs; tests/lunar_llr_geometry_range_oracle.rs::reflector_ranges_against_ilrs_normal_points | Вычисление проверено внутренне: каждая аналитическая частная производная — по конечной разности, а случай нулевого датума — по номинальной дальности. КАТАЛОГ проверен внешне и независимо: координаты главных осей DE440 (Park et al. 2021, tests/fixtures/llr_geometry/de440_retroreflectors_pa.csv) перекрёстно проверены по таблице 6 меморандума о поверхностных координатах DE430 (tests/fixtures/lunar_llr/de430_retroreflectors_pa.csv, машинно извлечённой из PDF с проверенной SHA-256 скриптом tests/fixtures/lunar_llr/generate_de430_retroreflectors_pa.py) и совпадают с точностью 1,12 м, тогда как реализация тех же пяти решёток в системе среднего положения Земли отличается на 672–871 м. СТРУКТУРА ВЫРОЖДЕННОСТИ проверена по опубликованному результату: Sosnica et al. 2025, 'Definition and Realization of the International Lunar Reference Frame', arXiv:2510,15484, где для системы лунных главных осей приводится коэффициент корреляции «луноцентр X — масштаб» r = -0.97 и сообщается, что LLR не достигает фактического центра масс Луны с точностью лучше 12 см из-за этой корреляции. Этот модуль воспроизводит ту же структуру (|corr(t_x, scale)| между 0,9 и 0,9999, дефект датума <= 1) по плану Фишера только для LLR. Подкрепление получено между эфемеридами, а не круговым прогоном: статья объединяет INPOP21a, DE430 и EPM2021, тогда как этот модуль управляется либрацией DE440. НЕ воспроизведена величина: корреляция здесь около -0.988 против их -0.97, а 4-параметрический CRLB составляет доли миллиметра против достигнутого у них порога в 12 см, потому что ориентация и координаты отражателей здесь зафиксированы, а там оцениваются. Только геометрия и структура вырожденности; никаких утверждений о точности решённого датума. 0,30 внешнее сравнение: части этого модуля, относящиеся к измеренной дальности (reflectors(), stations_itrf(), размещение PA по DE440 и барицентрическое время распространения света llr_bcrs_one_way_m), проверены в собственной строке, модель измеренной дальности LLR, по 192 нормальным точкам ILRS (RMS 2,81 м при пороге 10 м). Эта строка остаётся MODELLED, потому что измеренное сравнение не затрагивает остальную часть её утверждения. Каталог геодезических станций stations() округляет APOLLO до 0,001 град; при геоцентрическом времени распространения света он даёт 22,7 м на тех же точках (тест reflector_ranges_against_ilrs_normal_points; 96 м при прежней поэлементной интерполяции ориентации). Аналитические частные производные дальности и информация Фишера только по LLR вычисляются через llr_range_m и reflector_inertial с аналитическим рядом для Луны (ephem::moon_position, около 0,3 град от GCRS) и без учёта времени распространения света | MODELLED |
| VM-055df2b8 | Модель измеренной дальности LLR (каталог отражателей, станции ITRF2020, размещение главных осей по DE440, барицентрическое время распространения света по IERS 2010) | Односторонняя дальность «наземная станция — отражатель» для нормальной точки лазерной локации Луны: пять ближних к Земле решёток уголковых отражателей в метрах в связанной системе главных осей (PA) DE440 (lunar_llr_geometry::reflectors); станции из stations_itrf(), а именно Grasse 7845 и Matera 7941 из ITRF2020 на эпоху 2015,0 с их скоростями, помещённые в Геоцентрическую небесную систему отсчёта (GCRS) преобразованием IERS 2010 с движением полюса по Bulletin A (lunar_vlbi::station_inertial_position_itrs), и APOLLO 7045 в опубликованном оператором приближённом геоцентрическом положении (без скорости); размещение отражателей из связанной системы в инерциальную через ориентацию PA по DE440 (lunar_orientation::try_de440_moon_pa_body_to_inertial, возвращающая ошибку вне 2014–2030); и барицентрическое время распространения света по IERS Conventions 2010, раздел 11,2 (lunar_llr_geometry::llr_bcrs_one_way_m: преобразование станции и отражателя из системы тела в BCRS по уравнению 11,19 и задержка Шапиро от Солнца, Земли и Луны по уравнению 11,17). ВХОДНЫЕ ДАННЫЕ, не часть утверждения: барицентрические состояния и потенциалы Земли, Луны и Солнца (DE440 через SPICE), UT1-UTC и движение полюса по IERS, а также измеренное время полного пути, переведённое из TT в TDB. СО СТОРОНЫ ТЕСТОВОЙ ОБВЯЗКИ, не часть утверждения: зенитная задержка Mendes-Pavlis с отображением FCULa, в тесте, с углом места из каталога геодезических станций stations(). Не смоделированы: приливы, эксцентриситеты станций, тепловые члены отражателей | lunar_llr_geometry (reflectors, stations_itrf, ItrfStation, StationCoordinates, llr_bcrs_one_way_m, body_to_bcrs_tdb, shapiro_leg_m, BcrsEvent); lunar_orientation (try_de440_moon_pa_body_to_inertial); lunar_vlbi (station_inertial_position_itrs) | tests/lunar_llr_geometry_range_oracle.rs::reflector_ranges_bcrs_iers2010_relativistic (192 нормальные точки ILRS: СКО 2,81 m; две станции ITRF2020 в отдельности 2,96 m; обе не более 10 m); tests/lunar_llr_geometry_range_oracle.rs::round2_finding_is_a_common_offset_of_about_eleven_metres (вытесненная геоцентрическая модель светового времени, 10,94 m, закреплено) | Измерено: 192 лунных нормальных точек ILRS CRD v2 (EUROLAS Data Center, DGFI-TUM, 2024-04 — 2024-06; Grasse 151, APOLLO 32, Matera 9; зафиксированы без изменений вместе с SHA256SUMS). Предсказанная односторонняя дальность сравнивается с произведением c на половину измеренного времени полного пути в TDB. Порог зафиксирован до сравнения: RMS не более 10 м по всем 192 точкам И по 160 точкам только двух станций ITRF2020. Порог взят из третьей поправки к предварительной регистрации 3e0f5cdf, зафиксированной до изменения движка и прогона; значение 10 м не менялось с раунда 1. Измерено: 2,81 м (среднее 2,67 м) по всем точкам; 2,96 м по станциям ITRF2020; APOLLO 1,94 м; срез 2015 года (349 точек, вторичный) 3,82 м. Мутация: обнуление звеньев задержки Шапиро от Солнца даёт 10,19 м, что не проходит. История, раскрытая полностью: 96 м при поэлементной интерполяции ориентации; 22,7 м после геодезической интерполяции с геодезическим каталогом; 10,94 м со станциями ITRF2020 и движением полюса, но с геоцентрическим временем распространения света (общее смещение +10,9 м). Барицентрическая модель была написана после того, как это смещение стало известно. Это опубликованная модель IERS 2010, раздел 11,2, без свободных параметров. Третья поправка заменила самостоятельно введённое условие «только ITRF2020/SLRF2020» после результата BLOCKED. RMS только по ITRF2020 проходит без APOLLO, для которого нет решения ITRF2020 или SLRF2020, а его положение — приближённое, заявленное оператором. Остаётся общее смещение +2,7 м, ниже порога и без подгонки. Порог слабый относительно результата: отсутствующий солнечный член в 7,6 м всё равно даёт 10,19 м. Члены ниже порога по отдельности не разрешаются: при обнулённом движении полюса RMS составляет 6,15 м (станции ITRF2020 5,98 м), а при удалении преобразования по уравнению 11,19 — 2,96 м; оба варианта всё равно прошли бы. Скорости станций и члены Шапиро от Земли и Луны ещё меньше. Сравнение подтверждает собранную одностороннюю дальность на уровне RMS 10 м и солнечный член Шапиро, но не каждую перечисленную составляющую | VALIDATED |
| VM-105d48cb | Связанная калибровка лунной системы отсчёта и шкалы времени: совместное нуль-пространство пространственного датума, смещения часов и ухода частоты часов | assemble_coupled_info строит 9-параметрическую связанную информацию Фишера по [t_x, t_y, t_z, s, theta_x, theta_y, theta_z, d_tau, d_alpha]; classify_null_space возвращает инвариантное к базису разложение её нуль-пространства на чисто пространственные, чисто временные и действительно связанные измерения, плюс норму связи проектора «пространственное — временное»; coupled_marginal_eigs даёт маргинал {масштаб, смещение} по дополнению Шура. На зафиксированных сетях движок сообщает датум полного ранга (дефект 0) для корректно поставленного случая и точный дефект по единственному направлению ухода для случая одной эпохи (прошедшее время равно нулю, поэтому уход по построению ненаблюдаем) и вычисляет маргинал {s, d_tau} в обоих случаях. | lunar_gauge | tests/lunar_coupled_gauge_reference.rs::coupled_gauge_matches_numpy_on_real_de440_rows (9 собственных значений, defect/dim_spatial/dim_temporal/coupled_dim/p_st_norm и маргинал Шура по {scale,offset} для сетей well_posed из 120 строк и single_epoch из 30 строк, с rel<1e-3 и abs<1e-3); lunar_gauge::tests (coupled_marginal_fisher_is_symmetric_and_psd, oneway_spatial_equals_orbiter_range_row_datum7, twoway_spatial_equals_oneway_spatial_at_same_geometry) | ЧТО ПРОВЕРЕНО ВНЕШНЕ, сформулировано узко: kshana вычисляет разложение по собственным значениям собственным написанным вручную решателем Якоби (fim::sym_eig), а маргинал — собственной псевдообратной матрицей; оракул пересчитывает оба результата в numpy/LAPACK (np.linalg.eigvalsh/eigh/pinv) через scripts/gen_coupled_gauge_ref.py. Согласие с точностью rel<1e-3 поэтому является проверкой АРИФМЕТИКИ ЭТОГО КРЕЙТА независимой библиотекой относительно стандартной реализации, и это есть заявленное утверждение уровня Validated, причём целиком. ЧЕГО НЕТ: сборка и классификация нуль-пространства — собственные правила этого модуля, а оракул воспроизводит их по той же спецификации, а не по независимому источнику — это подтверждает реализацию, а не правило. Геометрия маяков и орбитальных аппаратов — Modelled и представительная. Строки наблюдений действительно несут реальную ориентацию Луны PA по DE440 (lunar_datum::orbiter_range_row_datum7 -> lunar_orientation::de440_moon_pa_body_to_inertial), но это ВХОДНЫЕ ДАННЫЕ, которые получают обе стороны, а не свидетельство об ответе, и записано это здесь как происхождение, а не как основание для статуса — то же различие main уже проводит в строке целостности общего режима. Каждое число с плавающей точкой в строке округляется до 6 знаков после запятой перед записью network.json, так что обе стороны читают идентичные числа IEEE-754 двойной точности, и единственное оставшееся различие — решатель. | VALIDATED |
| VM-b3782756 | Вырожденность «дальность — смещение часов» при односторонних лунных измерениях дальности и закон проектирования по геометрическому разнообразию | Вырожденность «радиальная дальность на узел — смещение часов приёмника» точна: 1 м соответствует 3,336 нс (единица, делённая на c). Маргинал {масштаб, смещение} по дополнению Шура (coupled_marginal_fisher) показывает, что в геометрически разнообразной сети двусторонние измерения дальности поднимают маргинал примерно в той же степени, что и равное число дополнительных односторонних данных, тогда как в идеализированном режиме одного узла двусторонний выигрыш больше на порядки. Из этого следует закон проектирования: именно геометрическое разнообразие, а не двусторонние измерения дальности как таковые, разделяет масштаб лунной системы отсчёта и смещение шкалы времени при односторонних измерениях; двусторонняя или внешняя привязка времени требуется только при низком разнообразии или в режиме одного пользователя. | lunar_gauge | lunar_gauge::tests (coupled_marginal_well_posed_network_is_psd, coupled_marginal_twoway_equals_more_oneway_in_diverse_network, coupled_marginal_twoway_lift_three_orders, oneway_range_row_has_correct_temporal_entries, twoway_range_row_has_zero_at_offset_and_rate, time_tie_row_equals_pure_offset_vector, rate_tie_row_has_correct_structure) | Маргинальная информация Фишера по дополнению Шура для связанной информационной матрицы, в замкнутой форме линейной алгебры, проверенная по двум предельным режимам, которые она предсказывает. Эквивалентность 1 м и 3,336 нс есть определение метра через c и не является эмпирическим результатом. Сети наблюдений представляют собой представительную геометрию уровня Modelled, поэтому закон проектирования — это утверждение о предъявленной ему геометрии и не содержит никаких утверждений о какой-либо действующей лунной сети. | MODELLED |
| VM-a3971a9a | Связь релятивистского хода часов с системой отсчёта для лунной шкалы времени | rate_frame_jacobian(_with) даёт чувствительность хода лунной шкалы времени к реализации системы отсчёта по экваториальному эффективному потенциалу, усечённому на степени 2 (GM, экваториальный радиус, J2, вращение; LunarSurfacePotential): d_alpha/d_scale = L_m, около +3.1388e-11; d_alpha/d_velocity = -|v_moon|/c^2, около -1.11e-14 (зависит от времени); d_alpha/d_r_radial = g_eff/c^2, около +1.806e-17 на метр. При радиальном сдвиге датума на 1 м это возмущение хода около 1.8e-17 (арифметическое следствие радиальной составляющей), намного меньше примерно 1.7e-11 отклонения хода лунной шкалы времени относительно TT | lunar_gauge, lunar_time | tests/lunar_rate_frame_coupling_preregistered.rs (entry1_d_alpha_d_scale_matches_the_published_l_m_for_both_cited_fields: L_m в пределах 2.8e-6 от Ashby and Patla 2024 с J2 из AIUB-GRL350A/B; entry2_d_alpha_d_radial_matches_the_degree_350_equatorial_gravity_for_both_fields: радиальный элемент в пределах 8.3e-5 от экваториальной гравитации степени 350 в pyshtools; entry3_d_alpha_d_velocity_matches_the_de441_lunar_speed: элемент скорости в пределах 2.5e-3 от лунной скорости DE441 на 2000 эпохах); lunar_gauge::tests; регрессия tests/lunar_rate_frame_coupling_oracle.rs | Предварительно зарегистрировано (5590ab21): L_m сверяется с Ashby and Patla 2024 (AJ 167:149), уравнение (10), 3,13881(15)e-11, по GM, a_m, omega_m и J2 из статьи для двух полей степени 350, на которые ссылается статья (Bertone et al. 2021, AIUB-GRL350A/B), в пределах 1e-4; радиальная составляющая сверяется с экваториальной гравитацией тех же полей по pyshtools 4.14.1 (BSD-3) в пределах 1e-4 (измерено 8.3e-5 и 6.7e-5, запас узкий); скоростная составляющая сверяется со скоростью Луны по JPL Horizons DE441 в пределах 4.5e-3. Замкнутая форма степени 2 для опубликованного значения степени 350 (остаточные степени 3–350; Reference, не P1). Раскрыто: результат записи 1 был известен до предварительной регистрации, а поставляемый по умолчанию радиус 1738,14 км — определение поверхности из статьи, принятое после раунда 1. Приливные вклады и полоса сравнения остаются цифрами уровня Modelled для поверхности отсчёта | VALIDATED |
| VM-3da07d8a | Инвариантная к базису классификация связанного нуль-пространства системы отсчёта и шкалы времени | classify_null_space раскладывает нуль-пространство датума на чисто пространственную (размерность d минус ранг U_T), чисто временную (d минус ранг U_S) и действительно связанную (ранг U_S плюс ранг U_T минус d) части, плюс норму связи проектора «пространственное — временное» p_st_norm, норму Фробениуса внедиагонального блока проектора нуль-пространства. Каждая из этих величин является функцией ПРОЕКТОРА, а не выбранного базиса, поэтому они инвариантны относительно любого ортонормированного выбора нулевых векторов, и именно это делает классификацию пригодной для отчёта. | lunar_gauge | lunar_gauge::tests (classify_is_invariant_under_null_basis_rotation - осевой нулевой базис и его поворот на 0,6 rad дают одинаковые defect, dim_spatial, dim_temporal, coupled_dim и p_st_norm; classify_direct_sum_null и classify_coupled_null - построенные случаи прямой суммы и действительно связанный случай подтверждают разложение размерности; classify_basis_invariant; index_consts_are_correct); tests/lunar_gauge_classification_scipy_oracle.rs::classify_null_space_matches_scipy_subspace_intersection (72 построенные матрицы Фишера 9x9 по 18 нулевым подпространствам, каждое в четырёх случайных ортонормированных перебазированиях: defect, dim_spatial, dim_temporal и coupled_dim точны; p_st_norm в пределах 6.0e-15, порог 1e-9) | SciPy/NumPy (BSD-3-Clause; scipy.linalg.null_space и numpy.linalg.svd, LAPACK gesdd) классифицируют те же зафиксированные матрицы по пересечению подпространств, dim null([F; E_T]) и dim null([F; E_S]), и по проектору нуль-пространства через SVD, который отличается от собственных векторов Якоби и формул ранга Грама в Kshana; предварительно зарегистрировано (d429993c): целые числа точно, p_st_norm с точностью 1e-9 (P2, независимая численная библиотека), с заранее фиксированным порогом ранга и утверждаемым спектральным разрывом не менее 1e6. Утверждение строки — это классификация заданной матрицы, поэтому P2 покрывает его полностью. Построенные случаи включают прямые суммы, связанные и смешанные нуль-пространства и случайные смены базиса; размерности реальных сетей из строки связанной калибровки здесь заново не пересчитываются. Внутрикрейтовый тест инвариантности (повёрнутый нулевой базис даёт идентичные результаты) сохранён | VALIDATED |
| VM-90ae0e7c | Представительное меню многометодных измерений и правило аддитивного объединения информации Фишера | MeasurementBlock хранит одну кандидатную кампанию измерений как вклад в информацию Фишера 7x7 плюс скалярную относительную стоимость; block_from_rows строит его из необработанных строк якобиана датума, так что каждый блок предобусловливается одинаково через lunar_identifiability::assemble_multi_info; combine суммирует информацию выбранного подмножества, и это верное правило, потому что информация Фишера аддитивна для независимых измерений; representative_lunar_menu поставляет детерминированное меню из четырёх блоков (LLR, поперечный VLBI-маяк на лимбе, орбитальный аппарат на видимой стороне и орбитальный аппарат на обратной стороне). Оптимизатор плана с ограничением по бюджету, использующий это меню, не входит в этот крейт. | lunar_techniques | lunar_techniques::tests (combine_is_additive_order_independent_and_empty_is_zero — пустой выбор даёт нулевую матрицу, одиночный выбор — единичное преобразование, пара равна независимо написанной поэлементной сумме, а результат инвариантен к порядку выбора; adding_a_block_never_reduces_the_degeneracy_metric — монотонность при добавлении информации; radial_diversity_beats_transverse_for_breaking_the_degeneracy — блок орбитального аппарата на обратной стороне повышает метрику вырождения сильнее, чем поперечный блок VLBI) | Аддитивность информации Фишера для независимых измерений — свойство замкнутой формы, проверенное здесь по независимо написанной поэлементной сумме, а также по инвариантности к порядку и монотонности, которые из неё следуют. ЗАМЕЧАНИЕ О СВИДЕТЕЛЬСТВАХ: у объединителя прежде не было ни одного теста, а единственный тест в модуле суммировал две информационные матрицы прямо в тексте теста вместо вызова объединителя, так что сломанный объединитель оставил бы модуль зелёным; теперь тест проходит через combine и падает при его мутации. Все расположения маяков, геометрия орбитальных аппаратов, точности отдельных методов и относительные стоимости — представительные значения, а не параметры миссий (см. tests/fixtures/llr_geometry/NOTICE.md), поэтому каждая метрика вырожденности и каждая цифра CRLB, полученные через это меню, наследуют статус Modelled, присущий lunar_identifiability::decompose. | MODELLED |
| VM-7faeee00 | Межпоставщиковая согласованность лунной системы отсчёта и динамики (реальное сравнение эфемерид) | разложение расхождения геоцентрических положений Луны по DE440/INPOP21a/EPM2021 только по вращению (6 параметров: сдвиг и вращение) на сокращаемую общую привязку ICRF и неустранимый избыток ориентации лунной орбиты (полная 7-параметрическая подгонка Гельмерта — отдельная публичная функция, НЕ охваченная этой внешней проверкой: её свидетельство — внутренний модульный тест аналитического восстановления плюс tests/lunar_helmert_fit_cross_check.rs, который согласует её с точной подгонкой Гаусса — Ньютона уровня Validated в lunar_frame_realise и фиксирует противоположное соглашение о знаке вращения между ними) | lunar_interop_budget | tests/lunar_interop_budget_reference.rs (raw / rotation-residual / theta_moon / theta_frametie / theta_excess / reducible / irreducible для 3 пар поставщиков в сравнении с независимой подгонкой SciPy SVD lstsq в tests/fixtures/inter_ephemeris/reference.json, rel<1e-3 abs<1e-3 m; фикстуры и оракул побайтно согласованы через scripts/gen_interop_ref.py на публичных ядрах DE440/INPOP21a/EPM2021 через IMCCE calceph) | Три независимые авторитетные эфемериды — DE440 (JPL), INPOP21a (IMCCE), EPM2021 (IAA RAS) — выбраны через IMCCE calceph и перекрёстно проверены независимой подгонкой наименьших квадратов по SVD в numpy. ПОЧЕМУ ЗДЕСЬ Validated, А В lunar_common_mode — НЕТ, на тех же трёх эфемеридах: здесь сообщаемая величина ЕСТЬ свойство опубликованных данных — их взаимное расхождение, — так что оракулом служат сами эфемериды, а не входные данные. В lunar_common_mode то же расхождение подаётся в MODELLED геометрию орбитальной группировки, и ответ является свойством этой модели, поэтому та строка корректно имеет статус Modelled/ReferenceImpl. | VALIDATED |
| VM-660ef3e9 | Допуск межпоставщиковой согласованности для пользователя со смешанными поставщиками | consistency_tolerance: обращает бюджет положения пользователя в требование к согласию по Гельмерту между поставщиками для каждого параметра (начало координат/масштаб/вращение) при опорном плече, при необходимости увеличенное за счёт CRLB реализации одного поставщика уровня P1 | lunar_interop_budget | lunar_interop_budget::tests (монотонность по бюджету; сокращение бюджета RSS при CRLB на поставщика; рабочий допуск по вращению на лунном плече; определяющий член = вращение) | Оценка худшего случая по неравенству треугольника для действия точечного якобиана Гельмерта (замкнутая форма) | MODELLED |
| VM-24491422 | Бюджет ошибок межпоставщиковой совместимости лунной системы отсчёта и закон проектирования «система отсчёта против эфемерид» | interop_budget: разделение на сокращаемую (общая привязка системы отсчёта) и неустранимую (динамика) части при соглашениях PerProvider / CommonFrameTie / CommonEphemeris, с метрикой закона проектирования — неустранимой долей (~0,69 на реальных DE440/INPOP/EPM: один общий тег системы отсчёта оставляет доминирующий нижний предел) | lunar_interop_budget | lunar_interop_budget::tests (CommonEphemeris обнуляет бюджет; CommonFrameTie < PerProvider; irreducible_fraction > 0,5 на реальных разбиениях; порядок конвенций) | RMS-агрегирование попарных разложений уровня Validated при каждом соглашении (замкнутая форма) | MODELLED |
| VM-3d1c5457 | Конвейер линейной алгебры для наблюдаемости отказов автономной свободной сети (проектор чётности, обнаруживаемость, параметр нецентральности MDB, блочная византийская искра) | На реальной лунной сети DE440 по узлам (каждая строка — дифференциальная односторонняя дальность между узлами, построенная через pernode_range_row с реальным направлением визирования в системе PA Луны по DE440) движок вычисляет взвешенный проектор чётности P⊥ = I − G(GᵀWG)⁺GᵀW (форма с псевдообратной матрицей для неполного ранга, устойчивая к 8-мерной калибровке «датум ⊕ шкала времени»), невязку обнаруживаемости T1 ‖P⊥·b‖ (отказы в области значений аннулируются, обычные отказы обнаруживаются), квадратичную форму нецентральности MDB по Baarda cᵀWP⊥c (правильная взвешенная форма с одним P⊥, а НЕ форма с двойным P⊥ cᵀP⊥WP⊥c) с MDB = √(λ₀/cᵀWP⊥c), а также числа обнаружения и идентификации блочной византийской искры для составных эффективных сигнатур пиров P⊥·B_T (по рангу столбцов, а не просто ненулевые) | lunar_faultobs | tests/lunar_faultobs_reference.rs (faultobs_matches_numpy_scipy_on_real_de440_rows: матрица P⊥ 84×84 поэлементно, след(P⊥) = parity_dim = 52 и ранг(G) = 32, нормы обнаружимости + флаги, квадратичная форма MDB cᵀWP⊥c + значение MDB и счётчики обнаружения/идентификации block-spark для каждой коалиции партнёров воспроизведены в сравнении с независимым оракулом numpy/scipy с rel<1e-3 abs<1e-3 при точных целочисленных счётчиках; входные данные побайтно согласованы через examples/gen_faultobs_rows.rs + scripts/gen_faultobs_ref.py) | Независимое воспроизведение линейной алгебры в numpy/scipy на реальных строках направления визирования Луны в системе PA по DE440 (P⊥ из SVD отбелённого плана W^{1/2}G; параметр нецентральности MDB из классического квадрата нормы подпространства чётности по Baarda (1968); ранг блока из подсчёта сингулярных значений в numpy SVD) — принципиально иной численный путь, чем циклическое разложение Якоби для GᵀWG в крейте. Охват (по tests/fixtures/faultobs/NOTICE.md): это подтверждает ЛИНЕЙНО-АЛГЕБРАИЧЕСКИЙ КОНВЕЙЕР только на этих строках. Геометрия узлов — Modelled. Это НЕ эксплуатационная гарантия целостности, НЕ сертификация уровня защиты и НЕ какое-либо утверждение о доступности RAIM/ARAIM, и НЕ миссионная гарантия византийской отказоустойчивости: ЧИСЛО допускаемых отказов для этой сети — Modelled, тогда как ГРАНИЦА блочной искры «обнаружение > f / идентификация > 2f» — Cited (Fawzi–Tabuada–Diggavi 2014; Shoukry–Tabuada 2016; блочная искра по Donoho–Elad 2003) и реализована в коде как доказанная конкретизация | VALIDATED |
| VM-bff0cee3 | Граница блочной византийской искры для обнаружения и идентификации в автономной лунной сети по узлам (T3) | byzantine_bound конкретизирует границу кодирования для безопасного оценивания состояния и разреженной наблюдаемости на геометрии сети по узлам: византийский пир вносит произвольную линейную комбинацию измерений, в которых он участвует, а сеть ОБНАРУЖИВАЕТ любую коалицию из ≤ f = block_spark − 1 пиров и однозначно ИДЕНТИФИЦИРУЕТ любую коалицию из ≤ ⌊(block_spark − 1)/2⌋, где block_spark — наименьшая коалиция пиров, составные эффективные сигнатуры P⊥·B_T которой имеют неполный ранг столбцов. Обнаруживаемость пира — это ПОЛНЫЙ РАНГ СТОЛБЦОВ P⊥·B_j (ненулевой, но не полного ранга блок — это ненулевая атака, которая попадает в range(G) и не оставляет невязки), а не просто P⊥·B_j ≠ 0 | lunar_faultobs | lunar_faultobs::tests — byzantine_c3_rank_deficient_but_nonzero_is_undetectable (ненулевой, но с дефицитом ранга блок ⇒ block_spark 1, f_detect 0; независимые столбцы ⇒ block_spark 2, f_detect 1), byzantine_real_network_uniform_bias_is_clock_offset (партнёр, которому принадлежат все измерения узла = ошибка смещения часов ∈ range(G), необнаружима, с чётким спектральным разрывом Грама), byzantine_redundant_net_identifies_at_least_one (шесть независимых партнёров с одним измерением ⇒ block_spark 7, f_identify 3), byzantine_analytic_spark_identity_projector + byzantine_detect_identify_relations (ручные случаи P⊥ = I фиксируют f_detect = block_spark − 1, f_identify = ⌊(block_spark − 1)/2⌋) | Геометрическая конкретизация границы блочной искры и безопасного оценивания состояния (Fawzi–Tabuada–Diggavi 2014; Shoukry–Tabuada 2016; блочная искра по Donoho–Elad 2003; Candès–Tao 2005) — НЕ порог консенсуса Lamport–Shostak–Pease 3f+1 («византийский» называет только МОДЕЛЬ произвольных или сговорившихся отказов). Конкретное число допускаемых отказов — свойство уровня Modelled представительной геометрии сети, проверенное на внутреннюю согласованность вручную построенными аналитическими случаями и формулами подсчёта | MODELLED |
| VM-ea17589a | Нижний предел временной калибровки при автономном holdover для самореферентной лунной орбитальной группировки (T4) | holdover_floor устанавливает, что в ансамбле автономных узлов, связанных только межузловыми измерениями, общий ход часов (δα_j += 1 ∀j) является свободным параметром шкалы времени ансамбля, лежащим в N(GᵀWG): никакое количество дополнительных межузловых измерений дальности не может его наблюдать (rate_in_gauge = true, temporal_gauge_dim = 2 вместе с общим смещением). Это подлинный нижний предел holdover — временной аналог позиционной калибровки жёсткой системы отсчёта. Добавление одной внешней привязки абсолютного хода (прямая связь с эталоном вне сети) выводит общий ход из нуль-пространства (rate_in_gauge = false, temporal_gauge_dim = 1), что доказывает: предел — реальная калибровка, а не артефакт модели генератора | lunar_faultobs | lunar_faultobs::tests — holdover_floor_self_ref_and_anchored (самореферентная сеть: общая скорость лежит в N(GᵀWG), temporal_gauge_dim 2; после одной внешней строки привязки скорости: скорость вытеснена из калибровки, temporal_gauge_dim 1, общее смещение сохраняется) | Аргумент о свободном параметре шкалы времени ансамбля (Percival 1978; Lewandowski & Thomas 1991), конкретизированный на представительной реальной лунной сети DE440 по узлам: нулевой тест относительной невязки аналитического генератора общего хода относительно GᵀWG, с контрастом при снятом вырождении, отличающим подлинную калибровку от артефакта модели генератора. Представительная геометрия уровня Modelled, а не сертифицированный бюджет синхронизации | MODELLED |
| VM-7cf3772f | Разделение на общую и дифференциальную составляющие по поставщикам, унификация через единичный дефект ранга и наклон разрыва защиты (T5 / §0 / g7) | Три грани единого разложения ℝ^{state_dim} = N(GᵀWG) ⊕ range(GᵀWG), где 8-мерная калибровка «датум ⊕ шкала времени» — это N(G), а state_dim − 8 = 32 наблюдаемых направлений — range(G): (T5) provider_mismatch_split классифицирует общее смещение нескольких поставщиков (∈ range(G)) как НЕОБНАРУЖИВАЕМОЕ — требующее внешней привязки — а дифференциальное смещение (∉ range(G)) как самоконтролируемое / ОБНАРУЖИВАЕМОЕ; (§0) унификация состоит в том, что ТО ЖЕ слепое подпространство range(G) определяет класс необнаруживаемых отказов, так что калибровка датума N(G) и слепое к отказам подпространство range(G) — это одна геометрия, а не две; (g7) slope возвращает наклон разрыва защиты по Brown ‖Π_obs Δx̂‖ / ‖P⊥b‖_W → ∞ для отказа b ∈ range(G) (оценка искажена при нулевой чётности) и конечный наклон для обнаруживаемого отказа | lunar_faultobs | lunar_faultobs::tests — provider_mismatch_split_common_undetectable_differential_detectable (общее смещение необнаружимо, дифференциальное обнаружимо), slope_infinity_in_range_finite_detectable (g7: наклон ∞ для b ∈ range(G), конечный для b ∉ range(G)), pernode_rank_is_state_dim_minus_eight (§0: rank(GᵀWG) = state_dim − 8, 8-мерная калибровка — всё нулевое пространство со спектральным разрывом >1e6) | Алгебра проектора чётности и псевдообратной матрицы в замкнутой форме на представительной реальной лунной сети DE440 по узлам: разделение на общую и дифференциальную части, унификация N(G) ⊕ range(G) и наклон разрыва защиты по Brown (1992) следуют из аннулирования образа P⊥·G = 0. Представительная геометрия уровня Modelled, а не сертифицированный уровень защиты | MODELLED |
| VM-fab6cff7 | MTIE и TDEV для телекоммуникационной синхронизации на ряде ошибок времени при holdover | Максимальная ошибка временного интервала и девиация времени, о которых сообщает тип сценария telecom-timing, на записи holdover телекоммуникационного масштаба: MTIE в скользящем окне с монотонной очередью за O(n) (telecom_timing::mtie_sliding, нужен, чтобы сутки односекундных отсчётов обрабатывались быстро) и TDEV движка (allan::time_deviation), вычисленные на сетке, о которой сообщает этот тип, и считанные обратно из полного прогона, принимающего ряд |
telecom_timing (mtie_sliding, mtie_curve_ns, tdev_curve_ns); allan (mtie, time_deviation) | tests/telecom_timing_reference.rs (17 коэффициентов усреднения MTIE и 12 TDEV на зафиксированном ряду holdover 2 048 отсчётов атомных часов чипового масштаба со старением, фликкером и температурой, в сравнении с allantools 2024,06 с относительной точностью <1e-12 / <1e-9, наблюдаемо точно / 1.1e-15; те же кривые, считанные из полного прогона синхронизации времени для телекоммуникаций, принимающего CSV); telecom_timing::tests (скользящий MTIE равен allan::mtie в каждом окне; MTIE и TDEV, выведенные вручную; монотонный MTIE) | allantools 2024,06 — независимая сторонняя библиотека стабильности частоты — mtie() и tdev() на tests/fixtures/telecom_timing/holdover_te_series.csv, причём ряд разобран из одного и того же 17-значного текста с обеих сторон; эталон записывает SHA-256 ряда и может быть воссоздан офлайн через tests/fixtures/telecom_timing/generate_telecom_timing_reference.py. Подтверждает ОЦЕНИВАТЕЛИ на этой записи, а не синтетический holdover, который её породил | VALIDATED |
| VM-b5a1c2e5 | Маски телекоммуникационной синхронизации ITU-T с PASS/FAIL и запасом | Переписанные пределы ITU-T G.8272 (07/2025) PRTC-A/B, G.8272.1 (2024) Amd. 1 (07/2025) ePRTC в режиме привязки и ePRTC-A при holdover (включая огибающую ошибки времени из таблицы 3), G.8273.2 (2023) Amd. 2 (11/2025) T-BC/T-TSC классов A–D и G.8271.1 (2022) Amd. 3 (05/2025) опорной точки C, каждый открытый или закрытый интервал — как его указывает таблица, с пропуском всех записей «для дальнейшего изучения»; для каждой проверки — вердикт и запас в определяющей точке, а также время превышения каждого бюджета. Запускается как тип сценария telecom-timing |
telecom_timing (MASKS, eprtc_a_holdover_limit_ns, check_curve, check_mask) | telecom_timing::tests (mask_boundaries_follow_the_tables_exactly — открытые и закрытые концы, разрыв τ = 400 с в таблице 7-3 G.8271.1, непрерывность в каждой точке излома, которую подразумевают таблицы; a_curve_exactly_on_the_limit_passes_and_just_above_fails; eprtc_a_holdover_envelope_follows_table_3; a_coarse_record_is_not_evaluated_against_a_filtered_mask); tests/telecom_timing_reference.rs (telecom_timing_kind_round_trips_through_the_dispatch); tests/telecom_masks_itu_printed_values.rs (mask_values_match_the_numbers_the_recommendations_print; figure_7_2_label_at_1_3_s_is_not_its_own_table_value) | Переписанный текст названных Рекомендаций (свободно доступны на itu.int), где каждый предел сопровождается своей таблицей или пунктом и перечислен в docs/TELECOM-TIMING.md вместе со всеми неподтверждёнными или нереализованными пунктами; тождества непрерывности в точках излома, вытекающие из таблиц, проверяются в тестах. Переписанный стандарт с проверками внутренней согласованности, а не испытание на соответствие и не внешняя проверка. 0,30 раунд 2 (предварительно зарегистрирован 970003ee), заблокирован (остаётся MODELLED): десять значений масок и тринадцать значений holdover для ePRTC-A, которые Рекомендации приводят как рабочие числа (G.8272, рис. 1–2, G.8272.1 Amd.1, п. 8.2.1 и рис. V.1–V.3, G.8271.1 Amd.3, рис. 7-2 – 7-4), воспроизводятся с точностью до половины печатной единицы, причём большинство из них — константы таблиц или точки излома; на рис. 7-2 G.8271.1 подписано 200 нс при 1,3 с вопреки собственной таблице 7-1 (197,5 нс). Для пределов классов A–D по G.8273.2 печатных рабочих значений нет, а подписи точек излома ePRTC в режиме привязки по G.8272.1 (на сплошных линиях построения) были исключены предварительно зарегистрированным правилом отбора, поэтому они остаются переписанными значениями | MODELLED |
| VM-df4578d8 | Маски блуждания при генерации для синхронизации частоты ITU-T (G.811, G.812, G.8262, G.8262.1) | Семь масок блуждания при генерации MTIE и TDEV при постоянной температуре для типа telecom-timing: G.811 (09/1997) PRC (автономный), G.812 (06/2004) типы I, II и III, G.8262 (10/2024) EEC варианты 1 и 2 и G.8262.1 (11/2025) eEEC (режим привязки), включая степенные участки, которые записаны в таблицах (8 τ^0.5 и подобные), каждый интервал открыт или закрыт как напечатано, измеренные через фильтр 10 Гц, который указывают пункты (принят применяемым до дискретизации); опорный сценарий scenarios/telecom-synce-eec.toml сопоставляет свободно работающий OCXO с тремя масками EEC. Не реализованы: допуски при переменной температуре, holdover, переходные процессы, джиттер и точность частоты по G.811 |
telecom_timing (MASKS, Segment::tau_exponent, MeasurementFilter::LowPass10HzAtSource, MaskCondition::Autonomous) | telecom_timing::tests (g811_prc_masks_follow_clause_6_1; g812_masks_follow_tables_3_4_6_and_7; g8262_masks_follow_tables_1_3_4_and_5; g8262_1_eeec_masks_follow_tables_1_and_3; a_linear_piece_is_evaluated_without_powf; wander_masks_pass_a_quiet_white_fm_flicker_series; wander_masks_fail_the_same_series_scaled_up) | Переписанный текст названных Рекомендаций (загружены с itu.int 2026-10-13), каждая строка заново сверена с текстом, а непрерывность в точках излома, которую подразумевают напечатанные коэффициенты, ограничена в тестах (например, 40 · 10^0,4 = 100,48 нс против плато 100 нс в таблице 4 G.812). Переписанный стандарт с проверками внутренней согласованности, а не испытание на соответствие и не внешняя проверка. G.812 (06/2004) числится заменённой предварительно опубликованной редакцией 08/2026, а у G.811 есть Amd. 1 (04/2016); ни одну из них прочитать не удалось, поэтому ни одна не проверяется. Сценарий со свободно работающим OCXO завышает вклад генератора при интервалах наблюдения, длинных по сравнению с постоянной времени контура; он ничего не говорит о часах какого-либо оборудования | MODELLED |
| VM-002dc3ac | Форматы журналов часов (RINEX clock, TimeLab ASCII, TAPR TICC), считываемые в нормализованный ряд фазы | clock_log::read_input: один уровень разбора, который превращает файл RINEX clock (записи AS/AR одних именованных часов, версии 2 и от 3,00 до 3,04), ASCII-журнал фазы или частоты в стиле TimeLab либо журнал меток времени или интервалов TAPR TICC в единую фазовую сетку, с tau0, заданным явно, взятым из заголовка или равным медианному шагу, с подсчётом каждого пропуска, отсчёта вне сетки и дубликата и с политикой пропусков: отказ, самый длинный непрерывный участок или линейное заполнение; подключён по желанию к ряду telecom-timing ([series.clock_log], с добавлением блока clock_log) и к типу clock ([clock_log], с добавлением блока measured с ADEV, TDEV и MTIE, SHA-256 таблицы и SHA-256 фазы; runs = 1). Без таблицы оба типа побайтово идентичны |
clock_log (read_input, MeasuredPhaseReport, MEASURED_UNITS, TELECOM_LOG_UNITS); telecom_timing (SeriesInput::clock_log); api (вид clock [clock_log]) | clock_log::tests (журналы, написанные вручную, по каждому формату: заголовки, разделители, единицы, интегрирование частоты, каналы и режимы TICC, пропуски и политики, отказы); tests/clock_log_allantools.rs (предварительно зарегистрированное сравнение: b1_each_log_reads_to_the_reference_phase; b2_adev_tdev_and_mtie_agree_with_allantools; b3_a_telecom_series_read_from_a_log_equals_the_same_samples; b3_the_clock_kind_measured_block_is_opt_in) | Предварительно зарегистрировано в tests/fixtures/clock_log/PREREGISTRATION.md (зафиксировано отдельно, 159334f2, до появления набора тестовых данных); записано в RESULTS.md. Три синтетических журнала с заданным начальным значением, по одному на формат (пропуск TICC в три эпохи, вторые часы RINEX, которые нужно игнорировать), считаны обратно независимым читателем, написанным тем же автором по docs/CLOCK-LOG-FORMATS.md: сетка, число пропусков и заполнений совпадают, а наибольшая разность фазы равна 0 с (порог 1e-13 с). allantools 2024,6 oadev, tdev и mtie на этой фазе согласуются с относительной точностью 2.5e-14 (порог 1e-10) при каждом коэффициенте усреднения, который он вычисляет; MTIE по всей записи, о котором сообщает движок, он не вычисляет, поэтому для этой одной точки на каждый журнал нет значения оракула, и порог в данной формулировке там не выполнен. MODELLED: журналы синтетические, а оракул-читатель делит автора с кодом; реальные файлы часов TimeLab, TICC и RINEX с приборов не сравнивались | MODELLED |
| VM-800c73e1 | Форматы журналов часов linuxptp (ptp4l, phc2sys, ts2phc) и chrony (tracking, statistics), считываемые в нормализованный ряд фазы | clock_log::read_input с форматами ptp4l, phc2sys, ts2phc, chrony-tracking и chrony-statistics: записанное смещение строки сервопривода linuxptp (нс, собственная метка времени строки в квадратных скобках, показания до первого сообщения сервопривода о s2 отбрасываются и подсчитываются) либо журнала chrony tracking или statistics (с, по позиции столбца, дата и время UTC) превращается в единую фазовую сетку по тем же политикам пропусков, что и у других форматов; селектор источника (clock) указывает один из нескольких интерфейсов, часов или адресов; журналы питают ряд telecom-timing, тип clock и тип holdover-test |
clock_log (parse_linuxptp, parse_chrony, grid_timed_offsets) | clock_log::tests (ptp4l_reads_the_locked_offsets_in_ns; linuxptp_reads_only_the_named_program; ts2phc_gap_is_refused_or_filled; linuxptp_reads_syslog_prefixed_lines_and_picks_an_interface; linuxptp_refuses_a_servo_that_never_locks_and_backwards_stamps; chrony_tracking_reads_the_local_offset_in_seconds; chrony_statistics_needs_a_source_when_there_are_two; chrony_columns_of_the_other_log_are_not_read; clock_selector_is_refused_for_timelab_and_ticc_only) на образцах в tests/fixtures/clock_log/linuxptp_chrony/ | Наборы тестовых данных написаны для Kshana по публичным макетам строк демонов, с выдуманными значениями (NOTICE.md в папке набора); журнал реальной установки не читался, и ни один оракул не сравнивает разбор с другим читателем, поэтому макет, различающийся между версиями демонов, всё равно может быть отвергнут или прочитан неверно. Оценивателями, которые получают фазовый ряд, являются те, что проверены по allantools в строках выше | MODELLED |
| VM-3c0cedf1 | Испытание holdover, оцениваемое по записи ошибки времени, предоставленной оператором | Тип holdover-test: запись ошибки времени (журнал часов linuxptp, chrony, TICC, TimeLab или RINEX либо пары time_s,time_error_ns) разделяется в два момента, указанных оператором для отключения и возврата GNSS, на этап базового уровня, этап holdover и этап восстановления; базовый уровень измеряется относительно масок ITU-T, написанных для часов в режиме привязки, а holdover — относительно масок для holdover или автономных часов, огибающей holdover ePRTC-A и бюджетов ошибки времени; для holdover сообщается смещение частоты по методу наименьших квадратов, которое удерживала система, а для восстановления — вошла ли |TE| в заданную полосу и когда, и оставалась ли в ней в течение заданного времени, а также пик и наибольший скачок. Каждый предел — тот, который переписывает тип telecom-timing; два момента — заявление оператора и не проверяются |
holdover_test (HoldoverTestScenario, recovery, linear_fit); telecom_timing (check_mask, check_envelope, budget_results) | holdover_test::tests (the_record_is_split_at_the_stated_times; holdover_figures_match_a_hand_computation; recovery_is_timed_from_the_restoration; masks_are_measured_on_the_step_their_condition_names; a_record_with_no_baseline_says_so; bad_inputs_are_refused_with_the_reason; the_report_carries_the_label_the_units_and_no_conformance_word; a_ptp4l_log_is_scored_end_to_end) | Расчёт вручную на записях, построенных по формулам, у которых наклон, скачок, экстремум и время восстановления известны до прогона (тесты их указывают), а также маски, огибающая и бюджеты из строк telecom-timing выше. Лабораторное измерение реального holdover не оценивалось, внешний оракул не сравнивался, поэтому этот тип не делает утверждений ни о каких часах или системе; прежде чем какую-либо цифру по классу часов можно было бы повысить, нужен партнёр с лабораторией синхронизации | MODELLED |
| VM-fb122222 | Доступность сигналов GNSS в Космическом сервисном объёме и за его пределами в сравнении с буклетом ICG SSV | Развёртки доступности типа gnss-ssv: по орбитальным группировкам (GPS, GLONASS, Galileo, BDS, QZSS, NavIC) и совместно — доля пар (пользователь, эпоха) как минимум с одним и как минимум с четырьмя сигналами и самый длинный перерыв, для пользователя на сфере (глобальная оболочка буклета из 2,562 точек, 14 суток с шагом 1 минута) или на траектории (GEO, HEO, лунный перелёт), по кеплеровым орбитам из приложения C буклета, постоянной минимальной излучаемой мощности внутри опорного внеосевого угла, затенению Землёй, заданному сферой плюс 50 км, и порогу C/N0; антенны пользователя — из таблицы B10 буклета |
ssv (constellations, geom, sweep, pattern, check) | ssv::geom::tests (the_grid_has_the_booklets_2562_points_on_the_unit_sphere; the_interval_form_equals_the_general_predicate; a_user_behind_the_earth_is_blocked_and_one_beside_the_limb_is_not); ssv::sweep::tests (a_small_shell_run_is_internally_consistent; pdop_of_a_regular_tetrahedron_like_set_is_finite_and_a_flat_set_is_not); ssv::pattern::tests (table_b10_antenna_reads_as_gain_against_angle_from_the_boresight) | Буклет ICG Space Service Volume (UN OOSA ST/SPACE/75, 2018), сам являющийся моделированием, сравнён по предварительной регистрации, зафиксированной до прогона (xval/gnss-ssv/PREREGISTRATION.md; результаты в xval/gnss-ssv/RESULTS.md, закреплены tests/ssv_booklet_results.rs, включая промахи). Прогон 1 на предварительно зарегистрированном прочтении: константы минимальной излучаемой мощности и лунный порог согласуются (S0, S6 — достигнуты); пороги верхнего и нижнего SSV, радиочастотного порога, GEO и HEO — NOT MET, почти полностью из-за GLONASS, для которой буклет даёт 20 и 28 градусов в таблицах B2 и B6 и 26 и 34 градусов в таблице 4,2. Диагностический вариант с углами из таблицы 4,2 согласуется в каждой ячейке верхнего SSV, нижнего SSV и шести миссий GEO (он не заменяет прогон 1; ячейки RF, HEO и лунные всё равно расходятся). Измеренные диаграммы панелей GPS L1 параметрической заменой не воспроизводятся (RMS от 6 до 9 дБ при пороге 3 дБ). Согласие показывает, что заявленный метод буклета воспроизведён, а не что сигналы GNSS ведут себя именно так | MODELLED |
| VM-114a4144 | Эффекты ионосферы, плазмосферы и атмосферы на скользящих лучах вдоль лимба для сигналов GNSS и конструкция приёмника слабых сигналов в типе gnss-ssv |
Ионосфера Чепмена, плазмосфера типа Gallagher и нейтральная атмосфера (изгиб из-за рефракции, поглощение кислородом, дефокусировка), проинтегрированные вдоль прямого луча между передатчиком и пользователем: наклонное полное электронное содержание, его плазмосферная часть, избыточная задержка, высота касания и потери на скользящих линиях связи; а также конструкция приёмника слабых сигналов (когерентное и некогерентное накопление, предел по биту данных, помощь, поиск по Доплеру), которая задаёт порог C/N0 по моделям захвата и контуров слежения | ssv (limb, weak) | ssv::limb::tests (the_chapman_layer_peaks_at_its_height_with_its_density; the_surface_limb_bends_about_one_and_a_third_degrees; plasmaspheric_tec_is_a_few_tecu_for_an_equatorial_gps_to_geo_ray); ssv::weak::tests (longer_integration_lowers_the_acquisition_threshold; aiding_narrows_the_search_and_the_loop; a_conventional_receiver_is_far_above_the_ssv_signal_levels); ssv::scenario::tests (the_limb_medium_adds_statistics_and_can_cost_signals; a_weak_signal_receiver_replaces_the_fixed_threshold) | Замкнутые формы и опубликованные величины в тестах (пик слоя Чепмена и изгиб на поверхностном лимбе, несколько TECU плазмосферы на луче от GPS до GEO); конструкция приёмника повторно использует модели захвата и контуров слежения и их тесты. Измеренные данные лимбового зондирования или приёма слабых сигналов с ней не сравниваются | MODELLED |
| VM-a5755cc1 | Бортовой навигационный фильтр GNSS для космических аппаратов на высоких орбитах и при лунном перелёте | Режим [navigation] типа gnss-ssv: девятисостоятельный расширенный фильтр Калмана (положение, скорость, смещение и дрейф часов приёмника, масштаб светового давления Солнца) по псевдодальностям, чьи доступность, шум и C/N0 берутся из той же геометрии линий связи, что и в развёртках; истина интегрируется с учётом J2, возмущений третьими телами — Солнцем и Луной — и светового давления с тенью, фильтр моделирует J2 и третьи тела и оценивает световое давление; сообщаются ошибки положения и скорости внутри орбит GNSS и выше них, самый длинный пропуск измерений и среднее NEES |
ssv::nav (run_nav, Ekf) | ssv::nav::tests (the_filter_converges_where_signals_are_plentiful_and_is_deterministic; the_covariance_is_consistent_with_the_error; without_signals_the_filter_coasts_and_the_gap_is_reported); ssv::scenario::tests (navigation_and_formation_run_and_report) | Смоделированная истина сопоставляется с собственной оценкой фильтра (средняя нормированная квадратичная ошибка оценивания у согласованного фильтра для положения составляет около 3) и с детерминированностью при фиксированном начальном значении. Лётные или записанные данные GNSS на высоких орбитах не сравниваются; Солнце и Луна — грубые круговые замены низкой точности | MODELLED |
| VM-0ad9c42e | Относительная навигация построения из нескольких космических аппаратов на сильно эллиптической орбите по GNSS | Режим [formation] типа gnss-ssv: ведущий и ведомые аппараты запускают каждый абсолютный фильтр; положение ведомого относительно ведущего оценивается вычитанием абсолютных оценок и относительным фильтром по однократно разностным псевдодальностям сигналов, которые отслеживают оба аппарата, при этом относительная динамика есть разность двух нелинейных траекторий |
ssv::formation (run_formation, RelEkf) | ssv::formation::tests (differencing_beats_subtracting_absolute_estimates_and_is_deterministic); ssv::scenario::tests (navigation_and_formation_run_and_report; formation_needs_navigation_and_one_mode_only) | Та же смоделированная истина, что и для абсолютного фильтра: ошибка относительного фильтра относительно истинного относительного состояния и проверка того, что он справляется не хуже, чем вычитание двух независимых абсолютных определений. Данные о лётных построениях не сравниваются | MODELLED |
| VM-dd872eab | Бюджет ошибок навигации и синхронизации времени цепочки фаз миссии от запуска до входа в атмосферу (mission-thread) |
Вид mission-thread: документ из фаз, каждая из которых относится к одному из восьми зарегистрированных видов; фазы выполняются по порядку, а ковариация 6x6, часы и система координат передаются по заданному правилу (carry; inflate, белый шум ускорения на заданном интервале по прямолинейной модели; reacquire, счисление пути, затем нижний предел источника, никогда не ниже него, никогда не сброс); преобразования систем координат GCRF, MCI и MCMF и преобразования шкал времени через TT, каждое отдельной строкой бюджета, с состоянием Луны из необязательного среза ядра DE440 и аналитическим рядом как заявленным запасным вариантом; запас относительно заданного требования, самое слабое звено, события и график хронологии. Каждое число является заданным входом или моделью такого входа |
mission_thread (scenario, handover, conversions, budget, phase) | mission_thread::scenario::tests::a_thread_runs_hands_over_converts_and_names_the_weakest_link; mission_thread::scenario::tests::bad_documents_fail_with_the_reason; mission_thread::handover::tests::inflate_never_shrinks_a_sigma_and_matches_the_hand_calculation; mission_thread::handover::tests::reacquire_sets_an_axis_to_the_floor_only_where_the_floor_is_smaller; mission_thread::conversions::tests::mci_mcmf_round_trip_returns_the_state_and_the_covariance; mission_thread::conversions::tests::tt_to_ltc_shifts_bias_and_drift_by_the_secular_rate_and_back; mission_thread::conversions::tests::the_committed_kernel_cuts_agree_with_pinned_horizons_values; tests/field_units_global.rs (the report's units block) | Расчёты вручную в тестах (рост ковариации по прямой, средний звёздный поворот, вековой ход лунных часов) и, только для состояния Луны, зафиксированные срезы ядра DE440 в сравнении с закреплёнными значениями JPL Horizons (наихудшее 2,6 м и 7e-6 м/с). Данные ни одной миссии с цепочкой не сравниваются; её фазы идут отдельными строками. Документ представляет собой заданную цепочку с входными данными ILLUSTRATIVE, только из открытых источников и без одобрения какого-либо агентства | MODELLED |
| VM-141c6467 | Запуск и выведение на опорную орбиту с захватом и пропаданием ГНСС (launch-ascent) |
Фаза launch-ascent: ковариация положения и скорости при постоянной скорости с белым шумом ускорения (класс счисления пути), определение места по ГНСС заданной точности, применяемое после времени захвата и вне заданных пропаданий, часы со смещением и дрейфом, дисциплинируемые теми же определениями, и состояние вывода на опорную орбиту |
mission_thread::earth::launch (LaunchAscent) | mission_thread::earth::launch::tests::with_gnss_the_sigma_settles_near_the_fix_and_an_outage_lets_it_grow; mission_thread::earth::launch::tests::before_acquisition_the_sigma_only_grows_and_a_longer_acquisition_is_worse; mission_thread::earth::launch::tests::a_phase_that_does_not_list_gnss_never_uses_it; mission_thread::earth::launch::tests::bad_models_and_entries_are_refused; mission_thread::earth::filter::tests::repeated_updates_reach_the_riccati_steady_state | Установившееся состояние Риккати и расчёт предсказания вручную в тестах. Ничто здесь не моделирует ракету-носитель или приёмник; каждое число является заданным входом | MODELLED |
| VM-3285c018 | Относительная навигация до границ стыковки на низкой околоземной орбите по участкам датчиков (leo-rendezvous) |
Фаза leo-rendezvous: относительное состояние в осях LVLH цели с переходом Клохесси–Уилтшира в замкнутом виде, ковариация фильтра Калмана 6x6 с белым шумом ускорения и обновления положения, дисперсия которых равна дисперсии датчика на текущей дальности, на участках заданного датчика (ILLUSTRATIVE оптическая камера, лидар и радиодальномерные формы); окно стыковки — это время, начиная с которого относительная сигма остаётся внутри границы захвата, до конца фазы. Абсолютная ковариация активного аппарата передаётся дальше без изменений, и строка об этом говорит |
mission_thread::earth::rendezvous (LeoRendezvous); cw_dynamics; mission_thread::sensors | mission_thread::earth::rendezvous::tests::the_relative_sigma_falls_through_the_legs_and_opens_a_docking_window; mission_thread::earth::rendezvous::tests::without_relative_sensing_the_sigma_only_grows_and_no_window_opens; mission_thread::earth::rendezvous::tests::the_covariance_recursion_matches_a_one_axis_hand_calculation; mission_thread::earth::rendezvous::tests::bad_models_and_a_duration_mismatch_are_refused; mission_thread::sensors::tests::the_cross_range_error_grows_with_range_and_the_floor_dominates_up_close | Расчёт вручную по одной оси предсказания и обновления в тесте; переход Клохесси–Уилтшира — тот, который cw_dynamics проверяет по независимому численному интегрированию. Датчики ILLUSTRATIVE, и никакое реальное сближение не сравнивается | MODELLED |
| VM-09d31ea9 | Транслунарная инжекция и цислунный перелёт: распространённые среднее состояние и ковариация с обновлениями по слежению (tli-and-cruise) |
Фаза tli-and-cruise: среднее состояние по пропагатору Коуэлла движка (точечная масса Земли и J2, Солнце и Луна как третьи тела, Луна из ядра DE440 нити там, где оно покрывает сегмент, а Солнце из аналитического ряда); ковариация по матрице перехода состояния, полученной конечными разностями этого распространения (номинальный прогон и шесть возмущённых прогонов на сегмент), с белым шумом ускорения; размер и ошибка направления импульса TLI; определения gnss-ssv, доступность и PDOP которых берутся из расчёта по зоне обслуживания в космосе вдоль оскулирующей орбиты, замещающей дугу; слежение по дальности и скорости изменения дальности вдоль геоцентрического направления, масштабируемое скважностью наземной сети, с обновлением в форме Джозефа |
mission_thread::earth::tli_cruise (TliCruise); propagator; ssv::sweep | mission_thread::earth::tli_cruise::tests::the_stm_is_symplectic_for_the_conservative_part_and_matches_a_finer_difference; mission_thread::earth::tli_cruise::tests::with_no_tracking_the_covariance_is_the_stm_propagation_of_the_entry_and_the_burn; mission_thread::earth::tli_cruise::tests::range_tracking_shrinks_the_line_of_sight_and_leaves_the_plane_of_the_sky; mission_thread::earth::tli_cruise::tests::the_thread_kernel_serves_the_moon_inside_its_window_and_the_series_outside; mission_thread::earth::tli_cruise::tests::gnss_ssv_fixes_are_applied_where_the_sweep_finds_four_signals; mission_thread::earth::tli_cruise::tests::a_phase_that_lists_a_source_the_model_lacks_is_refused_and_unknown_keys_too | Теорема Лиувилля (определитель матрицы перехода состояния консервативной части равен единице) и более мелкая разность в тестах; среднее состояние сравнивается с открытой траекторией в строке ниже, по которой оно не достигает порога. Ошибка импульса, обновления и ковариация ни с чем не сравниваются | MODELLED |
| VM-fe6d68d3 | Ковариация на границе входа, вероятность коридора, пиковое замедление и пятно посадки (entry) |
Фаза entry: возвратный участок tli-and-cruise без импульса, заканчивающийся на границе входа; угол наклона траектории и его сигма по полной ковариации через градиент конечными разностями; вероятность того, что угол лежит внутри заданного коридора; пиковое замедление при номинальном угле и на обеих границах коридора по плоскому баллистическому входу материальной точки движка (с обнаружением рикошета) наряду с замкнутой формулой Аллена–Эггерса; пятно посадки по заданной чувствительности по дальности и ковариации на границе входа поперёк плоскости орбиты. Подъёмная сила, наведение и нагрев не моделируются |
mission_thread::earth::entry (Entry); reentry | mission_thread::earth::entry::tests::the_flight_path_angle_and_its_sigma_follow_the_velocity_error_over_the_speed; mission_thread::earth::entry::tests::the_corridor_probability_is_the_gaussian_mass_inside; mission_thread::earth::entry::tests::the_phase_reports_the_interface_the_corridor_the_peaks_and_the_footprint; mission_thread::earth::entry::tests::the_steep_edge_peaks_higher_and_a_limit_below_it_is_flagged; mission_thread::earth::entry::tests::bad_corridors_unknown_keys_and_burn_keys_are_refused | Расчёты вручную в тестах (сигма угла равна сигме перпендикулярной скорости, делённой на скорость; гауссова масса в коридоре). Плоский вход принадлежит самому движку, а форма Аллена–Эггерса является сравнением в замкнутом виде; ни один выполненный вход не сравнивается | MODELLED |
| VM-36619fa3 | Покрытие наземной сети и скважность слежения для фазы нити ([ground_network] из mission-thread) |
Наложение наземной сети: станции с минимальным углом места, видимость аппарата при заданной геометрии (состояние входа, пролетаемое в двух телах с J2, положение Луны для перелёта или заданная скважность), передачи между станциями, каждая из которых теряет заданное время, и получающаяся скважность, передаваемая в частоту обновлений наземного слежения фазы; самый длинный интервал без станции в зоне видимости является строкой бюджета | mission_thread::earth::ground_network | mission_thread::earth::ground_network::tests::a_vehicle_over_a_station_is_seen_and_one_on_the_other_side_of_the_earth_is_not; mission_thread::earth::ground_network::tests::the_moon_is_in_view_of_three_well_spread_stations_most_of_the_time; mission_thread::earth::ground_network::tests::handover_losses_reduce_the_duty_and_never_below_zero; mission_thread::earth::ground_network::tests::a_stated_duty_is_passed_through_and_bad_documents_are_refused; mission_thread::scenario::tests::the_overlay_sets_the_tracking_duty_of_a_phase_that_lists_ground_tracking | Проверки геометрии зенита и антипода и ожидаемая видимость удалённой цели в тестах. Никакая реальная сеть, антенна или расписание не моделируются | MODELLED |
| VM-5c095f48 | Относительная навигация до стыковки на лунной орбите (lunar-orbit-rendezvous) |
Вид и фаза lunar-orbit-rendezvous: совместная пакетная оценка Гаусса–Ньютона по двум аппаратам на дуге (двадцать один параметр: оба состояния и устойчивые смещения положения сигнала в пространстве, общие и независимые), наращиваемая на четверти, половине и всей дуге с делением шага, по одному абсолютному определению для каждого аппарата (граница сопровождения пилотного кода AFS, набор ретрансляторов ILLUSTRATIVE) и дальности межспутниковой линии, при лунной модели сил крейта; средняя нормированная квадратичная ошибка оценки, проверка Клохесси–Уилтшира на круговой орбите и передаваемая ковариация 6x6 |
lunar_rendezvous (LunarRendezvousScenario); lunar_phase; mission_thread::lunar | lunar_rendezvous::tests::b1_mean_nees_is_inside_the_registered_band_in_all_four_configurations; lunar_rendezvous::tests::circular_cw_check_is_within_the_pre_registered_bar; lunar_rendezvous::tests::same_seed_gives_identical_documents; lunar_rendezvous::tests::b6_handover_without_a_measurement_only_propagates; mission_thread::lunar::tests::every_phase_runs_and_returns_a_modelled_outcome; tests/mission_thread_lunar_oracles.rs | Самосогласованность при предварительной регистрации (xval/mission-thread-lunar/PREREGISTRATION.md, результаты и история оценивателя в RESULTS.md): среднее NEES относительного состояния равно от 5,85 до 5,93 при полосе от 5,2 до 6,8 в четырёх конфигурациях, MET на четвёртой конструкции оценивателя после того, как три конструкции последовательного фильтра не достигли порога; истина и оцениватель используют одну модель сил, так что это ничего не говорит об ошибке модели. Общий с ней пропагатор сравнивается с LRO и CAPSTONE в строке ниже | MODELLED |
| VM-0002d522 | Бюджет рассеяния посадки в лунной полярной точке (lunar-descent) |
Вид и фаза lunar-descent: пятисостоянная инерциальная модель ошибок по осям (положение, скорость, смещение акселерометра, наклон, смещение гироскопа) при активном спуске с поддержкой определениями AFS (автономными или дифференциальными, со случаем трёх ретрансляторов с поддержкой часов), определением по рельефу (сопоставитель terrain-nav движка на синтетическом рельефе или граница Крамера–Рао на ЦМР LOLA с правилом проблемы апертуры) и лунным временем, с эллипсом касания по методу Монте-Карло |
lunar_landing (LunarLandingScenario); lunar_phase; terrain_nav | lunar_landing::tests::b4_with_no_aid_the_landing_error_is_the_closed_form_inertial_drift; lunar_landing::tests::b4_each_aid_reports_exactly_what_the_reused_kind_gives; lunar_landing::tests::b3_ellipse_calibration; lunar_landing::tests::a_plane_gives_no_fix_the_aperture_problem; lunar_landing::tests::a_bowl_matches_the_closed_form_bound; lunar_landing::tests::three_relays_make_the_fix_depend_on_the_clock | Инерциальный дрейф в замкнутом виде, собственные результаты повторно используемых видов и калибровка эллипса 3 сигма (доля внутри согласуется с ожидаемой) в тестах. Ни одна выполненная или испытанная посадка не сравнивается | MODELLED |
| VM-bb8b8191 | Доступность позиционирования и синхронизации времени на поверхности по точке и сезону на лунных полюсах (lunar-surface) |
Вид и фаза lunar-surface: доступность ретрансляторов и PDOP, видимость Земли и Солнца и дисциплинируемые часы поверхности для каждой точки и сезона, с рельефным горизонтом moonlight-service-volume; прогон для одной точки совпадает с доступностью и PDOP этого вида вплоть до бита |
lunar_surface_map (LunarSurfaceMapScenario); lunar_phase | lunar_surface_map::tests::b5_equals_the_service_volume_for_a_single_site; lunar_surface_map::tests::b5_equals_the_service_volume_with_the_real_terrain; lunar_surface_map::tests::terrain_never_adds_availability; lunar_surface_map::tests::timing_is_at_least_either_source_and_the_season_moves_the_earth_and_sun; lunar_surface_map::tests::same_inputs_give_identical_documents | Точное равенство с существующим видом для одной точки и проверки монотонности в тестах. Набор ретрансляторов ILLUSTRATIVE, и никакое измерение на поверхности не сравнивается | MODELLED |
| VM-5bd5efbe | Активный подъём из лунной полярной точки на орбиту вывода (lunar-ascent) |
Вид и фаза lunar-ascent: пятисостоянная инерциальная модель ошибок по осям на активном подъёме с удельной силой вдоль траектории, с поддержкой определениями AFS и лунным временем; сообщает ковариацию положения и скорости при выводе, переносимую на орбиту, и разброс при отсечке двигателя (сообщается, но не переносится) |
lunar_ascent (LunarAscentScenario); lunar_phase | lunar_ascent::tests::with_no_aid_the_insertion_error_is_the_closed_form_inertial_drift; lunar_ascent::tests::the_aid_never_hurts_and_the_velocity_is_carried_with_its_correlation; lunar_ascent::tests::a_stale_tt_clock_costs_a_three_relay_fix; lunar_ascent::tests::the_same_inputs_give_identical_documents | Инерциальный дрейф в замкнутом виде и проверки монотонности в тестах. Ни один выполненный подъём не сравнивается | MODELLED |
| VM-576667f2 | Распространение по лунной модели сил в сравнении с открытыми восстановленными траекториями лунных орбитальных аппаратов и цислунных аппаратов | Пропагатор, общий для лунных видов (GRAIL GL0660B степени и порядка 150, Земля и Солнце как третьи тела, релятивизм, ориентация Луны по DE440), в сравнении с открытыми траекториями JPL Horizons для LRO (24 ч, отсчёты через 10 минут) и CAPSTONE (один оборот 6,5 суток, отсчёты через час) по порогам, зафиксированным в закоммиченном файле до прогона | lunar_od (LunarForceModel); precise_od; mission_thread_lunar_oracles (example) | tests/mission_thread_lunar_oracles.rs::the_stored_numbers_meet_or_miss_the_registered_bars_as_recorded; tests/mission_thread_lunar_oracles.rs::the_fixtures_match_their_recorded_hashes | Эфемериды космических аппаратов JPL Horizons для LRO и CAPSTONE по порогам, зарегистрированным заранее в xval/mission-thread-lunar/PREREGISTRATION.md (поправки 1–6). LRO: MET, наибольшая 3-D разность 33 м и радиальная СКО 2,4 м против 500 м и 60 м. CAPSTONE: NOT MET, разность конечных положений 136,8 км против 25 км и разность перицентра 28,4 км против 10 км, причины не выделены. Строка остаётся смоделированной, потому что порог CAPSTONE не достигнут, а сравнение проверяет общий пропагатор, а не какой-либо фильтр, сигнал или бюджет | MODELLED |
| VM-85ad15fc | Распространение среднего состояния по цислунной траектории в сравнении с открытой траекторией Artemis I (tli-and-cruise) |
Распространение среднего состояния фазы tli-and-cruise (Коуэлл, точечная масса Земли и J2, Солнце и Луна как третьи тела, Луна из среза DE440) в сравнении с открытой траекторией Artemis I из JPL Horizons на дуге инерционного участка 72 ч от 2022-11-16 18:00 TDB, в эпохи через 12 часов, по порогам, зафиксированным в закоммиченном файле до прогона |
mission_thread::earth::tli_cruise; propagator; mission_thread_oracle (example) | tests/mission_thread_oracle.rs::the_stored_numbers_miss_the_registered_bars_as_recorded; tests/mission_thread_oracle.rs::the_diagnostic_places_the_miss_in_five_impulsive_events_not_in_the_force_model; tests/mission_thread_oracle.rs::the_kernel_cut_and_the_recorded_inputs_match_their_hashes | JPL Horizons, цель -1023 (траектория после TLI по фактическому полёту по навигации NASA), по порогам, зарегистрированным заранее в xval/mission-thread/PREREGISTRATION.md (поправка 1 меняет только запрошенный интервал). NOT MET, и это заявлено как промах: наибольшая разность положения 45,3 км против 5 км и разность скорости 0,249 м/с на 72 ч против 0,05 м/с. Диагностика, написанная после вердикта, относит промах к пяти импульсным изменениям скорости от 0,09 до 0,22 м/с в эталоне (зарегистрированное заранее предположение, что в окне не было импульса, оказалось неверным); на остальных 67 часах модель воспроизводит следующее часовое состояние с медианой 0,38 м. Проверяет только среднее состояние одной дуги инерционного участка: ни ковариацию, ни фильтр, ни обновления, ни другие фазы | MODELLED |
| VM-8112313d | Члены ошибки холодно-атомного интерферометра: фазовый шум рамановского лазера, смещение из-за кривизны волнового фронта и разрешение неоднозначности полос | inertial::cai_error_terms (библиотечные функции, пока не доступные из типа сценария): весовая функция рамановской фазы трёхимпульсного интерферометра с прямоугольными импульсами (Cheinet et al. 2008, уравнение 8) с замкнутой формой для белого фазового шума (pi/2)^2 S_phi0/tau_R и численным путём для любого спектра; частотный шум лазера, который задержка при ретроотражении не компенсирует (Le Gouet et al. 2007, уравнения 9–11); смещение волнового фронта из-за чистой расфокусировки sigma_v^2/R для теплового облака и его уменьшение за счёт радиуса детектирования; вероятность неверного индекса полосы erfc(pi/(sqrt(2) s)) при помощи классического акселерометра и для двух времён опроса, и обратная ей величина | inertial::cai_error_terms | inertial::cai_error_terms::tests (raman_transfer_short_pulse_limit_matches_the_acceleration_transfer_function; white_raman_phase_closed_form_matches_quadrature; short_pulse_band_limited_closed_form_matches_quadrature; cheinet_2008_white_phase_noise_requirement_is_reproduced; delay_term_closed_form_matches_exact_filter_quadrature; defocus_phase_is_position_independent_and_tilt_cancels; curvature_bias_monte_carlo_matches_closed_form; curvature_bias_limiting_cases; classical_aided_resolution_monte_carlo_matches_closed_form; multi_t_resolution_monte_carlo_matches_closed_form; ambiguity_limits_and_inverse) | Каждая замкнутая форма сверена в тестах с независимым численным путём (квадратура в частотной области точной передаточной функции и фильтра задержки, метод Монте-Карло по атомам для смещения волнового фронта, метод Монте-Карло по импульсам для индекса полосы) и её предельными случаями. Одно опубликованное рабочее значение: Cheinet et al. 2008 (arXiv:physics/0510197, разд. IV) указывают, что при tau_R = 20 мкс для 1 мрад за импульс нужен белый рамановский фазовый шум ниже -111 дБ рад^2/Гц; один белый член даёт 0,99 мрад (статья выводит уровень по своему уравнению 17, фликкер плюс белый). Внутренняя согласованность и одно рабочее значение, а не внешняя проверка; аберрации высших порядков и шум какого-либо конкретного лазера не моделируются | MODELLED |
| VM-a9a886b5 | Точные эквивалентные степени свободы по Greenhall и Riley для дисперсий Аллана, модифицированной Аллана и Адамара | allan::edf_greenhall (с обёртками edf_greenhall_adev, _mdev и _hdev): полный алгоритм Greenhall и Riley, Proc. 35th PTTI (2003), раздел 3 (уравнения 7–13 и коэффициенты для больших J из таблиц 1–3), для порядков разности от 1 до 3, показателей шума от +2 до -4 везде, где alpha + 2d > 1, для перекрывающихся и неперекрывающихся, модифицированных и немодифицированных оценивателей; NaN там, где он неприменим, включая случай немодифицированного белого фазового шума с ceil(M/S) <= d, замкнутая форма для которого не реализована. assurance::uncertainty::edf теперь использует тот же код и сохраняет свои выходные данные бит в бит | allan (edf_greenhall, greenhall_edf_core); assurance::uncertainty (edf) | tests/greenhall_edf_allantools.rs (bars_1_to_3_against_allantools; bar_4_wrappers_equal_the_core); tests/greenhall_edf_no_moved_output.rs (uncertainty_edf_is_bit_identical_to_the_0_36_portable_baseline); tests/uncertainty_edf_reference.rs | allantools 2024,6 ci.edf_greenhall — сторонняя реализация опубликованного алгоритма, запущенная scripts/gen_greenhall_edf_ref.py по сетке, предварительно зарегистрированной в xval/greenhall-edf/PREREGISTRATION.md (зафиксирована отдельно, 0db0bb7a, до любого сравнения): во всех 4 876 точках, где она возвращает конечное edf, kshana согласуется с относительной точностью 6.0e-13 (порог 1e-9); в её 46 точках с NotImplementedError kshana возвращает NaN; встречается каждая метка случая; обёртки равны ядру бит в бит; uncertainty::edf побитово идентична на 274 280 значениях (закреплено SHA-256 до рефакторинга). В 32 точках (alpha -4, d 3, немодифицированная, случай 2,2) allantools даёт сбой при поиске в таблице 2, поэтому для них нет значения оракула, и они не учитываются. Stable32 не запускался. Редакция 0,36 (docs/revisions/STUDIO15-greenhall-edf-portable.md): на переносимой математике ядро берёт логарифм из вычисления в формате double-double с однократным округлением (allan::greenhall_ln), и неизменённый порог 1 снова выполняется во всех 4 876 точках, наихудшая относительная погрешность 6.0e-13; защита uncertainty::edf перебазирована на переносимый дамп 0,36 (сдвинулись 3 746 из 274 280 значений, не более чем на 1.6e-12 относительно, от базы на математике хоста) | VALIDATED |
| VM-23a15a45 | Предустановки holdover генераторов по открытым спецификациям | Четыре предустановки — OCXO (Microchip OX-208), рубидиевый (Microchip 8040C), цезиевый (Microchip 5071A, высокопроизводительная трубка) и CSAC (Microchip SA.45s) — каждая несёт максимумы девиации Аллана, старение и границу по температуре из своей спецификации; неотрицательная аппроксимация методом наименьших квадратов частотного шума (белый + фликкер + случайное блуждание), масштабированная так, чтобы огибать каждую точку спецификации, фликкерный пол не ниже значения при наибольшем τ, линейное старение и синусоидальный температурный член, синтезируемые как holdover с начальным значением после потери GNSS | telecom_timing (PRESETS, fit_noise, with_flicker_floor, synthesize_holdover); models (ClockModel) | telecom_timing::tests (every_preset_carries_a_named_datasheet_and_figures; the_noise_fit_envelopes_every_datasheet_point; pure_aging_matches_its_closed_form — дискретный дрейф старения в пределах 0,1 % от (1/2)·D·t² за сутки; same_seed_same_series_and_hash_different_seed_different_series); tests/oscillator_presets_measured.rs (caesium_finding_pinned; rubidium_finding_pinned; csac_finding_pinned; ocxo_preset_has_no_measured_record) | Четыре названные спецификации Microchip (номера документов и URL — в каждой предустановке и в docs/TELECOM-TIMING.md) для входных цифр; замкнутая форма линейного старения и свойство огибающей у аппроксимации — как внутренние проверки. Как цифры превращаются в модель шума — аппроксимация, правило пола, 30-дневный месяц, линейное прочтение температуры — это выбор моделирования; ни одна предустановка не является измерением отдельного экземпляра. 0,30 раунд 2, односторонние пороги относительно измеренных экземпляров (предварительно зарегистрированы a01c491c), вывод (остаётся MODELLED): станция IGS THU2 с Symmetricom 8040C в окончательных часах ESA MGEX имеет девиацию Аллана от 0,35 до 0,87 от рубидиевой предустановки, но ошибку holdover от 1,07 до 1,60 от неё; запись 5071A выходит за пределы цезиевой предустановки до 1000 с (белый фазовый шум измерения, 30x при 1 с) и при holdover (от 1,15 до 8,74); худший производственный SA.45s 2011 года в 1.26x выше предустановки CSAC при 1 с; для OX-208 измеренной записи нет (заблокировано) | MODELLED |
| VM-56200471 | Прогноз holdover по измеренной записи часов, проверенный на отложенных данных | Путь по измеренной записи типа slot-timing: перекрывающаяся девиация Аллана фазовой записи, аппроксимированная методом неотрицательных наименьших квадратов со взвешиванием по edf в базисе белого фазового шума и частотной модуляции по IEEE Std 1139 (slot_timing::fit_weighted), затем обращённая для получения времени инерционного хода, при котором ошибка времени достигает порога (slot_timing::slot_budget). Пол красного шума измеряется по записи, а не предполагается |
slot_timing (ClockNoise::from_phase_record, fit_weighted, slot_budget, breach_after_sync_s) | tests/slot_timing_cs5071a_holdout.rs (holdover_inversion_predicts_the_held_out_caesium_record: подгонка по первой трети записи, прогноз выхода за одну сигму при 0,5, 0,75, 1, 1,5, 2 и 2,5 ns, измерение на остальных двух третях от точки синхронизации каждые 997 s; порог, зафиксированный до первого прогона, — множитель 1,5 в обе стороны; наблюдаемые отношения от 0,84 до 1,03; контроль, в котором односекундная девиация Аллана читается как белый ЧМ, промахивается примерно в 1 000 раз и обязан не выполнить порог; мутация, вдвое снижающая уровень белого ЧМ, проваливает тест); slot_timing::tests (a_measured_white_fm_record_recovers_its_level; reduces_to_the_holdover_inversion; ieee1139_conversion_matches_the_powerlaw_module) | Реальные свободно работающие атомные часы: 556 990 односекундных фазовых отсчётов цезиевого стандарта 5071A, измеренных относительно водородного мазера (A. Wallin, распространяется с allantools; закреплённый коммит и SHA-256 — в scripts/fetch_cs5071a.sh), та же запись, которую tests/cs5071a_reference.rs использует для оценивателей. Отложенные две трети — внешнее измерение, которого прогноз не видел. С условием наличия данных: рабочий процесс realdata-clock загружает запись и запускает тест с KSHANA_REQUIRE_REALDATA=1. Подтверждает путь «аппроксимация, затем обращение» на атомном стандарте с преобладанием белого частотного шума при инерционном ходе до примерно 50 000 с; не спецификации и не источники по классам, не детерминированные члены. НЕ кварцевый генератор: на измеренной записи OCXO (tests/slot_timing_ocxo_holdout.rs, allantools, 5,5 ч относительно водородного мазера) отложенный прогноз консервативен, от 0,59 до 0,70 измеренного нарушения, и в основном выходит за порог, потому что пол шума этого генератора за время записи уменьшился вдвое; на обучающей выборке он составляет от 0,98 до 1,17. Кварцевый случай остаётся MODELLED. НЕ атомные часы на орбите тоже: на 10 часах спутников GPS Block IIF (tests/slot_timing_igs_holdout.rs, окончательные 30-секундные часы IGS, 14 суток, протокол написан до загрузки) 8 укладываются в порог, а 2 (G25, G30) оптимистичны до примерно 2x, поэтому по протоколу орбитальный случай остаётся MODELLED | VALIDATED |
| VM-3842550f | Секунды до выхода свободно работающих часов за защитный интервал временного слота и частота определений, которая удерживает их внутри | Тип slot-timing: предсказанная ошибка E(t) = k·√(σ₀² + σ_x²(t)) + (|y₀| + |c_T·ΔT|)·t + ½|D|t², обращённая для получения нарушения, оставшегося времени, интервала повторной синхронизации за вычетом задержки определения и числа определений в сутки, причём каждый член расписан отдельно с указанием преобладающего; часы — из шести значений по умолчанию ClockClass (TCXO, OCXO и RAFS добавлены, каждый со ссылкой на одну спецификацию), предустановок telecom-timing, встроенной спецификации или измеренной записи; нарушение за пределами наибольшего времени усреднения источника помечается как экстраполированное |
slot_timing (predicted_error_s, breach_after_sync_s, terms_at, slot_budget, ClockNoise::from_datasheet, SlotTimingScenario); clock_state (ClockClass::Tcxo, Ocxo, Rafs, source) | tests/slot_timing_igs_holdout.rs (10 часов спутников GPS Block IIF, 14 суток окончательных часов IGS: 8 в пределах порога 1,5, G25 и G30 оптимистичны до примерно 2x, закреплено); tests/slot_timing_ocxo_holdout.rs (измеренный OCXO: прогноз на отложенной выборке никогда не оптимистичен, от 0,59 до 0,70 от измеренного нарушения; в выборке — в пределах от 0,98 до 1,17; без члена частоты привязки прогноз в выборке оптимистичен при каждом пороге); slot_timing::tests (fix_frequency_uncertainty_alone_is_linear_in_time; reduces_to_the_holdover_inversion — каждый класс против holdover::holdover_seconds с точностью 1e-9; white_fm_with_fix_error_has_its_closed_form; flicker_floor_alone_is_linear_in_time; ageing_alone_is_quadratic_in_time; frequency_offsets_add_in_magnitude; the_error_at_the_breach_is_the_guard; datasheet_fit_envelopes_every_point; datasheet_classes_match_their_presets_at_one_second; a_breach_beyond_the_datasheet_is_flagged_as_extrapolated; the_report_carries_the_result_and_a_unit_for_each_field) | Замкнутые формы для каждого члена по отдельности и независимый поиск корня holdover::holdover_seconds; цифры из спецификаций — названные документы (docs/SLOT-TIMING.md). Значение по умолчанию для класса опирается на предполагаемый пол красного шума, а источник-спецификация — это огибающая максимумов, поэтому ни то, ни другое не является измерением отдельного экземпляра | MODELLED |
| VM-830ecf94 | Уровень защиты синхронизации времени для приёмника на орбите при спуфинге GNSS | orbital_timing::orbital_timing, доступная как раздел спуфинга типа slot-timing: скорость и период круговой орбиты, наибольшее время, в течение которого наземный спуфер может достичь спутника за один пролёт, нижний предел монитора с поддержкой часов и задержка обнаружения CUSUM, условный уровень защиты (нижний предел плюс инерционный ход за время задержки), уход, который накапливает спуфер с заданной максимальной скоростью нарастания до того, как спутник покинет зону покрытия или будет выполнена независимая проверка, и является ли каждая проверка по наземному контакту или перекрёстной линии связи независимой от одного наземного спуфера |
orbital_timing (orbital_timing, visibility_half_angle_rad, max_pass_s, crosslink_neighbour_is_outside_footprint) | orbital_timing::tests (reduces_to_the_terrestrial_tpl — ровно tpl::timing_protection_level_ns, когда у часов нет фликкерного члена, члена белой фазы или случайного блуждания; leo_geometry_matches_its_closed_forms; crosslink_independence_follows_the_footprint; an_independent_check_caps_the_ramp_before_the_pass_ends; a_crosslink_inside_the_footprint_does_not_count; a_ramp_below_the_reference_is_never_detected) | Сведение к существующему уровню защиты синхронизации времени и к замкнутым формам видимости для круговой орбиты и сферической Земли. При условии обнаружения, один наземный спуфер с заданной скоростью нарастания, пролёт над головой над невращающейся Землёй; не проверено на приёмнике на орбите, подвергшемся спуфингу | MODELLED |
| VM-e1de9d23 | Спектральные плотности мощности сигналов L-диапазона в замкнутой форме и коэффициенты спектрального разделения | Спектральные плотности мощности единичной площади для GPS L1 C/A и L2C (BPSK(1)), GPS L5 и Galileo E5a (BPSK(10)), sine-BOC(1 1) и Galileo E1 MBOC(6,1,1/11) (navsignal::Modulation::psd, с добавленным вариантом MBOC), их численно найденные нули и максимумы (spectrum::psd_nulls_hz, psd_peak_hz, main_lobe_null_to_null_hz) и коэффициент спектрального разделения сигнала относительно любого спектра при любом смещении (navsignal::spectral_separation_coeff_offset) или относительно тона, плоского шума, чирпа или согласованного шума (spectrum::Jammer::ssc), с коэффициентом защиты от помех Q = 1/(R_c kappa) | navsignal (Modulation::psd, spectral_separation_coeff_offset, q_from_ssc); spectrum (psd_nulls_hz, psd_peak_hz, main_lobe_null_to_null_hz, Jammer::ssc) | spectrum::tests (bpsk_main_lobe_null_to_null_is_two_n_times_1_023_mhz — BPSK(1) 2,046 MHz и BPSK(10) 20,46 MHz найдены численно по замкнутой форме; boc11_lobes_are_centred_at_plus_minus_1_023_mhz — нуль на несущей, первый нуль на 2,046 MHz, центр лепестка 1,023 MHz и точный максимум на 0,7590 MHz в сравнении с независимым решением Ньютона для tan y = 2y; ssc_matches_parseval_closed_forms — C/A x C/A 2/(3R_c) = -61.86 dB/Hz, BOC(1 1) x BOC(1 1) 1/(3R_c) = -64.87 dB/Hz, C/A x BOC(1 1) 1/(6R_c) = -67.88 dB/Hz, каждое в пределах 0,02 dB; q_values_match_kaplan_hegarty — CW на несущей Q = 1, шум с согласованным спектром Q = 1,5, плоский шум от нуля до нуля Q = 2,215; mboc_is_a_unit_area_one_eleventh_mix) | Опубликованные значения из учебников: главный лепесток BPSK(n) шириной 2n x 1,023 МГц между нулями и коэффициенты защиты от помех Q = 1 для узкополосной (CW) помехи и Q = 1,5 для помехи с расширенным спектром, согласованной с C/A (Kaplan & Hegarty, Understanding GPS/GNSS, 3-е изд., раздел 9,4); главные лепестки BOC(m,n) с центрами на плюс-минус m x 1,023 МГц (Betz, Binary Offset Carrier Modulations for Radionavigation, NAVIGATION 48(4), 2001); коэффициенты спектрального разделения -61.8, -64.8 и -67.8 дБ/Гц для C/A с C/A, BOC(1 1) с BOC(1 1) и C/A с BOC(1 1) (Betz 2001; Hein et al., MBOC: The New Optimized Spreading Modulation Recommended for Galileo L1 OS and GPS L1C, Inside GNSS, May/June 2006), воспроизведённые здесь по их замкнутым формам автокорреляции через равенство Парсеваля. Максимум BOC(1 1) находится не на 1,023 МГц: лепесток тянется от нуля несущей до 2,046 МГц и достигает пика на 0,759 МГц, и тест фиксирует оба значения. Смесь MBOC — определение из ICD, проверенное только на единичную площадь и линейность | VALIDATED |
| VM-ec2500ac | Водопад спектра L-диапазона с J/S по диапазонам и эффективным C/N0 при заданной по сценарию временной шкале помех | Тип spectrum: сетка «частота по времени» спектральной плотности мощности L-диапазона (тепловой пол k T_sys при T_sys = T_ant + 290 K (F - 1), сигналы при минимальных принимаемых мощностях по спецификации интерфейса, а также помехи: непрерывная волна, узкополосная, чирп и согласованный шум, с моментами включения и выключения), каждая ячейка усреднена по своему интервалу частоты и строке (чирпы — точно по полным и частичным разверткам, помехи — по скважности), эффективный C/N0 по диапазонам = [1/(C/N0) + sum (J/S) kappa]^-1 для каждой строки, J/S по диапазонам, J/S в полосе и водопад в формате SVG со столбцами C/N0. Отчёт содержит перекрёстную проверку относительно цепочки типа jamming на тех же входных данных линии связи |
spectrum (SpectrumScenario, SpectrumModel::bin_psd_w_per_hz, SpectrumModel::band_state, effective_cn0_multi_dbhz, system_temp_k, Jammer::power_fraction_in, Jammer::duty) | spectrum::tests (agrees_with_the_jamming_kind_chain — J/S равно jamming::j_over_s_db, а эффективное C/N0 равно jamming::effective_cn0_dbhz при Q = 1/(R_c kappa) с точностью 1e-9 дБ, а также опорное значение 32,105 дБ из собственного теста вида подавления; noise_floor_is_kt0f; chirp_window_splits_whole_and_partial_sweeps; duty_weights_partial_rows; demo_scenario_runs_and_denies_l1_while_l5_survives; defaults_run_with_no_jammer; bad_inputs_are_refused) | Сведение к уравнению защиты от помех и бюджету линии связи существующего типа jamming (тот же код, вызываемый на тех же входных данных) и к замкнутой форме пола шума k T0 F. Спектры сигналов под ними — это проверенная строка выше; мощности помех, временная шкала и полосы входных каскадов — входные данные сценария, спектры непрерывны (без линий кода расширения), и никакая автоматическая регулировка усиления, бланкирование или диаграмма антенны на помеху не действуют. В репозитории нет измеренного спектра при помехах для сверки составной модели. Таблица Q типа jamming (CW и узкополосная 1, широкополосная и с качанием частоты 2 с 0,36: значения из учебников, закреплённые по замкнутым формам navsignal) согласуется со значением этой модели для CW и отличается от того, что она выводит для шума, согласованного с C/A (1,5), и для плоского шума от нуля до нуля без нормировки в полосе (2,2); отчёт печатает оба |
MODELLED |
| VM-2d5c1f5c | Ввод и вывод записей SigMF и оценки спектра по Уэлчу для комплексных IQ | sigmf: чтение и запись записей Signal Metadata Format (JSON .sigmf-meta с основными полями global, captures и annotations; необработанный .sigmf-data как cf32_le, ci16_le или ci8, целочисленные декодеры общие с realdata::iqif::load_iq), всё на строках и буферах байтов. spectrum::welch_psd: периодограммы с окном Ханна, с перекрытием, усреднённые, с масштабированием по плотности, на собственном в крейте преобразовании по основанию 2 (spectrum::fft_in_place). Эти две функции составляют проверенное утверждение. spectrum::synthesise_iq выдаёт модель в виде IQ, а раздел [iq] типа spectrum прогоняет цепочку «модель — IQ — SigMF — Welch» и сравнивает с моделью; его раздел [recording] оценивает реальную запись (в нативных сборках); синтез и эти сравнения с моделью находятся вне проверенного утверждения |
sigmf (read, write, encode, decode, parse_meta, meta_to_json); spectrum (welch_psd, fft_in_place, synthesise_iq) | sigmf::tests (cf32_round_trip_is_exact_to_single_precision; ci16_round_trip_is_within_half_a_code; ci16_is_little_endian_i_then_q; integer_encoding_counts_saturation; metadata_uses_the_core_namespace; unsupported_types_and_channels_are_refused; sample_start_offsets_into_the_data); spectrum::tests (fft_matches_a_direct_dft; welch_reads_white_noise_as_variance_over_fs_and_keeps_a_tone_s_power — уровень шума в пределах 2 % от дисперсии на частоту дискретизации, итог по Парсевалю в пределах 2 %, эквивалентная шумовая полоса Ханна 1,5 бина; noise_like_synthesis_is_unbiased_through_welch — медиана «Welch минус модель» в пределах 0,1 dB через круговое преобразование ci16_le; synthesised_iq_through_sigmf_reproduces_the_model_spectrum); tests/sigmf_welch_oracle.rs::welch_and_sigmf_io_match_scipy_and_sigmf_python (PSD Уэлча в сравнении с scipy 1.18.1 signal.welch по каждому бину с относительной точностью 1e-12 на 27 случаях, наблюдаемо 6.0e-14; пять записей sigmf-python 1.13.0 декодированы побитово идентично с идентичными метаданными; записи, созданные крейтом, побитово идентично считываются sigmf-python и валидны по схеме SigMF v1.2.6) | scipy 1.18.1 scipy.signal.welch (BSD-3-Clause) с тем же периодическим окном Ханна, перекрытием, масштабированием по плотности, без удаления тренда и с двусторонним средним усреднением: каждый интервал частоты в пределах 1e-12 относительной погрешности (наблюдалось 6.0e-14) на 27 случаях, причём числа сегментов взяты из собственной спектрограммы scipy. sigmf-python 1.13.0 (LGPL-3.0, запускается как инструмент) записывает пять сторонних записей (cf32_le, ci16_le, ci8, две записи с аннотациями, ненулевой первый sample_start), которые крейт декодирует бит в бит с теми же основными полями, и читает записи крейта обратно бит в бит; схема метаданных SigMF v1.2.6 сообщает ноль ошибок для метаданных крейта. Допуски зафиксированы до первого сравнения. Вне утверждения: spectrum::synthesise_iq и сравнения [iq] и [recording] с моделью (у синтеза нет единственного верного ответа; периодический чирп показывает линии, пульсации Френеля и краевые хвосты, которых нет в гладкой модели, суммарная мощность в пределах 2 %), соглашение о масштабировании целых чисел в числа с плавающей точкой (крейт делит на 32767 и 127, автомасштабирование sigmf-python — на 2^15 и 2^7, что спецификация оставляет открытым; сравнение использует необработанные коды), многоканальные записи и типы данных, которые читатель отвергает | VALIDATED |
| VM-5d9fc243 | Положения планет по всей Солнечной системе по кеплеровым элементам JPL Standish | Гелиоцентрические положения Меркурия, Венеры, барицентра Земля — Луна, Земли, Марса, Юпитера и Сатурна по таблице 1 Standish (от 1800 н. э. до 2050 н. э.) и всех восьми планет по таблицам 2a/2b (от 3000 до н. э. до 3000 н. э., с членами средней аномалии b, c, s, f), шаг за шагом по алгоритму страницы JPL и повёрнутые в ICRF (Международная небесная система отсчёта) по наклону эклиптики со страницы; Земля отделяется от барицентра лунным рядом Montenbruck & Gill и отношением масс. Составлено как ephem_provider::AnalyticSolarSystem, так что любое тело доступно относительно любого другого, и запускается как тип solar-system |
ephem (standish_state, standish_elements, standish_nominal_error, ecliptic_to_icrf); ephem_provider (AnalyticSolarSystem); solar_system (SolarSystemScenario) | tests/solar_system_standish_preregistered.rs::standish_rms_errors_are_within_explanatory_supplement_table_8_10_1 (барицентры 1800-2050 из таблицы 1 и 3000 BC-3000 AD из таблицы 2, 8908 и 21857 эпох, наихудшее СКО 0,778 от значения таблицы 8.10.1); tests/solar_system_standish_earth_icrf_preregistered.rs (earth_from_the_split_barycentre_is_within_the_emb_table_8_10_1_rms: Земля через AnalyticSolarSystem и icrf_to_ecliptic, СКО 0,483 от значения EMB; icrf_positions_are_within_the_table_8_10_1_rms: положения тел таблицы 1 и Земли в ICRF, наихудшее 0,778; earth_minus_barycentre_offset_matches_de441_1950_to_2050: разделение по лунному ряду, наихудшие 0,088 deg и 6,1 km); ephem::tests (standish_periods_obey_keplers_third_law; a_planet_track_is_one_closed_ellipse). Не определяющая регрессия: tests/solar_system_horizons_reference.rs | Геометрические гелиоцентрические векторы JPL Horizons DE441 (эклиптические и в ICRF), загруженные после коммитов предварительной регистрации 80451866, 8d38a28b и 558cc807. Порог: для каждой планеты и компоненты RMS не более 1.0x приближённых ошибок из Explanatory Supplement, 3-е изд., таблица 8.10.1 (строка EMB для Земли); разделение Земля — EMB проверяется напрямую по DE441 399 минус 3, не более 0,3 град и 8,1 км в каждую эпоху 1950–2050 (порог длины 8,1 км взят из точности лунного ряда, указанной в собственной документации Kshana по эфемеридам со ссылкой на Montenbruck и Gill, и по книге не проверялся; измеренные 6,09 км лежат близко к нему). Статистика RMS выбрана при том, что предыдущее сравнение на 27 эпохах достигало 1.87x номинала в максимуме; ошибки в отдельной эпохе достигают 3.83x (3.87x в случае ICRF). Supplement не определяет свои цифры как RMS. Случай B поворачивает обе стороны с наклоном эклиптики IAU 1976, введённым в тесте, так что поворот не проверяется сам относительно себя. Выбор таблицы по умолчанию в AnalyticSolarSystem не проверяется (тесты принудительно используют таблицу 1). Уран и Нептун по таблице 1 — отдельная строка MODELLED | VALIDATED |
| VM-bd135aad | Положения Солнца, Луны, Меркурия и Венеры по ядру DE440 на эпохи UTC (KernelEphemeris) | Геометрические положения Солнца, Меркурия, Венеры, Земли и Луны друг относительно друга (оси J2000/ICRF, метры) по ядру JPL DE440 через ephem_provider::KernelEphemeris на эпохи UTC: названия тел сопоставлены кодам NAIF, UTC проведено через таблицу високосных секунд, а TT в TDB — двучленным рядом TDB-TT, ядро прочитано собственным читателем движка. Тело, которое ядро хранит только как барицентр системы (от Марса до Нептуна, Плутон в de440s), отвергается и никогда не подменяется. Строка Standish без ядра остаётся путём для браузера и запасным путём | ephem_provider (KernelEphemeris::relative_position_utc, utc_to_tdb_jd2); naif_kernel; timescales | tests/kernel_ephemeris_skyfield_oracle.rs::kernel_ephemeris_matches_skyfield_at_utc_epochs (600 положений на 200 эпохах UTC 1973-2026, выбранных по хэшу предварительной регистрации; наихудшее 0,66 порога, 2,96 m); tests/kernel_ephemeris_skyfield_oracle.rs::kernel_ephemeris_matches_skyfield_on_the_full_kernel_when_present (зависит от данных); tests/kernel_ephemeris_skyfield_oracle.rs::barycentre_only_bodies_are_refused_not_substituted; ephem_provider::tests | Skyfield 1,54 (MIT) с собственной таблицей високосных секунд, собственным TDB-TT и собственным читателем того же файла NAIF de440s.bsp (jplephem), запущенный как отдельная программа на эпохи UTC. Предварительно зарегистрировано (0bfafe6d) до появления набора тестовых данных, сетка получена из хеша этого коммита, с порогом 5e-5 с, умноженным на относительную скорость (заявленная точность двучленного TDB-TT движка), плюс 1e-13 барицентрического расстояния плюс 1e-5 м, для каждой компоненты. Результат: все 600 внутри, наихудшее 0,66 порога (2,96 м на быстрой паре, собственная ошибка ряда TDB-TT). Мутация: TT, использованное как TDB, не проходит при превышении порога в 33 раза. Обе стороны читают DE440: это подтверждает поставщика и его цепочку времени, а не DE440. Вне утверждения: планеты за Венерой как тела (de440s содержит только их барицентры), спутники планет и точность ниже двучленного ряда TDB-TT (несколько метров для самых быстрых пар) | VALIDATED |
| VM-fde7ce48 | Время распространения света между телами Солнечной системы | Ньютоновское одностороннее время распространения света от любого тела до любого другого, принятое в эпоху, найденное радиометрическим решателем неподвижной точки для времени распространения света (radiometric::light_time_solution, передатчик в запаздывающем положении) через solar_system::link_on на любом EphemerisProvider; тип solar-system запускает его на аналитической Солнечной системе в гелиоцентрической системе отсчёта (solar_system::link). Двусторонняя дальность из radiometric::two_way_range и задержка Шапиро от Солнца из radiometric::shapiro_delay сообщаются отдельно и внешне не сравниваются. Выдаётся для каждого тела относительно наблюдателя и для любой дополнительной линии связи типом solar-system, а для нисходящей линии от тела к Земле — типом body-pnt |
radiometric (light_time_solution, two_way_range, shapiro_delay); solar_system (link, link_on); ephem_provider (AnalyticSolarSystem) | tests/solar_system_light_time_solver_preregistered.rs::light_time_solver_on_de441_positions_matches_horizons_lt_within_1e_6_s (барицентры Меркурия, Венеры, Марса, Юпитера и Сатурна, Солнце и Луна относительно центра Земли, по 1576 эпох на интерполированных положениях DE441, наихудшее 6.7e-9 s при 1e-6 s); не определяющее заявление о точности для аналитического пути: tests/solar_system_light_time_preregistered.rs (СКО c dLT от 0,17 до 0,30 порога положения из таблицы 8.10.1); solar_system::tests | Одностороннее ньютоновское время распространения света LT по нисходящему участку из JPL Horizons DE441 (VEC_CORR=LT, наблюдатель в центре Земли), предварительно зарегистрировано (480037d3, поправка 54d5c86f, менявшая только шаг узлов интерполяции после того, как первая загрузка не прошла предусловие по точности интерполяции в 10 м, до сравнения какого-либо времени распространения света) с порогом 1e-6 с на каждое время распространения света, причём решателю поданы барицентрические положения DE441, так что видна итерация запаздывающего передатчика (решатель с первой итерацией ошибается до 0,1 с). На аналитических положениях Standish время распространения света ровно настолько хорошо, насколько хороши эти положения (см. строку положений планет); поставляемая линия связи считает Солнце инерциальным центром, что остаётся в пределах этой ошибки положения, но отдельно не проверено. two_way_range и shapiro_delay внешне не сравниваются | VALIDATED |
| VM-2233778f | Уран и Нептун по таблице 1 Standish, Плутон и скорости планет | Положения Урана и Нептуна по таблице 1 Standish (по умолчанию внутри 1800 н. э. — 2050 н. э.), Плутона по строке таблицы 1 из 1992 года, которую текущая страница JPL больше не приводит, и гелиоцентрическая скорость каждой планеты: производная двух тел со средним движением, которое подразумевают элементы, плюс поворот эллипса скоростями перигелия, наклонения и узла | ephem (standish_state, StandishElements::state_at_mean_anomaly, Planet::Pluto); solar_system (position_label) | tests/solar_system_horizons_reference.rs (standish_table1_uranus_and_neptune_exceed_the_nominal_error: закреплено на уровне 2,04 и 5,16 номинальной ошибки долготы, менее шести раз; pluto_from_the_1992_row_is_measured_not_validated: в пределах 39 угл. сек и 1.14e9 м; standish_velocities_track_horizons_to_one_percent: худшее 3.7e-3 от скорости); ephem::tests (standish_velocity_is_the_derivative_of_the_position; pluto_has_no_table2_row_and_no_stated_error) | Измерено относительно JPL Horizons DE441 (те же зафиксированные наборы данных), но не подтверждено: заявленные в таблице 1 цифры для Урана и Нептуна превышены до 2,0 и 5,2 раза относительно гелиоцентрических положений DE441 (Нептун укладывается в них относительно барицентрических положений, что говорит о том, что подгонка была негелиоцентрической), страница не указывает ошибку для Плутона, а опубликованной границы для скоростей нет. Таблицы 2a/2b укладываются в собственные цифры для Урана и Нептуна и охвачены проверенной строкой | MODELLED |
| VM-404abc2a | Положения Луны и семи крупных спутников (Фобос, Деймос, галилеевы спутники, Титан) | Геоцентрическая Луна по ряду Montenbruck & Gill (чей член -1.3972 град за столетие уже относит её к равноденствию J2000) и планетоцентрические положения и скорости Фобоса, Деймоса, Ио, Европы, Ганимеда и Каллисто по средним элементам JPL Solar System Dynamics в плоскости Лапласа каждого спутника со скоростью средней долготы, взятой из скорости синхронного вращения IAU (таблица печатает период со слишком малым числом цифр, чтобы удержать фазу), и Титана по модели вращения IAU (спутник на минус связанной с телом оси x на средней дистанции), потому что напечатанная строка плоскости Лапласа для Титана не воспроизводит Horizons даже в собственную эпоху | ephem (satellite_state, Satellite, SatelliteMethod, moon_icrf, moon_icrf_velocity); ephem_provider (AnalyticSolarSystem) | tests/solar_system_horizons_reference.rs (moons_track_horizons_to_the_measured_angles: наибольшая угловая ошибка при наблюдении с планеты за 2000–2040 годы: Фобос 5,65 град, Деймос 0,38, Ио 0,40, Европа 1,63, Ганимед 0,22, Каллисто 0,27, Титан 3,31; geocentric_moon_tracks_horizons: 0,046 град); ephem::tests (moons_sit_at_their_mean_distance_and_move_at_their_mean_speed); ephem_provider::tests (earth_and_moon_balance_about_their_barycentre) | Измерено относительно эфемерид спутников JPL Horizons (DE441, MAR099, JUP365, SAT441), зафиксированных в tests/fixtures/solar_system/horizons_satellites_icrf.csv вместе с запросом и датой получения; опубликованной точности для средних элементов или для размещения по модели вращения нет, поэтому закреплённые пороги выявляют регрессии и ничего не подтверждают. Средние элементы не учитывают резонансные и солнечные возмущения, а вековое ускорение Фобоса не моделируется | MODELLED |
| VM-136e5aec | Физические константы каждого тела Солнечной системы и отчёт по всей системе | Тело получает Меркурий, Венеру, Юпитер, Сатурн, Уран, Нептун, Плутон, Фобос, Деймос, Ио, Европу, Ганимед, Каллисто и Титан (гравитационный параметр, опорный радиус, J2, где он опубликован, с радиусом, к которому он отнесён, полюс и нулевой меридиан IAU), поиск по имени и запись BodyFacts (код NAIF, класс, родитель, экваториальный и средний радиус); тип solar-system сообщает их для всех восемнадцати тел вместе с положениями, временем распространения света и треком орбиты за один оборот, причём каждое тело помечено как VALIDATED или MODELLED |
body (Body::by_name, Body::facts, Body::prime_meridian, SOLAR_SYSTEM, BodyFacts); solar_system (SolarSystemScenario, position_label) | body::tests (every_catalogue_body_resolves_by_name_and_carries_its_record; a_zonal_field_is_referenced_to_its_sources_radius; retrograde_rotators_have_negative_rates_and_periods_match_the_iau_rate); solar_system::tests (defaults_report_all_eighteen_bodies_with_tracks; earth_heliocentric_distance_is_one_au_and_period_one_year; a_planet_track_closes_on_its_orbit_and_starts_at_the_epoch_position; moons_orbit_their_planets_at_their_mean_distance; pluto_outside_its_table_is_an_error_not_a_guess; every_emitted_number_has_a_unit); tests/body_constants_naif_oracle.rs::only_the_conventional_constants_of_other_rows_differ | Переписанные опубликованные константы, каждая со ссылкой там, где она определена: гравитационные параметры из записей тел JPL Horizons и таблицы физических параметров спутников JPL, радиусы из таблиц физических параметров JPL (IAU WGCCRE 2015), полюса и нулевые меридианы от Рабочей группы IAU по картографическим координатам и элементам вращения (средние значения, без членов скорости T и периодических членов), J2 из Smith et al. 2012, Iess et al. 2018 и 2019, а также Jacobson 2009 и 2014. Проверено на внутреннюю согласованность (период вращения Юпитера относительно скорости системы III, каждое J2 относительно своего опорного радиуса), а не по внешнему оракулу. 0,30 раунд 2: значения GM приняты из gm_de440, а элементы Фобоса и Деймоса — из pck00011, так что 0 из 84 констант четырнадцати добавленных тел теперь отличаются от NAIF (было 12), что является проверкой переписи и не засчитывается. 0,36: связанная с телом ориентация IAU и GM четырнадцати добавленных тел выделены в собственную строку VALIDATED («Ориентация тел IAU и гравитационный параметр четырнадцати добавленных тел Солнечной системы»); в этой строке остаётся остальное. J2 и средний радиус цитируются, а не подтверждаются; положения в отчёте опираются на собственные строки; а prime_meridian_deg в отчёте для Земли, Луны и Марса остаётся на условных константах (до 6.6e-3, 2.8e-2 и 9.6e-4 рад от IAU_<BODY>). Правки 0,30: GM Фобоса 7.087e5 -> 7.087546066894452e5, Деймоса 9.62e4 -> 9.615569648120313e4, Урана 5.7939506103e15 -> 5.793951256527211e15, Нептуна 6.83509997e15 -> 6.835103145462294e15, Плутона 8.69326e11 -> 8.696138177608748e11 м³/с²; экваториальный радиус Фобоса 13,1 -> 13,0 км; prime_meridian_deg теперь включает квадратичные и периодические члены | MODELLED |
| VM-ee5cc5e3 | Ориентация тел IAU и гравитационный параметр четырнадцати добавленных тел Солнечной системы | Body::iau_rotation_et — вращение от J2000 к связанной с телом системе IAU для Меркурия, Венеры, Юпитера, Сатурна, Урана, Нептуна, Плутона, Фобоса, Деймоса, Ио, Европы, Ганимеда, Каллисто и Титана с каждой вековой скоростью, квадратичным и периодическим членом, которые тело несёт в pck00011, а также поле гравитационного параметра mu тех же четырнадцати тел. Солнце, Земля, Луна и Марс несут условные константы, принадлежащие другим строкам, и не охвачены | body (Body::iau_rotation_et, Body::iau_angles_et, Body) | tests/body_orientation_spice_oracle.rs::orientation_matches_spice_pxform_for_the_fourteen_added_bodies (41 эпоха с 1955 по 2044, 574 матрицы в пределах 1e-9 rad, наихудший Фобос 1.43e-10 rad); tests/body_orientation_spice_oracle.rs::orientation_matches_spice_pxform_at_fresh_epochs (41 эпоха с 1961 по 2038, ранее никогда не сравнивавшихся, 574 матрицы в пределах 1e-9 rad, наихудший Фобос 1.38e-10 rad); tests/body_constants_naif_oracle.rs::constants_match_naif_pck00011_and_gm_de440 (0 из 84 констант четырнадцати тел отличаются от NAIF) | NAIF SPICE Toolkit (CSPICE N0067 через spiceypy) pxform('J2000', 'IAU_<BODY>') на pck00011.tpc — независимая реализация той же модели вращения IAU, и NAIF gm_de440.tpc для GM, причём наборы данных сгенерированы отдельной программой, не вызывающей код Kshana (tests/fixtures/body_orientation_spice_oracle/, NOTICE.md). Предварительно зарегистрировано 154bc54 (с исходным порогом 1e-9 рад из c2434204) до появления набора данных на новых эпохах; новый набор был воссоздан независимо и побайтово идентичен. GM — это переписанное значение DE440, сверенное с опубликованным файлом, а не независимое определение GM. Результаты: docs/design/evidence/mr08-body-orientation/RESULTS.md | VALIDATED |
| VM-136e83d4 | Позиционирование вокруг любого тела Солнечной системы с локальной орбитальной группировкой и линией связи в дальнем космосе с Землёй | Тип body-pnt: орбитальный аппарат или посадочный модуль на поверхности вокруг выбранного по имени тела навигирует по односторонним псевдодальностям от навигационной группировки Walker вокруг тела (двутельные орбиты с вековым дрейфом по J2 тела, неизвестные часы пользователя) и по необязательной двусторонней дальности от Земли, не зависящей от часов, причём направление и расстояние до Земли берутся из аналитических эфемерид в каждую эпоху; линии визирования, заслонённые сферой тела, и маска возвышения на поверхности; для каждой эпохи — GDOP и PDOP только по группировке (orbit::dop), формальная неопределённость положения с строкой Земли и без неё и определения Гаусса — Ньютона с заданным начальным значением (batch_ls::gauss_newton) в обоих вариантах, с временем распространения света и временем полного пути от тела до Земли |
body_pnt (BodyPntScenario, formal_sigma, fix_error); orbit (dop); batch_ls (gauss_newton); mars_pnt (chord_clears_sphere); mars_frame (bodyfixed_to_inertial) | body_pnt::tests (relay_period_is_keplers_third_law_for_the_body; an_orbiter_keeps_its_radius_and_a_lander_sits_on_the_surface; the_earth_range_never_worsens_the_formal_uncertainty; seeded_fix_errors_are_consistent_with_the_formal_sigma: среднеквадратическое значение каждой ошибки определения, делённое на её собственную формальную сигму, лежит в [0,6, 1,5]; earth_light_time_is_minutes_at_mars_and_the_run_is_deterministic; defaults_run_around_mars_and_every_number_has_a_unit) | Замкнутые формы и самосогласованность: третий закон Кеплера для периода ретранслятора, радиус орбиты и радиус поверхности, сохраняемые на протяжении прогона, добавление измерения, никогда не увеличивающее формальную неопределённость, и согласие ошибок с заданным начальным значением с ковариацией. Орбиты ретрансляторов игнорируют третьи тела (притяжение Юпитера для ретрансляторов вокруг Европы не моделируется), шум гауссов на заданных уровнях, а модель измерений мгновенна, поэтому это не проверено по навигационным данным какой-либо миссии | MODELLED |
| VM-ead7033f | Геометрия группировки Walker и опубликованные номинальные слоты GPS, Galileo и GLONASS | Генераторы типа constellation-design: схемы Walker delta и star в соглашении T/P/F (шаг узлов 360/P или 180/P, шаг в плоскости 360·P/T, фазовый сдвиг между плоскостями 360·F/T), а также базовая и расширяемая 24-слотовая предустановки GPS, предустановки Galileo и GLONASS, построенные по опубликованным номинальным элементам и помещённые в связанную с Землёй систему отсчёта по гринвичскому часовому углу, который указывают их документы |
constellation (WalkerSpec::elements, gps_slots, galileo_walker, glonass_slots, GPS_BASELINE_SLOTS, GPS_EXPANDABLE_SLOTS) | constellation::tests::walker_24_3_1_reproduces_galileo_os_sdd_table_23 (все 24 строк RAAN и средней аномалии с точностью 1e-9 deg); constellation::tests::glonass_icd_slot_formula_is_a_walker_24_3_1 (формула слотов из ICD и Walker 24/3/1 дают одни и те же 24 пар узла и аргумента широты); constellation::tests::gps_presets_reproduce_the_published_equatorial_crossings (экваториальное пересечение трассы для всех 36 позиций GPS по RAAN, аргументу широты и часовому углу 100,765 deg: 35 в пределах 0,0108 deg при пороге округления 0,015 deg, а E3F в пределах 0,06 deg, потому что строка E3F самой таблицы противоречит её RAAN и аргументу широты примерно на 0,06 deg; вековая регрессия узла в пределах 5 % от -0.0402 deg/day в таблице); constellation::tests::walker_geometry_identities_are_exact (три тождества интервалов для дельта- и звёздчатых структур до 1 584 спутников, с точностью 1e-9 deg) | Опубликованные документы агентств: Galileo Open Service Service Definition Document, выпуск 1,1 (European GNSS Service Centre), таблицы 1 и 23, опорная группировка на 2016-11-21 00:00 UTC; GLONASS Interface Control Document, редакция 5,1 (2008), раздел 5,2, формула слотов для долготы узла и аргумента широты; GPS Standard Positioning Service Performance Standard, 5-е издание (April 2020), таблицы 3.2-1, 3.2-2 и 3.2-3, включая столбец пересечения экватора трассой подспутниковой точки, который есть независимое описание связанной с Землёй геометрии, которую предустановка должна воспроизводить. Подтверждает генераторы и переписанные значения; фаза средней орбиты BeiDou и узлы наклонных геосинхронных орбит не опубликованы и не охвачены | VALIDATED |
| VM-a33da228 | Глобальный геометрический фактор DOP базовой группировки GPS | Движок покрытия типа constellation-design на базовой 24-слотовой предустановке GPS при условиях приложения B к GPS Standard Positioning Service Performance Standard (SPS PS) (одни звёздные сутки, 287 пятиминутных шагов, глобальная сетка 4 x 4 град со взвешиванием по косинусу широты, все в зоне видимости, маска 5 град, одни часы приёмника): глобальное распределение HDOP, медиана PDOP и доступность PDOP не более 6, глобально и в наихудшей точке |
constellation (coverage, dop_at, NormalAccum) | constellation::tests::gps_baseline_global_dop_matches_the_sps_performance_standard (медиана HDOP 0,940, 90 % 1,165, 95 % 1,255, 98 % 1,370, среднее 0,965 при 0,94, 1,16, 1,25, 1,37 и 0,96, порог 0,03 для каждого, зафиксирован до первого прогона; медиана PDOP 1,795 не выше 1,815 из таблицы B.3-1 для ухудшенной смеси из 20-24 спутников; доступность 100 % глобально и в наихудшем пункте при 98 % и 88 % из таблицы 3.8-1); constellation::tests::single_epoch_dop_matches_the_hand_computation (зенит плюс три спутника на возвышении 30 deg: HDOP 4/3, VDOP 2,3094, PDOP 8/3, TDOP 1,5275, GDOP 3,0732 с точностью 1e-9 и равен orbit::dop при общих часах) | GPS SPS PS, 5-е издание (April 2020), приложение B, разделы B.3.2.2 и B.3.2.3, опубликованное глобальное среднее распределение HDOP полностью заполненной базовой 24-слотовой группировки (медиана 0,94, 90 % 1,16, 95 % 1,25, 98 % 1,37, среднее 0,96), таблица 3.8-1 (доступность PDOP) и таблица B.3-1 (ансамблевый PDOP деградировавшей группировки, используемый только как верхняя граница), плюс выведенная вручную замкнутая форма для одной эпохи. Распределения VDOP и PDOP полной группировки опубликованы только в виде рисунка, поэтому PDOP закреплён односторонне; наихудшая точка пространства-времени (HDOP 2,40 и VDOP 5,22 здесь, 2,49 и 5,43 опубликовано) зависит от сетки и сообщается, а не закрепляется | VALIDATED |
| VM-79dd3ee7 | Карты покрытия и геометрического фактора DOP для произвольных многоконстелляционных проектов в масштабе вокруг любого центрального тела | Тип constellation-design за пределами двух закреплённых случаев: явные и многооболочечные проекты, несколько группировок в одном прогоне с одними часами приёмника на группировку, Земля, Луна и Марс по константам тел, предустановка BeiDou (смоделированы фаза средней орбиты и пересечение наклонной геосинхронной орбиты на 118 град в. д.), спутники в зоне видимости, GDOP, PDOP, HDOP, VDOP и доступность в каждой ячейке, прореженные трассы и предварительный фильтр видимости по широте подспутниковой точки, который прогоняет проект из 5 000 спутников на сетке 10 град за долю секунды |
constellation (coverage, ConstellationDesignScenario, beidou_slots, body_by_name) | constellation::tests (prefilter_matches_brute_force_exactly — каждая карта и счётчик равны перебору с прямой проверкой угла возвышения; five_thousand_satellites_on_a_coarse_grid — 5 000 спутников, выводит время прогона и число сохранённых проверок пар; a_clock_per_constellation_needs_one_more_satellite; beidou_geo_and_igso_geometry; lunar_shell_runs_around_the_moon; presets_are_earth_only_and_errors_are_clear; preset_counts); tests/constellation_availability_published_spec_oracle.rs::presets_meet_the_published_dop_availability (только проверка на регрессии); tests/coverage_dop_full_oracle.rs::finding_is_pinned; tests/coverage_dop_gnss_lib_py_oracle.rs (регрессия) | Внутренняя согласованность: полный перебор по углу места, вычисленные вручную сведения и сведения orbit::dop, а также замкнутая геометрия Walker и геосинхронных орбит. Двутельные орбиты с необязательным вековым J2, сферическое тело с местной вертикалью вдоль радиуса, только геометрическая видимость (без мощности сигнала, исправности спутников, рельефа или возмущений от третьих тел), и относительная фаза между системами, взятая из разных опорных эпох, так что это не снимок какой-либо даты. 0,30 обзор, вывод (остаётся MODELLED): предустановки укладываются в опубликованные односторонние нижние границы доступности DOP (BeiDou OS Performance Standard 3,0, Galileo OS SDD) на 100 %, но при PDOP движка, удвоенном в черновой копии, они всё равно укладываются (наихудшая точка 99,36 %), поэтому эти границы не способны обнаружить даже ошибку в 100 % в величине, которую вычисляет эта строка; ужесточение их после прогона было бы допуском задним числом. Для повышения нужно двустороннее сравнение значений DOP на идентичной геометрии с заранее заданным допуском. 0,30 раунд 2 (tests/coverage_dop_full_oracle.rs, предварительно зарегистрирован add671d6), вывод (остаётся MODELLED): положения, углы места, азимуты и трассы по Orekit 12,2 с GDOP/PDOP/HDOP/VDOP по gnss_lib_py 1.0.4 (общие часы) и обратной матрицей numpy (одни часы на группировку) согласуются по каждому порогу на Galileo, GPS, BeiDou, Galileo+GPS (по одним часам на каждую) и проекте Земли из 1584 спутников (DOP в пределах 2e-14 относительной погрешности, идентичное определение, доступность и числа видимых). На проектах для Луны и Марса элементы, положения, видимость и трассы согласуются, но DOP превышает заранее заданный относительный порог 1e-9 в ячейках, где наибольший PDOP равен 1434 или больше (до 8e-6), а 4 ячейки отличаются на одну эпоху определения на численно вырожденной геометрии (опорный элемент движка 1e-10 против ранга numpy), поэтому строка не подтверждена. Правки 0,30: опорные часы для TDOP/GDOP теперь принадлежат группировке с наименьшим номером в зоне видимости (глобальный максимум GDOP constellation-multi-gnss-coverage 2,2236 -> 2,1205, среднее 1,122 -> 1,131), а числа видимых по группировкам суммируются как целые | MODELLED |
| VM-f9c068a3 | Составная миссия через типы сценариев на одной общей временной шкале | Фазы типа campaign: каждая фаза запускает один или несколько сценариев существующих типов через run_toml, считывает их выходные данные в именованные каналы (ошибка времени часов и защитный интервал, средняя эффективная отношение несущей к плотности шума и нижний предел слежения, вертикальный уровень защиты и предел тревоги, ошибка положения, отслеживаемые спутники, флаги тревоги) по предустановкам для типов или явным путям результатов, помещает их в начало фазы и удерживает на общей сетке, с границами фаз и событиями; состояние передаётся дальше через carry (канал продолжается с конечного значения предыдущей фазы), handoff (номер предыдущей фазы записывается в следующий сценарий) и end_at (фаза заканчивается в момент, вычисленный прогоном, например во время обнаружения монитора спуфинга); хеш кампании и дайджест по каждому результату участника |
campaign (run_campaign_detailed, run_chain, presets, extract, to_svg) | tests/campaign_composition_reference.rs (a_one_phase_clock_campaign_reproduces_the_standalone_run_bit_for_bit, a_one_phase_integrity_campaign_reproduces_the_standalone_run_bit_for_bit, a_one_phase_jamming_campaign_reproduces_the_standalone_run_bit_for_bit — результат участника побайтно идентичен автономному прогону, а каждое выровненное значение равно автономному ряду; the_chained_mission_hands_state_on_and_ends_the_spoofing_phase_on_detection; a_handoff_writes_the_previous_phase_number_into_the_next_scenario; malformed_campaigns_fail_loudly) | Тождества композиции относительно автономных прогонов тех же типов: однофазная кампания воспроизводит автономный результат бит в бит, перенесённое смещение равно последнему собственному отсчёту предыдущего прогона, а фаза, оконченная через end_at, имеет длину, в точности равную времени обнаружения прогона. Аддитивный перенос через границу фазы и удержание нулевого порядка — выбор моделирования, и каждая фаза настолько хороша, насколько хорош запустивший её тип; ни одна составная миссия не сверена с измеренной | MODELLED |
| VM-badb561f | Перебор параметров и ансамбли Монте-Карло с заданным начальным значением для любого типа сценария | Разделы sweep (от одного до трёх ключей через точку любого типа, на значениях осей универсального перебора, при желании с ансамблем в каждом узле) и monte_carlo типа campaign: реализация k запускается при base_seed + k; для каждой метрики сообщаются среднее, стандартное отклонение, перцентили 5/50/95 по методу ближайшего ранга и доверительный интервал среднего 95% по перцентильному бутстрэпу с фиксированным начальным значением (inertial::metric_stat); единицы метрик берутся из собственного блока units перебираемого типа |
campaign (run_sweep, run_monte_carlo, ensemble); sweep (GenericAxis, coords_of, set_dotted_value); inertial (metric_stat) | tests/campaign_composition_reference.rs (a_fixed_seed_ensemble_is_byte_stable_and_each_realisation_is_the_standalone_run; the_ensemble_mean_and_spread_match_the_white_fm_closed_form — 200 начальных значений (seed) для часов с белым частотным шумом на выбеге tau = 3010 с: истинное среднее 0 внутри сообщённого интервала, полуширина интервала в пределах 25 % от 1,96 sigma/sqrt(n), а выборочная дисперсия внутри двустороннего 99 % интервала хи-квадрат для sigma = sqrt(q_wf tau) = 16,459 нс; калибровочный ансамбль (CAP-10, предварительно зарегистрирован ea451cb5, docs/CALIBRATION-ENSEMBLES.md, tests/calibration_ensembles.rs): по 200 независимым ансамблям интервал накрывает истинное среднее в 192 случаях (внутри 99 % области Binomial(200, 0,95) [181, 197]), а проверка хи-квадрат проходит в 196, тогда как допуск по процентилям для одного начального значения (p05 и p95 в пределах 0,3 сигмы) проходит лишь в 183 из 200, NOT MET относительно предварительно зарегистрированных 190, — проверка, неустойчивая к выбору начального значения, зафиксирована, а не ослаблена; a_one_node_sweep_and_a_one_member_composition_read_the_standalone_number) | Замкнутая форма случайного блуждания фазы при белом частотном шуме с дисперсией q_wf tau (NIST Technical Note 1337) для статистического аппарата и побайтовое равенство с автономными прогонами для задания начальных значений. Проверяется арифметика ансамбля на собственной модели часов движка, а не внешний набор данных | MODELLED |
| VM-d55cb714 | Несколько сценариев при общих условиях с объединённой сводкой | Раздел compose типа campaign: именованные общие значения (например, мощность и положение одной помехи) записываются в каждый элемент по ключам, к которым они привязаны, каждый элемент запускается, а по каждой метрике сообщаются наименьшее, наибольшее и среднее значения среди элементов с указанием элемента; единицы метрик должны совпадать у всех элементов |
campaign (run_compose) | tests/campaign_composition_reference.rs (a_one_node_sweep_and_a_one_member_composition_read_the_standalone_number — композиция из одного участника читает автономное число и дайджест результата) | Тождество композиции относительно автономного прогона. Арифметика общих условий — учёт; физика принадлежит типам-элементам, у каждого из которых своя строка | MODELLED |
| VM-5664a533 | Ограниченная оптимизация одной метрики по параметрам кампании | Раздел optimize типа campaign (CAP-32): от одного до трёх ключей сценария через точку, ограниченных [lo, hi] в линейной или логарифмической шкале, одна метрика, считываемая по пути результата, цель — minimize, maximize или target; метод — сетка (значения осей перебора) или детерминированный симплекс Нелдера — Мида в нормированных координатах с проекцией на коробку и стандартными коэффициентами; отсутствующая или не конечная метрика получает наихудшую оценку и остаётся в трассе; при runs > 1 метрика — среднее по общим начальным значениям; каждое вычисление — реальный прогон названного типа, перечисленный в trace и учтённый в дайджесте воспроизводимости |
campaign::optimize (run_optimize, nelder_mead) | tests/campaign_optimize_reference.rs (предварительно зарегистрировано fbe6c8b3 и, после промаха протокола в раунде 1, 441f31bc: p2_prime_interior_target_range_matches_the_closed_form — 1-D решение по цели в пределах 6.1e-15 от r* = r0 10^((m(r0) - 3)/20) за 96 вычислений; p3_prime_contour_target_grid_and_nelder_mead и p3_grid_matches_brute_force_and_nelder_mead_does_at_least_as_well — лучшее значение метода сетки совпадает бит в бит с независимым полным перебором 41 x 41 поверх run_toml, Нелдер–Мид не хуже за 177 и 161 вычислений; p4_nelder_mead_reaches_the_corner_maximum; p5_the_document_is_byte_stable_and_counts_agree; p2_round1_not_met_the_box_excludes_the_closed_form, закрепляющий записанный промах раунда 1); campaign::optimize::tests (nelder_mead_meets_the_preregistered_rosenbrock_bar: f* = 1.7e-20 за 234 вычисления; a_non_finite_score_is_never_the_best; the_grid_mapping_is_the_sweeps) | Только внутренняя проверка: точная замкнутая форма уравнения линии связи -20 log10(range), независимая полная сетка по тому же типу и функция Розенброка. Порог 1-D раунда 1: NOT MET (предварительно зарегистрированная коробка исключала решение в 3 дБ; оптимизатор остановился на границе), записано в docs/design/evidence/cap32-optimize/RESULTS.md и повторно не оценивалось. Оптимум локален для коробки и начальной точки; утверждения о глобальном оптимуме нет | MODELLED |
| VM-25c2d93d | Замкнутые формы с ограниченной полосой для любого дальномерного сигнала: мощность в полосе и джиттер слежения за кодом по схеме «ранний — поздний» относительно опубликованных значений, с перекрёстной проверкой ширины полосы по Габору и спектрального разделения со смещением | navsignal: интегральный синус (sine_integral), доля мощности BPSK-R внутри двусторонней полосы в замкнутой форме (bpsk_power_in_band_closed_form), ширина полосы по Габору BPSK с ограниченной полосой в замкнутой форме (bpsk_gabor_bandwidth_closed_form_hz), джиттер когерентной и некогерентной системы слежения за задержкой по схеме «ранний — поздний» с ограниченной полосой для любого спектра единичной площади по Betz & Kolodziejski 2009 (dll_jitter_bandlimited_s) и его граница Габора при исчезающе малом разносе (dll_jitter_small_spacing_limit_s), коэффициент спектрального разделения BPSK со смещением в замкнутой форме (bpsk_offset_ssc_closed_form), спектр Galileo E5 AltBOC(15 10) (altboc_15_10_psd) и разборщик меток модуляции (parse_modulation); используется типом leo-signal для каждого проекта сигнала |
navsignal (sine_integral, bpsk_power_in_band_closed_form, bpsk_gabor_bandwidth_closed_form_hz, dll_jitter_bandlimited_s, dll_jitter_small_spacing_limit_s, bpsk_offset_ssc_closed_form, altboc_15_10_psd, parse_modulation) | navsignal::band_limited_tests (sine_integral_matches_tables_and_its_limit — Si(1), Si(pi), Si(2 pi) с точностью 1e-12; bpsk_power_in_band_closed_form_matches_textbook_and_numeric — 0,9028 мощности в главном лепестке для BPSK(1/3), BPSK(1), BPSK(5), BPSK(10), а замкнутая форма равна квадратуре с точностью 1e-7 в 10, 15, 20 и 51,15 MHz; bpsk_gabor_closed_form_matches_numeric_and_asymptote — с точностью 1e-4 и асимптота sqrt(B R_c / (2 pi^2)); bandlimited_dll_reduces_to_the_textbook_forms — когерентный «ранний–поздний» BPSK(1) при 45 dB-Hz, B_L 1 Hz, d 1 чип, T 20 ms: 0,0039564 чипа (1,159 m) в пределах 1 %, некогерентная форма равна navsignal::dll_code_jitter_chips в пределах 1 %, предел исчезающего интервала равен своей замкнутой форме с точностью 1e-5; offset_bpsk_ssc_matches_parseval_closed_form — смещения от 0 до 3,2 R_c в пределах 0,01 dB и -71.86 dB/Hz при нулевом смещении для BPSK(10); altboc_psd_is_unit_area_with_lobes_at_e5a_and_e5b; modulation_labels_round_trip) | Внешне закреплено: 90,3 процента мощности главного лепестка, когерентный джиттер «ранний — поздний» в заявленной рабочей точке, табличные значения интегрального синуса и собственный коэффициент спектрального разделения BPSK 2/(3 R_c) при нулевом смещении. Только внутренние перекрёстные проверки, а не внешняя проверка: замкнутая форма ширины полосы по Габору BPSK с ограниченной полосой и её асимптота, а также коэффициент спектрального разделения BPSK со смещением при ненулевых смещениях, оба выведены здесь и проверены квадратурой. Опубликованные замкнутые формы: спектр sinc в квадрате для BPSK-R и его 90 процентов мощности главного лепестка (Kaplan & Hegarty, Understanding GPS/GNSS, 3-е изд.); когерентный джиттер слежения за кодом «ранний — поздний» sigma^2 = B_L d / (2 C/N0) chips^2 (Kaplan & Hegarty, раздел 8) и обобщение с ограниченной полосой с его пределом по Габору (Betz & Kolodziejski, Generalized Theory of Code Tracking with an Early-Late Discriminator, Part I, IEEE Transactions on Aerospace and Electronic Systems 45(4), 2009); таблицы интегрального синуса из Abramowitz & Stegun (таблица 5,1); коэффициент спектрального разделения как преобразование Фурье квадрата автокорреляции (Betz 2001). Спектр AltBOC проверяется только на единичную площадь и положение лепестков (выражение из Galileo Open Service Signal-in-Space Interface Control Document интегрируется в 8 и делится на него). | VALIDATED |
| VM-46b52315 | Максимальный доплеровский сдвиг навигационного спутника на низкой околоземной орбите, определяющий размер области поиска при захвате | leo_signal::max_doppler_hz: наибольший доплеровский сдвиг спутника при пролёте над головой при маске возвышения для круговой орбиты, v R_E cos(el) / (R_E + h) умноженное на f / c, по собственной несущей и высоте орбиты каждой предустановки; тип leo-signal добавляет члены генератора и пользователя и превращает его в интервалы по Доплеру |
leo_signal (max_doppler_hz) | leo_signal::tests::max_doppler_matches_published_xona_and_iridium_figures — Xona Pulsar X1 (1593,3225 MHz, 1080 km) 33,2 kHz внутри опубликованных от 32 до 34 kHz; Iridium (1621 MHz, 780 km) в пределах 0,5 kHz от опубликованных 36 kHz | Опубликованные значения: максимальный доплер Xona Pulsar X1 от 32 до 34 kHz (Leclère, Marathe & Reid, ION GNSS+ 2025, https://arxiv.org/abs/2509.19551); доплер Iridium до +/-36 kHz (Resilient Navigation and Timing Foundation, Recent PNT Improvements and Test Results Based on Low Earth Orbit Satellites). Вращение Земли не учитывается, что сдвигает значение примерно до 2,3 kHz; оба опубликованных значения достигаются и без него. | VALIDATED |
| VM-3fce7cff | Проекты сигналов позиционирования, навигации и времени на низкой околоземной орбите: слежение за кодом, захват, совместимость с GNSS и компромисс по диапазону для любой системы | Тип leo-signal: параметризованные проекты сигналов (диапазон, ширина полосы передачи, распределение ITU; компоненты захвата, данных и пилотные с BPSK(n), BOC(m,n), MBOC или плоскими спектрами, доли мощности, поднесущие FDMA, длины кодов и скорости данных) из встроенных при компиляции публичных файлов предустановок (Xona Pulsar, Iridium STL, сигнал оказии Starlink, CentiSpace, общий проект C-диапазона и общие проекты UHF/L/S/C/широкого C, у каждого — URL источника, а неопубликованные значения помечены как «REPRESENTATIVE») либо записанные встроенно; для каждого сигнала — спектральная плотность мощности с ограниченной полосой, доли мощности в полосе, ширина полосы по Габору, джиттер кода относительно C/N0 и разноса и точность дальнометрии, пространство поиска при захвате, вероятность обнаружения по квадратичному закону и среднее время последовательного и кодово-параллельного захвата, коэффициент спектрального разделения с GPS L1 C/A, Galileo E1, GPS L5, Galileo E5a, E5b и AltBOC и от них с ухудшением C/N0, а также допуск по J/S для CW, широкополосной и согласованной помехи по цепочке SSC типа spectrum; компромисс по диапазону между ионосферной задержкой, потерями в свободном пространстве, точностью дальнометрии при равном C/N0 и равной EIRP и устойчивостью к помехам; и качественные проверки формы проекта относительно описанного измерения |
leo_signal (LeoSignalScenario, SignalDesign, Component, Shape, code_jitter_m, gabor_bandwidth_hz, detection_probability, threshold_for_pfa, mean_acquisition_time_s, ssc_leo_into_gnss, ssc_gnss_into_leo, jammer_tolerance, gnss_victim, preset, public_signal) | leo_signal::tests (every_public_preset_parses_and_cites_a_url; detector_reduces_to_pfa_and_grows_with_snr; detection_probability_with_several_looks_matches_the_noncentral_chi_square; mean_time_of_a_perfect_detector_is_half_the_cells; compatibility_ssc_magnitudes_match_independent_quadrature; to_spectrum_band_is_consistent_with_the_design; jammer_tolerance_orders_cw_matched_wideband; e5_centred_signal_hits_e5a_and_e5b_equally; defaults_run_on_the_generic_band_preset; inline_signal_and_bad_inputs); tests/leo_signal_reference.rs (каждый встроенный независимый от системы сценарий запускается без данных семинара, ионосферные отношения при смене диапазона равны (f_ref/f)^2, а разности потерь в свободном пространстве равны 20 log10(f/f_ref), джиттер при опорном C/N0 лежит между своей границей Габора и формой для неограниченной полосы, проверки формы E5 для сценария с параметрами семинара согласованы, когда этот файл присутствует, и ни один исходный файл этот файл не компилирует) | Проверенные замкнутые формы двух строк выше, тождество ложной тревоги при квадратичном законе P_d(snr = 0) = P_fa и среднее время захвата по Holmes, а также сведение к собственной цепочке SSC типа spectrum (тот же код Jammer::ssc). Сами проекты — входные данные: предустановки с пометкой «REPRESENTATIVE» или «WORKSHOP» не являются опубликованными спецификациями, спектры улучшенного Feher QPSK, манипуляции сдвигом кода и OFDM аппроксимированы, а проверки формы сравнивают формы, а не откалиброванные уровни. | MODELLED |
| VM-42081bd2 | Многодиапазонный водопад спектра (UHF, L, S, C) с проектными сигналами и помехами по диапазонам | Тип spectrum, расширенный за пределы L-диапазона: диапазоны, заданные как предустановленный проект сигнала (рисуется со всеми компонентами, с ограничением полосы шириной полосы передачи, C/N0 и J/S относятся к отслеживаемой компоненте) или как произвольные несущая и модуляция; дополнительные панели водопада по любому диапазону частот на той же временной шкале и цветовой шкале; широкополосная (заградительная) помеха наряду с CW, узкополосной, чирпом и согласованным шумом; J/S и эффективный C/N0 по диапазонам по неизменной цепочке коэффициента спектрального разделения |
spectrum (Band::unit_psd, Band::tracked_power_dbw, BandDesign, BandCfg, PanelCfg, SpectrumScenario, Waveform, multi_band_svg); leo_signal (SignalDesign::to_spectrum_band) | tests/leo_signal_reference.rs (многополосная водопадная диаграмма строится с четырьмя панелями, источники подавления в диапазонах UHF, L5, S и C подавляют каждый только свою полосу, а прогон с обычной полосой расширением не меняется); leo_signal::tests::to_spectrum_band_is_consistent_with_the_design; spectrum::tests (agrees_with_the_jamming_kind_chain) | Сведение к существующей цепочке спектра и уравнению защиты от помех типа jamming (однокомпонентный диапазон даёт те же числа, что и до расширения) и спектрам сигналов из проверенных строк. Мощности помех, временная шкала, полосы входных каскадов и проектные сигналы — входные данные, а проектный сигнал обрезается на своей полосе передачи (внеполосного излучения нет). | MODELLED |
| VM-9ddaa2d5 | Коэффициенты удельного ослабления в дожде для любого диапазона, используемого линией связи LEO-PNT | ITU-R (International Telecommunication Union, Radiocommunication Sector) P.838-3, уравнения (1)–(5): k_H, alpha_H, k_V, alpha_V из аппроксимаций кривых таблиц 1–4, зависящие от трассы и поляризации (k, alpha) и удельное ослабление k R^alpha; используется членом дождя типа leo-pass |
leo_link::itu (p838_coefficients, p838_k_alpha, rain_specific_attenuation_db_km) | tests/leo_link_reference.rs (p838_coefficients_reproduce_table5_to_its_printed_digits: все 115 строк таблицы 5, от 1 GHz до 1000 GHz, каждый коэффициент в пределах 0,6 от последней напечатанной цифры; наихудшее наблюдаемое 0,51) | ITU-R P.838-3 (03/2005), таблица 5, собственные табулированные k_H, alpha_H, k_V, alpha_V Рекомендации, зафиксированные в tests/fixtures/leo_link/p838_3_table5.csv вместе с URL PDF и датой получения. Таблица округлена до напечатанных цифр, поэтому порог — это округление | VALIDATED |
| VM-86ab5cbc | Долговременное ослабление в дожде на наклонной трассе линии связи «Земля — космос» | ITU-R P.618-14, раздел 2.2.1.1, шаги 2–10 (наклонная и горизонтальная трасса ниже высоты дождя, коэффициенты горизонтального сокращения и вертикальной поправки, A0.01 и его масштабирование до 0,001 %–5 % среднего года), причём высота дождя (P.839) и R0.01 (P.837) — входные данные, потому что движок не содержит ни одной цифровой карты; применяется по диапазонам и эпохам типом leo-pass |
leo_link::itu (p618_rain_attenuation_db, RainPath) | tests/leo_link_reference.rs (p618_rain_attenuation_matches_the_itu_validation_examples: 56 случаев на пяти пунктах, 14,25 и 29 GHz, от 0,001 % до 1 %, в пределах 1e-4 dB; наблюдаемо 5e-6 dB) | Файл проверочных примеров ITU-R Study Group 3 CG-3M3J-13-ValEx-Rev8.3.0 для P.618-14 в табулировании со страниц проверки ITU-Rpy, с высотой дождя P.839-4 каждой площадки из тех же примеров; зафиксирован в tests/fixtures/leo_link/p618_14_rain_attenuation.csv вместе с URL и датой получения. Подтверждает процедуру при заданных h_R и R0.01, а не карты | VALIDATED |
| VM-987a822b | Тропосферные амплитудные сцинтилляции на линии связи «Земля — космос» | ITU-R P.618-14, раздел 2.4.1, шаги 3–9 (опорная sigma по N_wet, эффективная длина трассы, коэффициент усреднения антенной, глубина замирания для 0,01 %–50 % времени), причём N_wet — входные данные или вычисляется по температуре, влажности и давлению выражениями ITU-R P.453-14; ниже 4 ГГц тип leo-pass помечает значение как экстраполяцию |
leo_link::itu (p618_scintillation_db, wet_refractivity, ScintillationPath) | tests/leo_link_reference.rs (p618_scintillation_matches_the_itu_validation_examples: 42 случая на семи пунктах, 14,25 и 20 GHz, в пределах 1e-5 dB; наблюдаемо 5e-7 dB) | Проверочные примеры ITU-R Study Group 3 (CG-3M3J-13-ValEx-Rev8.3.0) для сцинтилляций по P.618-14, с N_wet по P.453-14 каждой площадки из тех же примеров; зафиксированы в tests/fixtures/leo_link/p618_14_scintillation.csv вместе с URL и датой получения. Выражение влажной рефракции по температуре и влажности этой строкой не охвачено | VALIDATED |
| VM-47ae8b0f | Потери при проникновении в здание для пользователя LEO-PNT внутри помещения | ITU-R P.2109-2, приложение 1, уравнения (1)–(10) с таблицей 1: потери, не превышаемые с вероятностью P, для традиционных и теплоэффективных зданий при угле места трассы у фасада, от 80 МГц до 100 ГГц; применяется по диапазонам и эпохам к пользователю внутри помещения типом leo-pass (случай UHF в помещении) |
leo_link::itu (p2109_building_entry_loss_db, BuildingClass); detection (normal_inv_cdf) | tests/leo_link_reference.rs (p2109_building_entry_loss_matches_the_itu_workbook: 568 значений, 28 GHz при 0 deg и 2 GHz при 45 deg, оба класса, P от 1e-7 до 0,998, в пределах 0,001 dB) | Значения из рабочей книги проверки Clutter and BEL ITU-R Study Group 3, переписанные из проверочного скрипта эталонной реализации на MATLAB (github.com/eeveetza/p2109), зафиксированные в tests/fixtures/leo_link/p2109_bel.csv вместе с URL и датой получения. Рабочая книга печатает три десятичных знака | VALIDATED |
| VM-8fce41a4 | Ионосферная задержка первого порядка по диапазонам, безионосферная комбинация и потери в свободном пространстве | Групповая задержка 40,3 STEC/f^2 по диапазонам; безионосферные коэффициенты f1^2/(f1^2 - f2^2) и -f2^2/(f1^2 - f2^2) и усиление шума sqrt(a1^2 s1^2 + a2^2 s2^2) для любой пары диапазонов; потери в свободном пространстве 20 log10(4 pi R f/c) из linkbudget::free_space_loss_db в её форме для километров и мегагерц | leo_link::iono (group_delay_m, iono_free_coefficients, iono_free_noise_amplification); leo_link (fspl_db); linkbudget (free_space_loss_db) | tests/leo_link_reference.rs (first_order_iono_reproduces_the_is_gps_200_group_delay_ratio: gamma = (77/60)^2 с точностью до 1e-12, усиление L1/L2 и L1/L5 — 2,978 и 2,588; free_space_loss_is_the_friis_kilometre_megahertz_form: 32,4478 + 20 log d + 20 log f с точностью до 1e-4 дБ); leo_link::iono::tests (delay_scales_as_one_over_f_squared; iono_free_combination_removes_the_first_order_delay) | IS-GPS-200, раздел 20.3.3.3.3.2, где указано отношение групповых задержек L1/L2 gamma = (77/60)^2, вытекающее из масштабирования первого порядка 1/f^2, и формула передачи Friis (Proc. IRE, 1946). Подтверждает законы масштабирования, а не наклонное TEC | VALIDATED |
| VM-6a111b40 | Максимальный доплеровский сдвиг, который видит неподвижный пользователь на орбите LEO или MEO | leo_link::geometry::max_static_user_range_rate: поиск по каждому положению на орбите и каждому пользователю на горизонте спутника круговой орбиты при вращении Земли наибольшей скорости изменения дальности, плюс орбитальная и наибольшая связанная с Землёй скорость спутника; сообщается по диапазонам как огибающая по Доплеру типом leo-pass и используется как окно поиска при холодном старте его модели низкого энергопотребления |
leo_link::geometry (max_static_user_range_rate, DopplerEnvelope, doppler_hz) | tests/leo_link_reference.rs (doppler_envelope_reproduces_the_pulsar_paper_table_1: Pulsar IOV 520 км 97 град., Pulsar FOC полярная 1080 км 97 град., Pulsar FOC наклонная 1080 км 53 град. и GPS 20180 км 55 град.; орбитальная скорость, максимальная скорость в ECEF, максимальная относительная скорость и максимальный доплеровский сдвиг несущей в диапазонах L1 и L5, 20 значений, каждое в пределах 0,05 %) | Leclere, Marathe and Reid, Insights into Xona Pulsar LEO PNT: Constellation, Signals, and Receiver Design, ION GNSS+ 2025, arXiv 2509,19551, таблица 1 (неподвижный приёмник на сфере 6371 км, вращение Земли — единственный иной эффект): 37751,7 / 33628,5 / 31813,4 / 4018,4 Гц на L1. Охватывает круговые двутельные орбиты | VALIDATED |
| VM-95b055dc | Пролёт LEO-PNT и его бюджет линии связи по диапазонам в сравнении со спутниками MEO GNSS в зоне видимости | Тип leo-pass: спутники из спроектированного пролёта, элементов, TLE через SGP4 или группировки Walker из constellation-design; по диапазонам и эпохам — углы визирования, дальность, скорость изменения дальности и ускорение дальности в замкнутой форме (проверяются при каждом прогоне по центральным разностям и сообщаются), потери в свободном пространстве, EIRP с изофлюксной, гауссовой или плоской диаграммой, патч-антенна, полусферическая или изотропная антенна пользователя, газовое ослабление ITU-R P.676-10, приложение 2, дождь и сцинтилляции P.618, потери при проникновении в здание P.2109, рассогласование поляризации, шумовая температура системы, C/N0, доплеровский сдвиг и скорость его изменения, а также задержка первого порядка по наклонному TEC по Klobuchar или вертикальному TEC, масштабированному долей Чепмена ниже спутника; безионосферные пары с шумом кода в пике пролёта; несущие Galileo или GPS по принимаемым мощностям из их документов интерфейса через тот же приёмник |
leo_pass (LeoPassScenario); leo_link::geometry (design_pass, link_geometry, numerical_check, SatMotion, UserMotion); leo_link::antenna; leo_link::itu (p676_gaseous_attenuation_db); leo_link (system_noise_temperature_k, cn0_dbhz) | leo_pass::tests (the_leo_pass_is_a_bell_above_flat_gnss; closed_form_doppler_agrees_with_the_numerical_derivative: менее 0,01 Гц и 0,01 Гц/с; indoor_uhf_suffers_less_building_loss_than_c_band; rain_attenuates_c_band_more_than_s_band; iono_delay_scales_as_one_over_f_squared_across_bands; a_fully_custom_band_needs_no_preset; a_walker_constellation_and_a_tle_satellite_both_run; defaults_run_with_no_preset_named_and_every_number_has_a_unit); leo_link::geometry::tests (kepler_velocity_is_the_derivative_of_the_position; a_designed_pass_reaches_the_requested_elevation; closed_form_range_rate_and_accel_match_central_differences_for_two_body_motion); leo_link::antenna::tests | Замкнутые формы и самосогласованность: тождества скорости изменения дальности и ускорения дальности относительно численных производных, изофлюксное усиление, компенсирующее рост дальности, предельные случаи потерь на поляризацию из учебников, качественное наблюдение «LEO против GNSS» (колоколообразный пролёт длительностью в минуты с пиком на несколько дБ выше плоских несущих GNSS в 44–51 дБ-Гц). EIRP и диаграммы — опубликованные принимаемые мощности, пересчитанные в EIRP, или представительные выборы; газовый член — устаревший упрощённый метод P.676-10; и ничто не сравнивается с измеренным C/N0 для LEO | MODELLED |
| VM-0723b0b7 | Названные предустановки систем LEO-PNT с указанными источниками и независимый от системы движок | leo_link::presets: общая многодиапазонная (UHF, L, S, C), общая C-диапазонная, Xona Pulsar X1/X5, Iridium STL, Starlink как сигнал оказии только для Доплера, CentiSpace и необязательная предустановка Celeste IOD, у каждой источник помечен PUBLIC (с URL), REPRESENTATIVE или WORKSHOP, причём рабочая — в необязательном файле предустановки Celeste IOD, компилируемом только при наличии этого файла; каждый диапазон и каждая орбита переопределяются в сценарии, а сценарий может вообще не называть предустановку | leo_link::presets (SystemPreset, BandPreset, all, by_id, gnss_meo); leo_pass (resolve_bands) | leo_link::presets::tests (every_preset_is_sourced_and_self_consistent; only_the_celeste_preset_is_sourced_from_the_workshop); leo_link::presets::xona_pulsar::tests (the_eirps_reproduce_the_published_minimum_power_at_ten_degrees; a_flat_pattern_lands_the_zenith_power_near_the_published_maximum: в пределах 0,5 дБ от -139.1 и -136.2 дБВт); leo_link::presets::iridium::tests; leo_pass::tests (a_fully_custom_band_needs_no_preset) | Переписанные цитируемые публичные цифры и проверка согласованности: EIRP, заданная по опубликованной минимальной принимаемой мощности, предсказывает опубликованный максимум в пределах 0,5 дБ при плоской диаграмме. Это проверка разброса дальности, а не подтверждение антенны какого-либо спутника; представительные предустановки не делают утверждений о реальной системе | MODELLED |
| VM-f20670eb | Позиционирование с низким энергопотреблением: время до первого определения и энергия на определение в зависимости от скважности | leo_link::energy и раздел [iot] типа leo-pass: когерентное накопление, ограниченное скоростью изменения доплеровского сдвига, некогерентные суммы при квадратичном законе до порога обнаружения, поиск по интервалам Доплера по огибающей орбиты для неподвижного пользователя (холодный) или по вспомогательному окну (горячий), параллельный или последовательный поиск кода, время навигационного сообщения при холодном старте, энергия на определение и срок службы батареи при разных интервалах определений, для каждого диапазона LEO и сигнала GNSS |
leo_link::energy (fix_budget, duty_curve, IotReceiver, IotSignal); leo_pass (iot_section) | leo_link::energy::tests (stronger_signals_and_smaller_doppler_windows_fix_faster; the_doppler_rate_caps_the_coherent_time; battery_life_grows_with_the_fix_interval_toward_the_sleep_floor); leo_pass::tests (the_run_is_deterministic_and_bad_inputs_are_rejected) | Внутренняя согласованность заявленной модели проекта: каждая мощность, порог и выбор поиска — входные данные, а модель игнорирует неоднозначность границы бита, пропуск обнаружения и повторный захват. С измеренным приёмником не сравнивалось | MODELLED |
| VM-0beb4fb3 | Глобально усреднённые веса ошибки дальности сигнала в пространстве для любой высоты орбиты | leo_navmsg::sisre::sisre_weights: радиальный вес w_R и квадрат поперечного веса w_AC^2 как средние от cos^2 и половины sin^2 надирного угла линии визирования по пользователям, равномерно распределённым на видимой шапке Земли выше маски возвышения, для любого радиуса орбиты, интегрированием по Симпсону; используется в каждой цифре SISRE в leo-navmsg (при 510 км w_R 0,46 и w_AC^2 1/2.5) | leo_navmsg::sisre (sisre_weights, StatsAcc) | leo_navmsg::sisre::tests (weights_reproduce_the_published_meo_and_geo_table — GPS 0,979 и 1/48.9, GLONASS 1/45.0, Galileo 0,984 и 1/61.1, BeiDou MEO 1/54.2, геостационарные 0,992 и 1/126.2 при маске 0 град., каждое в пределах 0,005 от w_R и 0,5 от 1/w_AC^2; leo_weights_shift_toward_the_transverse_axes — надирный угол горизонта 67,8 град. на высоте 510 км) | Опубликованная таблица весовых коэффициентов SISRE из Montenbruck, Steigenberger and Hauschild (2018), Multi-GNSS signal-in-space range error assessment - Methodology and results, Advances in Space Research 61(12):3020-3038, doi 10.1016/j.asr.2018.03.041: GPS 0,98 и 1/49, GLONASS 0,98 и 1/45, Galileo 0,98 и 1/61, BeiDou MEO 0,98 и 1/54, BeiDou IGSO/GEO 0,99 и 1/126. То же среднее, вычисленное на радиусах LEO, даёт веса LEO; опубликованная таблица для LEO не закреплена, поэтому значения для LEO — применённый проверенный метод, но не проверенные отдельно | VALIDATED |
| VM-71b6ea3d | Пользовательский алгоритм бортовых эфемерид по ICD Galileo как основа навигационного сообщения LEO | leo_navmsg::elements::kepler_point: вычисление кеплеровых элементов по Galileo OS SIS ICD (уравнение Кеплера, поправки второй гармоники, связанный с Землёй узел), написанное отдельно от вычислителя RINEX движка, возвращающее положение вместе с аргументом широты, наклонением и узлом, по которым строится система координат поправок «вдоль / поперёк / радиально», и члены расширения Liu et al. 2025 | leo_navmsg::elements (kepler_point, kepler_frame, ephemeris_at, sat_state) | tests/leo_navmsg_reference.rs (the_galileo_user_algorithm_reproduces_rtklib_to_a_millimetre — четыре реальные широковещательные эфемериды Galileo E10, E19, E24, E25 при tk = 0, +/-600, +/-1800, +/-3600 с, по каждой оси в пределах 1 мм от RTKLIB; real_galileo_records_survive_the_binary_frame_and_the_text_block — в пределах 5 мм после двоичного кадра Kshana и 1 мм после блока в стиле RINEX) | Положения ECEF eph2pos из RTKLIB 2.4.2-p13 (независимая реализация того же алгоритма ICD) для реальных записей вещания BKG/IGS за 2024-09-10, оба зафиксированы с указанием происхождения в tests/fixtures/rinex_sp3_interop (NOTICE, rinex_ecef_reference.txt, brdc_multignss_slice.rnx). Это подтверждает кеплеров пользовательский алгоритм; добавленные сверху поправки «вдоль / поперёк / радиально» охвачены собственными строками, а члены Liu — строкой Liu et al. 2025 с 22 параметрами | VALIDATED |
| VM-50db12ad | Проверка кадра CRC-24Q для навигационного сообщения LEO | leo_navmsg::codec::crc24q: порождающий полином 0x1864CFB, начальное значение 0, без отражения, без финального XOR, проверка, которую кадр LEO Kshana несёт по каждому предшествующему байту | leo_navmsg::codec (crc24q, encode, decode) | leo_navmsg::codec::tests (crc24q_matches_the_catalogue_check_value — 0xCDE703 для ASCII-строки 123456789; crc24q_matches_the_rtcm_1005_example_frame — три контрольных байта 0x360B98 примера кадра RTCM 10403 с типом сообщения 1005 и нуль по всему кадру) | Контрольное значение каталога CRC для этих параметров (каталог CRC reveng.sourceforge.io, CRC-24/LTE-A: ширина 24, poly 0x864CFB, init 0, check 0xCDE703), которые являются параметрами CRC-24Q из RTCM 10403 и Galileo OS SIS ICD, и пример кадра сообщения типа 1005, напечатанный в RTCM 10403 | VALIDATED |
| VM-d977634a | Подгонка бортовых эфемерид LEO и ошибка дальности сигнала в пространстве в зависимости от интервала подгонки и периода обновления | Подгонка и компромисс типа leo-navmsg: истинная орбита, проинтегрированная с зональной гравитацией J2–J6 или EGM2008 до выбранной степени и с торможением, и часы с заданным начальным значением, свободные или с подстройкой; подгонка Левенберга — Марквардта кеплерова набора Galileo по неособым элементам со слабыми априорными значениями, затем полиномы поправок вдоль, поперёк и радиально линейным методом наименьших квадратов; полином часов, подогнанный за вычетом релятивистского члена пользователя; SISRE (только по орбите и с часами) по периодам использования, центрированным в окнах подгонки, в зависимости от интервала подгонки и периода обновления. Проверенная часть: 16-параметрическая кеплерова подгонка и её SISRE только по орбите в зависимости от интервала подгонки на реальных прецизионных орбитах и проинтегрированная истинная орбита с J2–J6/EGM2008(20, 70)/торможением относительно Orekit 12,2 в пределах 4,6 мм за 6 ч (порог 2 см, тот же вход по плотности); полиномы поправок, подгонка часов (свободные или с подстройкой часы с заданным начальным значением) и компромисс по периоду обновления остаются на уровне modelled |
leo_navmsg::fit (fit_message, lstsq, polyfit); leo_navmsg::truth (TruthOrbit, TruthClock); leo_navmsg (sequence_stats, LeoNavmsgScenario) | leo_navmsg::tests::a_two_body_truth_is_recovered_by_the_keplerian_fit_to_a_millimetre; leo_navmsg::tests::the_user_algorithm_reproduces_the_fitted_truth_to_a_millimetre_with_corrections; leo_navmsg::tests::the_clock_fit_returns_the_truth_clock_through_the_user_relativistic_term; leo_navmsg::tests::keplerian_sisre_grows_with_the_fit_interval_and_the_corrections_fix_it (монотонный рост от 1 до 15 минут и не менее чем трёхкратное улучшение при 15 минутах); leo_navmsg::tests::defaults_run_encode_decode_without_any_preset_and_are_deterministic; tests/leo_navmsg_fit_real_orbit_oracle.rs::fitted_sisre_matches_liu_2025_on_real_orbits (редуцированно-динамические орбиты TU Graz ITSG для GRACE-A, GRACE-C, Sentinel-2A и Sentinel-6A, аппроксимированные на дугах 20 и 30 мин: среднеквадратичные значения по трансверсальной, бинормальной и радиальной осям от 0,804 до 1,087 и SISRE от 0,716 до 0,809 от значений Liu et al. 2025, в пределах 1.5x; веса SISRE в пределах 0,0007 от его таблицы 2); tests/leo_navmsg_full_claim_oracle.rs::integrated_truth_orbit_matches_orekit_within_2_cm_over_6_h (Orekit 12,2 + Hipparchus 3,1, то же начальное состояние и те же входные данные по плотности: наихудшее значение 3,95 мм для задачи двух тел, 3,92 мм для J2-J6 и EGM2008 до степени 20 и 70, 4,55 мм для EGM2008 степени 20 с торможением на высоте 400 км, порог 0,02 м на 6 ч); внутренняя перекрёстная проверка, не оракул: tests/leo_navmsg_full_claim_oracle.rs::corrections_clock_fit_and_update_period_trade_agree_with_an_internal_cross_check_on_grace_fo | Реальные прецизионные научные орбиты как истина (операционные редуцированно-динамические орбиты TU Graz IfG/ITSG, свободные для любого использования с указанием авторства; значения SHA-256 в NOTICE набора данных), подогнанные 16-параметрическим набором на дугах 20 и 30 мин, относительно статистики, которую Liu et al. 2025 (Remote Sensing 17(16):2894, CC BY 4,0) публикуют для тех же спутников и суток: СКО вдоль, поперёк и радиально — каждое в пределах 1.5x (измерено от 0,804 до 1,087), SISRE в пределах 1.5x (измерено от 0,716 до 0,809) и веса SISRE в пределах 0,005 от таблицы 2 (измерено 0,0007); допуски зафиксированы до сравнения. Покомпонентный барьер придаёт тесту силу: обнуление скорости наклонения оставляет каждое отношение SISRE в пределах 1.5x, но не проходит барьер по поперечной составляющей. Единообразное отношение SISRE от 0,72 до 0,81 принадлежит статье: её напечатанные значения SISRE используют веса таблицы 2 без возведения в квадрат, а не собственное уравнение 9, которому следует Kshana (Montenbruck et al. 2018). Проинтегрированная истинная орбита (зональные J2–J6, EGM2008 до степени 20 и 70, торможение) согласуется с Orekit 12,2 (CS GROUP, Apache-2.0) и Hipparchus 3,1, распространёнными из того же начального состояния в тех же системах отсчёта с тем же входом по плотности, в пределах 4,55 мм за 6 ч (порог 0,02 м зафиксирован до прогона, предварительная регистрация 65e4d46c). Вне утверждения: полиномы поправок, подгонка часов и компромисс по периоду обновления, у которых остаются внутренние проверки (истинная двутельная орбита, восстановленная 16-параметрическим набором с точностью лучше 1 мм, и внутренняя перекрёстная проверка numpy экспортированных сообщений на GRACE-FO с его часами CLK1B, написанная и запущенная этим проектом и не являющаяся независимым оракулом) | VALIDATED |
| VM-a64cd2c4 | Обновление навигационного сообщения LEO в середине пролёта с проверкой непрерывности при переключении | Анализ midpass-update типа leo-navmsg: самый высокий пролёт над пользователем в пределах интервала поиска, сообщения по глобальному расписанию с периодами использования, центрированными в окнах подгонки, и при каждом переключении — скачок положения в 3D, скачок часов, скачок псевдодальности пользователя, наибольший скачок по любой видимой линии визирования (замкнутая форма по надирному конусу), ошибка дальности до и после, а также PASS/FAIL относительно порога |
leo_navmsg (LeoNavmsgScenario::midpass, worst_case_jump, elevation, geodetic_to_ecef) | leo_navmsg::tests::a_mid_pass_update_is_continuous (скачок дальности при каждом переключении равен изменению ошибки дальности, а скорректированная аппроксимация на 300 с, обновляемая каждые 150 с, проходит порог 5 см); leo_navmsg::tests::a_keplerian_only_update_over_a_long_interval_is_flagged; leo_navmsg::tests::worst_case_jump_bounds_every_line_of_sight (замкнутая форма ограничивает плотную выборку конуса) | Внутренняя согласованность (тождество скачка и граница по конусу относительно полной выборки). Порог — входные данные; никакого опубликованного требования к непрерывности для LEO не закреплено | MODELLED |
| VM-2ed420b3 | Документированное двоичное кодирование навигационного сообщения LEO с бюджетом ошибок квантования | leo_navmsg::codec: собственный кадр Kshana (преамбула, версия, модель, длина, полезная нагрузка, CRC-24Q) для четырёх моделей эфемерид, полином часов, SVID, возраст данных, диапазон, исправность, набор Klobuchar, коэффициенты NeQuick-G и параметры UTC, каждое поле с указанными шириной и шагом (field_table), квантование с отказом при выходе за диапазон и бюджет наибольшего изменения положения и часов, которое вызывает изменение каждого поля на полшага в течение окна действительности | leo_navmsg::codec (encode, decode, write_payload, read_payload, field_table, quantisation_budget) | leo_navmsg::codec::tests (signed_fields_round_trip_through_the_bit_packer; week8_resolves_near_the_reference); leo_navmsg::tests::every_model_round_trips_through_the_binary_frame (каждая модель в пределах 2 мм от точного сообщения после декодирования, повторное кодирование бит в бит, перевёрнутый бит отвергнут по CRC); leo_navmsg::tests::every_field_of_the_budget_stays_under_a_millimetre | Тождества прямого и обратного преобразования и сам бюджет. Формат — собственный формат Kshana, смоделированный по опубликованным компонентам сообщения и набору полей Galileo ICD; это не раскладка битов Celeste или какой-либо другой системы (ни одна не публична), поэтому внешней раскладки для сверки нет | MODELLED |
| VM-75b6f696 | Экспорт навигационных сообщений LEO в стиле RINEX-4 и в CSV | leo_navmsg::text: блок в стиле RINEX-4 (заголовок записи > EPH, строка спутника и эпохи с тремя членами часов, строки бортовой орбиты D19.12) с буквой системы L и типами записей KP16, KRAC, LU22 и APOL, помеченный в каждом заголовке как расширение Kshana, не являющееся частью RINEX 4,02, и таблица CSV со схемой столбцов по умолчанию и предустановленными схемами, у каждой — импортёр | leo_navmsg::text (rinex_export, rinex_import, csv_export, csv_import, calendar, from_calendar) | leo_navmsg::text::tests (calendar_round_trips_and_knows_the_gps_origin; d19_is_rinex_shaped); leo_navmsg::tests::rinex_and_csv_round_trips (каждая модель в пределах 0,1 мм после текстового блока, CSV точен) | Прямое и обратное преобразования и календарная арифметика. RINEX 4,02 не определяет навигационных записей LEO (IGS RINEX 4,02), поэтому раскладка — документированное расширение со ссылкой на arXiv 2401,17767 как на предшествующий уровень техники; внешнего читателя для сверки с ней не существует | MODELLED |
| VM-357232ee | 22-параметрическая модель эфемерид LEO по Liu et al. 2025 и её подгонка на реальных прецизионных орбитах | вариант Liu22 модели leo_navmsg::elements::EphemerisModel, вычисляемый kepler_point с Liu22Extra: 16-параметрический набор плюс скорость большой полуоси a_dot, скорость среднего движения n_dot, входящая как n = sqrt(mu/A0^3) + dn + n_dot tk, переписанная из уравнения 1 статьи (сравнение подгонки не зависит от этого соглашения о масштабе, поэтому смысл передаваемого значения nDot здесь не подтверждается), а также гармоники радиуса Crs1, Crc1, Crs3, Crc3 с однократной и трёхкратной частотой на оборот по нескорректированному аргументу широты. Её подгонка через leo_navmsg::fit::fit_message берёт из раздела 2,3 статьи начало и оцениватель (каждая поправка начинается с нуля; обычный метод наименьших квадратов без априорных значений; ограничение статьи в 100 итераций), но останавливается по правилу сходимости параметров Kshana (каждый шаг меньше 1e-3 своей формальной сигмы), а не по правилу статьи об изменении RMS меньше 0,1 мм. Подгонка по дугам 20 и 30 минут табулированной прецизионной орбиты | leo_navmsg::elements (kepler_point, Liu22Extra); leo_navmsg::fit (fit_message, fit_kepler, initial_params, formal_sigma); leo_navmsg::truth (TruthOrbit) | tests/leo_navmsg_fit_real_orbit_oracle.rs::liu22_model_matches_the_published_sisre (четыре дня из статьи: отношения по трансверсальной, бинормальной и радиальной осям и SISRE от 0,755 до 1,138 от значений Liu et al. 2025, в пределах 1.5x); tests/leo_navmsg_fit_real_orbit_oracle.rs::liu22_holds_on_held_out_days (восемь отложенных дней, по две дуги в каждом: от 0,683 до 1,186) | Измерено: операционные редуцированно-динамические орбиты TU Graz IfG/ITSG (свободные для любого использования с указанием авторства; значения SHA-256 в NOTICE набора данных) спутников GRACE-A, GRACE-C, Sentinel-2A и Sentinel-6A — истина, подогнанная на дугах 20 и 30 мин и сравнённая со строками с 22 параметрами (a_dot, n_dot, Crs3, Crc3, Crs1, Crc1) из таблиц 4, 5, 6 и 8 у Liu, Su, Xie, Zhou and Qu (2025), Remote Sensing 17(16):2894, doi 10.3390/rs17162894 (CC BY 4,0; числа цитируются, а не вносятся в репозиторий). Пороги зафиксированы до первого сравнения: СКО вдоль, поперёк и радиально — каждое в пределах 1.5x в обе стороны, и SISRE в пределах 1.5x, для каждого спутника и обеих длин дуг. Повторный прогон раунда 2 был предварительно зарегистрирован (aa559785) до изменения движка и до загрузки отложенных орбит: подгонка по уравнению 1 и разделу 2,3 статьи плюс двое новых отложенных суток на спутник относительно тех же напечатанных значений. Измерено: каждое отношение для суток из статьи от 0,755 до 1,138 и каждое отношение для отложенных суток от 0,683 до 1,186. Раскрыто: отношения вдоль трассы при 20 мин первого прогона 1,71 (Sentinel-2A) и 1,86 (Sentinel-6A) были известны до повторного прогона. Самые низкие отношения SISRE для отложенных суток лежат вблизи нижней границы 0,667, потому что напечатанный в статье SISRE использует веса таблицы 2 без возведения в квадрат (см. строку 16-параметрической подгонки). Предварительная регистрация неверно изложила правило остановки статьи (статья останавливается при изменении RMS меньше 0,1 мм); сохранено предварительно зарегистрированное правило сходимости параметров. Мутация: возврат априорных значений с центром в нуле даёт для Sentinel-6A при 20 мин вдоль трассы 1,08 против 0,70 см (1,54), что не проходит. Проверка рецензентом: соглашение до 0.30 (множитель 1/2 при n_dot) оставляет каждую цифру неизменной, поэтому сравнение ограничивает функциональное пространство 22-параметрической модели и качество её подгонки, а не соглашение о n_dot. Вне утверждения: ATOMIC полином ECEF и синтетическая таблица сравнения моделей для пяти высот, у которых своя строка MODELLED | VALIDATED |
| VM-b4f93233 | ATOMIC: полином ECEF с нулевыми часами и синтетическое сравнение моделей LEO на пяти высотах | Вариант EcefPoly модели leo_navmsg::elements::EphemerisModel: полином ECEF по каждой оси без членов часов, релятивистский член из -2 r.v/c^2, оценённый относительно подстраиваемых часов. Также анализ сравнения моделей (liu_comparison по LIU2025_TABLE): он подгоняет 22-параметрическую модель на пяти высотах из статьи по 20-минутным дугам орбиты, проинтегрированной в Kshana, и выводит результат рядом с опубликованным SISRE | leo_navmsg::elements (EcefPoly, ephemeris_at); leo_navmsg (liu_comparison, LIU2025_TABLE) | leo_navmsg::tests::liu22_beats_the_16_parameter_set_over_a_20_minute_arc; leo_navmsg::tests::the_ecef_polynomial_fits_a_minute_to_millimetres; leo_navmsg::tests::every_preset_resolves_and_the_atomic_preset_selects_the_zero_clock_polynomial | ATOMIC: факты о модели из InsideGNSS (полином 6-го порядка, срок действия около одной минуты, обновление каждые 30 с, подстраиваемые часы, ошибка часов 24 см). Это описательные факты, для которых нет опубликованных чисел для сравнения. Таблица для пяти высот выводит SISRE по Liu et al. 2025 (8,88, 6,21, 2,87, 2,11 и 0,75 см на высотах 320, 475, 786, 966 и 1336 км на 20-минутной дуге) рядом с подгонкой Kshana на собственной проинтегрированной орбите (4,25, 2,87, 2,20, 1,25 и 0,51 см; отношения от 0,46 до 0,77); значения не зафиксированы, поскольку в статье подгонялись реальные прецизионные орбиты и эталонные орбиты различаются. 22-параметрическая модель и её подгонка проверены на реальных орбитах в строке Liu et al. 2025 22-parameter LEO ephemeris model and its fit on real precise orbits. Редакция 0,30: значения в таблице изменились при подгонке по соглашению статьи (GRACE-A 5,40 -> 4,25 см, GRACE-C 4,12 -> 2,87, Sentinel-2A 2,95 -> 2,20, HY-2A 2,38 -> 1,25, Sentinel-6A 0,70 -> 0,51) | MODELLED |
| VM-d4776382 | Одночастотные ионосферные услуги и услуги UTC навигационного сообщения LEO | leo_navmsg::services: широковещательная задержка Klobuchar на любой несущей (модель L1 движка, масштабированная на (f_L1/f)^2), эффективный уровень ионизации NeQuick-G Az = ai0 + ai1 mu + ai2 mu^2 с правилами для нулевого набора коэффициентов и для [0, 400] sfu, а также системное время в UTC для трёх случаев ICD с секундой координации | leo_navmsg::services (klobuchar_delay_m, effective_ionisation_level, system_to_utc) | leo_navmsg::services::tests (klobuchar_scales_with_inverse_frequency_squared — значение для L1 равно 6,1278 м по RTKLIB; nequick_az_rules; utc_without_an_event_is_tow_minus_leap_seconds_folded_to_a_day; utc_drift_terms_follow_the_icd_formula; an_inserted_leap_second_reads_86400_at_the_end_of_the_day); tests/leo_navmsg_services_gnsstk_oracle.rs::services_match_gnsstk_and_erfa (Klobuchar для L1, L2 и L5 на 4 320 вариантах, наихудшее значение 7.0e-13 м; Az на 222 наборах коэффициентов, включая набор из одних нулей и правила для 400 sfu, наихудшее значение 5.7e-14 sfu; дрейф UTC на 50 вариантах, наихудшее значение 3.6e-15 с; три случая високосной секунды на 21 602 моментах времени вокруг реальных високосных секунд 2015 и 2016 годов, 0 с) | GNSSTk 15.3.1 (ARL:UT, LGPL-3.0, коммит 55ea3344, запускается как отдельная программа через обвязку; код GNSSTk в проект не включён): getIonoCorr класса KlobucharIonoNavData на L1, L2 и L5, getEffIonoLevel класса NeQuickIonoNavData для Az с правилами для нулевого набора коэффициентов и для [0, 400] sfu и getOffset класса GPSLNavTimeOffset для дрейфа UTC, в пределах 1e-3 м, 1e-6 sfu и 1e-9 с; а также ERFA через pyerfa 2.0.1.5 (BSD-3), которая выводит UTC из таблицы секунд координации IERS, для трёх случаев ICD с секундой координации на реальных секундах координации 2015-06-30 и 2016-12-31, включая отсчёт 23:59:60, в пределах 1e-9 с (GNSSTk не реализует правило длины суток случая (b) из ICD, поэтому там он не использовался, как записано в предварительной регистрации). Входные данные — реальные коэффициенты из заголовка IGS BRDC. Предварительно зарегистрировано (6a66994b; поправка 88807a7e зафиксировала подмножество сетки секунд координации из 21 602 строк до того, как какое-либо значение Kshana было сравнено). Интегрирование электронной плотности NeQuick не реализовано, и поправка для спутника LEO, летящего внутри ионосферы, не вводится | VALIDATED |
| VM-39824338 | Доплер, с которым должен справляться наземный приёмник при работе с навигационным спутником LEO | Точная скорость изменения дальности спутника, чьи положение и скорость в земной системе координат получены из двухтельной орбиты с вековым дрейфом J2 и вращением Земли (leo_fusion::geom::EarthOrbit::state, скорость — точная производная положения по времени), пересчитанная в Доплер на несущей; наибольший по модулю Доплер, скорость изменения Доплера и рывок выше маски по углу места на заданном окне (leo_fusion::doppler::doppler_envelope), выводятся по каждой системе LEO видом leo-pvt в режиме doppler |
leo_fusion::geom (EarthOrbit); leo_fusion::doppler (range_rate, doppler_envelope) | tests/leo_doppler_reference.rs (iridium_doppler_reaches_the_published_36_khz: один спутник на высоте 780 км при наклонении 86,4 град., пролетевший за сутки на частоте 1621 МГц над четырьмя широтами, максимум в пределах 5 % от 36 кГц; xona_pulsar_x1_doppler_lies_in_the_published_32_to_34_khz: по одному спутнику из каждой опубликованной оболочки, 1080 км при 53 и 97 град., 1593,3225 МГц, максимум по орбитальной группировке в пределах от 32 до 34 кГц без расширения (33,6 кГц, определяется оболочкой 97 град.; одна оболочка 53 град. даёт пик 31,8 кГц)); leo_fusion::geom::tests (velocity_is_the_time_derivative_of_the_position) | Воспроизведены опубликованные значения по заданной орбите и несущей: Доплер Iridium до ±36 кГц (Resilient Navigation and Timing Foundation, Recent PNT improvements and test results based on LEO satellites) и максимальный Доплер Xona Pulsar X1 от 32 до 34 кГц (Leclère, Marathe and Reid, ION GNSS+ 2025, arXiv:2509,19551). Значение для Iridium — округлённая верхняя граница, отсюда порог 5%. Скорость изменения Доплера и рывок выводятся, но не проверены: смоделированный рывок Pulsar X1 при пролёте над головой составляет около 1,0 Гц/с^2 против опубликованного 1,26 | VALIDATED |
| VM-c4520dfd | Позиционирование по Доплеру LEO, по одному и по нескольким спутникам, с состояниями дрейфа часов и скорости | Пакетный метод Гаусса — Ньютона для позиционирования по скорости изменения дальности с аналитическими частными производными (d rho_dot / d r = -(I - u u^T)(v_s - v_u)/rho, d/dv = -u, d/d drift = 1), постоянная скорость пользователя как опция, псевдоизмерение высоты для наземного пользователя, демпфированные шаги; формальная ковариация в истинной точке; проекции вдоль трассы, поперёк трассы и по вертикали; точность за один пролёт в зависимости от поперечного смещения пользователя; момент наибольшего сближения. Режим doppler вида leo-pvt добавляет ошибку в зависимости от длины окна и режим сигналов оппортунности только по Доплеру (пресет starlink-sop) |
leo_fusion::doppler (solve, formal_covariance, single_pass_geometry, offset_site, closest_approach); leo_fusion::pvt_kind (run_doppler) | leo_fusion::doppler::tests (range_acceleration_obeys_the_kinematic_identity_and_vanishes_doppler_at_closest_approach; noise_free_multi_satellite_doppler_recovers_the_user: с точностью до 1 мм, а дрейф — до 1e-6 м/с; a_single_pass_has_a_mirror_solution_across_the_ground_track; the_cross_track_error_grows_as_the_pass_goes_overhead; velocity_states_are_recovered_for_a_moving_user); leo_fusion::pvt_kind::tests (doppler_positioning_improves_with_the_window_and_is_deterministic: взвешенное СКО невязок в [0,8, 1,2], а ошибка менее четырёх формальных сигм); tests/leo_fusion_scenarios.rs (leo_doppler_positioning_forms_a_fix_and_the_cross_track_error_explodes_overhead; starlink_doppler_only_mode_runs_without_ranging); tests/starlink_doppler_published_proxy.rs (предварительно зарегистрированная замена, сопоставленная с опубликованными процентилями набора данных 3 из «Unveiling Starlink for PNT», doi:10.33012/navi.685: при 3 спутниках (маска 47 град), без помощи по высоте и при 30 Гц 3-D ошибка p90 составляет 92,2 м за 20 с и 870 м за 8 с против опубликованных 2 м и 10 м, поэтому оба порога в два раза — NOT MET, в большую сторону, и зафиксированы как непройденные; docs/design/evidence/cap11-starlink-doppler-proxy/) | Внутренняя согласованность: восстановление без шума, кинематическое тождество rho_ddot = (|v|^2 - rho_dot^2 + d.a)/rho, продифференцированное численно, нулевой Доплер в момент наибольшего сближения, зеркальное решение для одиночного пролёта и ошибки с начальным значением (seed) относительно формальной ковариации. Значение для Starlink из работы Kozhaya, Saroufim and Kassas (NAVIGATION 72(1), 2025: около 2 м за 20 с по трём спутникам) служит только для сравнения: смоделированный приёмник с идеальными эфемеридами и всеми ошибками, собранными в сигме Доплера 30 Гц, в несколько раз менее точен на том же окне, а приёмник и частота измерений из статьи не воспроизведены | MODELLED |
| VM-06d2559e | Совместное позиционирование по псевдодальностям GNSS и LEO с межсистемными смещениями и моделями ошибок для каждого сигнала | Решения методом взвешенных наименьших квадратов Гаусса — Ньютона по любой комбинации систем, одни часы приёмника на каждую систему (межсистемное смещение оценивается вместе с положением) или известное широковещательное смещение относительно опорной шкалы времени; сигмы отдельных измерений задаёт вызывающая сторона, по умолчанию это тепловой шум петли слежения за задержкой движка (navsignal::dll_code_jitter_chips) при C/N0 для данного угла места в сочетании с ошибкой дальности в сигнале в пространстве; невзвешенный DOP (GDOP, PDOP, HDOP, VDOP, TDOP) в местной геодезической системе, формальные сигмы «восток — север — вверх» и сигмы смещений; совместный режим leo-pvt сравнивает решения только по GNSS, только по LEO и объединённые и строит зависимость DOP от числа добавленных спутников LEO |
leo_fusion::joint_pvt (solve, dop, code_sigma_dll_m, SystemClock); leo_fusion::system (SystemCfg, System); leo_fusion::pvt_kind (run_joint) | leo_fusion::joint_pvt::tests (dop_matches_the_hand_derived_zenith_plus_three_horizon_case: HDOP = VDOP = sqrt(4/3), TDOP = sqrt(1/3), PDOP = sqrt(8/3), GDOP = sqrt(3) с точностью 1e-9; a_lone_satellite_with_its_own_clock_adds_nothing_and_a_known_offset_does; a_noise_free_fix_recovers_position_clock_and_inter_system_bias; seeded_fixes_agree_with_their_formal_covariance; dll_noise_is_the_textbook_figure_for_gps_l1_ca); leo_fusion::pvt_kind::tests (fusing_leo_never_worsens_the_median_pdop_and_the_isb_is_recovered); tests/leo_fusion_scenarios.rs (meo_leo_fusion_beats_gnss_alone_and_recovers_the_leo_bias); tests/joint_pvt_dual_freq_itrf_rtklib_oracle.rs::dual_frequency_finding_is_pinned; tests/joint_pvt_precise_itrf_rtklib_oracle.rs::precise_product_finding_is_pinned | Вручную выведенный DOP для четырёх спутников (один спутник в зените и три на горизонте через 120 град, нормальная матрица которых обращается вручную), структурное тождество, по которому система со своими часами и одним спутником не добавляет геометрии, восстановление положения, часов и смещения без шума и ошибки с начальным значением (seed) относительно ковариации. Только внутренние проверки; с выходными данными приёмника не сравнивалось. Внешнее сравнение 0,30, находка (остаётся MODELLED): на мульти-GNSS сутках IGS (ABMF 2018-05-13, GPS и Galileo C1C, широковещательные эфемериды, Klobuchar) межсистемное смещение согласуется с RTKLIB v2.4.2-p13 rnx2rtkp (медианная разность -0.11 нс после исправления широковещательной групповой задержки 0,30, -0.35 нс до него; порог 1 нс), но лишь 93,6 % из 280 эпох (93,2 % до исправления) находятся в пределах 3 м от координаты ITRF2020 против предварительно зарегистрированных 95 %. Сам RTKLIB достигает 88,2 % на тех же данных, так что порог лежит за пределами возможностей одночастотного позиционирования по широковещательным данным на этой станции в эти сутки и не является расхождением решателей; тест сравнения зафиксирован в репозитории как игнорируемый. Раунд 2 для 0,30, более строгие входные данные при неизменном пороге 3 м / 95 % / 1 нс, находка (остаётся MODELLED): с безионосферной парой Galileo E1/E5a (предварительно зарегистрировано 6927e039) в пределах 3 м находятся 79,9 % эпох (RTKLIB 67,9 %); с прецизионными орбитами, часами, смещениями антенн спутников и кодовыми смещениями CODE MGEX (предварительно зарегистрировано 7d8c3597) — 94,2 % (RTKLIB 94,1 %), а межсистемное смещение отличается от RTKLIB на -1.03 нс, потому что одиночный режим RTKLIB игнорирует смещения антенн спутников (+0,04 нс, когда их не учитывают оба) | MODELLED |
| VM-df6c3fb1 | Сходимость точного абсолютного позиционирования (PPP) только по GNSS и с усилением за счёт LEO | Расширенный фильтр Калмана для PPP с вещественными неоднозначностями по безионосферным коду и фазе: статические координаты, белый шум часов приёмника, одно межсистемное смещение на каждую дополнительную систему, зенитная влажная задержка как случайное блуждание, отображаемая через 1/sin(угол места), вещественная неоднозначность на каждую дугу спутника, добавляемая при восходе и удаляемая при заходе, и ошибка точных орбиты и часов, общая для кода и фазы спутника, обрабатываемая как одно коррелированное двухстрочное обновление в стабилизированной форме Джозефа; измерения моделируются по той же модели; время сходимости (ошибки ниже порогов до конца прогона), кривые ошибок и усреднённое по прогону NEES положения для варианта только с GNSS и для каждого случая с LEO, запускается видом leo-ppp |
leo_fusion::ppp (run, PppScenario, LI_2019) | leo_fusion::ppp::tests (the_filter_is_consistent_over_monte_carlo_seeds: 24 начальных значений (seed), среднее NEES, усреднённое по прогонам, в [2,4, 3,6] и не менее 75 % эпох внутри двусторонней 95 % полосы хи-квадрат; измерено на 150 начальных значениях, среднее 2,84 только по ГНСС и 2,87 с LEO; leo_augmentation_shortens_convergence; same_seed_same_answer_and_every_number_has_a_unit); tests/leo_fusion_scenarios.rs (ppp_convergence_of_the_bundled_scenario_shortens_monotonically) | Хи-квадрат-тест NEES — это проверка внутренней согласованности (истина и фильтр используют одну модель). Тенденция сравнивается с работой Li et al., LEO constellation-augmented multi-GNSS for rapid PPP convergence, J. Geod. 93:749-764 (2019), doi 10.1007/s00190-018-1195-2: время мульти-GNSS 9,6 мин сокращается до 7,0, 3,2, 2,1 и 1,3 мин при 60, 96, 192 и 288 спутниках LEO. Встроенный сценарий даёт 7,4, 4,8, 3,2, 2,7 и 2,3 мин со своими репрезентативными оболочками 1000 км, 60 град, шумами и станциями; орбитальные группировки, шумы и определение сходимости из статьи не воспроизведены, поэтому это MODELLED согласованность тенденции (монотонное сокращение, наибольшая группировка — менее трети времени только по GNSS), а не подтверждение по независимому эталону | MODELLED |
| VM-038b22af | Точность позиционирования в 5G-сетях с неназемным сегментом (NTN) в зависимости от ширины полосы сигнала | Граница Крамера — Рао для времени прихода по среднеквадратичной (габоровской) ширине полосы, c/(2 pi beta sqrt(2 (C/N0) T)), для плоского спектра OFDM (beta = B/sqrt(12)), ограниченного по полосе спектра BPSK (числитель в замкнутом виде) или любого спектра квадратурой, и по частоте комплексного тона, sqrt(3/(2 pi^2 (C/N0) T^3)); решения по времени прихода нисходящих сигналов с неизвестными часами приёмника и доплеровское решение по одному спутнику за пролёт в полосе S 3GPP n256 MSS, запускается видом ntn-positioning |
leo_fusion::ntn (gabor_bandwidth_flat_hz, gabor_bandwidth_bpsk_hz, gabor_bandwidth_numeric_hz, rms_duration_numeric_s, toa_crb_sigma_m, doppler_crb_sigma_hz, frequency_crb_sigma_hz, NtnScenario::geometry, NtnScenario); leo_fusion::joint_pvt (formal_sigma_enu) | leo_fusion::ntn::tests (the_numerical_rms_bandwidth_matches_the_closed_forms; the_range_bound_scales_as_one_over_bandwidth_and_root_cn0: 0,4157 м вручную при 5 МГц, 45 дБ-Гц, 0,1 с; the_frequency_bound_is_the_complex_tone_crlb; defaults_run_wider_is_better_and_every_number_has_a_unit); tests/leo_fusion_scenarios.rs (ntn_wide_channel_bounds_far_tighter_than_the_narrow_one); tests/ntn_crlb_published_value_oracle.rs (ssb_bounds_reproduce_the_published_values; ntn_fix_covariances_match_numpy; bpsk_rms_bandwidth_reproduces_betz_table_1) | Опубликованные рабочие значения (P1): Bachl, Lei and Nabeel, arXiv:2608,10270 (2026), границы для одного SSB в NR NTN воспроизведены по карте SSB из 3GPP TS 38,211 собственными численными функциями Kshana (W_rms 1,9616 против 1,96 МГц, sigma_t 38,755 против 39 мкс, sigma_f 100.79/87.28 против 101/87 Гц, sigma_rho 0.5970/0.5831 против 0.60/0.58 м, каждое значение в пределах половины единицы напечатанной последней цифры); среднеквадратичные ширины полосы BPSK-R по Betz 2001, таблица 1 (1.128/3.477 против 1.1/3.5 МГц, дополнительно); ковариации решений по времени прихода и по Доплеру согласуются с numpy.linalg.inv из numpy 2.4.6 на выгруженной геометрии (P2; 5e-15 и 1.2e-5 относительно, пороги 1e-5 и 1e-3). Предварительно зарегистрировано (9f2875db; часть C 0d66dccd). Решение движка joint_pvt::formal_sigma_enu (граница, вычисленная в истинной точке, а не по зашумлённому решению) было написано после того, как первый прогон при 200 кГц не прошёл на 6.5e-5, и затем прогнано заново при неизменном допуске. Формы для плоского спектра и комплексного тона, которые запускает сценарий (gabor_bandwidth_flat_hz, doppler_crb_sigma_hz), доходят до проверки P1 через модульные тесты тождеств внутри крейта. Это границы для канала без многолучевости, а не достигнутая точность. Редакция 0,30: ntn-5g-positioning toa_median_sigma_3d_m 2,0903959 -> 2,0903962 м (NR 5 МГц) и 25,938613 -> 25,938839 м (NB 200 кГц) | VALIDATED |
| VM-e033f926 | Передача времени в UTC с помощью LEO в зависимости от C/N0 и генератора приёмника | Измерения часов по каждому спутнику LEO в зоне видимости в известном положении, объединённые по обратной дисперсии из модели шума псевдодальности, отфильтрованные двухсостоянным (фаза, частота) фильтром Калмана, чей шум процесса — это белый шум частоты и шум случайного блуждания частоты класса генератора (slot_timing::ClockNoise, clock_state::ClockClass; дисперсия выбега holdover::coast_phase_variance), истинные часы с начальным значением (seed) из тех же уровней и выражение системного времени в UTC из IS-GPS-200, раздел 20.3.3.5.2.4, с неопределённостью широковещательного смещения, добавленной как смещение для каждого прогона; режим timing вида leo-pvt перебирает генераторы и смещения C/N0 |
leo_fusion::timing (simulate, utc_offset_s, system_to_utc_s); leo_fusion::pvt_kind (run_timing) | leo_fusion::timing::tests (the_utc_offset_follows_the_is_gps_200_expression; continuous_tracking_approaches_the_measurement_floor_and_gaps_cost_time; the_filter_is_consistent_over_seeds; the_utc_offset_uncertainty_sets_a_floor); tests/leo_fusion_scenarios.rs (leo_timing_error_grows_as_the_c_n0_falls) | Внутренняя согласованность: опубликованное выражение смещения, вычисленное вручную, нормированная ошибка по 40 начальным значениям (seed) и нижняя граница, заданная неопределённостью смещения. Значение NIST для приёмников времени Iridium с миниатюрными атомными часами (менее 40 нс от UTC(NIST) за 40 суток) служит только для сравнения; встроенный сценарий Iridium даёт от 10 до 11 нс СКО при номинальной мощности с репрезентативной ошибкой дальности 5 м. Фликкер-шум частоты и ионосферная задержка не моделируются | MODELLED |
| VM-eddcdf79 | Покрытие LEO и геометрический фактор DOP для полярных и арктических пользователей по сравнению с GNSS на MEO | Число спутников в зоне видимости и медианные PDOP, HDOP и VDOP с доступностью в зависимости от широты по выбранным долготам и эпохам для одних лишь систем GNSS на MEO, одних лишь систем LEO и всех вместе, у каждой системы своя маска и своя модель часов, запускается полярным режимом leo-pvt; орбиты — наборы элементов SGP4/SDP4 на эпоху перебора (2026-01-01T00:00:00 UTC в полярном режиме), переведённые в земную систему координат по проверенному пути земных орбит (IAU 2006/2000A, UT1 = UTC, без движения полюса) |
leo_fusion::polar (latitude_sweep, latitude_sweep_at, element_sets, satellite_states_at); leo_fusion::joint_pvt (dop); sgp4 (MeanElementSet::from_earth_fixed, SgpOrbit, teme_to_itrs_matrix) | tests/leo_polar_coverage_on_path_orekit_oracle.rs (конфигурации A и B, 4040 отсчётов: положения в системе, связанной с Землёй, в пределах 6.8e-5 м, порог 0,2 м; число спутников в зоне видимости совпадает в 4040 из 4040 случаев; медианный DOP в пределах 2.3e-11 в относительном выражении, порог 1e-3; доступность и среднее число спутников в зоне видимости совпадают); tests/earth_orbit_path_sgp4_erfa_oracle.rs (траектория); leo_fusion::polar::tests (gps_vertical_geometry_weakens_at_the_pole_and_a_polar_leo_shell_restores_it); tests/leo_fusion_scenarios.rs (a_polar_leo_constellation_fills_the_sky_where_gnss_vertical_geometry_weakens); tests/leo_polar_coverage_orekit_oracle.rs (раунд 2, геометрия по заданным состояниям); tests/leo_polar_coverage_full_claim_orekit_oracle.rs (вывод раунда 1 по полному утверждению, зафиксирован) | Orekit 13.1.8 (Apache-2.0) с Hipparchus 4.0.3: состояния движка в GCRS, повёрнутые в ITRF средствами Orekit (IERS 2010), видимость в WGS-84 TopocentricFrame относительно маски каждой системы, org.orekit.gnss.DOPComputer для одной неизвестной часов и NumPy 2.4.6 numpy.linalg.inv (P2) для нескольких; путь проверен по python-sgp4 и ERFA (строка 'One Earth-orbit path'). Пороги зафиксированы до прогона (предварительно зарегистрировано 72ea9eb0; T2 и T3 — пороги раунда 2 для 0,30). Шаг TEME -> GCRS, замороженный на J2000, делает тест красным (4739 отказов). Только геометрия; без сцинтилляций, рельефа и мощности сигнала. VDOP GNSS растёт к полюсу (от 1,20 на экваторе до 1,51 при 89,9 град для GPS и Galileo во встроенном сценарии), тогда как околополярная оболочка LEO там сходится. История: раунд 2 (3254d456) согласовался на табличных двухтельных состояниях; полное утверждение раунда 1 D8 относительно собственного распространения TLE в Orekit (e947e69d) оказалось находкой: SDP4 в Orekit при e = 0 и его IERS 1996 TEME зафиксированы | VALIDATED |
| VM-5a90d275 | Именованные системы LEO PNT как необязательные пресеты данных, каждая со своим источником | Независимые от системы входные данные: каждая система — это оболочки Уокера, явные элементы или пресет GNSS, сигнал (несущая, скорость чипов, ширина полосы, принимаемая мощность или диапазон C/N0), SISRE, сигма Доплера и модель часов; пресеты заполняют только то, что сценарий оставил незаданным, по одному файлу на каждый, с источниками, помеченными как «PUBLIC» (с URL), «WORKSHOP» или «ПРОИЗВОДНЫЙ», а неопубликованные значения указаны как репрезентативные: Xona Pulsar X1/X5, Iridium STL, сигналы оппортунности Starlink, CentiSpace, репрезентативная система в диапазоне C, модель эфемерид ATOMIC с нулевыми часами и один пресет, полученный на семинаре, в необязательном файле пресетов Celeste IOD, исключаемом удалением этого файла и его сценариев | leo_fusion::presets (all, by_id, cn0_range_dbhz, noise_density_dbw_hz); leo_fusion::system (SystemCfg::build) | leo_fusion::presets::tests (every_preset_has_a_source_and_every_public_source_a_url; only_one_preset_uses_workshop_material; noise_density_at_290_k_is_minus_204_dbw_per_hz); tests/workshop_preset_isolation.rs (only_the_listed_files_name_the_workshop_preset; workshop_numbers_live_only_in_the_preset_file_and_its_scenarios: сканирование исходного текста в src, scenarios и tests); leo_fusion::system::tests (a_preset_fills_what_the_scenario_leaves_out; a_system_needs_no_preset; pseudorange_sigma_falls_with_elevation_and_never_below_the_sisre) | Перенос цитируемых публичных значений, проверенный по структуре (у каждого публичного источника есть URL, схемы Уокера делятся нацело, C/N0 из принимаемой мощности относительно kT при 290 K), а не по внешнему оракулу. Репрезентативные значения названы в каждом пресете и носят иллюстративный характер | MODELLED |
| VM-05d0e975 | Одна система LEO-PNT от начала до конца: проектирование сигнала, бюджет линии на пролёт, навигационное сообщение и объединённое позиционирование, выход каждого этапа передаётся следующему | Вид leo-pnt-chain: проект leo-signal (публичный пресет или встроенный) задаёт центр, ширину полосы, скорость чипов и распределение EIRP полосы leo-pass; пролёт даёт C/N0 отслеживаемой компоненты и ограниченный по полосе джиттер кода на каждую эпоху; линия C/N0 по методу наименьших квадратов от sin(угол места), SISRE сообщения leo-navmsg (подогнанный на орбите спутника пролёта плюс указанный член определения орбиты в сумме квадратов) и несущая и скорость чипов проекта передаются каждой системе LEO в совместном решении leo-pvt и, при необходимости, в случаи LEO в leo-ppp; каждая передача выводится со своим значением и единицей |
leo_pnt_chain (LeoPntChainScenario); leo_pass (BandCfg::signal, design_tracking); leo_navmsg (LeoNavmsgScenario::broadcast_sisre); leo_fusion::pvt_kind; leo_fusion::ppp | leo_pnt_chain::tests (a_sine_line_fit_recovers_its_line); tests/leo_pnt_chain.rs (every_upstream_change_moves_the_downstream_figures: более сильный EIRP, более длинный интервал аппроксимации и больший член определения орбиты — каждое сдвигает переданное значение и объединённое определение; the_handed_on_values_are_the_stage_outputs; a_band_design_splits_the_eirp_and_reports_the_design_jitter; the_pass_export_reproduces_the_engine_range) | Самосогласованность передач: каждое передаваемое значение равно собственному выходу предыдущего этапа, а изменение входа предыдущего этапа сдвигает каждый зависящий от него показатель ниже по цепочке. Этапы сохраняют собственные метки; цепочка не добавляет физики и внешнего оракула | MODELLED |
| VM-79558230 | Обнаружение спуфинга по Доплеру LEO и согласованности геометрии пролёта | Раздел [spoofer] вида leo-pass: спуфер подделывает, согласованно по дальности и скорости изменения дальности, сигналы, наблюдаемые в заявленном положении, которое скачком смещается и/или отодвигается от истинного после момента начала (для каждой полосы LEO и для сигнала GNSS на MEO); приёмник предсказывает каждую скорость изменения дальности по широковещательной орбите и независимому априорному положению и скорости и проверяет измеренные скорости изменения дальности статистикой хи-квадрат обобщённого метода наименьших квадратов на окне эпох (дрейф часов — мешающий параметр или задан априори) по каналам GNSS, каналам LEO и всем каналам, с тепловым шумом петли частотной автоподстройки из C/N0 (Kaplan & Hegarty 2006, раздел 5.6.2); вероятность обнаружения по нецентральному закону хи-квадрат при заданной вероятности ложной тревоги, обнаружение объявляется при заданной вероятности пропуска обнаружения |
leo_link::spoof (range_rate_position_gradient, line_of_sight, fll_frequency_jitter_hz, doppler_consistency_window, doppler_consistency); leo_pass (SpooferCfg, spoof_section) | leo_link::spoof::tests (the_gradient_is_the_derivative_of_the_range_rate; fll_jitter_matches_the_formula_by_hand; a_common_mode_residual_is_a_clock_drift_and_is_not_detected; with_no_prior_and_equal_noise_the_statistic_is_the_scatter_about_the_mean; a_push_the_prior_explains_is_not_detected; a_velocity_push_is_hidden_by_a_loose_velocity_prior_only; the_information_form_equals_the_covariance_form); tests/leo_resilience_verticals.rs (the_monitors_are_silent_before_the_onset; the_doppler_statistic_is_quadratic_in_the_jump; leo_range_rates_see_a_jump_that_gnss_range_rates_do_not) | Замкнутые формы и тождества, а не внешнее измерение: градиент скорости изменения дальности относительно центральной разности, статистика в информационной форме относительно плотной ковариационной формы, чистый дрейф часов, дающий ноль, смещение, объяснимое априорными данными, дающее не более |dx|^2/sigma_p^2, статистика, квадратичная по скачку. Ни одно значение обнаружения не сравнивалось с измеренной атакой; спуфер идеализирован (без признаков мощности, угла прихода или пика корреляции) | MODELLED |
| VM-9aea2967 | Обнаружение спуфинга по межполосной согласованности многополосного сигнала LEO | Для каждого спутника LEO и каждой пары дальномерных полос раздел [spoofer] формирует безгеометрическую комбинацию псевдодальностей, убирает ионосферную модель приёмника и проверяет её шаг от эпохи к эпохе относительно кодового шума двух полос и заданной допустимой немоделируемой скорости изменения ионосферы (двусторонний гауссов тест, точная вероятность обнаружения); спуфер, подделывающий одни полосы и не подделывающий другие, или все полосы без ионосферы виден в момент начала; тот, кто подделывает все полосы и имитирует ионосферу, не виден, что и указано в результате |
leo_link::spoof (cross_band_step); leo_pass (spoof_section: pairs, cross_band) | leo_link::spoof::tests (the_cross_band_threshold_and_power); tests/leo_resilience_verticals.rs (a_ground_spoofer_leaves_the_ionospheric_step_and_an_ionosphere_aware_one_does_not; a_one_band_spoofer_is_seen_by_the_cross_band_monitor_at_the_onset; the_monitors_are_silent_before_the_onset) | Тождества: ступенька начала для спуфера без ионосферы равна разности смоделированных ионосферных задержек пары, порог равен двустороннему нормальному квантилю, умноженному на стандартное отклонение ступеньки, плюс граница скорости. Ионосферная модель приёмника — это модель движка, поэтому подлинная невязка по построению имеет нулевое среднее; внешнего оракула нет | MODELLED |
| VM-cf7623f8 | Зондирование ионосферы: наклонное TEC по двухполосной задержке пролёта LEO | Для каждой пары полос спутника leo-pass отчёт даёт наклонное полное электронное содержание, которое безгеометрическая кодовая комбинация восстанавливает в пике пролёта, (P2 - P1) f1^2 f2^2 / (40,3 (f1^2 - f2^2)), и его 1-сигму по тепловому кодовому шуму двух полос, так что любую многополосную конструкцию LEO-PNT можно оценить как ионосферный зонд |
leo_pass (IonoFreePair::geometry_free_stec_tecu, geometry_free_stec_sigma_tecu); leo_link::iono::geometry_free_stec_tecu | tests/leo_resilience_verticals.rs (the_geometry_free_tec_is_the_pass_slant_tec: равно наклонному TEC пролёта в максимуме с точностью 1e-9, а его сигма равна корню из суммы квадратов шума кода, делённому на 40,3 (1/f1^2 - 1/f2^2)); tests/geometry_free_tec_gim_oracle.rs::geometry_free_finding_is_pinned | Тождество дисперсии первого порядка, точное по построению относительно собственной задержки первого порядка движка (чей масштаб 1/f^2 имеет уровень VALIDATED относительно IS-GPS-200 в своей строке); прецизионность определяется только тепловым кодовым шумом, без многолучевости и межчастотных смещений. Раунд 2 для 0,30, измерено (предварительно зарегистрировано 5e795f93), находка (остаётся MODELLED): глобальная ионосферная карта CODE CODG1330.18I относительно кода ABMF C1C/C2W со смещениями CODE даёт 33 из 36 средних по дугам в пределах 3 TECU (худшее +6,84 TECU на вечерней дуге; СКО по эпохам 3,95 TECU) против порога «каждая дуга»; не проверено | MODELLED |
| VM-7205faad | Ковариация датума лунной системы отсчёта с оцениваемыми станциями по сравнению с расширенной точностью в 50 знаков | Семипараметрическая ковариация датума Гельмерта сценария lunar-frame-campaign с оцениваемыми земными станциями (станция 1 закреплена), как её вычисляет lunar_frame_campaign в binary64: совместная информация Фишера по станциям и маякам, накопленная из якобиана задержки, блок станций, маргинализованный дополнением по Шуру через спектральное обращение Якоби, H = AᵀSA, сформированная с планом Гельмерта и обращённая спектрально. Задача плохо обусловлена по построению (число обусловленности Гельмерта от 2.1e8 до 2.3e8, число обусловленности совместной информации от 1.6e12 до 3.0e13): относительное изменение дополнения по Шуру на 1e-9 сдвигает сигмы датума до 28 %. Выводятся: семь сигм датума, число обусловленности Гельмерта и самое слабое направление. УТВЕРЖДЕНИЕ, СУЖЕННОЕ: сигмы датума и число обусловленности движка лежат в пределах априорной границы ошибки наихудшего случая для обратно устойчивого конвейера двойной точности на этой задаче; это не означает, что они так же точны, как позволяет двойная точность (факторизационный путь примерно в тысячу раз точнее на тех же входных данных, а необязательный решатель по квадратному корню — примерно в десять миллионов раз), а самое слабое направление проверено только там, где его порог меньше прямого угла (контроль с неподвижными станциями) | lunar_frame_campaign, fim | tests/lunar_frame_campaign_mpmath_oracle.rs (lunar_frame_campaign_datum_matches_mpmath_extended_precision: три сценария — станции оцениваются на новую дату кампании 2026-03-18 (определяющий), станции зафиксированы на эту дату (контрольный), станции оцениваются на 2024-01-01 (сценарий более раннего промаха при двойной точности); каждая сигма датума, число обусловленности и самое слабое направление сопоставляются с порогом, масштабированным по обусловленности и пересчитываемым в тесте по точным чувствительностям оракула; engine_inputs_match_the_committed_fixture: зафиксированные в репозитории якобиан, веса и план Хельмерта совпадают с тем, что движок строит сейчас; record_engine_accuracy_against_a_factorisation_route: зафиксированы полоса погрешности движка и диагностика по холецкому из NumPy) | mpmath 1.3.0 (BSD-3-Clause) с 50 значащими цифрами, самопроверка при 80 (согласие 1.1e-38 или лучше), на зафиксированных в репозитории якобиане, весах и плане Гельмерта движка: собственное LU-решение mpmath для дополнения по Шуру, его обращение для H и его спектральное разложение Якоби (P2, независимая численная библиотека). Предварительно зарегистрировано 804662d5 до появления фикстуры, пороги — из формулы обратной ошибки первого порядка: константа (3n+1)n + m, умноженная на единичное округление (Higham, Accuracy and Stability of Numerical Algorithms, теорема 10,4, форма уровня B), умноженная на точную чувствительность первого порядка каждой величины к совместной информации, дополнению по Шуру и H. Измерено: сигмы датума в пределах 4.8e-6 на 2026-03-18 (пороги от 9.6e-2 до 2.2e-1), 9.7e-6 на 2024-01-01 (пороги от 2.8e-2 до 6.9e-2) и 2.0e-14 с неподвижными станциями (пороги от 1.0e-11 до 2.8e-7); число обусловленности в пределах 4.6e-6, 1.3e-5 и 4.1e-14. В сценариях с оцениваемыми станциями пороги соответствуют наихудшему случаю и на четыре порядка выше измеренной ошибки, а порог самого слабого направления там превышает прямой угол, поэтому эта проверка не засчитывается; в контроле с неподвижными станциями самое слабое направление согласуется до 6.6e-16 рад против порога 9.4e-11, измеренное хордой между единичными векторами (прежний компаратор на acos не мог различать углы меньше 1.5e-8 рад; порог не изменён). Диагностика: маршруты Холецкого и QR в NumPy 2.3.5 достигают 9e-9 и 5e-9 на входных данных 2024-01-01, его маршруты обращения и собственных значений — 2.9e-6 и 6.2e-6: движок в пределах своей границы, но примерно в тысячу раз менее точен, чем факторизационный маршрут. Проверяет линейную алгебру на зафиксированных входных данных, но не якобиан (его проверяет ветвь SPICE в строке кампании) и не физическую точность иллюстративной кампании | VALIDATED |
| VM-02b72c4d | Решатель датума в форме квадратного корня из информации по сравнению с расширенной точностью в 50 знаков | Необязательный решатель в форме квадратного корня из информации (lunar-frame-campaign solver = "srif"; по умолчанию без изменений), который никогда не формирует и не обращает информационную матрицу датума: QR-разложение Хаусхолдера (ортогонально-треугольное разложение) взвешенного якобиана задержки как обновление измерения фильтра в форме квадратного корня из информации, земные станции маргинализуются через замыкающий треугольный блок (чьё произведение Грама есть дополнение по Шуру), второе QR-разложение R_bb A для семипараметрического датума Гельмерта, сигмы как нормы строк обратной треугольной матрицы, а спектр (число обусловленности, самое слабое направление) — из односторонней якобиевской сингулярной декомпозиции. Скалярные произведения компенсируются безошибочным произведением с разбиением Деккера, так что каждая операция — это правильно округлённая базовая операция IEEE-754 или квадратный корень; одинаковые результаты на всех платформах выводятся из этого, а не проверяются на разных платформах | linalg_sr, lunar_frame_campaign | tests/lunar_frame_campaign_srif_mpmath_oracle.rs (srif_datum_matches_mpmath_extended_precision: четыре сценария — станции оцениваются на новую дату кампании 2026-06-09 (определяющий), станции зафиксированы на эту дату (контрольный), а также входные данные с оценкой станций на 2026-03-18 и 2024-01-01; каждая сигма датума, число обусловленности и самое слабое направление сопоставляются с порогом в форме квадратного корня, пересчитываемым в тесте по точным составляющим оракула; engine_inputs_match_the_committed_fixture); linalg_sr::tests (9 тестов библиотеки: произведение Деккера равно остатку слитного умножения со сложением на 20 000 парах, компенсированное суммирование сокращающейся суммы, R^T R равно A^T A, последовательные обновления фильтра равны одному пакетному обновлению, замыкающий блок равен квадратному корню из дополнения Шура, обращение треугольной матрицы, SVD по Якоби, согласие со спектральным датумом на хорошо обусловленном случае, побитово идентичные повторные прогоны); lunar_frame_campaign::tests::the_default_solver_is_unchanged_and_an_unknown_solver_is_rejected и the_srif_solver_agrees_with_the_spectral_one_where_both_are_accurate_and_says_so | mpmath 1.3.0 (BSD-3-Clause) с 50 значащими цифрами, самопроверка при 80 (согласие 1.4e-43 или лучше), на зафиксированных в репозитории якобиане, весах и плане Гельмерта движка (P2, независимая численная библиотека: собственные LU-решение, обращение, разложение Холецкого и спектральное разложение Якоби в mpmath). Предварительно зарегистрировано b41908c9 до написания решателя, пороги — из границы обратной ошибки первого порядка в форме квадратного корня: константа mn плюс (3n+1)n, умноженная на единичное округление (Higham, Accuracy and Stability of Numerical Algorithms, теорема 19,4 и глава 8), умноженная на точные чувствительности. Измерено: сигмы датума в пределах 3.0e-13 на 2026-06-09 (пороги от 4.1e-7 до 5.3e-7), 1.9e-15 с неподвижными станциями (пороги вплоть до 4.8e-12), 3.8e-13 на 2026-03-18 и 2.3e-13 на 2024-01-01, где спектральный решатель по умолчанию ошибается на 4.8e-6 и 9.7e-6; число обусловленности в пределах 4.9e-13; самое слабое направление в пределах 1.4e-13 рад (контроль 1.7e-16 против 5.1e-10). ПРЕДЕЛ ПРОВЕРКИ: пороги подтверждают лишь ошибки датума ниже примерно 2e-7 относительно; измеренные значения порядка 1e-13 — это наблюдения, а не то, что подтверждают пороги. Проверка отвергает спектральный решатель по умолчанию (сигмы 9.7e-6 против 2.9e-7 на 2024-01-01; на определяющую дату 1.3e-6 против 4.9e-7, запас от 1,3 до 2,6) и ошибочно взятое обратное треугольное (нормы столбцов: красный), но перевёрнутый знак Хаусхолдера, некомпенсированное скалярное произведение и сигмы из спектрального обращения H, сформированной из множителя в форме квадратного корня (3.7e-9), все проходят, так что она не показывает, что каждый шаг в форме квадратного корня необходим. Проверяет линейную алгебру необязательного решателя на зафиксированных входных данных, но не якобиан и не решатель по умолчанию; побитовая воспроизводимость на разных платформах выводится из используемых операций и проверена только как идентичность при повторном запуске на одной платформе | VALIDATED |
| VM-f220938a | Морские мониторы доверия: арифметика, на которой они основаны (декодирование NMEA, геодезические смещения, кинематические статистики и статистики невязок датчиков) | Для судна receiver_trust декодирует предложения NMEA 0183, которые выдают приёмник и его приборы (GGA, RMC, VTG, HDT, VHW, VBW, ZDA, GSV), формирует смещение «восток — север» между определениями положения (maritime::en_offset_m) и по ним вычисляет статистики, на которых основаны решения мониторов: подразумеваемую скорость, невязку счисления пути, подразумеваемое ускорение и подразумеваемую скорость поворота на окнах 30 с, невязки «курс по компасу — путевой угол», «скорость по лагу — скорость относительно грунта» и высоты антенны (медианы за 10 с), а также разброс и рост отношения сигнал/шум спутниковых сигналов. |
receiver_trust (ingest, maritime) | tests/maritime_trust_reference.rs (t1_nmea_decoding_matches_pynmea2, t2_east_north_offsets_match_the_wgs84_geodesic, t3_t4_monitor_input_statistics_match_the_oracle) по tests/fixtures/maritime_trust/reference.json, повторно формируемому скриптом scripts/gen_maritime_trust_ref.py по синтетическим данным NMEA, записанным examples/gen_maritime_trust_ref_inputs.rs; допуски предварительно зарегистрированы в tests/fixtures/maritime_trust/PREREGISTRATION.md | ЧТО ПРОВЕРЯЕТСЯ ВНЕШНЕ, сформулировано узко: (1) декодирование каждого поля, которое читают мониторы, относительно pynmea2 1.19.0 (MIT) на 8 синтетических журналах (1 086 эпох) с точностью до 1e-9 в единице поля (широта и долгота, высота, отделение геоида, HDOP, скорости, путевой угол, курс, отношение сигнал/шум; целые числа и даты точно; время суток с точностью до 1e-6 с), наибольшие расхождения на уровне последней цифры числа двойной точности; (2) смещение «восток — север» между двумя определениями положения, как расстояние и азимут, относительно геодезической линии WGS84 из geographiclib 2,1 (MIT) на 223 парах определений положения с базами до 2 км, на широтах от -45 до 70 градусов и через антимеридиан, с точностью до 0,01 м и 0,001 градуса (азимут сравнивается со средним азимутом геодезической линии, то есть с направлением хорды); (3) входные статистики мониторов на 341 оценённой эпохе синтетического рейса длительностью 400 с с поворотом и скачком положения относительно пересчётов на Python, которые используют geographiclib для расстояния и азимута, pynmea2 для декодирования и numpy для медиан и стандартных отклонений: подразумеваемая скорость с точностью до 0,005 м/с, невязка счисления пути до 0,02 м, ускорение до 5e-4 м/с^2, скорость поворота до 1e-3 град/с, медианы невязок и разброс и рост отношения сигнал/шум до 1e-6. ЧТО НЕ ПРОВЕРЯЕТСЯ: длины окон, допуски и пороги мониторов — собственные правила этого проекта; Python воспроизводит их по той же документации, поэтому совпадение подкрепляет реализацию арифметики, но не сами правила. Для предложения THS нет класса в pynmea2, а предложение ROT не читается; ни то, ни другое не охвачено. Таблица соответствия источника NMEA и номера спутника идентификатору спутника в стиле RINEX — собственная таблица проекта (сравниваются только номер, источник и значение). Для входов шага времени, часов хоста и статуса аутентификации оракула нет. Все данные — синтетический текст из receiver_trust::synth; ничто здесь не является измерением, и не делается никаких утверждений о том, как любой монитор работает при реальных помехах. Азимут: сравнивается со средним азимутом геодезической линии. Предварительно зарегистрированное сравнение с прямым азимутом в определении положения 1 не прошло при 0,001 градуса (77 из 223 пар, наихудшее 8.3e-3 градуса) из-за расхождения в определении, а не из-за арифметики; поправка была сделана после первого прогона, и оба результата записаны (сравнение с прямым азимутом остаётся в тесте как описательная, не зарегистрированная заранее граница 0,01 градуса). Раскрыто: первые прогоны выявили входные данные, задействовавшие слишком мало (ускорение и скорость поворота обнулялись на каждой эпохе, а трек через антимеридиан его не пересекал), ошибку в синтетическом генераторе (нет перехода долготы через границу) и, для азимута, что зарегистрированная величина оракула (прямой азимут геодезической линии в первом определении положения) отличается от направления хорды примерно на половину сближения меридианов (77 из 223 пар вне 0,001 градуса, наихудшее 8.3e-3); входные данные исправлены, а азимут сравнён со средним азимутом при том же допуске (поправки 1—3 в предварительной регистрации, внесённые после просмотра результатов и поэтому не слепые); сравнения путевого угла и курса сделаны круговыми (360 и 0 градусов — один и тот же курс, поправка 5). Мутация: масштабирование восточного смещения на 1e-4 не проходит геодезическое сравнение. | VALIDATED |
| VM-834a5b4f | Морская оценка доверия: агрегирование свидетельств мониторов в оценку от 0 до 100 и её три диапазона | Каждый монитор сводит свои свидетельства к отношению статистики к порогу; оценка равна 100 минус сумма по мониторам произведений веса на ограниченную линейную рампу отношения (0 до 0,5, 1 при 1,5), ограниченная диапазоном от 0 до 100 и округлённая до 0,1, с границами диапазонов 90 и 55; каждая эпоха перечисляет мониторы, снизившие оценку, и их баллы. | receiver_trust (score, monitors, live) | tests/maritime_trust_reference.rs::t5_score_matches_the_clean_room_reading_of_the_documented_rule; receiver_trust::score::tests (монотонность по каждой статистике, добавление монитора никогда не повышает оценку, исправные статистики остаются на 100) | Реализация относительно спецификации, НЕ внешний оракул: независимая переписанная «с чистого листа» реализация на Python (scripts/maritime_score_cleanroom.py), написанная читателем, которому были даны только docs/RECEIVER-TRUST.md и docs/MARITIME-TRUST.md, но не исходный код на Rust, согласуется с score_from_ratios на 600 векторах отношений (оценка, диапазон, баллы и порядок снижений, разность 0) после того, как документация была дополнена там, где первый читатель нашёл в ней пробелы или противоречия (порядок при равенстве, округление, отношение для монитора «прошёл или не прошёл», два примера, числа в которых не соответствовали формуле). Это показывает, что документации достаточно и код делает то, что в ней сказано. ЧТО НЕ ПРОВЕРЯЕТСЯ и почему строка остаётся MODELLED: само правило (веса, рампа, границы диапазонов, удержание свидетельств) — собственное правило проекта, зарегистрированное заранее, но без внешнего источника, и ничто здесь не показывает, что оценка 80 или 40 означает то, что хотел бы видеть штурман при реальных помехах; никаких значений такого рода не приводится. Пороги мониторов также собственные для проекта (строка A проверяет только их арифметику). | MODELLED |
| VM-51f0c17d | Соответствие учебного потока NMEA 0183 и декодированные значения | Синтетические потоки NMEA 0183 для мостика в учебных целях для экипажа (kshana nmea-scenario): GGA, RMC, VTG, ZDA, GNS, GSA, GSV, HDT, VBW и маркер PKSHT, сгенерированные по истинному треку со смоделированными эффектами приёмника, неба, подавления (jamming) и спуфинга. Только текстовый вывод; ничего не передаётся. | nmea_synth (track, sentences, scenarios); cli nmea-scenario | tests/nmea_training_reference.rs (сравнение с оракулом pynmea2); tests/nmea_training_scenarios.rs::every_sentence_is_checksum_valid_and_the_reader_accepts_it, ::every_sentence_type_is_present_each_epoch, ::deterministic_per_seed_and_sensitive_to_it | ЧТО ПРОВЕРЯЕТСЯ ВНЕШНЕ, сформулировано узко: все 225 227 предложений восьми синтетических учебных потоков (четыре сценария библиотеки, начальные значения (seed) 1 и 7; GGA, RMC, VTG, ZDA, GNS, GSA, GSV, HDT, VBW и маркер PKSHT) разбираются в pynmea2 1.19.0, независимом разборщике NMEA, с верной контрольной суммой и ожидаемыми источником и типом. Положение, скорость относительно грунта, путевой угол, курс, время и дата UTC, статус определения положения и число спутников в GGA, которые он декодирует, равны истинному треку генератора в пределах допусков, зафиксированных до первого сравнения (1.5e-6 град, 0,06 уз, 0,07 км/ч, 0,11 град для путевого угла, 0,5 град для курса, 0,02 с), запуск scripts/gen_nmea_training_ref.py с фикстурой в tests/fixtures/nmea_training_ref/. Ожидание числа спутников в GGA было исправлено после первого прогона в соответствии с соглашением NMEA (00 без определения положения); числовые допуски не изменены относительно коммита предварительной регистрации. ЧТО НЕ ПРОВЕРЯЕТСЯ: что какой-либо приёмник, картплоттер или система мостика принимают эти потоки; реалистичность моделей приёмника, неба, подавления (jamming) или спуфинга (номинальное небо, смоделированный шум, профили увода и повтора — всё MODELLED); HDOP, высота и содержимое DOP и GSA/GSV сверх синтаксиса и числа элементов; журнал инструктора. Ничего не передаётся, и не заявляется никаких характеристик защиты от подавления или спуфинга. | VALIDATED |
| VM-c7e45641 | Карта помех: значения кодов точности, значения «недоступно» в AIS, назначение ячеек сетки, длина маршрута по состояниям ячеек и маскирование суши | Толкование кодов точности и целостности навигации ADS-B, которые использует карта (граница EPU, которой соответствует код NACp, граница радиуса охвата, которой соответствует код NIC, и низкий и хороший классы, которые метод из них выводит); значения «недоступно» для положения и скорости в AIS, которые читатель AIS отбрасывает; фиксированная ячейка сетки широты и долготы, в которую попадает положение; длина маршрута и её разбивка по состояниям ячеек (ухудшено, не ухудшено, не оценено, не наблюдалось), которую выдаёт оценка экспозиции маршрута; и лежит ли положение вглубь суши от полигона суши больше чем на буфер. Ячейка, помеченная как ухудшенная или аномальная, — это утверждение о сообщаемых полях точности или неправдоподобных положениях, а не вывод о наличии помех, и ничто здесь этого не проверяет. | interference_map (adsb::nacp_epu_bound_m, adsb::nic_rc_bound_range_m, adsb::AdsbParams::classify, ais::ais_position_is_valid, ais::ais_speed_kn, grid::Grid::cell_of, route::exposure, land::LandMask::is_inland) | tests/interference_map_reference.rs::adsb_accuracy_and_integrity_codes_agree_with_pymodes (12 кодов NACp, 59 строк NIC); tests/interference_map_reference.rs::ais_field_rules_agree_with_pyais_decoding (94 кадра); tests/interference_map_reference.rs::grid_cell_assignment_agrees_with_shapely (1770 точек, четыре размера ячеек); tests/interference_map_reference.rs::route_exposure_geometry_agrees_with_shapely_and_geographiclib (8 маршрутов, 420 отрезков, 11634 км); tests/interference_map_reference.rs::land_masking_agrees_with_shapely_and_pyproj (996 точек); модульные тесты interference_map | ЧТО ПРОВЕРЯЕТСЯ ВНЕШНЕ, сформулировано узко: пять независимых реализаций читают одни и те же синтетические входные данные. (1) pyModeS 2,21 декодирует синтетические кадры DF17 эксплуатационного статуса и положения в воздухе; границы EPU по NACp в Kshana согласуются до 0,5 м (наибольшая разность 0,4 м), границы охвата по NIC для кодов от 5 до 11 — до 1 м, а низкий и хороший классы относят все 12 кодов NACp и каждый код NIC, который выдаёт оракул (от 0 до 11), по ту же сторону порогов, которые подразумевают границы оракула (0 расхождений). (2) pyais 3.3.0 декодирует предложения AIVDM типа 1, биты полезной нагрузки которых скрипт упаковывает из необработанных значений полей ITU-R M.1371; Kshana отвергает ровно те декодированные положения «недоступно» (широта 91, долгота 181) и скорость (102,3 уз) и сохраняет значения от 0 до 102,2 уз как декодированные (0 расхождений на 94 кадрах). (3) covers() из shapely 2.2.0 на полигонах ячеек согласуется с grid::Grid::cell_of для 1770 точек при размерах ячеек 0,5, 0,25, 1 и 0,07 градуса, включая точки у границ, оба полюса и антимеридиан (0 расхождений). (4) пересечение маршрута и ячеек в shapely 2.2.0 с длинами геодезических линий WGS84 из GeographicLib 2,1 согласуется с оценкой экспозиции маршрута на 8 синтетических маршрутах, включая два, пересекающих антимеридиан: общая длина до 0,6% (наибольшая разность 0,49%, сфера против эллипсоида) и длина каждого состояния ячеек до 0,6% плюс 125 м на каждый фрагмент (наибольшее — 21% этого допуска). (5) contains() из shapely 2.2.0 с азимутально-равнопромежуточным расстоянием pyproj до береговой линии согласуется с маской суши 2000 м на 992 точках центров решётки вокруг четырёх синтетических островов, один из них с озером (0 расхождений; 4 точки в пределах 20 м от буфера исключены и подсчитаны). Допуски зафиксированы в tests/fixtures/interference_map_ref/PREREGISTRATION.md до какого-либо сравнения и не менялись после; два дефекта синтетических входных данных, найденные первым прогоном, записаны там же. ЧТО НЕ ПРОВЕРЯЕТСЯ: Kshana не декодирует необработанные кадры Mode S и предложения AIVDM, так что проверяется её толкование уже декодированных значений, а не декодер. Радиусы охвата NIC оракула для кодов 1, 2 и 4 отличаются от DO-260B (20, 8 и 2 NM), поэтому численно сравниваются только коды от 5 до 11. Правило положения (0, 0), нижняя граница высоты, фильтр типа источника, хеширование идентификаторов, пороги и статистики метода и выбор размера ячейки — собственные решения Kshana и ни с чем не сверяются. Сравнение маршрутов использует одно и то же определение пути, прямого по широте и долготе, с обеих сторон, так что проверяются длины и назначение ячеек, а не то, что этот путь правильный для судна или воздушного судна. Ничто здесь не показывает, что помеченная ячейка — это помеха. Входные данные синтетические; фикстуры оракула записываются скриптом scripts/gen_interference_map_ref.py (pyModeS распространяется под GPL-3.0 и используется только в этом автономном скрипте; для CI Python не нужен). | VALIDATED |
| VM-bc70cb57 | Область источника помех: допустимая область излучателя по сообщениям о положении воздушных и морских судов | Допустимая область, где может находиться источник ухудшения навигационных сообщений, по сообщениям о положении ADS-B (NIC/NACp) или AIS: радиопрямая видимость на радиусе Земли 4/3 по высоте сообщения и диапазону высот антенны излучателя, ограниченная эффективная дальность для неизвестной мощности, затронутые единицы смещают апостериорное распределение к своей зоне досягаемости, а незатронутые единицы с прямой видимостью смещают его в обратную сторону; единицы объединяются в сеансы во времени и пространстве. Результат — области наибольшей плотности на заданных уровнях доверия, апостериорный центроид с эллипсом моментов, начало, конец и длительность сеанса, затронутая площадь и число различных воздушных судов выше минимума для публикации, суточный профиль и часы в сутки. Без учёта рельефа; один источник на сеанс; достоверность зависит от модели. Необязательное объединение с определением TDOA по geolocation. | interference_map::emitter (estimate, sessions, build_units, profile, GaussianFix::from_tdoa), interference_map::emitter_out (locate), kshana interference-map locate |
модульные тесты interference_map::emitter (круговое преобразование проекции, фигура горизонта, синтетические круговые преобразования прямой и обратной задач: известный излучатель лежит внутри заявленной области примерно с заявленной частотой, граничные случаи, кластеризация сеансов, профиль, приватность и формулировки); случаи locate в tests/interference_map_cli.rs | Пока внешних нет. Только синтетические прямо-обратные циклы от генератора, который использует модель оценивателя, поэтому они проверяют код и калибровку заявленных уровней в рамках этой модели и ничего не говорят о реальных излучателях. Внешняя проверка по опубликованным площадкам передатчиков Jammertest 2025 была зарегистрирована заранее (docs/emitter-region/PREREGISTRATION.md, утверждена владельцем до любого оцениваемого прогона) и выполнена один раз (docs/emitter-region/RESULTS.md): ADS-B NOT ASSESSABLE (2 запланированных сеанса, меньше зарегистрированного минимума 4) и AIS NOT ASSESSABLE (нет опубликованного сеанса), поэтому ни один порог не проверялся и строка остаётся MODELLED | MODELLED |
| VM-af2c0f76 | Форматы передачи телеметрии доверия: текстовая экспозиция Prometheus и JSON OpenTelemetry OTLP/HTTP | Доверие к GNSS (оценка, диапазон, причины, шлюз и, по запросу, положение) в виде текстовой экспозиции Prometheus, выдаваемой на /metrics, и в виде метрик OTLP/HTTP JSON, с ограничением кардинальности меток причин. | telemetry (prometheus: Registry, render; otlp: build_payload, Exporter (feature otlp); sample) | tests/telemetry_formats_reference.rs (prometheus_client_reads_our_exposition_as_the_registry_implies, the_official_otlp_proto_reads_our_json_as_the_registry_implies, awkward_reason_text_survives_the_parser, the_committed_outputs_are_what_this_crate_produces; схема 1,3: prometheus_client_reads_the_schema_13_exposition_as_the_registry_implies, the_official_otlp_proto_reads_the_schema_13_json_as_the_registry_implies, promtool_accepts_the_schema_13_exposition, the_collector_receives_and_exports_the_schema_13_payload_unchanged); tests/telemetry_cli.rs; telemetry::prometheus::tests (эталонная экспозиция) | ЧТО ПРОВЕРЯЕТСЯ ВНЕШНЕ, сформулировано узко: наша текстовая экспозиция Prometheus для синтетического потока из 84 строк (значения меток с кавычками, обратными косыми чертами, переводами строк и текстом не в ASCII, 64 ряда причин плюс свёртка 'other', измерители шлюза и положения) принимается текстовым разборщиком prometheus_client 0.26.0, а семейства метрик, типы, текст справки, наборы меток и значения, которые он читает, в точности равны состоянию реестра (значения — по равенству f64). Наш OTLP/HTTP JSON для того же реестра разбирается protobuf 7.36.2 json_format.Parse(ignore_unknown_fields=False) в ExportMetricsServiceRequest из opentelemetry-proto 1.45.1, и каждое имя метрики, описание, единица, вид, монотонность, временная агрегация, атрибут, значение, время начала и время равны состоянию реестра в точности. Оба разборщика показали, что отвергают неизвестное поле, значение неверного типа и неправильно сформированную строку (scripts/gen_telemetry_formats_ref.py). Схема 1,3 (0,36), зарегистрирована заранее (fb226057) до того, как какой-либо инструмент её прочитал: для синтетического потока схемы 1.3 из 64 строк (статусы геометрии, DOP, метки и потеря сигнала присутствуют, null, отсутствуют и неизвестны; классы снижений; неразбираемые строки) те же два разборщика читают ряды геометрии (Prometheus kshana_trust_geometry*, OTLP kshana.geometry.*) и метку класса на kshana_trust_reason_active в точности так, как следует из реестра (24 семейства и 54 выборки; 12 метрик и 31 точка), promtool 3.5.0 check metrics завершается с кодом 0 без замечаний, OpenTelemetry Collector contrib 0.135.0 принимает OTLP/HTTP JSON (статус 200, ничего не отвергнуто), а его файловый экспортёр записывает запрос без изменений (xval/telemetry-1.3, с условием на данные: архивы релизов загружаются с зафиксированным SHA-256, а их выходные данные зафиксированы в репозитории). ЧТО НЕ ПРОВЕРЯЕТСЯ: конечная точка HTTP, доставка, тайм-ауты и переподключение оракулом не проверяются, равно как и приёмник prometheus в Collector; реестр читается через методы доступа, поэтому неисправность в самом состоянии реестра не будет поймана; проверка «зафиксированный выход актуален» для OTLP выполняется только с функцией otlp; имена метрик и их полезность для операционного центра не проверены; CEF и LEEF не охвачены (см. следующую строку). | VALIDATED |
| VM-8dd9b64e | События SIEM телеметрии доверия: Common Event Format (CEF) поверх syslog | События смены диапазона (или по каждой эпохе) в виде полезной нагрузки Common Event Format в оболочке RFC 5424 поверх UDP или TCP, с документированным отображением полей и экранированием CEF. | telemetry (syslog: cef, rfc5424, SyslogSink; time) | tests/cef_reference.rs (pycef_reads_every_tier_1_event_as_the_sample_implies, the_logstash_cef_codec_reads_every_event_including_escaped_headers_as_the_sample_implies, the_committed_corpus_is_what_this_crate_produces_and_covers_what_was_registered); telemetry::syslog::tests (точные строки CEF, экранирование, уровень важности, оболочка RFC 5424); tests/telemetry_cli.rs | ЧТО ПРОВЕРЯЕТСЯ ВНЕШНЕ, сформулировано узко: относительно двух независимых разборщиков с открытым кодом (оракулы: pycef 1,11 (PyPI, MIT); кодек CEF для Logstash (logstash-codec-cef 6.2.7 в Logstash 8.15.3)), на корпусе строк CEF, записанных этим крейтом (157 до поправки 4 ниже, 170 после неё, 176 после поправки 5): каждая смена диапазона и каждая эпоха зафиксированного в репозитории синтетического потока доверия из 84 строк, а также состязательный текст в именах хостов, причинах, метках времени и именах шлюзов, содержащий знаки равенства, обратные косые черты, обратную косую черту со знаком равенства, вертикальные черты, переводы строк, возвраты каретки, табуляции, серии пробелов, многобайтные и астральные символы и подобия ключей, крайние оценки и смещения, каждый диапазон с предыдущим диапазоном и без него. pycef разбирает строки, заголовок которых не требует экранирования (153 до поправки 4, 166 после неё, 172 после поправки 5), и точно восстанавливает поля заголовка, уровень важности, точный набор ключей расширения и каждое значение (числа — по равенству f64) по правилам снятия экранирования из спецификации CEF, которых pycef не применяет и которые применяет scripts/gen_cef_ref.py. Кодек Logstash, который снимает экранирование сам, разбирает каждую строку (157, затем 170, затем 176), удовлетворяет тому же порогу, а также восстанавливает четыре поля заголовка, требующие экранирования (вертикальная черта, обратная косая черта и знак равенства в строке версии), которые шаблон заголовка pycef прочитать не может, так что экранирование заголовка опирается только на кодек Logstash. Порог сравнения был зарегистрирован в коммитах 5172e579 (pycef) и 0a7598aa (Logstash) до запуска любого из разборщиков, и оба выполнили его при первом сравнении. Раскрыты пять поправок. Поправки (1)—(3) не затрагивали ни правило сравнения, ни ожидаемое значение: (1) утверждение о размере корпуса исправлено с 5 на 4 смены диапазона — ошибка подсчёта, поскольку в потоке 4; (2) исправлена обвязка разделителя конвейера в запуске Logstash после первой попытки, не давшей событий; (3) оценка доверия и смещение эпохи перенесены из целочисленных полей CEF cn1 и cn2 в поля с плавающей точкой cfp1 и cfp2 — изменение формата передачи, сделанное в этом выпуске, после чего корпус был сгенерирован заново, а оба оракула запущены повторно при неизменном пороге и снова его выполнили. Поправка (4), 0,36, расширила корпус и ожидаемый набор ключей, зарегистрирована в d6331429 до того, как любой из разборщиков обработал новые строки: входные данные схемы 1,3 добавляют геометрию спутников в пользовательские поля cs6 (метка geometry: статус, затем ';' и классы снижений), cfp3 (geometryHdop) и cfp4 (geometryPdop); 13 случаев геометрии (корпус до 170 строк) и три новых ключа; оба выполнили порог, в остальном без изменений, при первом сравнении (pycef 166 из 170 строк разобрано, 4 случая заголовка уровня 2 как прежде; Logstash 170 из 170). Поправка (5), 0,36, добавила 6 случаев метки геометрии (корпус до 176 строк), зарегистрирована в 9a8e4fa9 до того, как любой из разборщиков обработал их: для входных данных, несущих метку геометрии, cs6 получает третье поле (';' и метку), а cn1 (geometryUsedSatellites) — используемые спутники; таблица отображения кодека Logstash была прочитана заранее (полей flexString нет, поэтому cs6, а не flexString1); оба выполнили порог при первом сравнении (pycef 172 из 176, Logstash 176 из 176), и каждая более ранняя эталонная запись воспроизведена без изменений. ЧТО НЕ ПРОВЕРЯЕТСЯ: ни один из разборщиков не проверяет типы значений cfp (оба хранят их как текст), так что использование полей с плавающей точкой опирается на словарь CEF, а не на оракул; ни один коммерческий SIEM не запускался; имена ключей расширения и их отображение — выбор этого крейта, а разборщики показывают лишь, что они читаются обратно как записаны; оболочка RFC 5424, доставка, тайм-ауты и переподключение не охвачены; pycef — небольшой разборщик, последний раз выпущенный в 2020 году, и кодек Logstash — более весомый оракул. | VALIDATED |
| VM-3b341a07 | События SIEM телеметрии доверия: Log Event Extended Format (LEEF) поверх syslog | События смены диапазона (или по каждой эпохе) в виде полезной нагрузки Log Event Extended Format 2,0 в оболочке RFC 5424 поверх UDP или TCP, с документированным отображением полей. | telemetry (syslog: leef, rfc5424, SyslogSink; time) | telemetry::syslog::tests (точные строки LEEF, экранирование, серьёзность, оболочка RFC 5424, тайм-ауты доставки и повторное подключение); tests/telemetry_cli.rs | ЧТО ПРОВЕРЯЕТСЯ: собственные тесты этого крейта на точное совпадение строк для документированного отображения полей LEEF и поля оболочки RFC 5424; поддерживаемого разборщика LEEF с открытым кодом не существует (поиск по индексу пакетов Python его не нашёл), поэтому формат проверяется по собственной спецификации, прочитанной тем же автором, а не по внешнему оракулу. ЧТО НЕ ПРОВЕРЯЕТСЯ: принимаются ли полезные нагрузки LEEF разборщиком или SIEM какого-либо поставщика; правила экранирования сверх документированных; поведение настоящего сборщика syslog. | MODELLED |
| VM-a66b5cd1 | Целостность пакета доказательств: подпись, цепочка хешей и процедура проверки | Подписанный пакет доказательств события доверия к GNSS с цепочкой хешей: SHA-256 по каждому файлу и цепочка по манифесту, подпись Ed25519 по точным байтам манифеста и средство проверки, которое называет каждый сбой (изменённый, удалённый, переименованный, подменённый или добавленный файл, переупорядоченный или изменённый манифест, манифест, заново хешированный без ключа, повторно подписанный пакет, неверный закреплённый ключ и токен метки времени, который удалён, заменён, является мусором или относится к другому документу). | evidence (bundle: create_bundle, sign_detached, chain_link, sha256_hex; verify: verify_bundle, verify_detached; tsr; assemble; cli) | tests/evidence_crypto_reference.rs (векторы RFC 8032, раздел 7,1, 1, 2, 3 и 1024; примеры SHA-256 из FIPS 180-4; точное совпадение); tests/evidence_pack_reference.rs::kshana_and_the_clean_room_verifier_agree_on_every_case (71 случай); tests/evidence_pack.rs (тесты на подмену) | ЧТО ПРОВЕРЯЕТСЯ ВНЕШНЕ, сформулировано узко: (1) функции Ed25519, которые пакет использует для подписи и для строгой проверки (evidence::bundle::sign_detached, evidence::verify::verify_detached), воспроизводят открытые ключи и подписи тестовых векторов RFC 8032, раздел 7,1, 1, 2, 3 и 1024 байт в байт, принимают их и отвергают каждый перевёрнутый бит вектора 1 и каждый седьмой бит остальных, а также неканоническую подпись S+L; векторы разбираются из текста RFC и воспроизводятся двумя независимыми реализациями (cryptography/OpenSSL и PyNaCl/libsodium) в scripts/gen_ed25519_rfc8032_ref.py. (2) evidence::bundle::sha256_hex, хеш, лежащий в основе каждого хеша пакета и цепочки, в точности воспроизводит примеры SHA-256 из FIPS 180-4 (abc; сообщение из 448 бит; миллион a), пустое сообщение и дайджесты hashlib для лестницы длин от 0 до 130 байт на границах заполнения. (3) Средство проверки, написанное на Python только по docs/EVIDENCE-PACKS.md (scripts/evidence_verify_cleanroom.py: hashlib и cryptography; его автор не читал код на Rust), в точности согласуется с проверяющим на Rust на 71 синтетических нетронутых и подделанных пакетах по вердикту, набору сбоев с именами файлов, вердикту по подписи и голове цепочки, пересчитанной по файлам, и той, которую записывает манифест. При первом прогоне согласовались 64 из 71; расхождения были одной неоднозначностью спецификации (проверка закреплённого ключа по нечитаемому манифесту), одним отклонением интерфейса оракула и одним не полностью построенным случаем; предложение спецификации уточнено, оракул заново реализован по тексту, а случай дополнен, без изменения допусков и ожиданий (записано в коммите d54e14c6). ЧТО НЕ ПРОВЕРЯЕТСЯ: средство проверки «с чистого листа» — независимая реализация другого автора, а не сторонний авторитет, и оно разделяет выбор спецификации, поэтому оно подкрепляет эту реализацию правил, а не сами правила; векторы проверяют примитивы, а не замысел формата пакета. В этой строке токен RFC 3161 читается только ради отпечатка сообщения, а тестовые токены синтетические и не подписаны; подпись и цепочка удостоверяющего центра проверяются по выбору (kshana evidence verify --tsa-ca) отдельной строкой 'RFC 3161 timestamp-token signature and chain verification'. Случаи подделки синтетические. Ничто здесь не является ни юридическим заключением о каком-либо пакете, ни его аттестацией. |
VALIDATED |
| VM-e86afcaa | Проверка подписи и цепочки токена метки времени RFC 3161 | evidence::tsa::verify_token и необязательный kshana evidence verify --tsa-ca <anchors.pem> для timestamp.tsr пакета: TimeStampResp или «голый» TimeStampToken по RFC 3161 (CMS SignedData над TSTInfo), проверяемый автономно относительно доверенных якорей так, как его проверяет openssl ts -verify: тип содержимого и дайджест сообщения в подписанных атрибутах над TSTInfo; подпись над подписанными атрибутами (RSA PKCS#1 v1.5, RSASSA-PSS, ECDSA P-256 и P-384; открытые операции RSA на crypto-bigint); хеш ESS signing-certificate v1 (SHA-1) или v2, называющий сертификат подписанта, найденный среди недоверенных сертификатов токена и вызывающей стороны; критическое, единственное расширенное использование ключа timeStamping у подписанта; цепочка до доверенного самовыданного якоря с подписью каждого сертификата, статусом УЦ и использованием ключа, и каждый сертификат действителен в момент genTime токена; и отпечаток сообщения относительно данных. Не проверяется: отзыв (CRL, OCSP), ограничения имён и политик, nonce |
evidence::tsa (verify_token, pem_certificates); evidence::verify (VerifyOptions::tsa_anchors, Failure::TimestampAuthorityInvalid); evidence::cli (--tsa-ca) | tests/evidence_tsa_openssl.rs::every_case_agrees_with_openssl (предварительно зарегистрированное сравнение); evidence::tsa::tests (гражданские даты и время, base64, открытая операция RSA); evidence::verify::tests::anchors_make_the_authority_checked (неподписанный токен не проходит проверку с якорями; без них отчёт не меняется) | OpenSSL 3.0.13 (openssl ts -verify -attime genTime и openssl cms -verify -cades -purpose timestampsign плюс отпечаток TSTInfo для токенов RSA-PSS), запуск tests/fixtures/evidence_tsa/run_openssl.sh на 27 случаях из cases.tsv: RSA PKCS#1 v1.5 с SHA-256 и SHA-512 и ESS v1 и v2, корень ECDSA P-384 над промежуточным P-256 и TSA P-256 и P-384, RSA-PSS, токен без сертификата подписанта с его передачей и без неё, токены с подписью CAdES, перевёрнутый байт подписи (три алгоритма), изменённый TSTInfo (два), перевёрнутая подпись промежуточного сертификата, двойник сертификата ESS, неверные якоря (четыре), истёкший сертификат TSA, некритическое и неверное расширенное использование ключа и неверные данные (три). Предварительно зарегистрировано в tests/fixtures/evidence_tsa/PREREGISTRATION.md (зафиксировано отдельным коммитом 30ad70b2 до появления средства проверки; вердикты OpenSSL затем перезапущены, байт в байт совпадают). Первый прогон: все 27 вердиктов согласуются (B1) и каждый genTime согласуется с точностью до секунды (B2). Область применимости, сформулированная узко: самостоятельно сгенерированные тестовые сертификаты и токены, созданные тем же OpenSSL, который их оценивает; OpenSSL — независимая реализация, а не служба меток времени; токен какого-либо публичного удостоверяющего центра в проект не включён (freetsa.org не указывает лицензии). Ничто здесь не аттестует никакую реальную метку времени |
VALIDATED |
| VM-35257d18 | Пороги помех для доверия к приёмнику, откалиброванные на наборе данных JammerTest 2024 | receiver_trust::calibration::run_dataset: предварительно зарегистрированная калибровка мониторов падения C/N0, AGC и индикатора подавления (jamming) на публичном наборе данных JammerTest 2024 (Zenodo 15911589, GPL-3.0-or-later, загружается во время выполнения и в проект не включается): для каждой папки временная шкала с шагом 1 с из mon_rf.csv и rinex.csv, мониторы запускаются один раз, каждая эпоха после калибровки помечается как чистая или с подавлением по attack_log папки (со сдвигом из CEST в UTC, защитный интервал 60 с), каждый порог перебирается по фиксированной сетке, выбирается наименьший порог, при котором объединённая вероятность ложной тревоги на чистых данных не превышает 0,01, и подсчёты на отложенных данных по схеме «исключи одну папку»; перекрёстная проверка читателя UBX. Выбор поставляется только как необязательный профиль [monitors] profile = "jammertest-2024-calibrated" (cn0_drop_db 1,5, agc_k_sigma 3,5, jam_ind_threshold 29); правило по умолчанию и каждый выход без него не изменены | receiver_trust::calibration (run_dataset); receiver_trust::monitors (MonitorConfig::profile, JAMMERTEST_2024_CALIBRATED); realdata::jammertest; examples/jammertest_trust_calibration.rs | tests/receiver_trust_jammertest_calibration.rs::the_recorded_calibration_reproduces (игнорируется, зависит от данных через KSHANA_JAMMERTEST_DIR: записанный отбор, счётчики на отложенной выборке, вердикты порогов и вердикт); receiver_trust::calibration::tests (метки времени, сопоставление окон и сдвиг часового пояса, метки, охранные интервалы, исключение, отбор); receiver_trust::monitors::tests::threshold_profile_is_opt_in | Опубликованные журналы событий набора данных (окна attack_log) как истина о событиях, согласно предварительной регистрации xval/jammertest-trust/PREREGISTRATION.md (зафиксирована отдельным коммитом 0fa012b до запуска обвязки). Первый и единственный прогон (xval/jammertest-trust/RESULTS.md): оценке подлежат 14 из 24 папок (7 с подавлением), 3 502 чистая и 9 560 эпох с подавлением. Вероятность ложной тревоги на чистых отложенных данных: cn0_drop_db 0,0231 (81/3502) против порога 0,02, FAIL; agc_k_sigma 0,0003, pass; jam_ind_threshold 0,0094, pass; объединение трёх: ложные тревоги 0,0328, обнаружение 0,807 против 0,05 и 0,50, pass. По зарегистрированному правилу строка имеет уровень MODELLED (один порог не выполнен). Узко: один тип приёмника (u-blox ZED-F9P), одно событие, плановые одноминутные слоты как истина (обнаружение — нижняя оценка; «чистые» означает вне зарегистрированных окон); калибровка на журналах CSV, а читатель UBX даёт больше ложных тревог на двух папках. Диапазоны морской оценки доверия не откалиброваны | MODELLED |
| VM-47968885 | Оценка Jammertest: журнал приёмника, оцениваемый по каждому запланированному испытанию (задержка обнаружения, пропущенные тревоги, ложные тревоги, время восстановления) относительно опубликованного плана испытаний | jammertest::{plan, score, dataset} (kshana jammertest import|score): каталог испытаний NPRA и план передач (MIT, загружается с зафиксированным SHA-256, в проект не включается) читаются как запланированная истина с сохранением идентификаторов каталога; прогон receiver-trust оценивается по каждому испытанию (первая тревога минус запланированное начало, обнаружено/с опозданием/пропущено относительно допуска, время до первого интервала без тревог, тревоги вне каждого слота и его защитного интервала), с подписанным пакетом доказательств, содержащим итоговую карту оценок. Расписание — это запланированные слоты, а не записанное время работы в эфире | jammertest::plan (parse_catalog, parse_plan, import, import_attack_log, events_toml); jammertest::score (score_run); jammertest::dataset (run_dataset); jammertest (score_log, score_pack); examples/jammertest_score_2024.rs | tests/jammertest_plan_roundtrip.rs (зависит от данных через KSHANA_JAMMERTEST_PLAN_DIR: числа слотов по областям испытаний плана 2025 года, идентификаторы каталога, круговой путь TOML); tests/jammertest_score.rs (синтетический журнал с известным падением: обнаружено, пропущено, не поддаётся оценке, прогон с ложной тревогой, подписанный пакет с картой оценок); jammertest::plan::tests; tests/jammertest_score_2024.rs (зависит от данных через KSHANA_JAMMERTEST_DIR: записанный прогон) | Число слотов плана по областям испытаний (76, 77 и 45 слотов, из которых 61, 63 и 32 передают) подсчитано независимо скриптом по тому же JSON; окна attack_log набора данных 2024 года взяты как истина о событиях, согласно xval/jammertest-score/PREREGISTRATION.md (зафиксировано отдельным коммитом c2e6d3b до запуска оценщика). Первый и единственный прогон (xval/jammertest-score/RESULTS.md): зарегистрированное правило минимума данных НЕ ВЫПОЛНЕНО (4 оцениваемых окна подавления из 4 из 12 папок UBX против минимума в 10 окон из 2 папок: 5 папок отброшены по базовому правилу, 3 журнала UBX содержат только время недели GPS), поэтому пороги от B1 до B4 оценить нельзя; ничего не ослаблялось и не перезапускалось. v2 (xval/jammertest-score/PREREGISTRATION-v2.md, зафиксировано отдельным коммитом, только обработка данных: журналы только со временем GPS размещаются по дате, 12 папок только с CSV, сессия подвижной платформы для подвижных ровер-приёмников; те же пороги и правило минимума данных): сохранено 14 из 24 папок, но лишь 7 оцениваемых окон подавления, правило минимума данных снова не выполнено, ни один порог оценить нельзя (RESULTS-v2.md). Запланированная истина: запланированный слот не является записью работы в эфире, пропуск может означать испытание, которое не проводилось, задержка отсчитывается от запланированного начала, а «чисто» означает вне запланированных слотов. Обнаружение мониторами в области измерений ничего не говорит о спуфере малой мощности. Один тип приёмника (u-blox ZED-F9P). Набор данных SimulaMet NMEA 2025 года не используется (лицензия не указана, доступ по подписке) | MODELLED |
| VM-ae7811e7 | Экспорт для испытательного стенда (kshana bench-export): столбцы в земной системе координат, геодезические и локальные столбцы скорости, столбцы ориентации и вывод NMEA 0183 | Столбцы CSV движения: положение в земной системе координат, геодезическое положение, скорость в земной системе координат, курс/тангаж/крен и UTC, а также предложения NMEA GGA/RMC, записанные из синтетических сценариев (gnss-ins, включая automotive-urban-canyon, jamming, gnss-sim). Только движение и события; никакой сигнал не записывается, и никаких характеристик симулятора или приёмника не заявляется. | interop::testbench (write_motion_csv, write_nmea, trajectory_of, export); fusion::pack::truth_trajectory | tests/testbench_reference.rs (7 тестов: закрепления по оракулу, байты экспорта, наихудший случай по каждой строке, столбцы положения, локальная скорость в сравнении с истинной скоростью в NED, углы Эйлера в сравнении со scipy, NMEA в сравнении с pynmea2); tests/interop_testbench.rs (собственные круговые проверки записывающей части) | ЧТО ПРОВЕРЯЕТСЯ ВНЕШНЕ, сформулировано узко: относительно pyproj 3.8.0 (PROJ 9.8.1), geographiclib 2,1, pynmea2 1.19.0 и scipy 1.18.1, запуск scripts/gen_testbench_ref.py на 4 синтетических сценариях, с допусками, зафиксированными до первого сравнения (каждый — наихудший случай округления записывающей стороны): столбцы в земной системе координат равны преобразованию WGS 84 геодезических столбцов (наихудшее 1.3e-4 м, порог 3e-4) и обратному (1.3e-9 град, порог 2e-9; высота 1.3e-4 м, порог 3e-4) в каждой строке; скорость в земной системе координат, повёрнутая в систему «север — восток — вниз» топоцентрической операцией PROJ, равна истинной скорости движка в NED (7.5e-5 м/с, порог 2e-4); курс, тангаж и крен равны углам рыскания, тангажа и крена из scipy для истинного кватерниона движка (5.0e-7 град, порог 1e-6); каждое предложение NMEA разбирается в pynmea2 с верной контрольной суммой, а его декодированные положение (1.2e-3 м, порог 5e-3), высота, скорость, путевой угол (5.0e-4 град, порог 1e-3) и время равны значениям движения; столбец UTC равен независимой арифметике даты и времени. SHA-256 проверенных точных байтов CSV и NMEA зафиксирован. ЧТО НЕ ПРОВЕРЯЕТСЯ: сама истинная траектория сценария (профиль движения и его интегрирование); соглашения (курс — это рыскание корпуса, а не путевой угол, и отличается от него до примерно 77 градусов в automotive-urban-canyon; качество GGA, число спутников и HDOP — заглушки); читает ли какой-либо лабораторный симулятор файлы так, как задумано; любые характеристики симулятора или приёмника. Оракулы проверяют преобразования и кодировки, а не физику сценария. Работа с локальной системой координат проверяется только через поворот скорости и скорость и путевой угол NMEA (в CSV нет столбца локального положения). | VALIDATED |
| VM-25755faa | Сопоставление compliance с общедоступными стандартами | compliance (kshana compliance-report): отображение выходных данных Kshana на пункты публичных стандартов только по номеру, заполняемое из заданных прогонов; результат засчитывается для возможности только тогда, когда он несёт свидетельства, названные в отображении, пустой набор ничего не подтверждает, а формулировка — «подкрепляет доказательствами»; отчёт не является выводом о том, что какой-либо стандарт выполнен, и не является оценкой или одобрением со стороны кого бы то ни было. | compliance | tests/compliance_report.rs::mapping_is_well_formed; tests/compliance_report.rs::wording_rule_holds_in_mapping_report_and_docs; tests/compliance_report.rs::empty_set_evidences_nothing; tests/compliance_report.rs::statuses_follow_the_runs_present; tests/compliance_references.rs | Ссылки проверены по извлечённому скриптом индексу заголовков цитируемых публичных документов, прочитанных 2026-10-10 (tests/compliance_references.rs). ЧТО ПРОВЕРЯЕТСЯ: 49 цитируемых ссылок на пункт, раздел, параграф или заголовок существуют в цитируемом документе, а 7 цитируемых URL разрешились в записанную дату (2 по второму маршруту); отрицательные контроли не проходят. ЧТО НЕ ПРОВЕРЯЕТСЯ: верность какого-либо пересказа, отображения или пробела; пункты EN 16803 (платный, только текст каталога); более поздние редакции; индекс не является независимой реализацией. | MODELLED |
| VM-89123cc2 | Морские интеграции: плагин Signal K, поток шлюза и панель оценки OpenCPN, референсная сборка | Оценка доверия, диапазон, причины, состояние шлюза и положение, сообщаемое приёмником, публикуются в navigation.gnss.kshana на сервере Signal K с уведомлениями warn, alarm и normal (integrations/signalk); потоком NMEA через шлюз, в котором определение положения помечается недействительным, пока доверие обрушено, и с одним предложением PKSHT за цикл, передаваемым в OpenCPN по TCP самим шлюзом или небольшим ретранслятором, и родной панелью оценки OpenCPN, читающей предложение PKSHT (integrations/opencpn); а также юнитами systemd и контейнером, запускающими шлюз (deploy/reference-build). Там, где они показывают вывод, они несут консультативное заявление: Программное обеспечение консультативного характера, не навигационное оборудование с утверждённым типом (IEC 61108, IEC 61162): ответственность за судовождение остаётся на операторе. | receiver_trust (live: the gate, its TCP listener, PKSHT); вне крейта: integrations/signalk (JavaScript), integrations/opencpn (ретранслятор на JavaScript, нативный модуль на C++), deploy/reference-build (модули systemd, контейнер) | tests/receiver_trust_live_cli.rs (шлюз и его слушатель TCP, сторона Rust); integrations/signalk/test/adapter.test.js, integrations/signalk/test/model.test.js и integrations/signalk/test/plugin.test.js (24 тестов Node на записанном синтетическом выходе); integrations/opencpn/test/relay.test.mjs (5 тестов Node); integrations/opencpn/test/e2e-live.mjs (реальный исполняемый файл — потребителю TCP, запускается вручную и в CI); integrations/opencpn/plugin/test/pksht_test.cpp и integrations/opencpn/plugin/test/trust_state_test.cpp (проверки на C++ анализатора PKSHT и состояния панели); deploy/reference-build/check-units.sh и deploy/reference-build/test-entrypoint.sh | ЧТО ПРОВЕРЯЕТСЯ, сформулировано узко: что эти интеграции работают с настоящим программным обеспечением, для которого написаны. СВИДЕТЕЛЬСТВА зафиксированы в integrations/signalk/evidence/README.md (с файлами JSON) и integrations/opencpn/evidence/README.md (со снимками экрана и журналами), в каждом случае со скриптом, который их воспроизводит. (1) Signal K: плагин, загруженный в зафиксированный пакет npm signalk-server 2.33.0 в закрытом пространстве имён сети только с петлевым интерфейсом, на синтетических данных. Собственные интерфейсы REST и WebSocket сервера показали опубликованные пути, метаданные оценки и уведомление, которое прошло состояния «отсутствует», warn, alarm, normal (после удержания) и снова warn, когда данные прекратились. При настоящем kshana, запускаемом плагином на NMEA, которую получил сам сервер, уведомление прошло состояния warn, затем alarm, а сообщаемое положение было опубликовано; собственный navigation.position сервера записывался его провайдером NMEA, а не плагином. Повторно запущено на живой схеме JSON 1,2. (2) OpenCPN: плагин, собранный по заголовку API плагинов OpenCPN и wxWidgets 3.2.4, загруженный в пакет Ubuntu 24,04 программы OpenCPN 5.8.4 на виртуальном дисплее; OpenCPN загрузил его, выполнил инициализацию и передал ему предложения PKSHT потока через шлюз, а панель стала красной в диапазоне недоверия. В одном чистом прогоне собственная позиция судна в OpenCPN перестала обновляться, а его индикатор определения положения сбросился, когда шлюз пометил определение положения как недействительное. Второй прогон, питаемый напрямую слушателем TCP шлюза, показал доставку плагину, но не чистое сопоставление «до и после». (3) Тесты ретранслятора воспроизводят записанный фрагмент потока через шлюз по настоящему сокету TCP и проверяют, что получает потребитель (байты без изменений, верные контрольные суммы в каждом предложении, включая переписанные, согласие GGA и RMC, одно PKSHT за цикл с полем шлюза там, где определение положения недействительно), а сквозной скрипт проверяет, что потребитель слушателя шлюза получает ровно те байты, которые тот же шлюз пишет в стандартный вывод. (4) Разборщики PKSHT (JavaScript и C++) запускаются на предложениях, записанных из вывода kshana, и отвергают неверную контрольную сумму, версию или оценку вне диапазона от 0 до 100. (5) Юниты systemd проверяются командой systemd-analyze verify (systemd 255, двоичные файлы заменены заглушками) и защитами от оболочки в ExecStart, политики перезапуска и ключей песочницы; обработка аргументов точки входа контейнера проверяется с заглушкой вместо двоичного файла. ЧТО НЕ ПРОВЕРЯЕТСЯ: для любого значения, которое показывают эти интеграции, нет внешнего оракула. Сами значения доверия — это строки выше, а прогон интеграции показывает лишь то, что обвязка их переносит; поэтому эта строка имеет уровень MODELLED, а не VALIDATED (docs/VALIDATION.md). Не использовались ни настоящее судно, ни приёмник, ни длительный прогон, ни другая версия любого из хостов, ни другая операционная система или рабочий стол; все данные — синтетический текст, и ничто здесь не является измерением. Звук и визуальная обработка уведомления настоящим клиентом Signal K, кнопка панели инструментов OpenCPN, настройки и устаревшее состояние, а также упаковка для менеджера плагинов OpenCPN не проверялись. Ключи песочницы systemd проверены только на синтаксис, не запускались под действующим systemd, а сборка образа контейнера и его проверка работоспособности не имеют зафиксированных здесь свидетельств. Никаких значений обнаружения или ложной тревоги не заявляется. Программное обеспечение консультативного характера, не навигационное оборудование с утверждённым типом (IEC 61108, IEC 61162): ответственность за судовождение остаётся на операторе. | MODELLED |
| VM-35b27a4f | Слежение за BOC(1 1): масштабирование DLL и разрешение неоднозначности «bump-jump» (по выбору) | Поле boc структуры iq::track::LoopConfig (по выбору, по умолчанию None): три дискриминатора DLL, масштабированные так, чтобы показывать ошибку кода в чипах с единичным наклоном на главном пике синусного BOC(1 1), и монитор bump-jump на очень ранних и очень поздних коррелятора на одном полупериоде поднесущей (0,5 чипа), который перескакивает NCO кода к главному пику, когда реверсивный счётчик достигает N (8 по умолчанию). Без этой опции каждый выход остаётся без изменений. | iq::track::boc (BocKind, BocTracking, BumpJump, boc11_dll_scale); iq::track::channel (the bump-jump taps and Channel::bump_jumps) | tests/iq_boc_bump_jump.rs (b1_b2_b3_side_peak_and_false_jumps_on_the_iq_chain, b4_scaling_on_the_sampled_signal, b5_false_jump_rate_and_detection_at_correlator_level); модульные тесты iq::track::boc (b4_unit_grid_misses_are_the_recorded_ones: предварительно зарегистрированный порог модульного теста B4 сохранён как написан, его записанные промахи зафиксированы как результат F1) | Внутренняя согласованность относительно внесённой истины и замкнутых форм, при порогах, зарегистрированных заранее в 6b68f6cc (docs/design/evidence/boc-bump-jump/). Сигнал данных BeiDou B1C (PRN 19, 5 МВыб/с), сгенерированный iq::scene: при выключенной опции старт на боковом пике остаётся ложно захваченным на предсказанных ±(0,5 + d/4) чипа (измерено ±0,549); при включённой — один перескок к главному пику на 0,08 с и СКО в позднем окне 0,0008 чипа при 45 дБ-Гц и 0,0048 чипа при 35 дБ-Гц; без перескока с главного пика при 35, 40 и 45 дБ-Гц за 4 с; масштабированный наклон EMLP от 0,94 до 0,99 на дискретизированном сигнале (немасштабированный от 3,6 до 3,8). Один лишь детектор bump-jump на тройках коррелятора с точной ковариацией шума BOC(1 1) не дал ни одного ложного перескока за 100 000 обновлений при 25—45 дБ-Гц и обнаружил 1000 из 1000 стартов на боковом пике при 35 дБ-Гц. NOT MET (находка F1): зарегистрированная заранее сетка модульных тестов для масштабирования включает смещения вне линейного диапазона дискриминаторов, где масштабированные показания промахиваются мимо смещения до 48 %. ЧТО НЕ ПРОВЕРЯЕТСЯ: полевые данные IQ, ограниченные по полосе входные тракты, составные реплики MBOC/QMBOC и любой внешний приёмник. | MODELLED |
| VM-56e6f4f4 | Ионосферный сцинтилляционный канал IQ (модель Cornell) относительно измеренной сцинтилляции GPS L1 на частоте 50 Гц | iq::channel::scint, сцинтилляционная модель Cornell (интенсивность по Райсу, спектр Баттерворта второго порядка, фаза arg z), управляемая измеренными S4 окна и временем декорреляции интенсивности, сравнивается по тому, что она порождает сверх этих двух входных величин; realdata::scint50 читает измеренный журнал, убирает тренд и запускает сравнение. | iq::channel::scint (Scintillation, ScintParams); realdata::scint50 (parse_log, segments, measured_windows, model_windows, compare) | tests/iq_scint_malindi_measured.rs (cornell_model_verdict_is_the_recorded_one, зарегистрированный вердикт зафиксирован как записанный, результат F1; finding_model_fades_are_deeper_and_longer_than_measured; posthoc_b3_with_the_model_phase_unwrapped, только сообщается; зависит от данных, загружается scripts/fetch_scint_malindi.sh); модульные тесты realdata::scint50 (model_data_through_the_harness_shows_the_wrapped_phase_finding, результат F2) | Измеренные данные при порогах, зарегистрированных заранее в b6ccb499 (xval/scint-malindi/): запись Zenodo 16941224 (INGV, Малинди, 18 марта 2023, GPS PRN 26, интенсивность и фаза несущей на 50 Гц, CC BY 4,0, SHA-256 проверен). 22 подходящих окна по 60 с (N1 выполнено). MET: распределение интенсивности (D Колмогорова — Смирнова 0,0415, порог 0,05) и фазовая сцинтилляция, связанная с S4 (медиана отношения измеренного к модельному sigma-phi 0,779, порог от 2/3 до 3/2). NOT MET (находка F1): доля глубоких замираний в модели в 2,38 раза больше измеренной (порог от 0,5 до 2), а среднее замирание в 3,51 раза длиннее (порог от 2/3 до 3/2). Находка F2: зарегистрированная обработка читает свёрнутую фазу модели, что выявила самопроверка; B3, повторённый апостериори с развёрнутой фазой, даёт 0,804. ЧТО НЕ ПРОВЕРЯЕТСЯ: другие ночи, станции, широты или сигналы; шум приёмника в модели. Строка остаётся MODELLED. | MODELLED |
| VM-f5e2ce4e | Вариант CFAR с усреднением по ячейкам в захвате IQ | iq::acq::ca_cfar и ca_cfar_cells (по выбору): ячейка сетки захвата сравнивается со средним опорных ячеек её строки Доплера (защитные и шаговые задержки, с заворачиванием по периоду) с коэффициентом alpha, заданным из замкнутой формы вероятности ложной тревоги CA-CFAR для M некогерентных блоков (ca_cfar_pfa, ca_cfar_alpha). Детектор по мощности отсчёта остаётся по умолчанию, и каждый существующий выход не изменяется. | iq::acq (CfarConfig, ca_cfar, ca_cfar_cells, ca_cfar_pfa, ca_cfar_alpha) | tests/iq_acq_cfar.rs (c1_closed_form_matches_monte_carlo_of_the_exact_model, c2_false_alarm_rate_on_gaussian_noise, c3_false_alarm_rate_on_two_bit_noise, c5_decisions_do_not_depend_on_the_input_scale; c4_noise_free_two_bit_signal_verdict_is_the_recorded_one, зарегистрированный вердикт зафиксирован как записанный, результат F1, закреплён finding_noise_free_sidelobes_exceed_the_cfar_rate); модульный тест iq::acq ca_cfar_closed_form_reduces_to_the_textbook_case_and_inverts | Замкнутая форма при порогах, зарегистрированных заранее в 3724aefa (docs/design/evidence/acq-cfar/). Вероятность ложной тревоги CA-CFAR для ячеек Gamma(M) относительно Монте-Карло точной модели: 18 из 18 случаев в пределах 3 биномиальных сигм. На каждой ячейке поисков iq::acq (GPS L1 C/A, 2,5 МВыб/с, по 210 000 ячеек) при расчётном 1 %: 0,977 % и 0,969 % на гауссовом шуме и 1,006 % и 0,999 % на 2-битном квантованном шуме (M = 1 и 4; порог плюс-минус 20 %); решения не меняются при масштабировании входа. NOT MET (находка F1): на 2-битном сигнале без шума обнаружение и его ячейка верны, но 1,28 % внепиковых ячеек строки пика (порог 1 %) превышают порог на детерминированных боковых лепестках корреляции кода. ЧТО НЕ ПРОВЕРЯЕТСЯ: другие варианты CFAR, двумерные окна, ограниченные по полосе входные тракты, полевые данные. | MODELLED |
| VM-23e52907 | Модель спектра: диапазоны GLONASS, BeiDou и Galileo E6 (по выбору) | spectrum::default_band определяет, только по имени (MORE_BAND_NAMES), GLONASS L1OF и L2OF на каждом канале FDMA K = -7 … 6 (BPSK, 0,511 Мчип/с), BeiDou B1I (BPSK(2)), B1C (MBOC(6,1,1/11)), B2a и B3I (BPSK(10)) и Galileo E6 (BPSK(5)), с несущими и минимальными принимаемыми мощностями из их документов управления интерфейсом; набор диапазонов по умолчанию и каждый существующий выход не изменяются. | spectrum (default_band, MORE_BAND_NAMES, GLONASS_CHANNELS) | tests/spectrum_more_bands.rs (s1_new_bands_carry_their_icd_values, s2_nulls_and_b1c_parts, s4_cn0_paths_agree_on_the_new_bands; s2_closed_form_densities_verdict_is_the_recorded_one, результат F1, закреплён finding_s2_areas_are_the_closed_form_in_band_fraction; s3_iq_layer_verdict_is_the_recorded_one, результат F2, закреплён finding_s3_per_bin_errors_follow_the_code_line_spectrum; posthoc_s3_band_averaged_shape, только сообщается) | Опубликованные документы управления интерфейсом и замкнутые формы при порогах, зарегистрированных заранее в 5806f28b (docs/design/evidence/spectrum-bands/): GLONASS ICD, редакция 5,1, BDS-SIS-ICD B1I 3,0, B1C 1,0, B2a 1,0 и B3I 1,0, Galileo OS SIS ICD, выпуск 2,1. MET: каждая несущая, скорость чипов и принимаемая мощность в том виде, как они перенесены (28 каналов GLONASS), первые нули BPSK на скорости чипов, составной B1C, равный MBOC(6,1,1/11), как даёт таблица мощностей его ICD, тождество пути C/N0 и побайтово одинаковые сценарии спектра. NOT MET: порог единичной площади, который в написанном виде был недостижим (находка F1; площади равны замкнутой форме доли в полосе), и согласие по каждой ячейке спектра волновых форм B1I и B1C слоя IQ с огибающей модели (1,26 и 1,56 дБ против 0,5 дБ, находка F2; GLONASS 0,07 дБ), поскольку коды Голда и Вейля имеют неравномерные линейчатые спектры; при усреднении по полосе главные лепестки согласуются в пределах 0,25 дБ. ЧТО НЕ ПРОВЕРЯЕТСЯ: записанные данные IQ, другие сигналы, внутрисистемные помехи. | MODELLED |
| VM-d8f4e06f | Первичные дальномерные коды BeiDou B1I относительно независимого генератора | iq::signals::beidou::b1i_bits и b1i: коды Голда BDS-SIS-ICD-B1I-3.0, усечённые до 2046 чипов, PRN от 1 до 63, в том виде, как их генерирует, захватывает и отслеживает слой IQ. | iq::signals::beidou (b1i_bits, b1i) | tests/iq_signals.rs::beidou_b1i_matches_gnss_sdr_generator_for_all_63_prns | GNSS-SDR v0.0.19 (тег v0.0.19, коммит 1ddd4562), независимая реализация того же ICD с открытым кодом: его beidou_b1i_code_gen_int, скомпилированная отдельно, сгенерировала все 63 кода. В репозитории зафиксирован только её программный вывод: tests/fixtures/iq_signals/beidou_b1i_gnss_sdr.txt, префикс из 64 чипов и SHA-256 каждого кода из 2046 чипов. Этот вывод — первичные коды PRN BeiDou B1I, которые определяет публичный BDS-SIS-ICD-B1I-3.0; ни исходного кода, ни двоичных файлов GNSS-SDR в репозитории нет. Порог зарегистрирован заранее в 911106d1 (xval/beidou-b1i-gnss-sdr/): все 2046 чипов всех 63 PRN идентичны, без инверсии, сдвига и переименования. Результат: 63 из 63 идентичны; фикстура сгенерирована заново из свежего снимка v0.0.19 (SHA-256 исходного файла записан) и побайтово совпадает. ЧТО НЕ ПРОВЕРЯЕТСЯ: вторичный код NH20, список PRN GEO, несущая и скорость чипов. | VALIDATED |
| VM-fa382f0c | Дальномерные и накладываемые коды GPS L1C относительно печатных проверочных столбцов IS-GPS-800J | iq::signals::gps::l1c_p_bits, l1c_d_bits и l1c_o_bits: дальномерные коды Вейля L1CP и L1CD (вычисленная последовательность Лежандра, индекс Вейля, расширяющая последовательность, вставляемая перед чипом p) и накладываемые коды L1CO S1, PRN от 1 до 63. | iq::signals::gps (l1c_weil, l1c_ranging_bits, l1c_p_bits, l1c_d_bits, l1co_s1_run, l1c_o_bits); iq::signals::tables | tests/iq_signals_gps_l1c.rs (c1_l1cp_and_l1cd_initial_and_final_24_chips_match_is_gps_800j_table_3_2_2, c2_l1co_initial_and_final_11_bits_match_is_gps_800j_table_3_2_3, c3_legendre_sequence_matches_is_gps_800j_table_6_2_1, the_column_check_rejects_relabelled_inverted_and_shifted_codes) | IS-GPS-800J (01-AUG-2022, заявление о распространении A), проверочные столбцы, которые он печатает рядом с параметрами генератора: таблица 3.2-2 — начальные и конечные 24 чипа каждого кода L1CP и L1CD, таблица 3.2-3 — начальные и конечные 11 бит каждого кода L1CO, таблица 6.2-1 — последовательность Лежандра длины 10223; перенесены скриптом scripts/extract_is_gps_800_tables.py из PDF (SHA-256 c4aad710...). Пороги зарегистрированы заранее в fe372e26 (docs/design/evidence/l1c-codes/): 252 из 252 столбцов, 63 из 63 накладываемых кодов и 10 223 из 10 223 бит Лежандра идентичны; извлечение с --check проходит; отрицательный контроль не проходит на переименованных, инвертированных и сдвинутых кодах. ЧТО НЕ ПРОВЕРЯЕТСЯ: сами параметры генератора (они берутся из тех же таблиц), чипы между печатными столбцами, шаблон поднесущей TMBOC и коды L1CO S2. | VALIDATED |
| VM-c906216c | Первичные коды LunaNet AFS-I и AFS-Q относительно печатных проверочных столбцов LSIS-AFS V1.0 | iq::signals::lunanet::afs_i_bits и afs_q_primary_bits (имена сигналов lunanet-afs-i и lunanet-afs-q в kshana iq): код Голда AFS-I (2047, укороченный по циклу до 2046, G2 с задержкой по каждому PRN) и первичный код Вейля AFS-Q (вычисленная последовательность Лежандра, индекс Вейля, расширяющая последовательность, вставляемая перед чипом p), PRN от 1 до 210. | iq::signals::lunanet (afs_i_bits, afs_q_primary_bits, legendre_bits); iq::signals::lunanet_tables; iq::lunanet_afs::check_spec | tests/lunanet_afs_codes.rs (b1_afs_i_gold_codes_match_the_printed_first_and_last_24_chips_for_all_210_prns, b2_the_legendre_sequence_of_length_10223_is_the_printed_table_d1, b3_afs_q_primary_codes_match_the_printed_first_and_last_24_chips_for_all_210_prns, b1b_not_met_the_printed_g2_state_is_not_the_state_after_the_printed_delay, b1c_post_hoc_the_printed_g2_state_is_the_state_after_2047_minus_the_delay); tests/iq_signal_matrix.rs (lunanet_afs_i, lunanet_afs_q) | Относительно печатных таблиц LSIS-AFS V1.0 (в спецификации помечены TBC): LunaNet Interoperability Specification V5, Applicable Document 1 Volume A: LunaNet Signal-In-Space Recommended Standard, Augmented Forward Signal (LSIS-AFS) V1.0, 29 января 2025 (NASA; SHA-256 PDF 986e0795...), проверочные столбцы, которые он печатает рядом с параметрами генератора: таблицы C-1—C-5 и D-2—D-6 — первые и последние 24 чипа каждого кода AFS-I и AFS-Q, таблица D-1 — последовательность Лежандра длины 10223; извлечено скриптом scripts/extract_lunanet_afs_tables.py (xval/lunanet-afs/oracle/). Пороги зарегистрированы заранее в b3ba5d5 (xval/lunanet-afs/PREREGISTRATION.md) до появления генератора: B1 420 из 420, B2 идентично, B3 420 из 420. Документ помечает свои таблицы кодов как {LSIS-TBC} и указывает, что они предназначены только для испытаний и интеграции, поэтому это проверяет построение относительно таблиц этой редакции, а не более поздней. Зарегистрированное заранее утверждение о печатном начальном состоянии G2 (B1b) было сформулировано с неверным направлением и NOT MET (0 из 210), зафиксировано; исправленное соотношение (2047 минус задержка) выполняется для 210 из 210 и записано как апостериорное. ЧТО НЕ ПРОВЕРЯЕТСЯ: сами параметры генератора (те же таблицы), чипы между печатными столбцами, третичный код, слой сообщений и кодирование LDPC. | VALIDATED |
| VM-e9a107df | Третичные коды LunaNet AFS и слой сообщений (SB1 BCH, CRC-24Q, перемежитель) относительно LSIS-AFS V1.0 | iq::signals::lunanet::afs_q_tertiary_bits, afs_q_tiered; iq::lunanet_afs: синхронизирующая последовательность, кодер SB1 BCH(51 8) и декодер на 256 гипотез, CRC-24Q, блочный перемежитель 60 x 98, проверка потока символов (kshana lunanet-afs-check) и генератор тестового потока с подкадрами-заглушками. Кодирование LDPC со скоростью 1/2 для подкадров от 2 до 4 не реализовано (его матрицы находятся в отдельном приложении). | iq::lunanet_afs; iq::signals::lunanet (afs_q_tertiary_bits, afs_q_overlay_bits, afs_q_tiered); surface (lunanet_afs_check_spec, lunanet_afs_check_symbols, lunanet_afs_generate) | tests/lunanet_afs_codes.rs (b4_legendre_1499_matches_and_tertiary_codes_match_except_one_printed_column, the_spec_check_reports_every_bar_and_pins_the_b4_miss); iq::lunanet_afs::tests (sb1_round_trips_every_field_and_corrects_flipped_symbols, generated_streams_pass_and_damage_is_found); tests/lunanet_afs_cli.rs | LSIS-AFS V1.0 (как выше): последовательность Лежандра длины 1499 (таблица E-1, идентична) и первые и последние 24 чипа третичных кодов (таблицы E-2—E-6: 419 из 420 столбцов идентичны; документ печатает одни и те же последние 24 чипа, A14850, для PRN 147 и PRN 151, а генератор воспроизводит значение PRN 151, так что запись для PRN 147, скорее всего, опечатка; порог 420 из 420 NOT MET, и промах зафиксирован); разобранный пример на рисунке 8 для кода SB1 (один пример: 0x045 кодируется в 0x229F61DBB84A0); CRC-24Q относительно каталожного контрольного значения 0xCDE703 для ASCII 123456789; собственная арифметика кадра в документе. Пороги зарегистрированы заранее в b3ba5d5. Один зафиксированный промах и один разобранный пример для слоя сообщений, поэтому строка остаётся MODELLED. ЧТО НЕ ПРОВЕРЯЕТСЯ: LDPC и слова CRC внутри подкадров от 2 до 4, содержимое сообщений и любой записанный поток | MODELLED |
| VM-7fc9b51d | Пакеты стандартов: сценарии, оцениваемые по порогам, заданным до прогона | standards_pack (kshana standards-pack): тестовые профили рамочной программы DHS Resilient PNT для уровней от 1 до 4, уровни точности и оценка целостности по IMO MSC.1/Circ.1575 и пакеты ICAO Doc 9849, приложение F: «контролировать, оценивать и смягчать»: каждый тест запускает встроенный вид сценария и сравнивает поля результата с порогами, заданными в пакете, а тесты, которым нужен журнал приёмника, перечисляются как NEEDS INPUT и не оцениваются. | standards_pack; compliance (standards-pack facts in compliance-report) | tests/standards_packs.rs (pinned_outcomes: статус каждого теста, включая промахи L4-T1 и четыре теста точности IMO); standards_pack::tests | Внешних нет для результатов сценариев: каждый тест пакета запускает вид сценария уровня MODELLED. Пороги — это заявленный профиль автора пакета (рамочная программа DHS значений не задаёт; пределы точности IMO — таблица C-1 из MSC.1/Circ.1575, прочитанная полностью; пакет ICAO следует собственной презентации ICAO по плану смягчения радиопомех, потому что Doc 9849 — платная публикация и не читался), зафиксированные до любого оцениваемого прогона в файлах PREREGISTRATION.md в стиле xval в standards/. Порог MET означает, что смоделированный сценарий выполнил заданный порог, и ничего не говорит о каком-либо изделии | MODELLED |
| VM-1a79c093 | Лабораторный пакет доказательств полного цикла (сценарий, условия испытания, журнал приёмника, оценка) | evidence::roundtrip (kshana evidence round-trip) и экспорт журнала приёмника kshana.test-conditions/1 из kshana bench-export: подписанный пакет, фиксирующий хеш сценария, хеш заданных условий, хеш журнала и оценку относительно заданных событий и отвергающий условия, не совпадающие с событиями оценки, или журнал, хеш которого не совпадает с заданным. Никакой сигнал не записывается, не воспроизводится и не планируется. | evidence::roundtrip, evidence::assemble, interop::testbench (write_conditions_json), iq::campaign::conditions | tests/round_trip_pack.rs (pack_links_scenario_conditions_log_and_score_and_verifies, conditions_that_disagree_with_the_scoring_events_are_refused, a_stated_log_hash_that_does_not_match_is_refused, published_schema_names_every_field_the_engine_writes) | Внешних нет: пакет связывает хеши и оценку журнала приёмника уровня MODELLED, проверенную на синтетических данных (экспортированный NMEA встроенного сценария рассматривается как журнал приёмника). Лабораторный прогон не заявляется | MODELLED |
| VM-77d4bf93 | Движок слежения IQ относительно GNSS-SDR 0.0.19 на независимых записях | Полный движок слежения слоя IQ (iq::track через kshana iq track: передача от захвата, корреляторы, NCO, ФАПЧ Костаса второго порядка 15 Гц, ССЗ DLL с огибающей EML первого порядка 2 Гц с поддержкой по несущей, индикатор захвата и оценщики C/N0) на GPS L1 C/A при 30—45 дБ-Гц. | iq::track (Channel, LoopCore, design); iq::cli::track | tests/iq_track_gnss_sdr_oracle.rs (calibration_passes_for_both_receivers, registered_bars_give_the_recorded_verdict, recorded_numbers_are_pinned), на числах, полученных tests/fixtures/iq_track_gnss_sdr_oracle/make_fixture.py | GNSS-SDR 0.0.19 (GPL-3.0-or-later, пакет Ubuntu 24,04, запускается как отдельная программа; зафиксированы только производные числа), отслеживающий те же записи numpy (независимые от движка), оба измерены относительно аналитической истины. Пороги зарегистрированы заранее в 48edd4a5, изменены до любой тестовой записи в 1e4288c4 (ЧАПЧ 10 Гц только на этапе вхождения в синхронизм в обоих приёмниках, после того как зарегистрированная калибровка не прошла из-за неверной передачи в GNSS-SDR, находка F3). MET при 30, 35, 40 и 45 дБ-Гц: джиттер несущей в пределах 4,3 %, джиттер кода в пределах 4,6 % и среднее и разброс Доплера в пределах значений GNSS-SDR. NOT MET: C/N0 движка по NWPR на 2,3—7,1 дБ ниже SNV GNSS-SDR (находка F4, известный предел NWPR; его M2M4 в пределах 0,06 дБ от истины); индикаторы захвата фазы различаются по определению (F5); при 30 дБ-Гц GNSS-SDR дважды сорвал слежение, а движок нет (F6). Собственная передача GNSS-SDR захватила неверную частоту в 3 из 30 калибровочных прогонов. ЧТО НЕ ПРОВЕРЯЕТСЯ: другие сигналы, снятие битов данных, повторный захват, полевые записи. Строка остаётся MODELLED. | MODELLED |
| VM-46dd95e7 | Коэффициенты усиления антенны CRPA в виде jamming относительно независимого пересчёта на numpy | Необязательный раздел [crpa] вида jamming: диаграмма для каждого канала на каждый спутник (подавление с нулём в направлении источника помех или MVDR по sigma^2 I + P_j a_j a_j^H), масштабирующая шум каждой линии на ||w||^2 и помеху на |w^H a_j|^2 перед существующим уравнением C/N0 при защите от подавления. | jamming (CrpaCfg, crpa_weights, run_jamming); crpa (null_steering_weights, mvdr_weights, covariance) | tests/jamming_crpa.rs (a1_crpa_units_only_with_the_section, a2_one_element_is_no_array, a3_verdict_is_the_recorded_one, a4_mvdr_tends_to_the_null_at_high_jnr), against xval/crpa-jamming/expected.json from xval/crpa-jamming/oracle.py | Независимый пересчёт на numpy (xval/crpa-jamming/oracle.py, без общего кода: векторы наведения numpy, numpy.linalg.solve и inv) каждой линии геометрии jamming-demo с квадратной решёткой из 4 элементов при обоих взвешиваниях. Пороги зарегистрированы заранее в 08d83b4d. MET: A1 (все 150 результатов сценариев побайтово совпадают без раздела, после исправления: первая сборка добавляла единицы crpa в таблицу единиц каждого прогона jamming), A2 (один элемент равен отсутствию решётки до 1e-12 дБ), A3 по шумовому коэффициенту решётки и эффективному C/N0 (912 взвешиваний линий в пределах 1e-9 дБ, наихудшее 2.1e-14 дБ) и по нулю в направлении источника помех при подавлении (ниже -200 дБ с обеих сторон), A4 (MVDR в пределах 0,1 дБ от подавления при JNR 80 дБ). NOT MET: A3 по усилению MVDR в направлении источника помех, 194 из 456 линий выше 1e-9 дБ при переносимой математике 0,36 (202 при математике хоста; docs/revisions/STUDIO15-batch4-rebaseline.md) (наихудшее 1.7e-6 дБ) на остатках от -100 до -188 дБ, где сокращение в float64 ограничивает обе реализации (inv и solve в numpy расходятся между собой на 169 линиях, наихудшее 7.9e-7 дБ); эффективный C/N0, который они питают, не затронут. ЧТО НЕ ПРОВЕРЯЕТСЯ: взаимная связь, рассогласование элементов, широкополосная обработка, несколько источников помех, любое антенное оборудование. Это пересчёт тех же уравнений, а не внешний оракул; строка остаётся MODELLED. | MODELLED |
| VM-40a50c34 | Экранирование источника помех рельефом в виде jamming против независимого пересчёта на numpy на реальном тайле SRTM | Необязательная секция [terrain] вида jamming: профиль рельефа по дуге большого круга между источником помех и приёмником на тайле SRTM .hgt с k-фактором выпуклости Земли, доминирующая острая кромка (наибольшее значение ню Френеля–Кирхгофа) и потеря на одиночной острой кромке по ITU-R P.526-15, раздел 4,1, вычитаемая из мощности источника помех на входе приёмника. | jamming_terrain (TerrainCfg, jammer_terrain, knife_edge_loss_db); jamming (run_jamming_sky) | tests/jamming_terrain.rs (b1_terrain_units_only_with_the_section, b2_every_placement_matches_the_independent_numpy_recomputation, b3_the_loss_never_rises_as_the_jammer_rises, b4_the_loss_reaches_every_js_and_nothing_else, b5_the_knife_edge_function_matches_the_reference_expression), against xval/jamming-terrain/expected.json from xval/jamming-terrain/oracle.py | Независимый пересчёт на numpy (xval/jamming-terrain/oracle.py, без общего кода: собственное чтение .hgt, билинейная интерполяция, круговое преобразование WGS 84, профиль, выпуклость, nu и J(nu)) десяти положений источника помех вокруг приёмника в бассейне Бэдуотер на зафиксированном реальном тайле SRTM tests/fixtures/terrain/N36W117_sub6.hgt. Пороги и положения предварительно зарегистрированы в 92cd2bfd. Все MET: аддитивность (все 150 результатов сценариев побайтно идентичны без этой секции); точки профиля и препятствие для каждого положения совпадают, а nu и потеря укладываются в 1.6e-10 (порог 1e-9); потеря не растёт, пока источник помех поднимается от 2 до 4902 м; потеря уменьшает каждое J/S ровно на свою величину и ни на что другое; J(nu) в пределах 1e-12 дБ от значения оракула. Результаты: положения за горами Блэк и Фьюнерал теряют от 44 до 48 дБ; два положения на дне долины теряют 8 и 15 дБ только из-за выпуклости Земли при высотах антенн 2 м, то есть в предельном случае модели одиночной острой кромки. ЧТО НЕ ПРОВЕРЯЕТСЯ: любое измеренное распространение, дифракция на нескольких кромках, отражение от земли, местные предметы, собственная погрешность цифровой модели рельефа. Это пересчёт той же модели, а не внешний оракул; строка остаётся MODELLED. | MODELLED |
| VM-e6a6348d | Гистерезис захвата и квантователь во входном тракте в виде jamming против независимых пересчётов | Необязательные секции вида jamming: [acquisition] (спутник захватывается при значении не ниже порога захвата после задержки повторного захвата и удерживается, пока значение не ниже порога сопровождения) и [front_end] (показание АРУ 10 log10(1 + J/N) и потеря гауссовского квантователя АЦП, вычитаемые из каждого канала связи, с пометкой, что для негауссовских источников помех они недействительны). | jamming_rx (AcquisitionCfg, AcqState, FrontEndCfg, front_end); jamming (run_jamming_sky); iq::frontend::quant (optimum_step_sigma) | tests/jamming_acq_agc.rs (h1_g1_units_only_with_their_section, h2_no_hysteresis_is_no_hysteresis, h2s_no_hysteresis_is_no_hysteresis_on_the_supplementary_runs, h3_flags_match_the_independent_recomputation, h3s_flags_match_the_independent_recomputation_on_the_supplementary_runs, h4_monotone_in_the_acquisition_threshold, h4s_monotone_in_the_acquisition_threshold_on_the_supplementary_runs, g2_quantiser_loss_matches_the_independent_monte_carlo, g3_agc_reading_matches_the_iq_layer_agc_loop), against xval/jamming-acq-agc/expected_hysteresis.json, expected_hysteresis_s1.json and expected_quantiser.json | Независимый пересчёт на Python каждого флага захвата (xval/jamming-acq-agc/hysteresis.py) по эффективному C/N0 движка на каждую эпоху, независимый метод Монте-Карло на numpy для потери квантователя (xval/jamming-acq-agc/quantiser_mc.py, собственный поиск оптимального шага, 2^22 выборок) и контур АРУ слоя IQ. Пороги предварительно зарегистрированы в 70c72fcc, с дополнительной серией прогонов с начальным значением 37793290. MET: аддитивность (все 150 результатов сценариев побайтно идентичны без этих секций); каждый флаг совпадает на дополнительных прогонах (1824 каналов связи, из них 732 с гистерезисом); монотонность по порогу; потеря квантователя в пределах 0,0007 дБ от результата Монте-Карло при 1–4 битах (порог 0,02 дБ); показание АРУ в пределах 0,012 дБ от контура АРУ (порог 0,05 дБ). NOT MET: зарегистрированные прогоны гистерезиса (jamming-demo при 10–30 дБВт) оказались неинформативными, так как все каналы связи были потеряны, а их H2 и H4 выполнены лишь тривиально. Результат: при CW-источнике помех 1-битный АЦП теряет примерно на 5 дБ больше, чем гауссовская величина, которую применяет движок, и помечается как недействительный. ЧТО НЕ ПРОВЕРЯЕТСЯ: сам поиск захвата, динамика АРУ во времени, любое аппаратное обеспечение приёмника. Это пересчёты той же модели, а не внешний оракул; строка остаётся MODELLED. | MODELLED |
| VM-bdfec2e4 | Ограниченный по времени втягивающий режим ФАП-ЧС ниже порога передачи управления от FLL к PLL в проекте по умолчанию (по выбору) | Необязательный параметр iq::track carrier.fll_pull_in_max_s (поле fll_pull_in_max_s структуры iq::track::LoopConfig): при fll_assist = pull-in FLL передаёт управление PLL через фиксированное время втягивания независимо от PLI, с соответствующим интервалом возврата, пока PLI впервые не достигнет fll_off_pli. | iq::track (LoopConfig, FllGate, design); iq::track::channel (the FLL gate) | tests/iq_fll_handover_floor.rs (registered_bars_give_the_recorded_verdict, d1_the_key_is_part_of_the_hash_only_when_set, d4_the_capped_design_pulls_in_a_100_hz_handoff_error), on tests/fixtures/fll_handover_floor/results.csv | Внутренняя согласованность относительно заданной истины: синтетический источник GPS L1 C/A без данных (PRN 13, 1500 Гц, 4,1 МГц, 8 с, десять начальных значений шума) с известной фазой несущей при порогах, предварительно зарегистрированных в 58789af0 (docs/design/evidence/fll-handover-floor/). MET: контроль (режим по умолчанию без ограничения не передаёт управление в 9 из 10 запусков при 33 дБ-Гц); аддитивность (хеш по умолчанию и существующие тесты сопровождения не изменились); втягивание при передаче управления с отклонением 100 Гц при 45 дБ-Гц. NOT MET: при ограничении 1,0 с передача управления и удержание в каждом прогоне (16 из 20 при 33 дБ-Гц, 8 из 20 при 31 дБ-Гц; остальные циклически переключаются между вынужденными передачами управления и возвратом FLL) и фазовое дрожание в пределах 25 % от PLL без FLL (10,8 против 6,1 градуса при 33 дБ-Гц). ЧТО НЕ ПРОВЕРЯЕТСЯ: биты данных, другие сигналы и частоты дискретизации, полевые записи. Значение по умолчанию не изменено; строка остаётся MODELLED. | MODELLED |
| VM-ad0fc95e | Читатель файлов решений RTKLIB .pos для receiver-trust | Читает файл решений RTKLIB (время в календарном виде или как неделя GPS/TOW, положение в широте и долготе или в ECEF, число используемых спутников) в временну́ю шкалу receiver-trust (receiver_trust::machines::rtklib). | receiver_trust::machines::rtklib (read_rtklib_pos); receiver_trust::LogFormat::RtklibPos | receiver_trust::machines::rtklib::tests (lat/lon epochs, week/TOW and ECEF, dms refused, hostile input); tests/receiver_trust_machines.rs::rtklib_pos_runs_as_a_receiver_log; integrations/gnss_lib_py/test_bridge.py | Внешних нет: файл, созданный RTKLIB, не читался, а расположение столбцов взято из руководства RTKLIB. Проверено только на самостоятельно написанных файлах; преобразование ECEF повторно использует frames::ecef_to_geodetic, у которого есть собственные строки | MODELLED |
| VM-df5ac582 | Журналы NovAtel OEM7 в ASCII и двоичном виде (BESTPOS, RANGE, RXSTATUS) для receiver-trust | Читает BESTPOS (положение), RANGE (C/No по сигналам) и RXSTATUS (флаг подавления приёмника как собственное сообщение приёмника об эпохе) из журналов OEM7 в ASCII и двоичном виде, с проверкой CRC, только для чтения (receiver_trust::machines::novatel). | receiver_trust::machines::novatel (read_novatel, novatel_crc32); receiver_trust::LogFormat::Novatel | receiver_trust::machines::novatel::tests (pinned CRC, ASCII and binary records, bad CRC skipped, hostile input); tests/receiver_trust_machines.rs::novatel_jammer_flag_reaches_the_receiver_self_report | Внешних нет в качестве порога соответствия. Расположение полей и CRC соответствуют общедоступной документации OEM7 (docs.novatel.com); процедура CRC один раз проверена по значению CRC, которое документация указывает для собственного примера BESTPOSA (процитировано, не приведено дословно). Тестовые данные написаны самостоятельно; журнал реального приёмника не читался | MODELLED |
| VM-50b52977 | Читатель отношения несущая/шум RTCM 3 MSM4 и MSM7 для receiver-trust | Читает C/N0 каждой сигнальной ячейки сообщений RTCM 3 MSM4 и MSM7 (GPS, ГЛОНАСС, Galileo, SBAS, QZSS, BeiDou, NavIC) из потока кадров, с проверкой CRC-24Q (receiver_trust::machines::rtcm3). Структуры взяты из таблиц pyrtcm под лицензией BSD, а не из текста стандарта RTCM. | receiver_trust::machines::rtcm3 (read_rtcm3, crc24q); receiver_trust::LogFormat::Rtcm3 | receiver_trust::machines::rtcm3::tests (CRC-24Q catalogue check value, MSM4/MSM7 C/N0 and epoch merging, GLONASS time and SBAS id mapping, bad CRC and other messages) | Эталонная реализация в разовой проверке, а не тест в наборе: декодер pyrtcm 1.2.0 читает те же самостоятельно написанные кадры и получает те же C/N0 и время эпохи. Он разделяет источник таблиц с этим читателем, поэтому проверяет обработку битов, а не структуру. Запись реального приёмника или базовой станции не читалась | MODELLED |
| VM-f1f9f73e | Адаптер монитора GNSS-SDR для receiver-trust | Читает сообщения GNSS-SDR Monitor (Gnss_Synchro) и PVT-monitor, переданные в виде строк JSON с именами полей proto, в C/N0 по каналам, решение, число используемых спутников, HDOP и обзор неба (receiver_trust::machines::gnss_sdr; integrations/gnss-sdr/relay.py). | receiver_trust::machines::gnss_sdr (read_gnss_sdr_monitor); receiver_trust::LogFormat::GnssSdr | receiver_trust::machines::gnss_sdr::tests; integrations/gnss-sdr/example.jsonl | Внешних нет: имена полей взяты из документации GNSS-SDR; ни читатель, ни relay.py не запускались ни на работающем GNSS-SDR, ни на реальной записи | MODELLED |
| VM-e757b2ba | Приём журналов IMU, ввод курса по гироскопу и подбор по Аллану параметров гибридных датчиков | Читает CSV IMU (документированные столбцы или формат EuRoC); интегрирует скорость рыскания в курс, который читает монитор курса и пути ([log.imu]); и подбирает параметры шума акселерометра и гироскопа для гибридных сценариев и сценариев объединения по неподвижному журналу методом перекрывающейся девиации Аллана (imu-fit). | receiver_trust::machines::imu, imu_fit; surface::imu_fit; scenario [log.imu] | receiver_trust::machines::imu::tests; receiver_trust::machines::imu_fit::tests (known white-noise coefficients recovered within 10 %, refusals, TOML parses as AccelCfg); tests/receiver_trust_machines.rs (heading agreement and disagreement, inline carrier, imu_fit) | Внешних нет: подбор проверен на синтетических журналах белого шума с известными коэффициентами, курс — на журналах с постоянной скоростью рыскания. Реальный журнал IMU не подбирался, а q_aa не подбирается | MODELLED |
| VM-64d822df | Обнаружение Home Assistant по MQTT и экспортёр состояния для телеметрии доверия | Документ состояния в JSON и сообщения обнаружения Home Assistant по MQTT для потока доверия: выводятся как текст на каждой поверхности и публикуются по MQTT 3.1.1 QoS 0 из командной строки (telemetry::mqtt; trust-telemetry --mqtt-tcp, --print-mqtt, format mqtt). | telemetry::mqtt (discovery, state_json, connect_packet, publish_packet, MqttSink); surface::TelemetryFormat::Mqtt | telemetry::mqtt::tests (packet bytes, loopback broker, dead broker counted); tests/receiver_trust_machines.rs::trust_telemetry_mqtt_text_has_discovery_then_state | Внешних нет: пакеты читал локальный приёмник на петле, написанный для теста, а не настоящий брокер, и Home Assistant не запускался | MODELLED |
| VM-c9180fdd | Пакет ROS 2 для receiver-trust и мост gnss_lib_py | Мост без ROS, который записывает сообщения о решении и спутниках как NMEA и оценивает их через привязку Python (integrations/ros2/kshana_trust), и мост от NavData gnss_lib_py к receiver-trust через формат rtklib-pos (integrations/gnss_lib_py). | integrations/ros2/kshana_trust (bridge.py, trust_node.py); integrations/gnss_lib_py/kshana_gnss_lib_py.py | tests/receiver_trust_machines.rs (rtklib_pos_runs_as_a_receiver_log: the format the gnss_lib_py bridge writes, run through receiver-trust); the Python tests of the bridges are integrations/ros2/kshana_trust/test/test_bridge.py (bridge with a mock engine), integrations/ros2/kshana_trust/test/test_engine_integration.py (the real wheel scores a steady fix nominal and a 1,1 km jump untrusted) and integrations/gnss_lib_py/test_bridge.py (real gnss_lib_py 1.1.0 and the wheel), run with pytest, not by cargo | Внешних нет: узел ROS не запускался в работающем графе ROS 2, а имена полей ublox_ubx_msgs не сверялись с работающим драйвером. gnss_lib_py (MIT) запускался для теста моста | MODELLED |
401 строк: 176 проверено внешне, 221 смоделировано, 4 принадлежат партнёру.