Что произошло
Найдено 13.08.2026 на уже исправленной версии: предыдущий дефект этой же сверки (#414, сравнение ячейки статуса целиком) закрыт и проверен на месте — ложных расхождений стало 2 вместо 12. Спасибо. Оставшиеся два имеют другую причину.
python3 .claude/scripts/memory-drift-scan.py печатает:
Drift-scan (структурный): 2 расхождений
- РП-23: MEMORY.md=`⏸ ЗАБЛОКИРОВАН 11.08: ждёт внешнего вердикта…` vs WP-context=`blocked`
- РП-29: MEMORY.md=`⏸ ЗАБЛОКИРОВАН и снят с недели 11.08…` vs WP-context=`blocked`
Расхождения по существу нет: карточки обоих РП несут status: blocked, оперативная память говорит «ЗАБЛОКИРОВАН», реестр ставит ⏸. Все три источника согласны.
Где ломается
В normalize_status() две таблицы, и обе не покрывают случай:
_EMOJI_TO_STATUS (строки 59-64) знает 🔄 ⏳ 🏭 ⚠️ ✅. Значка ⏸ нет, 🚧 тоже нет — хотя ровно эти два платформа считает своими: scripts/build-active-wp.py держит их в ACTIVE_STATUSES (строка 46) и печатает в генерируемой легенде 🚧 = blocked, ⏸ = paused (строки 150-151);
_TEXT_STATUS_PATTERNS (строки 68-74) ищет только английские слова.
Значок без записи в словаре проваливается сквозь оба прохода, функция возвращает очищенную ячейку целиком, сравнение с blocked не совпадает.
Что ожидалось
Значок, который платформа печатает в собственной легенде активных статусов, распознаётся её же сверкой.
Плюс русские слова: .claude/rules/formatting.md требует русских статусов («НЕ: HIGH / MEDIUM / DONE. ДА: критический, высокий, выполнено»), поэтому английский словарь противоречит правилу самой платформы. Комментарий в скрипте (строки 55-58) приглашает расширять словарь по мере встречи новых значений — этим и пользуюсь.
Предлагаемое пополнение:
_EMOJI_TO_STATUS: ⏸, 🚧, 📦, ↗️, ❌, 🧪
_TEXT_STATUS_PATTERNS: «заблокирован», «ждёт», «в работе», «выполнено», «закрыт», «отменён»
Оговорка по ⏸. У генератора он означает «на паузе», у меня в реестре — «ждёт внешнего условия, часов не даётся». Если платформа держит паузу и блокировку раздельными состояниями, правильнее завести paused отдельным значением, а не сводить ⏸ к blocked. Это ваше решение: у меня обе формулировки описывают одно и то же.
Шаги воспроизведения
- В
MEMORY.md поставить в колонке статуса ⏸ ЗАБЛОКИРОВАН для РП, чья карточка несёт status: blocked.
- Прогнать
python3 .claude/scripts/memory-drift-scan.py.
- Сверка сообщает расхождение, хотя состояния совпадают.
Контекст
Что произошло
Найдено 13.08.2026 на уже исправленной версии: предыдущий дефект этой же сверки (#414, сравнение ячейки статуса целиком) закрыт и проверен на месте — ложных расхождений стало 2 вместо 12. Спасибо. Оставшиеся два имеют другую причину.
python3 .claude/scripts/memory-drift-scan.pyпечатает:Расхождения по существу нет: карточки обоих РП несут
status: blocked, оперативная память говорит «ЗАБЛОКИРОВАН», реестр ставит⏸. Все три источника согласны.Где ломается
В
normalize_status()две таблицы, и обе не покрывают случай:_EMOJI_TO_STATUS(строки 59-64) знает🔄 ⏳ 🏭 ⚠️ ✅. Значка⏸нет,🚧тоже нет — хотя ровно эти два платформа считает своими:scripts/build-active-wp.pyдержит их вACTIVE_STATUSES(строка 46) и печатает в генерируемой легенде🚧 = blocked,⏸ = paused(строки 150-151);_TEXT_STATUS_PATTERNS(строки 68-74) ищет только английские слова.Значок без записи в словаре проваливается сквозь оба прохода, функция возвращает очищенную ячейку целиком, сравнение с
blockedне совпадает.Что ожидалось
Значок, который платформа печатает в собственной легенде активных статусов, распознаётся её же сверкой.
Плюс русские слова:
.claude/rules/formatting.mdтребует русских статусов («НЕ: HIGH / MEDIUM / DONE. ДА: критический, высокий, выполнено»), поэтому английский словарь противоречит правилу самой платформы. Комментарий в скрипте (строки 55-58) приглашает расширять словарь по мере встречи новых значений — этим и пользуюсь.Предлагаемое пополнение:
_EMOJI_TO_STATUS:⏸,🚧,📦,↗️,❌,🧪_TEXT_STATUS_PATTERNS: «заблокирован», «ждёт», «в работе», «выполнено», «закрыт», «отменён»Оговорка по
⏸. У генератора он означает «на паузе», у меня в реестре — «ждёт внешнего условия, часов не даётся». Если платформа держит паузу и блокировку раздельными состояниями, правильнее завестиpausedотдельным значением, а не сводить⏸кblocked. Это ваше решение: у меня обе формулировки описывают одно и то же.Шаги воспроизведения
MEMORY.mdпоставить в колонке статуса⏸ ЗАБЛОКИРОВАНдля РП, чья карточка несётstatus: blocked.python3 .claude/scripts/memory-drift-scan.py.Контекст
.claude/scripts/memory-drift-scan.py