Конфликт редактирования Skill
Что это
При открытии редактор запоминает SHA-256 источника и всего каталога. Перед save
сервер снова сравнивает оба значения. Если хотя бы одно изменилось, он возвращает
skill_edit_conflict и не пишет файл. Это штатная optimistic-concurrency защита.
Симптом
Вместо успешного save интерфейс показывает, что skill изменился после открытия редактора. При разрешённом disclosure видны:
- ваш предложенный текст;
- текущий текст на диске;
- diff между ними;
- expected и current catalog/source hashes.
Если sensitivity policy запрещает раскрытие, текст и diff withheld; сам конфликт всё равно блокирует запись.
Вероятная причина
Файл изменил другой редактор, другая сессия или checkout. Либо изменился другой
объект каталога, поэтому expected_catalog_sha256 больше не совпадает с текущим.
Безопасное решение
- Не пытайтесь повторить save со старыми hashes.
- Изучите обе версии и diff; ваша версия остаётся видимой в блоке конфликта.
- Нажмите «Загрузить актуальную основу». Редактор заменит рабочую основу актуальным содержимым и свежими catalog/source hashes, но не выполнит merge.
- Вручную перенесите нужные фрагменты из показанной пользовательской версии.
- Откройте новый preview и сохраните со свежими hashes.
raytsystem не делает automatic merge инструкций: такой merge может незаметно изменить полномочия или процедуру.
Ожидаемый результат
После save со свежими hashes возвращаются новые source/catalog SHA-256 и revision/audit IDs.
Эффективный test status будет pending, пока отдельный verifier не зафиксирует проверку.
Ограничения и безопасность
- Отклонённая операция ничего не перезаписывает.
- Повтор с тем же idempotency key и тем же payload не создаст вторую revision.
- Не меняйте hash вручную и не обходите conflict прямой записью в
SKILL.md.
Когда открыть issue
Откройте issue, если конфликт повторяется при единственной сессии сразу после нового
preview. Приложите typed error code, skill_id и только hashes; не публикуйте restricted content.
Связанные страницы
Источники истины
src/raytsystem/skill_authoring.pyweb/src/features/SkillDetailView.tsx