WEB-020 · Дефект · UX · web
[owner] Автотеги сыпят кучу баннеров + «Не удалось сохранить в облако — работаем локально, повторим» (стек)
Закрыт
P2
ведёт: —
Суть
Owner 11.08 ~11:43: при генерации авто-тегов вылетает МНОГО баннеров разом, среди них стеком «Не удалось сохранить в облако — работаем локально, повторим» (скрин: 3+ белых тоста друг на друге). Сами теги при этом успешно генерятся и садятся на файл. Две составляющие: (1) UX — баннер-шторм на одно действие (связка с WEB-015 про незакрывающиеся тосты); (2) ВОЗМОЖНО РЕАЛЬНАЯ ошибка cloud-sync при сохранении тегов — проверить серверные логи: почему save в облако фейлится и ретраится. Прод на момент репро: линия 5aa52cf.
## 2026-08-23 13:35 UTC — живая UI-приёмка (M4 uibatch, маркер UIBATCH_DONE, против v4-4482925)
**NOT-REPRO** — пассивное наблюдение notebook-страницы 180с (снимки на 0/60/120/180с): ни одного alert/toast, «Не удалось сохранить в облако» не появился, page errors=0, только GET /api/sync?mode=summary 200. Держим в in_progress до второй сессии наблюдения в момент реального автотегирования (наблюдали без запуска тегов).
## 2026-08-23 16:12 UTC — баннер воспроизведён owner: корень = sync-регресс WEB-311B
«Не удалось сохранить в облако — работаем локально, повторим» у owner (не в приватном окне) на v4-00c402c = следствие падающего /api/sync (void-десериализация advisory-lock). Наш NOT-REPRO в uibatch был честным (тогда sync работал — GET 200; ломает WRITE-path). После посадки 33.1 баннер должен уйти сам; перепроверить.
## 2026-08-23 18:10 UTC — баннер ушёл после 33.1 (owner подтвердил в WEB-311). Остаётся исходный вопрос автотегов — держим отдельной проверкой при реальном автотегировании.
## 2026-08-23 BOARDSWEEP: IN_PROGRESS-LIVE
- Evidence: updatedAt=2026-08-23T11:52:24.462Z, within 24h; owner auto-tag symptom has current activity. No status change.
- buildFixed: v4-9379375; canonical: v4-081ff4fb5 / 081ff4fb5f6110f8001daec7ed910ccef2e395dc.
- Status preserved by sweep: in_progress.
Доказательства
[2026-08-26 09:25Z] Волна web020 (наблюдение владельца): шквал баннеров при автотегах -> один агрегированный итог с дедупом; отдельно ДОКАЗАТЬ настоящий корень «Не удалось сохранить в облако» (гипотезы: гонка автосейва с автотегами, конфликт версий документа, отказ записи) — банер не прятать до доказательства корня.
[2026-08-26 10:02Z] КАРТА ДЛЯ НУЛЕВОГО АГЕНТА (как войти в задачу с нуля):
Бокс A1: ssh a1nc. Родительское дерево /home/ubuntu/waves/wt-l40 (из него делаются worktree: git -C /home/ubuntu/waves/wt-l40 worktree add <путь> <ветка>). Запуск работника: ~/codex-a1.sh exec -m gpt-5.6-luna -c model_reasoning_effort=xhigh --dangerously-bypass-approvals-and-sandbox "$(cat <бриф>)"; работа держится в tmux (tmux ls), логи /home/ubuntu/waves/<имя>-codex.log, отчёты /home/ubuntu/waves/<ИМЯ>-REPORT.md, готовность = маркер-ФАЙЛ <ИМЯ>_DONE (не строка в отчёте!).
Ветка web020, worktree wt-web020. Источник: наблюдение владельца — шквал баннеров при автотегах + ошибка «Не удалось сохранить в облако». ДВА разных дефекта, не смешивать. Баннеры: уведомление на каждый тег вместо одного агрегированного. Ошибка сохранения: НЕ прятать баннер, сначала доказать корень (гипотезы: гонка автосейва с автотегированием, конфликт версий документа, отказ записи). Как доказывать: N тегов -> ровно 1 итоговое уведомление (привести N); воспроизведение ошибки в тесте до фикса и прохождение после; конкурентный автосейв+автотеги не теряют пользовательский текст.
ПРАВИЛА ДОМА: (1) приёмку делает НЕ автор и НЕ прежний приёмщик, со СВОИМИ новыми тестами и обязательным НЕГАТИВНЫМ тестом (проверка, которая всё пропускает, ничего не стоит); (2) отсутствие ошибок != фича жива, нужен сквозной пруф; (3) починка одного слоя != починка фичи; (4) правило 10 — catch без лога и маячка запрещён; (5) монетарные файлы и цены не трогать без отдельного решения; (6) прод/деплой/платные вызовы — только по явному разрешению.
[2026-08-26 14:35Z] ХЕНДОФФ ПОД КОМПАКТ: полное состояние в /Users/annakorin/Downloads/HANDOFF-COMPACT-2026-08-26.md. ⚠️ АВАРИЯ A1 (с ~09:30Z): бокс не пускает по ssh. Волна по этому тикету была запущена на A1 и её состояние НЕИЗВЕСТНО до восстановления. Бриф сохранён — волна перезапускается той же постановкой. Доказано: диск НЕ полон (74%, свободно 52ГБ), IP НЕ забанен (отказ и с M1, и с Pi), инстанс RUNNING, консоль гипервизора отвечает мгновенно; версия — повреждение ФС после жёсткой перезагрузки. Работа на диске не потеряна.
## 2026-08-28 ~10:55Z — ПРИЁМКА GO (координатор Фабл)
Волна web020 починила: поток баннеров автотегов сведён к одному итогу; ложная тревога «Не удалось сохранить в облако» разведена на три случая (облако не подключено → молчим; сохранение прошло → не пугаем; реальный отказ → одно внятное сообщение).
Независимая приёмка ACC020 = **GO**. Проверялись собственные входы приёмщика: три случая облака по отдельности (включая смоделированный настоящий сбой — сигнал не заглушен вместе с шумом), много тегов сразу, повторное сохранение подряд, частичный успех.
Состояние принято по перенесённому дереву автора (база e857b22f — у автора отличалась от линии).
СТАТУС: принято приёмкой, **на прод не посажено**. Ждёт ближайшей посадки.
[28.08 17:56Z Фабл] ⭐ ПОСАЖЕНО В l64 (прод arm64-l64-20260828T171744Z, sourceCommit 6508f013, artifact 8ff3f64c, подпись owner-prod-ed25519-6508f013-l64 проверена продом). paidReady=true/enforce_ready, fails=[], внешние пробы: / 307, /login 200, live-sha=6508f013. Откат: standalone-artifact.conf.bak-before-l64-20260828T175353Z.
Замечен в сборке
v4-80e8b5a
Починено в
v4-9379375
Лента
2026-08-19T10:35:11.448Z · backup-opuswqa16 19.08 (прод 22-я): ВНИМАНИЕ — тикет был в статусе done, но сценарий УПАЛ живьём. Вернул в in_progress. Нужен разбор: регрессия после закрытия либо метод проверки не соответствует скоупу. Трейл: /home/ubuntu/waves/wqa16.log (A1).
2026-08-19T20:25:31.859Z · backup-opusscreensfix 19.08 на 24-й: ВОСПРОИЗВЕЛОСЬ, но симптом ДРУГОЙ. Заявленного «шторма баннеров + Не удалось сохранить» НЕТ: 7 живых нажатий на реальный контрол сайдбара за 4 прогона, перепись тостов через MutationObserver поставлена ДО загрузки приложения → отрендерилось 0 тостов, 0 «Не удалось сохранить». Вместо этого — ПОЛНОСТЬЮ НЕМОЙ ОТКАЗ: POST /api/auto-tag 7 из 7 = 400, тело {code: LLM_REQUEST_REJECTED, reason: request_identity_missing}. КОРЕНЬ ТОТ ЖЕ, что WEB-263: /api/auto-tag не обёрнут в runHttpBillingRequestContext и зовёт meterOpenAIClient без logicalActionKey/callsiteId (auto-tag/route.ts:63-70); роут корректно маппит в 400 (:103-110); клиент показывает общий текст (Sidebar.tsx:1352), теряя сообщение сервера. Шторма быть НЕ МОЖЕТ: фиксированный toast-id auto-tag-status (Sidebar.tsx:1331,1334,1352), массовый путь зовёт ту же функцию последовательно — тот фикс, по которому тикет закрывали, НА МЕСТЕ и работает. НЕЛЬЗЯ закрывать как done: автотеги на 24-й не работают. СТОП — платный контур, нужно решение владельца.
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-020","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-28T17:55:20.753Z