drift-handlinglisted
Install: claude install-skill Orange-hanter/cod-doc
# Skill — Drift handling
## Когда подгружается
Задачи / контексты, где появляется расхождение между БД-проекцией и
файлом на диске, либо устаревший хэш в гибридной ссылке.
Триггер-keywords: `drift`, `stale`, `broken`, `hash`, `mismatch`,
`sha:`, `verify`, `projection_hash`, `update_master_hashes`,
`check_stale_refs`.
## Канонические статусы (`doc_drift`)
| Статус | Что означает | Что делать |
|--------|-------------|-----------|
| `in_sync` | DB content hash == projection_hash == file hash | ничего |
| `stale_export` | DB content изменился относительно последней экспорт-проекции | `doc.export(force=False)` или `force=True` после ручной проверки — но сперва проверь ADO-022 (ниже) |
| `edited_in_place` | Файл правился в обход revision-flow (file hash расходится с projection_hash) | reconciliation-flow: либо `import_document`, либо ручной merge с записью revision |
| `missing` | Файл удалён | если дока удалили — `doc.deprecate`; если случайность — восстановить из git history |
## Канонические статусы (`check_stale_refs`)
| Статус | Что делать |
|--------|-----------|
| `VALID` | OK |
| `STALE` | хэш в `MASTER.md` устарел → `update_master_hashes` после проверки контента |
| `BROKEN` | файл отсутствует на диске → задача восстановления через `task_create` |
## Алгоритм при обнаружении drift'а
1. Читать текущий статус через `doc_drift(doc_key)`.
2. Если `stale_export` и контент в БД — source of truth → `doc_export`.
3. Если `edited_in_place`:
a. Прочитать файл и DB-conten