| 1 | # P/F/M Zone Geometry — Wave 1 |
| 2 | |
| 3 | Статус: done. |
| 4 | |
| 5 | ## Цель |
| 6 | |
| 7 | Стабилизировать геометрию зон `PFD | Forward | MFD` как прямую функцию строки `presentation`, чтобы текущий контур рендера опирался на единый детерминированный расчёт. |
| 8 | |
| 9 | ## Что сделано |
| 10 | |
| 11 | 1. Введён единый слой нормализации долей: |
| 12 | - `Services/Presentation/PresentationZoneWeights.cs` |
| 13 | - нормализует веса в группе экрана; |
| 14 | - детерминирует сумму до `1.0`. |
| 15 | 2. Введён DTO кадра геометрии: |
| 16 | - `Services/Presentation/PresentationMainGridLayoutFrame.cs` |
| 17 | - `Services/Presentation/PresentationMainGridLayoutFrameBuilder.cs` |
| 18 | 3. `PresentationMainGridColumnDefinitions` переведён на централизованный расчёт через `PresentationMainGridLayoutFrameBuilder`. |
| 19 | 4. Применение колонок `MainGrid` остаётся централизованным через `ApplyMainGridColumnDefinitions` в `MainWindow.PresentationLayout.axaml.cs` (строка из VM). |
| 20 | 5. Добавлены базовые тесты: |
| 21 | - `CascadeIDE.Tests/PresentationZoneWeightsTests.cs`. |
| 22 | - `CascadeIDE.Tests/PresentationMainGridLayoutFrameBuilderTests.cs`. |
| 23 | 6. Добавлен debug-only snapshot log геометрии: |
| 24 | - `Views/MainWindow.PresentationLayout.axaml.cs` (`[MainGridGeometry] ...` в `Debug.WriteLine`); |
| 25 | - лог включает `presentation`, строку колонок, число зон и нормализованные веса; |
| 26 | - лог пишется только при изменении сигнатуры кадра (без спама повторов). |
| 27 | |
| 28 | ## Правила v1 |
| 29 | |
| 30 | - Если в группе экрана указаны коэффициенты, геометрия строится по ним (после нормализации). |
| 31 | - Если коэффициенты не указаны, сохраняется исторический `Default` для `MainGrid` (без изменения поведения текущих пресетов). |
| 32 | - Смешение якорей с коэффициентами и без коэффициентов в одной группе не допускается. |
| 33 | |
| 34 | ## Решение по rollout |
| 35 | |
| 36 | - Для Wave 1 dual-path/feature-flag не вводится. |
| 37 | - Причина: внутренний контур с одним потребителем; приоритет — скорость поставки и упрощение. |
| 38 | - Контроль качества: debug-only geometry snapshot log + ручная визуальная валидация пресетов. |
| 39 | |
| 40 | ## Продолжение |
| 41 | |
| 42 | - Следующий этап закрыт отдельным документом: `docs/architecture/pfm-zone-geometry-wave2.md`. |
| 43 | |
| 44 | ## Визуальная валидация |
| 45 | |
| 46 | - Preset `presentation = "(0.5P+0.5F)(M)"` подтверждён вручную в debug-сборке: на главном экране зона `P` и `F` визуально 50/50, `M` вынесена в отдельный экран. |
| 47 | |