docs: устранены расхождения документов между собой и с кодом
- README разгружен: контракт HTTP API, таблицы БД, состояния задач и белый список отданы нормативным источникам ссылками - в `architecture.md` и `review.md` числа и механика захвата задачи заменены ссылками на `database.md`, а описание конвейера ревью — на прогон от 2026-08-11 - в `CLAUDE.md` и `security.md` поправлены границы домена, оценка объёма записи и адрес очереди задач
This commit is contained in:
+10
-7
@@ -21,6 +21,7 @@
|
||||
- **Очередь таблицей.** Состояние задачи лежит в SQLite, воркер забирает работу
|
||||
запросом с захватом. Внешний брокер не заводим: нагрузка — единицы записей в
|
||||
день (оценка владельца, не замер: `research/` пуст).
|
||||
<!-- канон: поведение → openspec/specs/pipeline -->
|
||||
- **Шаг конвейера идемпотентен по повтору.** Задача, брошенная на середине,
|
||||
достаётся снова по истечении срока захвата и проходит шаг заново.
|
||||
- **Ядро зависит от интерфейсов.** `internal/service` знает только
|
||||
@@ -87,7 +88,8 @@
|
||||
`transcriber_worker_job_count` с меткой `error="true"` и по логам контейнера.
|
||||
Отдельного оповещения нет.
|
||||
- **Характер потока:** непрерывный, но разреженный. Бот держит длинный опрос,
|
||||
три воркера опрашивают базу раз в секунду вхолостую.
|
||||
три воркера опрашивают базу вхолостую с паузой из
|
||||
[database.md](database.md), «Настройки с числовым значением».
|
||||
|
||||
## Единые точки проекта
|
||||
|
||||
@@ -136,8 +138,9 @@
|
||||
- **Долгие записи.** Потолок сегодня неизвестен и не замерялся: 20 МиБ на приём
|
||||
из Telegram — точно, ограничения `deferred-general` по длине — нет. Расчётный
|
||||
потолок проекта — шесть часов, и он взят с запасом, а не замером.
|
||||
- **Приём большого файла.** Форма читается целиком, предел
|
||||
`router.MaxMultipartMemory` — 32 МиБ, обрыв начинает загрузку заново.
|
||||
- **Приём большого файла.** Форма читается целиком, предел памяти под multipart
|
||||
задан числом в [database.md](database.md), «Настройки с числовым значением»;
|
||||
обрыв начинает загрузку заново.
|
||||
Загрузку частями разбирает разведка `chunked-upload-choice`; её выбор меняет
|
||||
публичный контракт приёма и потому идёт через решение в `adr/`.
|
||||
- **Учёт расхода.** Распознавание и языковая модель оплачиваются по факту, а
|
||||
@@ -152,10 +155,10 @@
|
||||
- **Видео.** Дорожку из видеофайла бот принимает по MIME-типу `video/`, но
|
||||
конвертер этот случай не проверялся.
|
||||
- **Очередь.** Принцип «очередь таблицей» и захват `FindAndAcquire` написаны
|
||||
вручную: захват не транзакционен, повторов с нарастающей паузой нет, число
|
||||
попыток не считается, очереди мёртвых задач нет. Пересматривается разведкой
|
||||
`job-queue-choice` — раньше смены хранилища, чтобы не переписывать захват
|
||||
дважды.
|
||||
вручную; чем именно захват несовершенен — [database.md](database.md),
|
||||
«Представление данных». Не решено здесь другое: пересматривать ли модель
|
||||
очереди целиком — разведка `job-queue-choice`, раньше смены хранилища, чтобы
|
||||
не переписывать захват дважды.
|
||||
- **Наблюдаемость.** `/metrics` остаётся и развивается. Чем — дописывать
|
||||
счётчики через `client_golang` или перейти на OpenTelemetry с трассировкой —
|
||||
решает разведка `opentelemetry-fit`. Коллектор был бы процессом, которого в
|
||||
|
||||
Reference in New Issue
Block a user