F01. Срывы взлёта в сильный день
Цель: понять и устранить срывы взлёта в сильный день при встречном ветре на старте: реальная ошибка физики/автопилота или ожидаемое поведение (тогда — понятная причина игроку и корректный тест).
Контекст: отчёт матрицы стабильности (tests/stability/): altai × kingpost × strong × into_site — takeoff_failed стабильно; aushkul × sport × strong и ongudai × sport × strong — нестабильно (флейки). docs/guide/flight.md (разбег, срывы: nose_high/nose_low/tailwind/crosswind/weak_run, «сильный ветер ≥ 8 м/с отрывает стоящего пилота — нужно опускать нос»), scripts/flight/flight_model.gd:390–394, scripts/flight/ground_run.gd, scripts/game/autopilot.gd, configs/weather/strong.json, configs/pilot.json → run. Папки-владения: scripts/flight/ (ground_run.gd, flight_model.gd — только разбег), scripts/game/autopilot.gd, configs/pilot.json → run, configs/flight.json → takeoff, tests/flight/.
Шаги
- Воспроизвести три случая детерминированно (сид, ветер, старт), вывести причину срыва и трассу разбега (скорость, угол носа, ветер у земли, порывы).
- Флейки: найти источник недетерминизма (порывы от времени/рандома без сида?) — сделать детерминированным при одинаковом сиде.
- Решить по физике: если пилот с правильной техникой (нос чуть ниже в сильный ветер, по docs/guide/flight.md) должен взлетать — поправить автопилот (он играет роль «правильного пилота») и/или модель разбега; если по реальности такой старт срывается (порыв сбоку/сзади) — дать понятную причину в итоге полёта и пометить сочетание в матрице как ожидаемое.
- Тест: три сочетания из матрицы с правильной техникой взлетают 5/5 сидов.
Критерий приёмки
godot --headless --path . res://tests/run_tests.tscn -- --filter=stability— 36/36 два прогона подряд.- Новые тесты в tests/flight/ — зелёные; все тесты flight и game зелёные; lint чисто.
- В отчёте: причина каждого случая одной строкой.
Модель: opus. Размер: S–M.