WEB-431 · Дефект · Инфраструктура · web
Правило 10: сеятель фикстур молча возвращает успех при нуле фрагментов (нет ключа embeddings)
Закрыт
P1 · важно
ведёт: —
Суть
# Что случилось
scripts/r8-synthetic-fixture.ts (канонический сеятель корпуса батареи ролей) при отсутствии ключа OpenAI печатает для каждого документа «+ имя 0 chunks», пишет расписку и завершается кодом 0.
Ошибка есть и она подавлена: Error processing document: AuthenticationError: 401 You didn't provide an API key — в generateEmbeddingsBatch.
# Почему это дорого стоило
29.08 из-за этого батарея ролей на проде дала 5 из 50: документы создались (58 штук), фрагментов не было ни одного, прод отвечал 409 no semantic index. Сеятель отрапортовал успехом, и причину искали в подписи фрагментов и в индексе, а не в отсутствии ключа.
# Требование
1. Ненулевой код возврата, если хоть один документ обработан с ошибкой.
2. Итоговая строка обязана называть число документов с нулём фрагментов.
3. Отказ на старте, если режим live, а ключ провайдера не задан — ДО записи в базу.
4. Негативный тест: запуск без ключа обязан падать; на текущем коде он проходит.
# Как воспроизвести
Запустить сеятель с . shared/.env, но БЕЗ . shared/.env.local (там живёт OPENAI_API_KEY): получите 0 chunks и код 0.
Как воспроизвести
Запуск сеятеля без shared/.env.local: каждый документ печатает 0 chunks, процесс завершается кодом 0, ошибка 401 подавлена.
Чем закрывается (приёмка)
Запуск без ключа провайдера завершается ненулевым кодом и явным сообщением ДО записи документов; негативный тест падает на старом коде и проходит на новом.
Доказательства
[29.08 20:20Z] Волна SEEDFAIL поставлена (queue/688): ненулевой exit при нуле фрагментов/ошибке провайдера, итоговая строка со счётом, правило 10.
[29.08 23:30Z] ACCSEEDFAIL GO — линия закрыта: сеятель падает ненулевым кодом при нуле фрагментов/ошибке провайдера, счёт честный, реальный прогон против заглушки. В l72 (скрипт-инструментарий). Цепочка: находка 29.08 утром → SEEDFAIL 83556495 → GO.
Лента
2026-09-03T07:18:44.331Z · Fable[A1 12:48 Фабл] Триаж 03.09 (owner: «чего они ждут — срочно принимайте, сажайте»): линия в проде l95 (SEEDFAIL 83556495 — предок l95-candidate f7b9a4fd, посадка через l71/l72/l73); доска не была переключена. Закрываем.
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-431","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-03T07:18:44.358Z