using Rugrid.Sdaid.Notation.Documents;
namespace Rugrid.Sdaid.Epas.Nts.ChangeRequests
{
/// <summary>
/// Статичный wireframe реестра и карточки модификаций ТС — витрина структуры экрана,
/// без генератора, без реального сохранения, без общего пути сохранения с окном подбора.
/// Сознательно урезанный объём по сравнению с тем, что заявлено «не реализовано» в CR
/// `DOC_CR_2026_11_02_VehicleMarkAlias`.
/// </summary>
public class DOC_CR_2026_11_03_ModificationStaticWireframe : IChangeRequestDocument, IHasStructuralLinks, IFolder<NtsChangeRequestsFolder>
{
public SdaidLink[] Links => new[]
{
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleModificationRegistry>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleModificationCard>(),
Rel.Uses<DOC_CR_2026_11_02_VehicleMarkAlias>(),
};
public static string _refName = "CR 2026-11-03: статичный wireframe реестра и карточки модификаций ТС";
public string Name => "Статичный wireframe реестра и карточки модификаций ТС";
public string Description =>
@"Добавлен статичный (не генератором, без реального сохранения) wireframe для DOC_VehicleModificationRegistry и DOC_VehicleModificationCard — только структура экрана, намеренно без привязки к типовому механизму генератора и без общего пути сохранения с окном подбора модификаций. Явно сознательно урезанный объём, обсуждался с пользователем.";
public string Version => "0.1";
public string Status => "done";
public string[] Comments => new string[0];
public static string Source = $"""
## Источник (как есть)
{SdaidAnchors.RefTo<DOC_CR_2026_11_02_VehicleMarkAlias>()} (раздел «Итог») прямо
зафиксировал: «реестр и карточка модификаций ТС не реализованы в прототипе...
путь «справочник → карточка» для модификаций остаётся без макета. Отдельная задача.»
При разборе справочника модификаций в этой же сессии пользователь попросил показать
реестр и карточку в прототипе. Полная реализация (генератор + типовой реестр +
общая функция сохранения, переиспользуемая окном подбора) была оценена как отдельная,
более крупная задача — три самостоятельных технических решения, не точечная правка.
Пользователь выбрал: только статичный wireframe, в стиле уже существующего
`vehicle-mark-aliases` (без генератора, без реального сохранения) — показать структуру
экрана, явно не закрывая ни одну из трёх проблем.
""";
public static string Analysis = $"""
## Разбор
1. **Обе страницы — ручная статика**, не продукт генератора
(`tools/gen-prototype.py`): это осознанное отступление от общего правила «страницы
прототипа — производный артефакт»
({SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleModificationCard>()}/
{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleModificationRegistry>()} формально имеют таблицы
«Описание полей»/«Описание колонок», пригодные для генерации, но страницы написаны
руками — тот же приём, что уже применён для общих справочников
({SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsReferenceRecords>()}).
2. **Сохранение не реализовано.** Кнопки «Сохранить»/«Создать»/«Импорт» — без
обработчиков или ведут на статичную карточку; явный предупреждающий текст прямо на
странице карточки объясняет, что общий путь сохранения с окном подбора
({SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_ModificationSelectionModal>()})
не реализован — чтобы макет не читался как рабочая функциональность.
3. **Что это меняет в формулировке предыдущего CR.** Утверждение
{SdaidAnchors.RefTo<DOC_CR_2026_11_02_VehicleMarkAlias>()} «остаётся без макета»
больше не точно — макет появился, просто не тот (без генератора/сохранения),
который там подразумевался. Это не отменяет решение того CR (по-прежнему нет
типового реестра/общего пути сохранения) — уточняет, что именно сделано сверх него.
""";
public static string BlastRadius = """
## Blast radius
### Спецификация
| Документ | Правка |
|---|---|
| `Nts/65_Ui/VehicleModificationRegistry.cs` | добавлен раздел «Макет» (`Wireframe`, `SdaidHtml.IframeOf`/`LinkTo`) |
| `Nts/65_Ui/VehicleModificationCard.cs` | добавлен раздел «Макет» (`Wireframe`) |
| `Nts/65_Ui/html/references.html` | пункт «Марки, модели и модификации ТС» — ссылка вместо текста «макет не включён» |
### Прототип
| Файл | Правка |
|---|---|
| `Nts/65_Ui/html/vehicle-modification-registry.html` | новый: статичная таблица, 3 демо-строки, «Создать»/«Импорт» без сохранения |
| `Nts/65_Ui/html/vehicle-modification-card.html` | новый: статичная форма по составу полей спеки, «Сохранить»/«Отменить» без сохранения, предупреждающий текст |
""";
public static string Plan = """
## План
1. `Wireframe`-разделы в двух UI-документах, статичные html-страницы (сделано).
2. `references.html` — рабочая ссылка вместо текста-заглушки (сделано).
3. Собрать (`dotnet build`, `build-html.cmd`) (сделано).
4. Зафиксировать этот CR постфактум — найдено `doc` при финальном сквозном прогоне
сессии: страницы были добавлены без CR, прямо противоречат «Итогу»
`DOC_CR_2026_11_02_VehicleMarkAlias` (сделано).
""";
public static string Result = $"""
## Итог
Выполнено. Зафиксирован постфактум — находка `doc` при финальном прогоне сессии:
страницы `vehicle-modification-registry.html`/`vehicle-modification-card.html`
появились в прототипе без CR, что прямо противоречило «Итогу»
{SdaidAnchors.RefTo<DOC_CR_2026_11_02_VehicleMarkAlias>()} («остаётся без макета»).
Этот CR закрывает трассируемость: откуда страницы взялись и почему это не
отменяет решение прежнего CR (реестр/карточка по-прежнему не через генератор и без
общего пути сохранения — сознательно урезанный объём).
""";
}
}