Перейти к основному содержимому

Порядок разработки

Зачем нужно

Документ задаёт обязательный порядок разработки 7 доменов экосистемы с нуля. Порядок выбран по зависимостям: каждый следующий домен опирается на возможности предыдущих.

Шаги от нуля до экосистемы

Шаг 0. Платформа

Подготовка перед стартом любого домена:

  • репозиторий с pnpm workspaces;
  • общие пакеты: api-contracts, auth-client, events-bus, reference-data, ui-kit, observability, permissions, testing;
  • инфраструктура dev-окружения (Docker Compose, postgres, redis, NATS);
  • CI базовый pipeline;
  • общие линтеры и pre-commit checks;
  • тестовый стенд observability stack.
  • identity-api как временный platform host для /api/v2/platform/reference/*, /api/v2/platform/feature-flags и /api/v2/platform/i18n/* до выделения отдельного platform-service;
  • MVP UI Kit: tokens, Button, Input, Select, Checkbox, Switch, Tabs, Modal, Toast, Tooltip, Table, Pagination, FormField, Alert, Skeleton, EmptyState;
  • Storybook на packages/ui-kit как обязательный preview и regression target для базовых компонентов.

Готовность: пакеты собираются, dev-окружение поднимается, CI проходит на пустом сервисе, reference-data API отвечает через identity-api, UI Kit MVP виден в Storybook.

Шаг 1. identity

Без identity ни один другой домен не имеет аутентификации.

Реализуем по identity/overview.md → порядок разработки:

  1. Модель данных и БД.
  2. Auth flow, sessions, refresh rotation.
  3. RBAC и permissions.
  4. Family и organizations.
  5. OAuth/OIDC authorization server.
  6. Audit, notifications, transports.
  7. Frontend identity-admin-web и user screens.

Готовность: пользователь может зарегистрироваться, войти, получить access token; сервис может валидировать токен через JWKS; OAuth client_credentials работает для service-to-service.

Identity organization MVP для раннего запуска:

  • organization;
  • organization_membership;
  • roles owner, admin, member;
  • invitations;
  • basic permissions and organization context.

Identity extended before competitions/task-bank integration:

  • organization_student;
  • ownership claim;
  • ownership transfer;
  • duplicate warning;
  • organization merge model;
  • admin organization panel;
  • organization/team grants.

organization_student относится только к official organization contour. Он не является общим списком «мои ученики / мои группы» и не заменяет Learning Workspace.

Эти расширения нужны до полноценной интеграции competitions и task-bank, но не обязаны блокировать первый минимальный auth/OAuth релиз identity.

Шаг 2. storefront (минимально)

Витрина — read-model, поэтому она запускается рано как фасад.

Минимальный объём:

  • публичные страницы;
  • каталог продуктов (read-only, источник — crm в будущем; пока seed);
  • формы заявок → события storefront.lead.submitted;
  • SEO baseline.

Готовность: публичный сайт с лендингами и каталогом, формы превращаются в события.

Seed-каталог storefront временный: source_domain = temporary_seed, без владения ценой и коммерческой логикой. Для seed-записей задаётся migration deadline; после готовности CRM canonical product/product_run/price_plan переносится в CRM, а storefront остаётся read-model.

Шаг 3. crm

CRM становится потребителем storefront.lead.submitted и владеет коммерческой моделью.

Реализуем:

  1. accounts, person links, contacts, timeline.
  2. Лиды и сделки.
  3. Продукты и реализации.
  4. Заказы, счета, платежи, возвраты, баланс.
  5. Entitlements + интеграция с identity для проверок;
  6. Teacher payouts.
  7. CRM web.

Готовность: путь «лид → сделка → счёт → платёж → entitlement» работает end-to-end.

Шаг 4. lms

LMS подписан на crm.entitlement.activated, ведёт учебную часть.

Реализуем:

  1. Курсы, учебная структура, контент-блоки, активности.
  2. Enrollments по entitlements.
  3. Прогресс и evidence.
  4. Roadmap (программа, темы, pathways, прогресс).
  5. Learning Workspace: learning_group, learning_group_participant, группы и занятия (attendance, расписание), с использованием identity-owned educator_profile.
  6. Запись на занятия и календарь.
  7. Тетради, проекты, чат.
  8. Геймификация.
  9. LMS web.

Готовность: ученик с активным entitlement видит курс и расписание, проходит активности, прогресс пишется, в crm уходит lms.entitlement.consumed.

Минимальный Learning Workspace slice до competitions:

  • identity-owned educator_profile для преподавателя/координатора;
  • learning_group и learning_group_participant как канонический roster «мои ученики / мои группы»;
  • read API для handoff группы в competitions с snapshot и audit;
  • training/review container для разбора олимпиадных результатов в учебном контуре;
  • permissions lms.learning-groups.* и assigned educator context.

Без этого slice competitions не должен закреплять competition_group как список учеников.

До готовности task-bank LMS может использовать только один compatibility-вариант:

  • internal compatibility activity type без сохранения task-bank low-level attempts;
  • task-bank stub API с фиксированным контрактом GET /api/v2/task-bank/problems/{id} и POST /api/v2/task-bank/problem-usages;
  • no persisted task-bank low-level attempts until task-bank acceptance.

Шаг 5. task-bank

Task-bank становится поставщиком задач и проверок для lms (и потом competitions).

Перед organization-scoped доступом к подборкам должны быть готовы identity organization memberships, basic roles и grants.

Реализуем:

  1. Задачи, версии, переводы.
  2. Таксономия, теги, скиллы.
  3. Решения, подсказки, схемы ответов и проверки.
  4. Использование problem_usage.
  5. Low-level problem attempts, answer checks и evidence, без подмены LMS/competition attempts/results.
  6. Editor web.

Готовность: lms-домашка использует задачи task-bank, проверки доходят до lms-evidence, а training attempts остаются в LMS/Learning Workspace.

Шаг 6. competitions

Олимпиадный домен использует identity, crm, task-bank как источник контента, минимальный Learning Workspace slice и LMS activity runtime или совместимый temporary activity adapter для прохождения тура.

Перед запуском organization/group scenarios должны быть готовы organization_student для official organization contour, ownership claim/transfer, duplicate warning, admin organization panel и минимальный Learning Workspace slice для roster «мои ученики / мои группы».

Competitions-first launch slice разрешён, если цель — запустить первую олимпиаду до всей экосистемы. В этом режиме обязательны identity auth, organization-lite, organization_student только для official organization contour, минимальный Learning Workspace roster slice, permissions catalog, минимальный LMS activity contract или temporary LMS-compatible adapter и полный competitions cycle. competition_group в MVP может быть только event/season access snapshot и не становится каноническим списком учеников; task-bank, storefront, CRM, полный LMS и management подключаются фазами по ../domains/competitions/mvp-launch-plan.md.

Реализуем:

  1. События/сезоны/туры/треки.
  2. Регистрации и участники (в т.ч. без аккаунта).
  3. Event/season access snapshots для учителей и доступ к работам без владения Learning Workspace roster.
  4. Tour activity bindings через LMS activity runtime или temporary activity adapter; task-bank даёт source refs/content, но не runtime.
  5. Submission refs, checking status, immutable score snapshots и результаты.
  6. Отдельные publication actions, публичные projections для storefront и наградные документы.
  7. Кабинет внешнего преподавателя.

Готовность: тур проходит end-to-end: регистрация → activity launch → LMS/adapter attempt → score snapshot → finalize result → publication → диплом.

Шаг 7. management

Management запускается последним, потому что зависит от данных всех остальных.

Реализуем:

  1. Метрики и ingestion.
  2. Dashboards и алерты.
  3. Цели, диагностика, рекомендации.
  4. Внутренние задачи команд и план.
  5. Management web.

Готовность: руководитель видит сквозные aggregates, создаёт задачи, цели работают для учеников.

Параллельность

Часть работ можно вести параллельно после шага 1:

  • дизайн-система и UI Kit идут одновременно с identity;
  • storefront лендинги — после identity и до crm;
  • task-bank можно стартовать сразу после identity и параллельно с lms по compatibility contract выше.

Что должно быть готово на каждом шаге

ШагПлатформенный артефакт
0пакеты и dev-окружение
1работающий identity, JWKS, OAuth
2публичная витрина
3коммерческая модель и entitlements
4учебный кабинет
5банк задач
6олимпиадный кабинет
7управленческий dashboard

Связанные документы