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

Риски миграции

Зачем нужно

Документ фиксирует ключевые риски перехода и стратегии снижения. Не является проектным риск-реестром по срокам и бюджету.

Риск 1. Смешение доменов

Возможный возврат к смешанной модели: витрина владеет продуктами, LMS владеет биллингом и т. д.

Митигация.

  • ownership фиксируется до старта домена;
  • ADR-019 запрещает дублирование владения;
  • Learning Workspace фиксируется владельцем roster «мои ученики / мои группы»;
  • competitions не использует competition_group как canonical roster, а task-bank не создаёт группы;
  • code review проверяет соответствие.

Риск 2. Потеря исторических данных

Исходные статусы, оплаты, прогресс, результаты могут потерять смысл при миграции.

Митигация.

  • per-domain mapping в data-mapping/;
  • backfill партиями с проверкой контрольных сумм;
  • read-only архив исходных систем сохраняется минимум 1 год после write switch.

Риск 3. Расхождение между источниками во время dual-write

В фазе dual-write возможно расхождение состояния между исходным контуром и целевыми доменами.

Митигация.

  • delta-проверки между источниками с алертами;
  • dual-write пишет полный snapshot, не diff;
  • окно стабилизации перед read switch минимум 7 дней.

Риск 4. Простой пользователей при переключении

Cutover может вызвать недоступность на пиковых сценариях (запись на занятия, оплаты).

Митигация.

  • переключение в окно низкой нагрузки;
  • canary-rollout по поддоменам/курсам/продуктам;
  • быстрый rollback и feature flag для возврата чтения в исходный контур.

Риск 5. Финансовые расхождения

Платежи, возвраты и баланс могут разойтись между исходным контуром и целевым CRM.

Митигация.

  • атомарный idempotent webhook handling;
  • сверка баланса с провайдером раз в день в фазе dual-write;
  • ручной gate перед write switch финансов;
  • консервация всех исходных платежей с неизменным state.

Риск 6. Зависимость от GetCourse в учебном опыте

Если LMS не достроен, отключение GetCourse приведёт к деградации обучения.

Митигация.

  • параллельная работа GetCourse + целевой LMS до acceptance lms-домена;
  • курсы переключаются по одному, не одновременно;
  • ETL прогресса работает до и после переключения;
  • родителям и преподавателям заранее коммуницируется план.

Риск 7. Неполные спецификации

Если доменные документы окажутся слишком общими, AI-агенты и разработчики начнут додумывать поведение.

Митигация.

  • обязательный канонический набор 15 файлов на домен;
  • code review сверяется с domains/<name>/acceptance.md;
  • каждый PR проверяется на соответствие сценариям и ADR.

Риск 8. Расхождение глоссария и кода

Имена сущностей в коде могут разойтись с glossary.md.

Митигация.

  • генерация type-safe констант сущностей из glossary;
  • linter запрещает несовпадающие имена в БД и API;
  • регулярный аудит.

Риск 9. Олимпиады во время миграции

Текущие сезоны олимпиад не должны прерываться.

Митигация.

  • до разработки принят ранний migration decision по Мир Олимп: new season only, archive only, import tasks, import seasons/results или hybrid;
  • первый запуск competitions требует минимальный LMS activity contract или temporary LMS-compatible adapter, даже если полный LMS ещё не готов;
  • task-bank используется как источник content refs, но не как runtime попыток;
  • минимальный Learning Workspace slice готов до group/teacher scenarios;
  • Мир Олимп работает до завершения текущего сезона только если это выбранный migration path;
  • архивация предыдущих сезонов отдельно от cutover.

Риск 10. Управленческие отчёты во время миграции

Расходящиеся данные между исходным контуром и целевыми доменами приведут к недоверию к management dashboards.

Митигация.

  • management ingestion запускается параллельно, но dashboards помечены migrating до завершения сверки;
  • финансовые отчёты выходят только после фазы 3 acceptance.

Риск 11. competition_group станет списком учеников

При competitions-first запуске удобно перенести старые группы учителей прямо в competitions и случайно закрепить competition_group как источник для «моих учеников».

Митигация.

  • старые преподаватели мигрируются в identity-owned educator_profile, а старые группы и списки учеников — в LMS-owned learning_group и learning_group_participant;
  • competitions хранит только event/season snapshot для доступа к работам;
  • development-order требует минимальный Learning Workspace slice до олимпиадных group scenarios.

Риск 12. Смешение учебных и олимпиадных attempts

Исторические решения из Мира Олимп и GetCourse могут попасть в один поток попыток и исказить учебную аналитику.

Митигация.

  • competition_submission и competition_result остаются competitions-owned;
  • lms_activity_attempt и learning_training_attempt остаются LMS-owned;
  • task-bank хранит только low-level problem_attempt/answer_check с явным context_domain;
  • отчёты и backfill проверяют, что competition_submission не используется как training attempt.

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