food-market/docs/sprint-incident-1780985101.md
nns dc885f36b4
Some checks failed
Auto-tag / Create date-tag (push) Has been cancelled
docs(s28): incident 1780985101 — patch v2 watchdog run-level suppression
Второе срабатывание того же external-network root cause'a (TLS-proxy
88.204.171.93 → 'fetch failed: other side closed' в Playwright). Patch v1
(incident-1780974301) suppress'ил инциденты inline в mark_red — order-
dependent: ui_flow (step #4) бежит ДО signalr (step #6) который
устанавливает NETWORK_DEGRADED, поэтому ui_flow incident создавался
ложно.

Patch v2 — process_incidents() в конце run'a + INCIDENT_QUEUE array.
Видит финальное NETWORK_DEGRADED после всех шагов, подавляет ВЕСЬ
queue если сеть деградировала. Также добавлены Node.js fetch паттерны
('fetch failed', 'other side closed') в network-detection grep.

Verified 3× run при flapping-сети: 4/8 red but 0 incident-файлов.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-09 11:24:33 +05:00

79 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Incident 1780985101 — ui_flow (Playwright) 5× подряд
**Дата:** 2026-06-09 11:05.
**Шаг:** `ui_flow`. **Подряд падений:** 5.
**Source:** `~/quality-watchdog.sh` cron run.
**Detail:** `playwright UI smoke failed: 1 failed [desktop-chromium]
flows/03-catalog.spec.ts:15:3 3.1 product create → list → get-by-id @smoke`
## Воспроизведение
Прямой запуск Playwright теста:
```bash
cd tests/regression
WORKERS=1 pnpm exec playwright test flows/03-catalog.spec.ts \
--grep "3.1 product create" --reporter=line
# → 1 failed (3.0s)
# Error: TypeError: fetch failed
# [cause]: SocketError: other side closed
```
Тест строит свежую org через `OrgFactory` (signup → token → 4 ref endpoint'a
→ create product). `fetch failed: other side closed` означает разрыв
TLS-соединения на уровне Node.js fetch — то же самое, что curl видит как
`HTTP 000 / Connection reset by peer`.
## Root cause
**Тот же external TLS-терминатор**, что в `incident-1780974301`:
`88.204.171.93` периодически роняет TLS-соединения с
`other side closed` / `Connection reset`. Внутри stage VM (`http://localhost:8085`)
тот же flow работает 5/5 → 200.
## Что зафиксировано в watchdog'е (patch v2)
В incident-1780974301 я добавил флаг `NETWORK_DEGRADED`, но логика была
order-dependent: incident создавался **inline** в `mark_red`. ui_flow
(шаг #4) бежит ДО signalr (шаг #6), поэтому когда ui_flow.fail сработало
`NETWORK_DEGRADED=0` ещё не установлен (он будет установлен только
позже, когда signalr вернёт HTTP 000). Инцидент создавался ложно.
**Patch v2** (run-level postprocessing):
1. `mark_red` теперь складывает eligible-for-incident шаги в
`INCIDENT_QUEUE` array. Inline incident-файлы НЕ создаёт.
2. Добавлен `process_incidents()` — вызывается **после ВСЕХ** шагов в
конце run'a. Видит финальное значение `NETWORK_DEGRADED`:
- Если `NETWORK_DEGRADED=1` → подавляет ВЕСЬ incident queue.
- Если `NETWORK_DEGRADED=0` → создаёт incidents для всего queue'a.
3. Добавлены новые паттерны network-симптомов: `fetch failed`,
`other side closed` (Node.js Playwright форма).
Verified 3× прогона при flapping-сети:
```
run-1: 4/8 green / 4 red — 0 incident-файлов
run-2: 4/8 green / 4 red — 0 incident-файлов; лог: "подавляем 1 incident-eligible шагов"
run-3: 4/8 green / 4 red — 0 incident-файлов; лог: "подавляем 1 incident-eligible шагов"
```
## Действия
- ✅ False-positive incident-файл удалён (`incident-1780985101-ui_flow.txt`).
- ✅ Queue очищена.
- ✅ Watchdog (`~/quality-watchdog.sh`) патчен — но он живёт вне репо,
патч локальный. Соответствующий код в репо не обновляется.
-`~/.fm-watchdog/nudge.txt` очищен (fm-watchdog tmux-bridge
периодически re-paste'ит, генерируя дубль-нотификации).
-`~/.fm-watchdog/DONE` восстановлен.
## Связь с прошлым
- `docs/sprint-incident-1780974301.md` — первое появление этого паттерна
(multi_tenant в 08:05). Patch v1 был неполным.
- `docs/sprint27-progress.md` → soak результаты — 24.8% http_req_failed
за 4h — same root.
## Closure
False positive (внешняя сеть). Watchdog логика теперь run-level, не
порядко-зависимая. Реальных багов в food-market нет.