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 |
## Осиротевшие секции — сигнал рядом со статусом, не пятый статус (ADO-213)
`doc_drift` отдаёт `orphan_sections` — якоря секций уровня 2, которые есть в
БД и которых уже нет в файле. Считается **независимо** от четырёх статусов, и
это не педантизм: четвёрка партиционирует состояния хэша контента, а
осиротевшая секция проходит сквозь все четыре. `doc_accept` пиннит хэш файла в
`content_sha256_head`, файл продолжает совпадать с пином — и документ вечно
читается `in_sync`, пока в его теле в БД лежат раз