Журнал: 3D-модели и конфиги крыльев по ТЗ

Координатор: dp-coordinator. Рабочая копия ~/deltaplan-wings3d, ветка wings/models3d (от main 5df933e). В main не вливается — отчёт главной сессии. План — docs/archive/plan/wings-models3d.md, контракты — docs/contracts/wings-models3d.md.

ЗадачаСтатусИсполнительКопия / веткаКоммиты, числа, решения
Контракты К1–К4 + контрактный тестсделано (2026-10-01)координатор~/deltaplan-wings3dtests/game/test_wing_models_contract.gd: на main 2 падения, ожидаемые (training площадь 15,32 против 15,80 м², −3 %; sport lower_cover 0,70 при 92 % двойной) — чинит W3-01
W3-01 существующие крылья по E1–E9принята (2026-10-01), влита 50794f3, копия удаленаdp-engineer (Opus)wings3d/w3-01bd54c0a, 811b8dd. training tip 0,90→1,00 (площадь 15,32→15,81 м²); sport латы 14→11, нос 132→128°, nose_forward 1,35, lower_cover 0,70→0,88; combat латы 16→12; laminar 13→9. Все 9 — площадь ±0,6 %. Треугольники: training 13 112, sport 13 268, combat 13 844, laminar 12 560 (≤ 14 000). check_models — крылья из configs/wings, добавлен бюджет на крыло. Тесты крыльев и контрактный — 0 падений (перепроверено). Кадры — build/screenshots/w3-01/
W3-02 шаблон новой модели (К3, К4), проба N1/N24принята (2026-10-01), влита b62b500, копия удаленаdp-engineer (Opus)wings3d/w3-02b9bef60, 2ad95ea, 82259ed, c96096e; после слияния координатор перегенерировал ТЗ/спецификацию на новых базах W3-01 и пересобрал N1 — 3cef695. make_3d_tz.py → out/wings3d_spec.json (39 крыльев, сверка с «Что задать» OK, --check); make_new_wings.py <id…>/--existing/--all — запись формы, конфиг (К4), ui.csv, идемпотентно; правки вида — wings3d_overrides/<id>.json. N1 icaro_piuma: f 0,996, сваливание 23,9, трим 30,9, L/D 9 (= training), площадь 16,00/16,04, 12 728 треуг.; N24 ww_t2c: f 1,034, сваливание 27,9, трим 37,2, L/D 15 (= sport), 13,39/13,40, 13 268 треуг. DHV Vmin выше сваливания поляры у всех 22 крыльев с данными на 5–30 % (N1 −24 %, N24 −13 %) — на шлюз. Меню: самая длинная группа kingpost — 18 крыльев, 1280×720 прокручивается штатно, правок не нужно. Тесты test_wing_picker/test_wing_catalog — без жёстких списков. Перепроверено: check_models OK, 11 наборов тестов крыльев и test_ui — 0 падений. Кадры — build/screenshots/w3-02/
W3-DHV благодарность DHV на «Об игре» (игра, сайт) — просьба пользователяпринята (2026-10-01), влита fe06857, копия удаленаdp-writer (Sonnet)wings3d/w3-dhvb82b3a9: ключ about_thanks_dhv (ru/en) под about_intro в about_screen.gd; на сайте страницы «Об игре» нет — раздел «Благодарности» на главной site/content/_index.md со ссылкой dhv.de; ui_shot --only=about (общий ui_shot в копии падал «фон за меню не загрузился» — не разбиралось). test_ui 6/0 (перепроверено). Кадры — build/screenshots/w3-dhv/
W3-03 новые P1, пачка А: N2, N3, N4, N10–N15 (+ строки docs/guide/models.md N1, N24)принята (2026-10-01), влита f59bed7, копия удаленаdp-engineer (Opus)wings3d/w3-038f919e4, 53d7379. 9 крыльев, площадь ±0,3 %, 12 128–13 472 треуг.; новое необязательное поле К1 top_wires (MastR); test_polar: класс качества MastR — topless. Конфликты glider_params/ui.csv сняты make_new_wings.py --existing (записи совпали с обеими ветками), docs/guide/models.md объединён. После слияния: 27 крыльев, check_models OK, 11 наборов тестов — 0 падений (перепроверено). Кадры — build/screenshots/w3-03/
W3-04 новые P1, пачка Б: N20, N25, N26, N28, N29, N31, N32принята (2026-10-01), влита (слияние после 0a test_polar), копия удаленаdp-engineer (Sonnet)wings3d/w3-04cb8a056. 7 крыльев, площадь ±0,2 %, 11 696–13 844 треуг.; overrides: Z9 short_battens, Fizz без luff-линий; reference.min_sink_speed_kmh Combat C/Z9 — замер sweep. Перепроверено: check_models OK, 11 наборов — 0 падений. Кадры — build/screenshots/w3-04/
W3-05 новые P2, пачка В: N5–N9, N16–N19принята (2026-10-01), влита 3591c05, копия удаленаdp-engineer (Sonnet)wings3d/w3-05b3b22e0. 9 крыльев, площадь ±0,2 %, 11 840–13 844 треуг.; правок вида нет (заметки не выражаются полями К1). Конфликты сняты --existing (записи совпали с обеими ветками). После слияния: 36 крыльев, check_models OK, 11 наборов — 0 падений (перепроверено). Кадры — build/screenshots/w3-05/ (в склейке у подписей срезана первая буква — косметика, не переделывалось)
W3-06 новые P2, пачка Г: N21–N23, N27, N30, N33–N39принята (2026-10-01), влита ca1ab89dp-engineer (Sonnet)wings3d/w3-06506ad01, 669b9c9, 2b783d8. 12 крыльев, площадь ±0,3 %, 11 840–13 844 треуг.; override: REV faired_uprights, reference.min_sink_speed_kmh REV — замер. После слияния: 48 крыльев, check_models OK, контрактный и 16 наборов тестов, перебирающих крылья, — 0 новых падений (test_takeoff atlas падает и на чистом main 5df933e — не регрессия; test_wing_clearance — см. развилку). Кадры — build/screenshots/w3-06/

Решения координатора:

  • Шаблон модели уже есть (build_gliders.py + glider_params.json); «шаблон» волны 1 = машиночитаемая спецификация из ТЗ + применяющий скрипт (W3-02).
  • Поляра новых крыльев — подобием от базы класса по нагрузке на крыло (К4): L/D не придумываем, DHV Vmin — проверка, не подгонка. Выносится на шлюз 1.
  • sport.lower_cover 0,70 → ≈0,9: общее правило ТЗ (lower_cover = доля двойной/100 ± 0,1) при паспортных 92 % (в разделе E3 не было отдельной строкой).
  • К3 → v2 по предложениям W3-02 (manual, размах/площадь только в config, dhv только из DHV, wings3d_overrides/).
  • Группа меню — по конструкции (смысл групп: «Мачтовые двухобшивочные» / «Безмачтовые»), а не по tz_curated: N19 seed_spyder (безмачтовое по цитате, база sport) → topless; N28 moyes_litesport (мачтовое по цитате, база laminar) → kingpost. Правится в tz_curated.py задачей волны.
  • N15 Icaro MastR — по цитате небольшой кингпост: kingpost: true, группа kingpost, kingpost_m — оценка (≈ половина базы, помечено в _doc), остальная форма от combat; инвариант К1 соблюдается.
  • После W3-01 базы training изменились (хорда конца 1,00): все крылья на базе training берут новое отношение хорд — ТЗ перегенерировано (3cef695), разделы E1, E3, E4 теперь «правок нет»/«сейчас = стало».

Шлюз 1 (2026-10-01) — решён

Волна 1 закрыта. Вопрос: как обходиться с DHV Vmin, который выше сваливания поляры на 5–30 % у всех 22 новых крыльев с данными (варианты: А — оставить подобие по нагрузке, расхождение только в _doc, порог сравнивать относительно базы; Б — тянуть сваливание к DHV Vmin; В — отдельное исследование определения Vmin DHV). Рекомендация координатора — А. Как продолжить: после ответа — волна 2 (W3-03, W3-04 — новые P1), план docs/archive/plan/wings-models3d.md.

Решения пользователя по шлюзу 1: поляры — вариант А (К4 v2: расхождение с DHV Vmin в _doc относительно базы, без порога); решения координатора по N15/N19/N28 и К3 v2 приняты; волны 2 и 3 — без шлюза между ними, отчёт после волны 3; docs/guide/models.md для N1/N24 — в волне 2.

  • К4 v2 внесено координатором в make_new_wings.py (DHV-аналоги баз: combat — Combat GT 12.7, laminar — Orbiter 14, target — Fox 13); у самих баз расхождение −10 / −21 / −11 % — DHV Vmin систематически выше сваливания поляр, что подтверждает вариант А. N1/N24 перегенерированы (меняется только _doc).
  • Перед волной 2 координатор внёс в tz_curated.py группы по конструкции (N19 → topless, N28 → kingpost, N15 → kingpost) и base_force для N15 MastR: вид — с мачтой, физика — от combat (по цитате «по сути Laminar с кингпостом», соревновательный DHV 3); 6b4c6d2.

Уточнение пользователя к волнам 2–3 (2026-10-01): задача — добавить много крыльев; полную корректность правим по отзывам игроков. На развилках не останавливаться: координатор принимает своё рекомендованное решение и пишет его ниже одной строкой «развилка → решение → почему». Раньше времени возвращаться только при настоящей блокировке (сборка/тесты не чинятся, данных нет совсем).

Развилки волн 2–3 (решения координатора)

  • N15 MastR: тип и база → мачтовое (вид), физика от combat (base_force) → по цитате «по сути Laminar с кингпостом», DHV 3; поляра мачтового класса занизила бы качество.
  • Порядок волн: волна 3 запущена сразу вместе с волной 2 → 4 пачки параллельно (предел ~4) → после уточнения пользователя шлюза между волнами нет, а конфликты общих файлов (glider_params.json, ui.csv, docs/guide/models.md) снимаются механически (make_new_wings.py --existing); экономит время.
  • test_polar «сходимость к steady_glide» у Combat C на трапеции −0,8: 2,749 против 2,769 (0,0203 > 0,02) → допуск maxf(0,02 м/с; 1 % снижения) → абсолютный допуск не масштабируется со снижением; у тяжёлых быстрых крыльев та же относительная точность установления (это проверка численной сходимости, не физики).
  • reference.min_sink_speed_kmh после подобия выходит за 3 км/ч (плоское плато поляры combat: Combat C, Laminar Z9) → замер sweep через override config.reference с пометкой в _doc, поляра не меняется → на плоском плато положение минимума неустойчиво к округлению точек; сама поляра — по К4.
  • MastR в группе kingpost при качестве базы combat 16 против коридора класса 10,5–13 в test_wing_classes_glide → в тесте класс качества MastR сверяется с topless (GLIDE_CLASS_OVERRIDE) → группа меню — по виду (мачта, решение пользователя), а физика — по базе combat (К4); тест проверяет физику.
  • N14 Alto: лат 9 (DHV «Anzahl Latten 18», вероятно с нижними) или 8 на сторону → 8 (override) → Icaro: «Eight battens per wing», «16 + 4» верхних+нижних.
  • N15 MastR: высота мачты → 0,6 м (оценка, ≈ половина мачт баз 1,15–1,25), без верхних тросов (новое необязательное поле К1 top_wires), luff-линии 0,4/0,7 как у laminar → чисел и фото нет; по цитате «небольшой кингпост, без верхних тросов».
  • Пачки В/Г без правок вида, где «Заметки по виду» не выражаются полями К1 → override-файл только с _doc → видно, что раздел просмотрен; новых полей К1 ради мелочей не вводим (точность «с 3 м»).
  • test_wing_clearance: крен 0,58° (fs_crossover) и 0,69° (ww_cross_country) на косом склоне 15° на разбеге с A при допуске 0,5° → допуск 1° только для косого склона, на ровном и склоне вниз — 0,5° → рука пилота держит крыло с пределом силы, у крупных тяжёлых крыльев остаётся доля градуса — незаметно; смысл SF-3 «A/D не кренят крыло» сохранён.
  • test_takeoff::test_headwind_launch (atlas, срыв nose_high при встречном 4 м/с) → не трогаем → падает так же на чистом main 5df933e (проверено 2× без нагрузки), atlas в ветке не менялся; вынесено в открытые вопросы.
  • N14 Alto латы — спецификация (9) не правилась, исправлено override (8) → правка make_3d_tz.py ради одного крыла не нужна; в открытых вопросах.

Итог

Влито в main 3cc039e (2026-10-01; wings/models3d 2c05d61 — перемоткой, следом feature/air-model). Полный прогон тестов на main ведёт главная сессия. Последний полный прогон ветки до вливания: 631 тест, 6 упало — test_takeoff::test_headwind_launch (есть и на чистом main), test_matrix (aushkul × training/laminar × strong × в лоб: «взлёт не провален»), test_surface (время загрузки 0,54 > 0,5 с, под нагрузкой), test_menu_setup (экран загрузки), test_net_screen ×2 (порт занят); сравнение этих тестов с чистым main не завершено — остановлено по команде.