Целевая документация экосистемы
Документация описывает целевое состояние экосистемы Systematika и устроена так, чтобы по ней можно было разработать продукт с нуля без вопросов и противоречий.
Структура
| Папка | Назначение |
|---|---|
ecosystem/ | Продуктовая рамка: что такое экосистема, инварианты, словарь, карта 7 доменов, владение, сквозные сценарии |
platform/ | Техническая рамка: стек, топология, API, auth, RBAC, события, observability, UI-система, reference-данные, порядок разработки |
decisions/ | Архитектурные решения (ADR) |
domains/ | Спецификации 7 доменов: identity, storefront, crm, lms, task-bank, competitions, management |
integrations/ | Cross-domain контракты, по файлу на каждую интеграционную линию |
migration/ | Переход от текущего состояния к целевому |
templates/ | Обязательные шаблоны новых документов |
Путь чтения для разработчика с нуля
ecosystem/overview.md,ecosystem/principles.md,ecosystem/glossary.md,ecosystem/domain-map.md,ecosystem/ownership.md.platform/overview.mdи далее весьplatform/.decisions/README.md— список действующих ADR.platform/development-order.md— какой доме н разрабатывать первым.- Целевой домен в
domains/<name>/:overview.md→scope.md→data-model.md→database-schema.md→state-machines.md→api-map.md→api-contracts.md→permissions-matrix.md→events.md→screen-spec.md→user-flows.md→security.md→integrations.md→test-plan.md→acceptance.md→ подспеки вfeatures/. - Сводные
integrations/<source>--<target>.mdдля всех точек обмена. migration/— только если перенос существующих данных нужен.
Как работать с документацией
Документация живёт в Docusaurus-приложении apps/docs. Все страницы находятся в apps/docs/docs/, а целевая документация — в apps/docs/docs/target/.
Локальный запуск
Перед большой правкой л учше запустить сайт локально и смотреть результат в браузере:
npm install
npm run docs
Открыть:
http://127.0.0.1:3103/target
Для финальной проверки:
npm run docs:build
Если менялись ссылки, sidebar, frontmatter или много файлов сразу, сборка обязательна: Docusaurus быстро показывает битые ссылки, неверные doc id и ошибки разметки.
Пере д правкой
- Определить, к какому слою относится изменение:
ecosystem/— понятия, инварианты, карта доменов, ownership;platform/— общий технический стек, API-конвенции, auth, RBAC, события, CI/CD, observability, UI;domains/<name>/— логика конкретного домена;integrations/— обмен между доменами;migration/— перенос из текущего состояния в целевое;decisions/adr/— архитектурное решение, которое нужно зафиксировать отдельно.
- Найти источник истины. Если правка касается сущности, владельца или статуса, сначала проверить
ecosystem/ownership.md,ecosystem/domain-map.md, доменныйdata-model.mdиdatabase-schema.md. - Проверить связанные документы. Изменение в одном файле редко бывает изолированным: API, события, права, state machine, сценарии, тест-план и acceptance должны остаться согласованными.
- Понять статус решения. Если команда ещё не договорилась, документировать как
draftили добавить отдельный ADR с явным статусом.
Как вносить небольшую правку
Небольшая правка — это уточнение текста, исправление ошибки, добавление недостающего правила без изменения архитектурной модели.
- Открыть нужный
.mdфайл. - Исправить текст рядом с местом, где уже описана эта тема.
- Не создавать новый раздел, если информация логически продолжает существующий.
- Если добавлена новая сущность, роль, permission, event, endpoint или статус, проверить соседние канонические файлы домена.
- Обновить
updatedво frontmatter только у файлов, где смысл действительно изменился. - Запустить
npm run docs:build, если правка затронула ссылки, заголовки, sidebar или несколько документов.
Пример: если в domains/lms/api-contracts.md добавлен новый endpoint, нужно проверить минимум api-map.md, permissions-matrix.md, events.md, test-plan.md и acceptance.md.
Как добавлять новый документ
- Выбрать правильную папку. Документ должен лежать рядом с ближайшим источником истины, а не в общей папке "на всякий случай".
- Взять подходящий шаблон из
templates/:overview.md— обзор области;specification.md— детальная функциональная спецификация;api-contracts.md— API-контракты;events.md— события;data-model.mdиdatabase-schema.md— модель данных и DDL;permissions-matrix.md— роли и права;state-machines.md— статусы и переходы;test-plan.mdиacceptance.md— проверка и критерии готовности;adr.md— архитектурное решение.
- Создать
.mdфайл с frontmatter:
---
title: Название документа
sidebar_label: Короткое название
sidebar_position: 10
status: draft
version: v3.0
updated: 2026-05-01
owners:
- product
- architecture
canonical: false
---
- Поставить
canonical: trueтолько если документ является источником истины, а не заметкой, черновиком или вспомогательным материалом. - Добавить ссылку на новый документ из ближайшего
overview.md,README.mdили карты документов. - Если раздел управляется через
_category_.json, проверить, что label, position и generated index не конфликтуют с новым файлом. - Запустить
npm run docs:build.
Как добавлять новую доменную функцию
Для новой функции внутри домена не хватает одного feature-файла. Нужно провести изменение по всей цепочке:
scope.md— входит ли функция в границы домена и что не входит.data-model.md— какие сущности, атрибуты и связи появляются.database-schema.md— таблицы, enum-ы, индексы, ограничения, audit-поля.state-machines.md— статусы, переходы, запреты и side effects.api-map.mdиapi-contracts.md— endpoints, команды, queries, ошибки.permissions-matrix.md— кто может читать, создавать, менять, удалять и администрировать.events.md— какие события публикуются и кто их потребляет.screen-spec.mdиuser-flows.md— как пользователь проходит сценарий.security.md— риски, ограничения доступа, аудит, персональные данные.integrations.mdдомена и сводный файл вintegrations/, если функция общается с другим доменом.test-plan.mdиacceptance.md— как проверить, что функция готова.features/<feature>.md— детальная спецификация, если логика крупнее нескольких правил.
Если на одном из шагов обнаруживается архитектурное решение, которое нельзя вывести из уже принятых правил, нужно добавить ADR.
Как менять архитектурное решение
Архитектурное решение нельзя менять только правкой текста в доменном файле.
- Найти действующий ADR в
decisions/adr/. - Если решение меняется по сути, создать новый ADR по шаблону
templates/adr.md. - В новом ADR явно указать, что он заменяет, уточняет или отменяет прежний ADR.
- Обновить все документы, где старое решение было источником правил.
- В
decisions/README.mdпроверить список действующих ADR.
ADR нужен, если меняется ownership, source of truth, граница домена, интеграционная стратегия, модель автори зации, event bus, способ миграции или публичный контракт.
Как добавлять интеграцию между доменами
- Описать интеграцию в доменном
integrations.mdу владельца source of truth. - Создать или обновить сводный файл
integrations/<source>--<target>.md. - Зафиксировать направление данных: кто владеет фактом, кто читает проекцию, кто имеет право отправлять command.
- Описать API, события, retry/idempotency, ошибки, аудит и privacy-ограничения.
- Обновить
events.md,api-contracts.md,permissions-matrix.md,security.md,test-plan.mdиacceptance.mdзатронутых доменов.
Нельзя описывать интеграцию как "домены синхронизируются" без указания владельца факта, формата обмена и поведения при ошибке.
Как удалять или переименовывать документы
- Проверить входящие ссылки через поиск по названию файла и заголовку.
- Обновить ссылки в
overview.md,README.md,sidebars.js,_category_.jsonи связанных документах. - Если документ был canonical, перенести его правила в новый canonical-документ до удаления.
- Если меняется URL важной страницы, добавить redirect в Docusaurus-конфиг или сохранить страницу-заглушку со ссылкой на новое место.
- Запустить
npm run docs:build.
Стиль текста
- Писать на русском. Английский использовать для кода, API, entity names, event names, полей, библиотек и общепринятых технических терминов.
- Начинать раздел с назначения и границы: зачем это нужно, кто владеет, что входит и что не входит.
- Писать правила так, чтобы по ним можно было реализов ать систему: кто делает действие, при каком условии, какой результат, какой запрет.
- Не оставлять фразы без последствий для разработки: "должно быть удобно", "система поддерживает", "данные синхронизируются" нужно раскрывать конкретными сценариями, контрактами или критериями.
- Не дублировать большие фрагменты между файлами. В одном месте хранится источник истины, в остальных — ссылка и краткое применение.
- Для списков сущностей, ролей, прав, статусов, событий и endpoint-ов использовать таблицы.
- Для последовательностей использовать нумерованные шаги.
- Для спорных мест писать явно:
Решение,Причина,Последствия,Нерешённые вопросы.
Frontmatter и статусы
Каждый целевой документ должен иметь frontmatter.
| Поле | Как использовать |
|---|---|
title | Полный русский заголовок страницы |
sidebar_label | Короткое название для меню |
sidebar_position | Порядок внутри раздела |
status | draft, active или deprecated; для ADR используется отдельный lifecycle proposed, accepted, superseded, deprecated |
version | Версия конкретного документа или спецификации; версия всей целевой документации задаётся этим index-документом |
updated | Дата смысловой правки в формате YYYY-MM-DD |
owners | Команды или роли, отвечающие за содержание |
canonical | true, если документ является источником истины |
draft означает, что по документу нельзя начинать разработку без подтверждения. active означает, что документ является рабочим основанием. deprecated означает, что документ оставлен для истории и должен ссылаться на актуальную замену. ADR с accepted является обязательным архитектурным решением; superseded ADR остаётся историческим источником и должен ссылаться на замену.
Чеклист перед завершением правки
- Изменение находится в правильном слое документации.
- У правки есть один понятный source of truth.
- Ссылки относительные и ведут на существующие файлы.
- Нет противоречий между
overview,scope,data-model,database-schema, API, permissions, events, security, test-plan и acceptance. - Если поменялась граница домена или ownership, добавлен или обновлён ADR.
- Если появился новый статус, event, permission, endpoint или enum, он отражён во всех связанных файлах.
updatedобновлён только там, где изменился смысл.npm run docs:buildпроходит без ошибок.
7 доменов экосистемы
identity/— аккаунты, OAuth, роли, семьи, организации, безопасность.storefront/— публичная витрина и read-model.crm/— клиенты, сделки, биллинг, entitlements, выплаты преподавателям.lms/— учебный кабинет, курсы, уроки, прогресс, занятия, дорожная карта, геймификация.task-bank/— задачи, таксономия, попытки, evidence.competitions/— олимпиады и внешний преподавательский контур.management/— аналитика, dashboards, цели, рекомендации, диагностика, планирование.
Стандарт качества
Документация считается готовой, когда:
- каждый домен покрыт каноническим набором из 15 файлов;
- все архитектурные и продуктовые решения находятся в активной целевой документации;
- глоссарий, ownership и domain-map согласованы между собой и с
domains/; - platform-слой описывает один общий стек, конвенции и инфраструктуру;
- каждая cross-domain интеграция имеет файл в
integrations/; - ADR покрывают неочевидные решения и не дублируются.