удалён вход Telegram, владелец записи стал обязателен в схеме
- убраны клиент бота, транспорт обновлений, отправитель сообщений, сборка входа при старте, секция настроек и зависимость go-telegram-bot-api; из конвейера ушла доставка ответа отправителю — исход виден опросом готовности. Колонки адресата и значение источника остались в схеме: применённые шаги не переписываются - шаг 202608140003 запрещает пустого владельца у аудиозаписи и у файла; существующие строки он не проверяет, и это принято сознательно — искать их надо запросом до выкладки - ревью нашло два пред-существующих дефекта, оба закрыты: пустой второй ответ распознавателя стирал сохранённую расшифровку, а пустая расшифровка перестала быть заметной вместе с убранной доставкой. Попутно поднят golang.org/x/image до v0.45.0 — красный шаг vulns, воспроизводился и на чистом master
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
# Обязательность владельца держит схема, а не приём
|
||||
|
||||
- **Дата:** 2026-08-15
|
||||
- **Источник:** openspec/changes/archive/2026-08-15-remove-telegram-intake/design.md,
|
||||
разделы «Схема теряет только необязательность владельца» и «Владелец записи
|
||||
перестаёт быть необязательным и в модели»
|
||||
|
||||
## Решение
|
||||
|
||||
Колонка владельца у аудиозаписи и у файла перестала принимать пустое значение —
|
||||
шагом схемы `202608140003`. Ничья запись не заводится ничем: ни приёмом, ни
|
||||
конвейером, ни рукой в панели. Поле владельца в модели стало обычной строкой
|
||||
вместо ссылки, которой позволено отсутствовать.
|
||||
|
||||
Существующие строки шаг **не проверяет**, и это принято сознательно: искать ничьи
|
||||
строки надо запросом до выкладки.
|
||||
|
||||
## Почему
|
||||
|
||||
Цитата источника:
|
||||
|
||||
> **Держать обязательность одним приёмом, схему не трогать.** Так было задумано
|
||||
> сперва, и это оставляло дыру: ничью запись заводили руками в панели, она
|
||||
> уходила в конвейер, стоила денег на распознавание и не доставалась потом
|
||||
> никому. Решение владельца от 2026-08-14 — обязательность держит схема.
|
||||
|
||||
Прежнее решение было обратным и записано спекой `storage`: «Колонка MUST
|
||||
допускать пустое значение… Обязательность для приёма по HTTP держит сама
|
||||
capability `intake`, а не схема». Цену за него платили записи входа Telegram — у
|
||||
них владельца не было по построению. Вход убран
|
||||
([ADR-2026-08-15-telegram-intake-removed-temporarily](ADR-2026-08-15-telegram-intake-removed-temporarily.md)),
|
||||
исключение исчезло вместе с ним, и владелец сервиса подтвердил, что записей без
|
||||
владельца в боевой базе нет.
|
||||
|
||||
Про непроверку существующих строк цитата источника:
|
||||
|
||||
> **Проверяется это запросом, а не прогоном шага**, и разница выяснилась ревью с
|
||||
> оракулом: хранилище держит обязательность связи проверкой записи при
|
||||
> сохранении, а не ограничением таблицы. Смена признака на базе с ничьей записью
|
||||
> проходит зелёным и такую запись оставляет… Заставить шаг считать строки самому
|
||||
> владелец решил не делать: безопасность держится ручной проверкой, и она названа
|
||||
> первым шагом плана перехода.
|
||||
|
||||
Правило «пустой владелец не совпадает ни с одной записью» при этом осталось и
|
||||
избыточным не стало: схема запрещает **заводить** ничью запись, а правило —
|
||||
**спрашивать** ничьим именем.
|
||||
|
||||
## Последствия
|
||||
|
||||
- `+` значения «владельца нет» не существует ни на одном уровне: ни в схеме, ни в
|
||||
модели, ни в отборе.
|
||||
- `+` дыра «ничью запись заводят руками в панели» закрыта тем же механизмом, что
|
||||
и приём, — одним, а не двумя.
|
||||
- `−` откат шага возвращает необязательность, но операционно недостижим: команд
|
||||
библиотеки сервис не подключает, и это верно для всех шагов схемы проекта.
|
||||
- `−` ничья запись, если её проглядят перед выкладкой, становится незакрываемой:
|
||||
захват выдаёт её воркеру, а всякое сохранение — включая то, которым ставится
|
||||
признак остановки, — отказывает. Следа не остаётся ни в метрике, ни в журнале
|
||||
событий, только строка в логе контейнера.
|
||||
Reference in New Issue
Block a user