Скил dr-init-id-collision-window — обнаружение и переименование при коллизии идентификатора задачи
Как Datarim обнаруживает и устраняет конфликты идентификаторов задач, возникающие когда две параллельные сессии резервируют одинаковый номер в окне между /dr-init и /dr-archive.
Две агентские сессии, работающие в одном рабочем пространстве, могут выбрать одинаковый идентификатор TASK-PREFIX-NNNN. Коллизия остаётся незаметной, пока одна из сессий не попытается записать архивный документ, уже созданный другой. К тому моменту проигравшая сессия обычно имеет полную цепочку производных артефактов — PRD, план, логи аудита верификации, рефлексию, снапшот — все с дублирующимся идентификатором.
Скил dr-init-id-collision-window описывает, как обнаружить эту ситуацию заранее и как чисто переименовать всё, если коллизия обнаружена поздно.
Где открывается окно
Окно находится между пробом в шаге 2.5 команды /dr-init — где резервируется следующий свободный идентификатор — и моментом, когда /dr-archive фиксирует документ на диске. Вторая сессия, проводящая проб в это окно, не видит резервирования первой, выбирает тот же номер, и обе продолжают работу с дублирующимися идентификаторами.
Скил вызывается в двух местах: командой /dr-init для раннего обнаружения до записи каких-либо артефактов, и командой /dr-archive при обнаружении коллизии в момент финального коммита.
Область обнаружения
Проб выполняется по полному каноническому набору артефактов: tasks.md, backlog.md, activeContext.md, все per-task файлы в datarim/ и все архивные документы в documentation/archive/. Любое совпадение за пределами собственного набора вызывающей сессии сигнализирует о коллизии. Проб также различает более раннюю сессию того же оператора и реально параллельную, используя временные метки frontmatter и автора коммита — не только наличие файла.
Скил охватывает и случай хотфикса без вызова /dr-init. Перед любым git checkout -b с кандидатом в идентификаторы тот же проб должен подтвердить его свободность в бэклоге и архиве: кандидат может выглядеть свободным в контексте текущего разговора, однако уже быть зафиксированным как FU-задача в записи бэклога другой сессии.
Процедура разрешения
Проигравшая сессия (с меньшей временной меткой коммита или та, которую назначает оператор) получает новый идентификатор. Пакетная обработка sed переименовывает каждое вхождение старого идентификатора во всех телах артефактов за один проход. Затем git mv переименовывает сами файлы. Индексные записи в tasks.md и activeContext.md обновляются. Логи аудита верификации, уже заблокированные на запись post-stage-хардингом, требуют временного chmod u+w перед переименованием и соответствующего chmod a-w после.
Процедура завершается однострочной записью о коллизии в артефакте init-task переименованной сессии и финальным grep, подтверждающим отсутствие устаревших ссылок на старый идентификатор за пределами преднамеренных цитат как исторических свидетельств.
Что скил запрещает
Окно переименования открывается при обнаружении и закрывается при следующем коммите стадии. Переименование в процессе выполнения оставляет устаревшие ссылки в frontmatter снапшота и черновиках QA. Переименование только путей файлов через git mv без обновления тел артефактов приводит к несоответствию в frontmatter. Удаление артефактов проигравшей сессии также исключено — содержимое поддаётся восстановлению под новым идентификатором и не должно быть утеряно.
Смотрите также: команда /dr-init, где встроен проб, и пост что такое Datarim о жизненном цикле задачи.