| 1 | namespace CascadeIDE.Contracts; |
| 2 | |
| 3 | /// <summary> |
| 4 | /// Маркер вычислительной единицы приложения («computing unit»): узкая статическая проекция, политика или нормализация данных. |
| 5 | /// </summary> |
| 6 | /// <remarks> |
| 7 | /// Отличается от <c>*Orchestrator*</c>, MCP-хэндлеров координации и тонких адаптеров «только подписка на шину без свёртки». |
| 8 | /// Допустимы локальные операции над путями и простыми проверками ОС там, где это часть правила нормализации, а не сценария с побочными эффектами. |
| 9 | /// |
| 10 | /// Маркируются: статические CU в <c>Features/*/Application</c> (имя класса не оканчивается на <c>Orchestrator</c>), |
| 11 | /// типы-компьюторы кабины в <c>Cockpit/ComputingUnits</c> (типы с <c>: ICockpitComputeUnit</c> и статические CCU-хелперы в том дереве). |
| 12 | /// Не маркировать только-DTO (<c>record struct</c> полезная нагрузка), перечисления и пустые контрактные интерфейсы. |
| 13 | /// |
| 14 | /// Поиск: <c>[ComputingUnit]</c>. Пара: <see cref="PresentationProjectionAttribute"/> (биндинг из снимка), |
| 15 | /// <see cref="ApplicationOrchestratorAttribute"/> (координация), <see cref="IoBoundaryAttribute"/> (I/O), шина — |
| 16 | /// <see cref="DataBusSubscriberAttribute"/> / <see cref="DataBusPublisherAttribute"/>. |
| 17 | /// </remarks> |
| 18 | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, |
| 19 | Inherited = false, |
| 20 | AllowMultiple = false)] |
| 21 | public sealed class ComputingUnitAttribute : Attribute |
| 22 | { |
| 23 | /// <summary>Создать маркер без текста-подсказки.</summary> |
| 24 | public ComputingUnitAttribute() |
| 25 | { |
| 26 | } |
| 27 | |
| 28 | /// <summary>Создать маркер с необязательной подсказкой для обзора (категория единицы).</summary> |
| 29 | /// <param name="note">Краткая подсказка; не влияет на компиляцию.</param> |
| 30 | public ComputingUnitAttribute(string note) => Note = note; |
| 31 | |
| 32 | /// <summary>Краткое текстовое уточнение для обзора (не семантика исполнения).</summary> |
| 33 | public string? Note { get; } |
| 34 | } |
| 35 | |