Правки финального ревью: умолчания subject'ов не названы фактическими

M-3: докстринги worker.py не называют умолчание фактическим subject'ом.
T7.1: выровнены переносы докстринга core/nats.py.
M-5: CLAUDE.md помечает files.tabular_parsed как умолчание.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Andrey Epifancev 2026-10-13 13:26:44 +04:00
parent 0ef4a8a6bc
commit c10f927730
3 changed files with 6 additions and 7 deletions

View File

@ -9,7 +9,7 @@
распознанный документ), склеить и сохранить сырой ответ в S3 `raw/{job_id}.json` (в БД не регистрируется), очистить
горячую папку (только при `SCAN_CLEANUP=true`), нормализовать в `../docs/contracts/recognition-result.schema.json`
(`statementDocument` v1.2: по одному документу на таблицу `table_structure[i]`), опубликовать `files.tabular_parsed`
(`done` / `needs_check` / `error`). Таймаут → ошибка `TIMEOUT` по `min(reply_deadline, старт + SCAN_TIMEOUT_SECONDS=1200)`,
(по умолчанию; задаётся `OPENBAO__NATS__NATS_*_SUBJECT`) (`done` / `needs_check` / `error`). Таймаут → ошибка `TIMEOUT` по `min(reply_deadline, старт + SCAN_TIMEOUT_SECONDS=1200)`,
старт — запись файла во «Входящие». **Нет доступа к БД.**
## Правила

View File

@ -9,10 +9,9 @@
После переподключения nats-py сам отправляет SUB для всех подписок с прежней queue group — подписку повторно
оформлять не нужно.
- `subscribe_requests(cb)` — подписка на subject запроса `image` из настроек
(`OPENBAO__NATS__NATS_IMAGE_REQUEST_SUBJECT`,
по умолчанию `files.img_uploaded`) в queue group `scan-gateway`: из нескольких
инстансов сообщение получает ровно один. `cb` получает исходное сообщение nats-py (`msg.data`, `msg.headers`);
исключения `cb` логируются, подписка живёт.
(`OPENBAO__NATS__NATS_IMAGE_REQUEST_SUBJECT`, по умолчанию `files.img_uploaded`) в queue group `scan-gateway`:
из нескольких инстансов сообщение получает ровно один. `cb` получает исходное сообщение nats-py
(`msg.data`, `msg.headers`); исключения `cb` логируются, подписка живёт.
- `publish(subject, payload, msg_id)` — публикация с заголовком `Nats-Msg-Id` и `flush` (подтверждение сервером) с
повторами на временных ошибках (первая попытка + до `PUBLISH_RETRIES` повторов); исчерпаны — `PublishFailed`.
Воркер логирует error и идёт дальше: ядро закроет задание по `reply_deadline` (D-7).

View File

@ -107,7 +107,7 @@ class ObjectStorage(Protocol):
class ResultPublisher(Protocol):
"""Часть `NatsGateway`: публикация конверта в `files.tabular_parsed` с `Nats-Msg-Id` и повторами."""
"""Часть `NatsGateway`: публикация конверта в subject ответа с `Nats-Msg-Id` и повторами."""
async def publish_result(self, message: RecognitionResultMessage, attempt: int) -> None: ...
@ -181,7 +181,7 @@ class _WaitResult:
class Worker:
"""Обработка запросов `files.img_uploaded` (см. докстринг модуля).
"""Обработка запросов на subject запроса `image` (см. докстринг модуля).
Зависимости внедряются: `storage` (S3), `publisher` (NATS), `hotfolder`, `normalizer`; `clock` — часы UTC для
дедлайна (R-20), `sleep` — пауза между опросами (подмены для тестов).