# 🔬 Адрес объекта в тексте отказа SpeechKit

- **Тип:** research
- **Категория:** Очередь — Тот же род утечки в журнал, но вне темы входа — идёт следом за ней.
- **Зачем:** Текст отказа операции приходит от Yandex и уезжает в журнал и в колонку error_text: если он несёт URI объекта, из журнала снова собирается ссылка на чужую запись.
- **Теги:** review-2026-08-23

Гипотеза ревью задачи `pocketbase-storage` 2026-08-12, оставшаяся без оракула:
поднять настоящий отказ Yandex нечем, а прогон на реальных ключах запрещён.
Собственные цепочки отказов задача оборвала — чтение из хранилища и выгрузка в
Object Storage больше не называют ключ, — но текст, пришедший **чужими руками**,
идёт в журнал и в задачу как есть.

Подтверждено прогоном ревью `config-test-headers-login` 2026-08-23: та же
находка пришла второй раз. Оракула у неё нет и быть не может — нужен
настоящий SpeechKit, а прогон на реальных ключах запрещён («Yandex Cloud за
деньги»).

## Вопрос

Несёт ли текст отказа операции распознавания адрес объекта, который мы отдали
SpeechKit, и в каких случаях? Если несёт — чем его отсечь, не потеряв причину
отказа: разбором по образцу, перечнем известных кодов отказа или отказом писать
чужой текст вовсе.

## Куда ляжет ответ

- Наблюдение с командой и условиями — записка в `docs/research/`, рядом с
  `pocketbase-defaults.md`.
- Если адрес приходит — норма в спеку `storage`, требование «Файл отдаётся
  ссылкой», и строка в `docs/security.md`, раздел «Из чего строятся пути и
  ключи»; сама правка — отдельной задачей.
- Если не приходит — строка в ту же записку, чтобы гипотезу не поднимали заново.

## Рамки

Реальные ключи Yandex и боевые данные не трогаем. Отказ придётся вызывать
дешёвым способом: битый объект, объект вне бакета, отозванный доступ — что из
этого доступно, решается по ходу. Цена прогона в деньгах называется до запуска.
