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 закрыты/работают).

Шаги

  1. Вынести из автопилота общую логику «целевой нос по ветру» в маленький класс (scripts/game/launch_nose.gd, RefCounted), автопилот может остаться как есть — не дублировать сложно, но и не ломать F01.
  2. InputController: на земле в разбеге автоматический нос = LaunchNose (цель α ≈ 18° при ветре ≥ 3,5 м/с, иначе прежний нейтральный), ↑/↓ — подстройка поверх; ошибки «нос высоко/низко» по-прежнему возможны, если игрок перестарался стрелками.
  3. Параметры — configs/controls.json → ground (с _doc).

Критерий приёмки

  • Тест: «игрок» (синтетический ввод: только W+Shift, без стрелок) на всех 4 локациях × 3 крыла × weak/medium/strong, 10 сидов часов атмосферы — 0 срывов.
  • Тест: стрелка «нос вверх» до упора в сильный ветер → срыв nose_high (ошибка остаётся возможной).
  • Тесты game, flight, stability зелёные; lint чисто.

Модель: opus. Размер: S.