Tech Troubleshooting:registry drift

From wikibase

Проблема: 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). Без файловой блокировки последняя запись перезаписывает изменения других агентов.

Сценарий:

  1. Агент A читает registry (фаза: STRESS_TEST)
  2. Агент B читает registry (фаза: STRESS_TEST)
  3. Агент A записывает COLLIDE (новая фаза)
  4. Агент B записывает STRESS_TEST (обновление metadata, но старая фаза)
  5. Результат: фаза 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 завершён"

Этот скрипт:

  1. Берёт файловую блокировку (fcntl.flock) перед чтением
  2. Проверяет текущую фазу и корректность перехода
  3. Пишет во временный файл, затем атомарно переименовывает (os.rename)
  4. Логирует все изменения

Нормализация: если drift уже произошёл[edit | edit source]

  1. Остановить всех агентов, которые пишут в registry
  2. Проверить логи: grep advance_phase /opt/agent-workspace/logs/*.log
  3. Определить корректную фазу по логам и состоянию задач
  4. Вручную установить правильную фазу через advance_phase.py --force
  5. Перезапустить агентов

Предотвращение[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 — текущее состояние креативного цикла