НАЧАЛО >> Оглавление >> Общее описание >> История изменений >> Что нового в проекте I128 >> Версия 2026.3 >> [I128-2810] Миграция VirtualRef в промышленный контур Tasks📄 Скачать в DOCX
| Тип | Версия | Статус | Приоритет | Исполнитель |
|---|---|---|---|---|
| ⚙️ Новые возможности | 2026.3 | 🔘 Завершено |
Средний | Ilya Mikhaylenko |
Компоненты: Нет
Завершено: 07.09.2026 08:10
Нужно подготовить промышленный переход от существующего модуля VirtualRef к универсальному модулю Tasks. Данные VirtualRef должны быть перенесены в модель задач так, чтобы пользователи и администраторы не потеряли вопросы, ответы, вложения, историю, статусы, публичную видимость, права и уже использованные ссылки.
VirtualRef сейчас является отдельным пользовательским контуром виртуальной справки. После появления Tasks этот функционал должен перейти в общий taskmanagement слой, чтобы не поддерживать две параллельные системы обращений. Миграция должна быть управляемой: сначала dryrun без записи, затем проверяемый production cutover с freeze/read-only старого контура, отчетом расхождений и понятным планом отката.
Эта задача реализует только предметную миграцию VirtualRef в Tasks. Общие механизмы workflow, экранов, представлений, файлового хранилища, коммуникаций, событий, очередей, прав, диагностики и TestA используются как зависимости и не реализуются внутри этой задачи.
Нужно реализовать VirtualRefMigrationProfile. Профиль должен описывать сопоставление проектов, типов обращений, статусов, workflowсостояний, полей вопроса, заголовка, ответа, ссылок на источники информации, вложений, наблюдателей, ответственных, авторов, признаков FAQ, публичной видимости, прав и legacyключей.
Нужно реализовать dryrun без записи изменений. Dryrun должен читать существующие данные VirtualRef, строить план переноса, показывать количество переносимых записей, пропущенные записи, ошибки mapping, поврежденные вложения, неоднозначные права, неизвестные статусы и другие блокеры cutover. Отчет должен быть понятен администратору и пригоден для повторной проверки.
Нужно реализовать production cutover. Перед записью данных должен выполняться повторный dryrun, после чего старый VirtualRef переводится в режим freeze/readonly на время переключения. Новые записи Tasks должны получать штатные ключи TASK, а старые идентификаторы VirtualRef должны сохраняться как legacy-ключи или alias, чтобы старые публичные ссылки не ломались без явного правила redirect.
Нужно переносить workflow-состояние через штатный механизм 113 LINK, историю действий через стандартное поле 907, вложения через ссылки на FTObject, публичные ответы и комментарии через согласованный контракт Collaboration, а детальные изменения значимых полей через FieldHistory, если исходные данные позволяют восстановить old/new values.
Нужно обеспечить идемпотентность. Повторный запуск миграции не должен создавать дубли задач, дубли вложений, дубли сообщений, повторные события или повторные элементы истории. Для уже перенесенной записи должен быть понятный результат: пропущена как уже перенесенная, обновлена по разрешенной policy или отмечена как конфликт.
Нужно реализовать сверку результата. После миграции администратор должен видеть совпадение счетчиков, списков, карточек, ключевых полей, статусов, FAQ-признаков, вложений, истории, прав, публичной видимости и поиска. Выборочная мигрированная задача должна открываться в новом списке и карточке Tasks.
Нужно определить режим старых страниц VirtualRef после cutover: readonly, redirect или compatibility view на Tasks по настройке проекта. Старые данные не должны изменяться скрыто после переключения, если выбран readonly.
В задачу входит только taskspecific логика миграции VirtualRef: профиль mapping, dryrun, production cutover, freeze/readonly, idempotency, сверка результата, legacyключи, audit миграции и Help/TestA-сценарии миграции.
В задачу не входит реализация общих модулей FT, TemporaryFiles, Collaboration, EventBus, Queue, FieldHistory, Security, Workflow*, WorkflowScreen, WorkflowView, WorkflowFilter, HealthCheck и TestA. Если нужного общего контракта не хватает, он должен быть оформлен как отдельная задача владельца соответствующего модуля, а не реализован частно внутри Tasks.
Dry-run запускается без записи изменений и показывает полный план миграции с ошибками, предупреждениями, счетчиками и примерами проблемных записей.
Production cutover переносит контрольный набор VirtualRef в Tasks без потери вопросов, заголовков, ответов, вложений, истории, статусов, workflowсостояний, FAQпризнаков, прав и публичной видимости.
Старые ключи VirtualRef сохраняются как legacyидентификаторы или alias. Уже опубликованные ссылки продолжают работать через явно выбранный readonly, redirect или compatibility режим.
Повторный запуск миграции не создает дублей и дает предсказуемый отчет по уже обработанным записям.
Мигрированные записи открываются в списках и карточке Tasks, учитывают права Security и не раскрывают данные, которые были скрыты в VirtualRef.
Ошибки поврежденных вложений, неизвестных статусов, неоднозначных прав и неполного mapping не скрываются, а попадают в отчет миграции и диагностический журнал.
Должны быть подготовлены TestAсценарии на контрольном наборе VirtualRef: dryrun, успешный cutover, повторный запуск без дублей, поврежденное вложение, неизвестный статус, сохранение legacy-ключа, перенос истории, перенос FAQ и проверка прав.
Help должен содержать руководство администратора по подготовке mapping, запуску dryrun, анализу отчета, freeze/readonly, production cutover, сверке результата и rollback plan.
-
Реализован первый кодовый срез Tasks Core.
Что сделано:
Границы:
Проверки:
-
Стековый PR поверх #1302 / I128-2800, потому что базовый контракт записи Tasks еще не в develop. После merge #1302 ветку нужно будет перебазировать или retarget на develop.
Что сделано:
Проверки:
-
Реализован кодовый срез I128-2803: рабочее место задач и внутренний API модуля Tasks.
Что изменено:
Границы:
Проверки:
-
Реализован кодовый срез I128-2804 для модуля Tasks.
Что изменено:
Границы:
Проверки:
-
Расширен ObjectDataTask полями SLA, пауз SLA, очереди, OLA-линий, таймеров, контрольных дат и результата ранжирования.
Добавлены taskspecific функции для объяснения SLA, расчета ранга и подготовки Queue-пересчета.__call
Добавлены Workflow-команды Tasks: первый ответ, решение, пауза SLA, снятие паузы, взятие задачи из очереди, ручное повышение ранга.
Системный проект Tasks расширен экраном SLA/очереди, фильтрами, колонками, секциями карточки и доменными справочниками SLA/OLA/queue/WIP/timer/ranking.
Добавлены форматы представления, WS/WSS/MNU, Queue handler-ы и Help по SLA/очередям/ранжированию.
Tasks хранит taskspecific правила, сохраненные результаты, поля, команды и payloadы. WorkCalendar, Queue runtime, EventBus, WorkflowFilter/View, Security и Observability остаются владельцами своих системных контрактов.
php/inc/pft128: OK, 24 файла.modules/Tasks/workflow/tasks.json: OK.git diff --check: OK.Tasks::SetupModuleConfigure(): OK.Tasks: total=13, passed=13, failed=0, skipped=0, blocked=0, warning=0.?id=Tasks/List, My, New, Done, All, Create - HTTP 200 без PHP warning/fatal.Target branch: feature/I128~~2804~~tasks~~domain~~entities-relations.
Commit: 269dc31177bdb8222dc01291bfda43d3541e6dfd.
-
Задача: I128-2810
Что сделано:
vref*to*task в системный JSON Tasks;ObjectDataVirtualRefMigrationProfile и legacy-ссылки TASK в поле 17;GetVirtualRefMigrationProfile, PlanVirtualRefMigration, ExecuteVirtualRefMigration;dryRun=false, confirm=cutover, sourceFrozen=true и повторной проверкой плана;Границы:
Проверки:
tasks.json JSON parse: OK;git diff --check: OK;Tasks::SetupModuleConfigure(): OK;Tasks: total=56, passed=56;Tasks/list, Tasks/my, Tasks/created, Tasks/new, Tasks/done, Tasks/all, Tasks/create: 200, без Fatal/Warning;[I128-2790] Расширить Workflow* для промышленного контура задач
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2791] Расширить WorkflowScreen/WorkflowView для публичных ws-форм и представлений
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2793] Ввести TraceContext для сквозной трассировки операций
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2794] Реализовать системную событийную шину EventBus
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2795] Расширить Queue как runtime фоновых заданий, retry и расписаний
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2796] Расширить FT как постоянное хранилище вложений задач
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2797] Расширить Security для проектных прав, полей, действий и аудита доступа
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2798] Реализовать HealthCheck для workflow-проектов и задач
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2799] Подготовить TestA-контракты системных JSON и end-to-end сценариев
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2800] Каноническая запись задачи TASK
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2801] Системный проект задач Tasks
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2802] Пакет разработчика, Help и TestA для Tasks
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2803] Рабочее место задач и внутренний API
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2804] Доменные сущности, связи и классификация задач
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2806] Системные треды и публичные коммуникации Collaboration
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2807] История значимых полей FieldHistory
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2809] Сохраненные и материализованные фильтры WorkflowFilter
Статус: Завершено | Автор: Ilya Mikhaylenko