Forge
markdowndeeb25a2
1# P/F/M Zone Geometry — Wave 1
2
3Статус: done.
4
5## Цель
6
7Стабилизировать геометрию зон `PFD | Forward | MFD` как прямую функцию строки `presentation`, чтобы текущий контур рендера опирался на единый детерминированный расчёт.
8
9## Что сделано
10
111. Введён единый слой нормализации долей:
12 - `Services/Presentation/PresentationZoneWeights.cs`
13 - нормализует веса в группе экрана;
14 - детерминирует сумму до `1.0`.
152. Введён DTO кадра геометрии:
16 - `Services/Presentation/PresentationMainGridLayoutFrame.cs`
17 - `Services/Presentation/PresentationMainGridLayoutFrameBuilder.cs`
183. `PresentationMainGridColumnDefinitions` переведён на централизованный расчёт через `PresentationMainGridLayoutFrameBuilder`.
194. Применение колонок `MainGrid` остаётся централизованным через `ApplyMainGridColumnDefinitions` в `MainWindow.PresentationLayout.axaml.cs` (строка из VM).
205. Добавлены базовые тесты:
21 - `CascadeIDE.Tests/PresentationZoneWeightsTests.cs`.
22 - `CascadeIDE.Tests/PresentationMainGridLayoutFrameBuilderTests.cs`.
236. Добавлен 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
View only · write via MCP/CIDE