G06. «Нос держится сам» на разбеге учитывает ветер
Цель: игрок, бегущий на W+Shift без подстройки носа, взлетает в любую погоду так же надёжно, как автопилот (F01): автоматический нос держит угол атаки, а не фиксированный угол тангажа.
Контекст: docs/guide/flight.md → «Старт в сильный ветер (F01)»; scripts/game/autopilot.gd (как автопилот оценивает ветер и держит α≈18°); scripts/game/input_controller.gd (ground.run_nose_neutral + подстройка ↑/↓ — фиксированный угол ~23°, в сильный ветер близко к срыву 24°); configs/controls.json → ground; REQUIREMENTS FR-30.
Папки-владения: scripts/game/input_controller.gd, configs/controls.json → ground, tests/game/test_input_launch.gd (новый). game.gd и autopilot.gd не трогать (G05 и F01 закрыты/работают).
Шаги
- Вынести из автопилота общую логику «целевой нос по ветру» в маленький класс (scripts/game/launch_nose.gd, RefCounted), автопилот может остаться как есть — не дублировать сложно, но и не ломать F01.
- InputController: на земле в разбеге автоматический нос = LaunchNose (цель α ≈ 18° при ветре ≥ 3,5 м/с, иначе прежний нейтральный), ↑/↓ — подстройка поверх; ошибки «нос высоко/низко» по-прежнему возможны, если игрок перестарался стрелками.
- Параметры — configs/controls.json → ground (с
_doc).
Критерий приёмки
- Тест: «игрок» (синтетический ввод: только W+Shift, без стрелок) на всех 4 локациях × 3 крыла × weak/medium/strong, 10 сидов часов атмосферы — 0 срывов.
- Тест: стрелка «нос вверх» до упора в сильный ветер → срыв
nose_high(ошибка остаётся возможной). - Тесты game, flight, stability зелёные; lint чисто.
Модель: opus. Размер: S.