Сквозные механизмы
Модульный backend
DEC-ARCH-001 выбирает модульный монолит для системы «Обратная связь — регион». Модуль — логическая граница ответственности, не отдельный микросервис. Backend содержит синхронные обработчики и фоновые задачи в одном процессе. Хранилища — логические границы, не обязательно разные серверы. Если часть выделяется в отдельный процесс, пересматриваются интерфейсы, транзакции, размещение и исходные гарантии.
Сессия и предметные права проверяются на сервере; CMP-APP-ACCESS не единственный контроль: владелец проверяет область объекта, актуальное состояние и версию. Интерфейсы владельцев не дают произвольного SQL другим модулям.
Публикация и outbox
Координатор CMP-APP-PUBLICATION использует общую транзакцию STORE-DATA-MAIN, вызывая владельцев состояния и уведомлений с тем же контекстом транзакции. Комплект защищён от конкурентного переназначения/изменения версий блокировкой либо эквивалентным контролем версии. Только после общей фиксации ответ возвращается клиенту; провайдер вызывается фоновым обработчиком.
CMP-APP-NOTIFY владеет Notification; запись этой сущности служит durable outbox. Бизнес-состояния Notification определены в docs/models.md. Захват задания, lease/блокировка, восстановление после истечения lease и идемпотентность обновления технического результата — детали реализации, которые следует проверить на сбоях. Публикация и уведомление имеют разные гарантии; потеря квитанции провайдера допускает повтор технического сообщения. Параметры повторов не копируются из REQ-DEL-002.
Аналитическая проекция
CMP-APP-PROJECTION читает только необходимые операционные факты в согласованном снимке и готовит AggregateMetrics: разрешённую агрегированную проекцию с идентификатором версии и as_of. Это техническая сущность; формулы и ограничение детализации определены REQ-ANA-*. Поля рабочего контракта проекции проектируются при реализации и не выдаются здесь за согласованный внешний API.
Построение версии завершается атомарным переключением указателя опубликованной версии. CMP-APP-QUERY использует выделенное соединение/учётные данные с правом чтения только STORE-DATA-AGG; у него нет зависимости от операционного репозитория или его учётных данных. Привилегированные данные/объекты CMP-APP-PROJECTION не передаются в контекст аналитического запроса. Обновление проекции может выполняться по запросу согласованного среза; свежесть автоматической фоновой проекции ещё не задаёт SLA.
Это защита от ошибочных зависимостей и доступа, а не граница безопасности против компрометации всего процесса. Для промышленной среды нужно оценить отдельный процесс/identity, угрозы и политику реальных данных. Такая смена решения требует нового ADR и пересмотра REQ-ARC-002.
Регистрация и аудит
CMP-APP-REGISTRATION проверяет вход и передаёт сохранение владельцу CMP-APP-FLOW. Ключ идемпотентности и жалоба фиксируются вместе; уникальность ключа защищается БД. Эффективное изменение и запись CMP-APP-AUDIT используют тот же контекст транзакции. Повтор ключа использует сохранённый результат без второго эффективного аудита.
AuditEvent — запись эффективного изменения с полями, заданными REQ-SEC-002. Полного схемного контракта аудита в срезе нет. В каталог включён владелец, а соответствие кода и производительность требуют самостоятельной проверки.
Статус и ограничения
Решения и модель agreed означают принятый проект системы «Обратная связь — регион», а не реализованный продукт. Implementation в проверках остаётся null. Размещение промышленной среды, реальные контракты, режим обработки и политика данных открыты в Q-ARCH-001 и Q-POS-001..003. Сведения о стенде и замеры не получены.