CODING_POLICY.md 10 KB

Coding policy: landing

Статус и область действия

Этот документ дополняет корневой CODING_POLICY.md установленного ShariX Open. При конфликте действует более строгое правило. Он описывает архитектурные границы и порядок изменения модуля, но не заменяет README и профильную документацию.

Ответственность модуля

Модуль владеет публичными landing-страницами и формами первичного взаимодействия. Он не содержит критическую бизнес-логику, жизненный цикл заказа или альтернативную систему авторизации.

Архитектурные слои

  • Views/forms: HTTP-ввод, валидация и вызов публичных use cases.
  • Templates/static: публичное представление.
  • Models: только данные landing, если они действительно долговечны.
  • Integration helpers: чтение публичных данных сервиса через стабильные contracts.

Направление зависимостей

Landing зависит от публичных helpers/API базового проекта. Base не импортирует landing. Отсутствие модуля не ломает кабинет и API. Формы не обращаются напрямую к внутренним моделям профильных модулей при наличии публичного use case.

Источники истины, коды и контракты

Коды форм/действий берутся из models/forms и публичного backend contract. Название сервиса и брендинг берутся из актуальной конфигурации/metaservice, а не дублируются строками в шаблонах.

Конфигурация

  • В конфигурацию выносятся свойства конкретной установки: адреса и порты, секреты, режимы интеграций, feature switches, эксплуатационные лимиты, timeout/retry/interval, размеры пакетов и пути к локальным данным.
  • В конфигурацию не выносятся стабильные доменные коды, имена полей API, правила целостности, обязательные проверки безопасности и значения, изменение которых меняет смысл уже сохранённых данных.
  • Перед добавлением параметра проверяется общая конфигурация проекта и ближайший модуль-владелец. Нельзя создавать отдельную mobile/frontend/module-копию уже существующей общей настройки.
  • Новая env-настройка добавляется в соответствующий .env.example, слой чтения и валидации, README и, когда это безопасно, system check. Секреты не получают небезопасных значений по умолчанию.
  • Возможность изменения через web UI добавляется только для безопасной административной настройки с явной валидацией, атомарной записью, аудитом и понятным моментом применения. Секреты, системные пути и параметры запуска остаются в файловой конфигурации.
  • После изменения примеров конфигурации указываются штатные команды conf/utils/normalize_env.py: --diff, затем --write, затем --check. --only-root используется только если изменён исключительно корневой .env.example.

Конфигурируются публичные links, analytics IDs, anti-spam, feature switches и deployment-specific content sources. Доменные действия и роли не задаются landing-конфигурацией.

Локализация и терминология

  • Новый или изменяемый пользовательский текст web/API создаётся через штатный механизм Django i18n. Технические логи и CLI-сообщения не используются как пользовательские подписи или условия бизнес-логики.
  • Стабильные коды статусов, ролей, действий, типов и словарей отделяются от отображаемых подписей. В БД и интеграционных контрактах передаются коды; подписи локализуются на границе представления.
  • Актуальные коды и словари ищутся у владельца понятия: в model enum/choices, каноническом словарном модуле, domain policy и документации контракта. Их нельзя восстанавливать по кнопкам, шаблонам или старым примерам README.
  • Код должен допускать будущую замену отдельных терминов через локализацию. Не использовать глобальную замену строк и не собирать пользовательские предложения конкатенацией фрагментов; применять placeholders, plural и locale-aware форматирование дат, времени, чисел и валют.
  • При введении нового понятия определяются его стабильный код, владелец словаря, локализуемая подпись и правила безопасного отображения неизвестного кода.

Инварианты и обработка ошибок

Все формы имеют серверную валидацию, CSRF и защиту от спама/повторов. Ошибка необязательного внешнего блока отображается fail-soft. Landing не раскрывает внутренние данные и не создаёт бизнес-сущность в обход backend use case.

Сопровождение policy и README

  • CODING_POLICY.md является частью модуля. Если изменение уточняет ответственность, слои, направление зависимостей, источник кодов/словарей, конфигурацию, локализацию или обязательные проверки, вместе с основным патчем предлагается соответствующая правка policy.
  • Уточнение policy сначала явно описывается пользователю и согласовывается. Нельзя незаметно закреплять новое архитектурное решение только изменением документации.
  • README.md описывает фактически доступные функции, установку, настройку, запуск и эксплуатацию. При изменении этих аспектов README обновляется в том же согласованном этапе.
  • Policy не дублирует README и docs/: policy задаёт правила принятия решений, README объясняет использование, профильная документация фиксирует актуальные контракты и устройство.

Обязательные проверки

compileall landing; manage.py check; targeted tests форм/permissions/redirects; проверка страниц без optional integrations; collectstatic при static changes.

Проверки и подготовка патча

  • Перед изменением используется самый свежий переданный исходник или фактическое рабочее состояние пользователя. Проверяется, какие предыдущие этапы уже применены; имя старого архива не считается доказательством актуальности.
  • Патч относится к одному согласованному этапу и проверяется patch --dry-run --batch -p1 на точной базе. В выводе не должно быть FAILED, Reversed и интерактивных вопросов.
  • В отчёте указываются база, затронутые контракты, необходимость миграций, collectstatic, нормализации конфигурации, рестарта units и реально выполненные проверки. Нельзя заявлять о проверке, которая не запускалась.
  • Тесты выбираются по изменённому контракту. Новые тестовые файлы не включаются в рабочий patch без отдельного согласования.

Stage 14 touched-page UI contract

Stage 14 uses progressive touched-page coverage. When a page, form, template or user-visible workflow in this repository is new or materially changed, the same change must provide ru/en localization for the touched surface, operation-aware contextual help where applicable, explanatory empty states, informative form labels/choices/validation, and regression evidence for invalid input/rendered body as appropriate. Canonical model/API/status/role/action identifiers are not renamed for presentation.