03. Калибровка пресетов по проходимости маршрута + регрессионный тест
Цель: подогнать configs/weather/* и configs/atmosphere.json так, чтобы в средний и сильный день маршрут
проходился на всех 4 локациях, а статистика попадала в коридоры реальных XC (02); закрепить тестом.
Контекст: отчёт 02 (docs/guide/atmosphere.md, docs/research/xc_reference.md), configs/weather/{weak,medium,strong}.json,
configs/atmosphere.json, scripts/atmosphere/thermal_field.gd, tools/atmosphere/xc_matrix.sh.
Владения: configs/weather/{weak,medium,strong}.json, configs/atmosphere.json (секции thermal/turbulence),
scripts/atmosphere/thermal_field.gd (только если параметром не решить), tests/atmosphere/test_xc_regression.gd.
Веса поверхности world.json → surface.thermal — группа 4: если нужны правки — карточка там, не править.
Шаги:
- По отчёту 02 выбрать рычаги:
thermal_spacing_m,thermal_duty,thermal_strength_ms,thermal_radius_m,background_sink_ms,source_frequency_exponent,cloudbase_agl_m,dry_thermal_fraction. Менять по одному, прогонять подматрицу (1 локация, 3 сида), затем полную. - Не ломать требования: ядро 0,5–5 м/с (FR-11), фон ≈ −0,5 (FR-15), слабый день остаётся трудным, +8 редкость (04).
test_xc_regression.gd(фильтрxc, не в общем быстром прогоне): 2 локации × medium/strong × 3 сида × 20 км.- Записать итоговые числа и причину каждой правки в docs/guide/atmosphere.md (раздел из 02).
Критерий приёмки:
- medium и strong: на каждой из 4 локаций ≥ 4 из 5 сидов проходят 40 км без посадки (без
--clouds; с--clouds— маршрутная скорость выше на ≥ 10 %: облака полезны, как в жизни). - weak: проходят ≤ 2 из 5 (слабый день — вызов, не прогулка).
- ≥ 4 из 6 метрик 02 в коридоре эталона для medium и strong (медиана по сидам); остальные — с объяснением.
- Все прежние тесты
--filter=atmosphereзелёные; тест 04 зелёный.
Зависимости: 02; после 04 (04 правит физику, 03 — числа последним). Модель: opus. Размер: M.
Входные данные от A07 (координатор, обязательно учесть)
- «Идеальный пилот» (xc_run –ideal): набор в кружении weak −0,45, medium +0,08, strong +1,15 м/с; набор ≈ подъём у пилота − 1,2 м/с. Средний день должен давать ≥ +1 м/с → подъём у оси на рабочих высотах ≈ 2,3–2,5 м/с. Предложение: medium.thermal_strength_ms ≈ [2,0; 4,0] (было [1,0; 3,5]), weak ≈ [1,2; 2,5]. Сверить с эталонами docs/research/xc_reference.md (средний набор 1–2 м/с в средний день).
- Ветер: столб термика наклоняется, но основание стоит на месте (сносится только на распаде) → пилот вылетает из ядра со скоростью ≈ u·(1 − c/w). В реальности термик (пузырь/колонна) дрейфует с ветром целиком — сносить ветром весь термик (с учётом отрыва от источника), проверить подсос/облака/тени на согласованность (VR-0).
- Поиск: на реальных локациях со старта ~300 м AGL бот почти не попадает в ядра (подъём у пилота в кружении ≈ 0). Проверить плотность/расположение термиков у стартов и триггеров (гребни, скалы, опушки) — пилоты в жизни уходят в термик у склона почти сразу после старта. Бот ищет по вариометру + (опционально) облакам.
- Критерий карточки остаётся: средний/сильный день ≥ 4/5 сидов проходят 40 км на каждой локации, слабый ≤ 2/5, ≥ 4 из 6 метрик в коридоре эталонов, регрессионный тест. Слова пилота (tests/atmosphere/test_pilot_words.gd) должны остаться зелёными.