Andrey Epifancev
a7862c1843
feat: запуск воркера в lifespan при NATS_ENABLED и поле nats = ok | down | off в /healthcheck
...
Подписка — через on_connected NatsConnection; остановка: воркер (дорабатывает очередь) → NATS → S3. Клиент S3
остаётся и при неудачной проверке бакета, отсутствие бакета — warning (T2.1). Тест lifespan и healthcheck с фейками
(T8.7); формулировки nats в README, .env.example и spec приведены к R-17.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 03:09:06 +04:00
Andrey Epifancev
e1231dcdb4
feat: воркер распознавания src/core/worker.py — ack до чтения S3, дедуп job_id, таблица ошибок D-5
...
on_request: валидация (pydantic + MAJOR = 1) → повторный job_id получает только ack → ack processing → очередь;
рабочие корутины: S3 get → Parser через asyncio.to_thread → файл результата → конверт с metrics.duration_ms →
публикация с Nats-Msg-Id result:<job_id>:<attempt>. SCHEMA_MISMATCH без ack, FILE_READ_ERROR, UNKNOWN_ERROR,
NatsPublishError — error-лог. Docstring протокола Parser: ожидаемые сбои — исход error (T7.1).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 03:05:47 +04:00
Andrey Epifancev
6c8d7b6e9b
fix: NATS — PUBLISH_RETRIES как повторы после первой попытки (R-16), flush после подписки, снятие подписок при сбое on_connected, проброс отмены в stop(), error-лог самопроизвольного закрытия
...
Находки ревью Task 8: T8.2–T8.6.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:57:23 +04:00
Andrey Epifancev
6525939888
test: интеграционные тесты NATS (заголовок Nats-Msg-Id, queue group) и S3Storage против compose; отметки Task 8 / 4.2
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:48:26 +04:00
Andrey Epifancev
ff08905580
feat: слой NATS src/core/nats.py — фоновое подключение (nkeys/без), подписка на запросы в queue group, публикация с повторами
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:47:17 +04:00
Andrey Epifancev
4c32cd36ac
feat: S3Storage.get_bytes/put_json и протокол Storage вместо шаблонных put_object/get_object
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:45:25 +04:00
Andrey Epifancev
84b5404215
feat: интерфейс парсера (Parser, ParseOutcome), NullParser с NOT_IMPLEMENTED, get_parser
...
Заглушка Среза 0 не читает входные байты; отметки Task 7 / 4.1.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:41:02 +04:00
Andrey Epifancev
5b913803b4
feat: pydantic-модели контракта v1.0 (src/contract) и unit-тесты контракта
...
Запрос, конверт (processing|done|needs_check|error), файл результата, ОСВ и формы,
деньги Decimal <-> строка, subject'ы и Nats-Msg-Id. Тесты: идентичность с docs
(skip без docs, ARM_KA_DOCS), примеры, round-trip, согласованность моделей и схем.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:38:17 +04:00
Andrey Epifancev
29e5cc5bf4
chore: каркас из шаблона команды (DKB_ARMKA@ba172f8, доменный код удалён)
2026-10-02 23:15:38 +04:00