Главная  /  Статьи  /  Debug

Дебаг прода с Vibe Codex: от трейса до фикса

Хороший дебаг — это вопрос «почему именно сейчас?», а не «что сломалось?». На второй вопрос ответы дешёвые и часто неверные.

Прод сломался в 03:47. Дежурный включил телефон, открыл лог, увидел десять тысяч строк. Vibe Codex здесь — не «волшебный детектив», а очень дисциплинированный соведущий: помогает прочитать, сформулировать гипотезу, воспроизвести и проверить.

Шаг 1. Сворачиваем шум

Первая ошибка дебага — читать лог построчно. Это путь к выгоранию. Vibe Codex берёт хвост и сводит его до пары абзацев.

$ kubectl logs payments-api-7fb8 --tail=2000 \
   | vibe-codex log-summarize
[opus] За последние 12 минут:
  - 1 panic: nil-pointer в orderCache.Get (3 раза)
  - 412 ошибок UPSTREAM_ETIMEDOUT в Yandex Kassa
  - 89 предупреждений «slow query» от Postgres (>500ms)
  - 14 «context canceled» в worker.Process

Похоже на двойной инцидент:
  A) Kassa отдаёт таймауты (внешнее).
  B) При попытке ретрая попадаем в код, где orderCache nil
     после рестарта — нашли регрессию от деплоя в 03:23.

Шаг 2. Гипотезы, а не «диагноз»

Vibe Codex выдаёт не один «ответ», а гипотезы — с весом и проверкой.

[opus] Три гипотезы:

H1  «Kassa просто отлегла, всё прошло само»
     вес: 30%
     проверка: rps_errors на их side, статус-страница

H2  «Регрессия в деплое 03:23 — orderCache не init»
     вес: 55%
     проверка: diff между текущим SHA и предыдущим,
               grep "orderCache" — есть ли изменения

H3  «Сетевой инцидент в IXC»
     вес: 15%
     проверка: latency-метрики на других внешних

Шаг 3. Локальная репродукция

Гипотеза без воспроизведения — это поверье. Vibe Codex сам собирает минимальный тест-кейс.

$ vibe-codex repro --hypothesis H2 \
                  --since 03:23 --service payments-api
[plan] reproduction:
   1) bash: docker compose up -d postgres redis
   2) запуск без вызова orderCache.Init
   3) HTTP POST /orders с минимальным payload
[run]
   ...
   panic: runtime error: invalid memory address [recovered]
[result] баг воспроизведён локально.

Шаг 4. Минимальный фикс

Соблазн в 4 утра — «давайте просто закроем nil-чек на всём пути». Vibe Codex делает минимально нужное, оставляет вопросы на утро.

$ vibe-codex fix --reproducer ./repro_test.go --minimal
[diff] 6 lines changed in internal/order/cache.go

func (c *Cache) Get(id int64) (*Order, error) {
    if c == nil || c.store == nil {
        return nil, ErrCacheNotInitialized
    }
    ...
}

[note] это hot-fix. Корневая причина — почему Init() не
       вызывается в новом entrypoint, требует отдельного
       расследования на ясную голову. Открыт тикет PAY-2891.

Шаг 5. Pre-mortem перед мерджем

Перед коммитом ассистент ещё раз спрашивает себя: «что эта правка может сломать?». Это та самая «pre-mortem», которую обычно забывают в 4 утра.

[opus] Пре-мортем:
  + правильно: nil-чек добавляет ясный errno вместо panic
  - риск: ErrCacheNotInitialized теперь полезет в API-ответ.
          В контроллере его нужно мапить в 503, иначе
          получатели видят 500 «internal».
[fix]   добавил mapping в exception advice.

Шесть мест, где Vibe Codex в дебаге не помогает

«Дебаг — это сужение пространства гипотез. Хороший ассистент сужает быстрее, не сужая случайно мимо ответа».

Что сохранять в incident notes

После любого инцидента Vibe Codex сам собирает шаблон post-mortem: timeline, гипотезы, фактическая корневая причина, что сделали, что не сделали, action items.

$ vibe-codex postmortem from-session
[written] docs/incidents/2026-05-12-payments-nil-pointer.md

Дисциплина против скорости

В 4 утра соблазн — забить и закрыть. В 11 утра вы об этом пожалеете. Vibe Codex здесь полезен именно тем, что не торопит: предлагает «сделать минимально и записать», а не «герой ночи закатил эпический фикс».

Дебаг — это не про блестящий момент, когда «я нашёл!». Это про скучные шаги: прочитать лог, сформулировать гипотезу, воспроизвести, исправить, записать. Vibe Codex ускоряет каждый шаг и почти не даёт пропустить ни одного. Этого достаточно.

Готов попробовать?

brew tap xrouter-chat/tap && brew install vibe-codex — и за 30 секунд ты в деле.

Поставить Vibe Codex →