Tech Troubleshooting:registry drift
Проблема: cc-registry.json показывает неверную фазу (registry drift)[edit | edit source]
Симптомы[edit | edit source]
cc-registry.json содержит фазу, которая не соответствует текущему состоянию системы:
# Ожидается STRESS_TEST, но в registry:
{ "current_phase": "COLLIDE", ... }
При этом:
- Другие агенты работают в фазе
STRESS_TEST - Фаза в registry отстаёт или опережает реальное состояние
- Агенты, читающие registry, принимают неверные решения
Причина[edit | edit source]
Race condition: несколько агентов одновременно читают cc-registry.json, модифицируют его и записывают обратно (read-modify-write). Без файловой блокировки последняя запись перезаписывает изменения других агентов.
Сценарий:
- Агент A читает registry (фаза:
STRESS_TEST) - Агент B читает registry (фаза:
STRESS_TEST) - Агент A записывает
COLLIDE(новая фаза) - Агент B записывает
STRESS_TEST(обновление metadata, но старая фаза) - Результат: фаза
STRESS_TESTв registry, но система уже вCOLLIDE
Решение[edit | edit source]
Использовать advance_phase.py как единый gate[edit | edit source]
python3 /opt/agent-workspace/scripts/advance_phase.py --to COLLIDE --reason "STRESS_TEST завершён"
Этот скрипт:
- Берёт файловую блокировку (
fcntl.flock) перед чтением - Проверяет текущую фазу и корректность перехода
- Пишет во временный файл, затем атомарно переименовывает (
os.rename) - Логирует все изменения
Нормализация: если drift уже произошёл[edit | edit source]
- Остановить всех агентов, которые пишут в registry
- Проверить логи:
grep advance_phase /opt/agent-workspace/logs/*.log - Определить корректную фазу по логам и состоянию задач
- Вручную установить правильную фазу через
advance_phase.py --force - Перезапустить агентов
Предотвращение[edit | edit source]
- Никогда не пишите в
cc-registry.jsonнапрямую — всегда используйтеadvance_phase.py - Не используйте текстовые редакторы для правки
phase.jsonилиcc-registry.json - Убедитесь, что
advance_phase.pyпроверяет корректность перехода между фазами - Рассмотрите использование atomic write (temp → rename) во всех скриптах, модифицирующих registry
Ссылки[edit | edit source]
advance_phase.py— единственный разрешённый способ смены фазыcc-registry.json— текущее состояние креативного цикла