Дебаг прода с 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 в дебаге не помогает
- Лог в бинарном формате без декодера. Нужны сначала ваши скрипты.
- Гонки, проявляющиеся раз в неделю. Здесь нужна Jepsen/race-детектор, а не разговор.
- Аппаратные ошибки (ECC, диск). Только метрики и hardware-telemetry.
- Бизнес-логические аномалии («у этого клиента баланс не сходится»). Это поиск по данным, а не по коду.
- Перформанс. Профайлер и flame-graph — не место для модели.
- Сетевые гонки на уровне TCP RST. tcpdump + опытный человек.
«Дебаг — это сужение пространства гипотез. Хороший ассистент сужает быстрее, не сужая случайно мимо ответа».
Что сохранять в 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 →