5.4 KiB
Why
Прод и тест будут работать с разными наборами subject'ов NATS и разными JWT. Платформа РАИСА передаёт в под только
переменные OPENBAO__*, поэтому окружение должно настраиваться только секретами OpenBao, без пересборки и релиза
сервисов. Сейчас JWT и seed уже приходят как OPENBAO__NATS__NATS_JWT / NATS_SEED, а subject'ы зашиты константами
api/src/contract/subjects.py трёх сервисов (решение R-4 в #74) и уже раз менялись (recognition.* → files.*,
08.10.2026). Решение владельца 12.10.2026: subject'ы и JWT задаются по окружению секретами группы OPENBAO__NATS__ —
так устроен RSHB/armka_file_worker, проверенный в контуре (NATS_COMMAND_SUBJECT, NATS_EVENT_SUBJECT рядом с
NATS_JWT).
Срез: вне плана срезов 09-delivery-plan.md — подготовка к контуру (инфраструктура NATS платформы). Issue
RSHB/arm-ka-docs#80.
What Changes
- Три настройки окружения, одинаковые ключи во всех трёх сервисах, умолчания — текущие имена:
OPENBAO__NATS__NATS_TABULAR_REQUEST_SUBJECT(files.tabular_uploaded),OPENBAO__NATS__NATS_IMAGE_REQUEST_SUBJECT(files.img_uploaded),OPENBAO__NATS__NATS_RESULT_SUBJECT(files.tabular_parsed). - Контракт: subject'ы — конфигурация окружения; у ядра и сервисов одного окружения значения MUST совпадать; имена
проверяются при старте (непустые, без пробелов и шаблонов
*/>, три разных). NATS_JWT/NATS_SEED— секреты: значения не попадают вrepr, логи и тексты ошибок валидации конфигурации.- Каждый сервис пишет свои subject'ы в лог при старте и отдаёт их в
/healthcheck(объектsubjects). - Интеграционные тесты
tabular-parserиscan-gatewayберут собственные subject'ы через настройки и не делят их с контейнерами стенда (OQ-83 в части этих тестов; e2e ядра — без изменений, design R-7). - Документы:
context/03-architecture.md(NATS платформы, перечень секретов),context/07-open-questions.md(OQ-83),dev/README.md,dev/contour-transfer-guide.md,dev/qa-guide.md,dev/frontend-api-guide.md(ответ/healthcheck, если описан),dev/.env.example.
Читают и пишут контракт: arm-core (публикует запросы в оба subject'а запроса, подписан на subject ответа),
tabular-parser (подписан на subject запроса tabular, публикует в subject ответа), scan-gateway (подписан на
subject запроса image, публикует в subject ответа). Дочерние change'и nats-env-config: RSHB/arm-core#106,
RSHB/arm-tabular-parser#31, RSHB/arm-scan-gateway#32.
Non-goals
schema_versionконтракта не меняется: тела сообщений,Nats-Msg-Id, файл результата — те же.- Queue group'ы (
arm-core,tabular-parser,scan-gateway) остаются константами. - Механизм аутентификации NATS не меняется (nkeys seed + JWT, оба пусты — без учётных данных).
- Пароли MinIO и SMB в
SecretStrне переводятся. - Subject'ы не настраиваются через
OPENBAO__APP__*: это группаNATS, а не настройки верхнего уровня. - DBML не поднимается; заметки v5.17 про subject'ы — follow-up RSHB/arm-ka-docs#79 (R-3).
- Отдельный NATS для тестов не поднимается.
Capabilities
New Capabilities
Modified Capabilities
recognition-contract: subject'ы запроса и ответа — настройки окружения с умолчаниямиfiles.*.
Impact
- Сервисы:
arm-core,tabular-parser,scan-gateway—core/config.py(NATSSettings),contract/subjects.py,core/nats.py, публикация и подписки,/healthcheck, тесты,.env.example, спеки, README. - Выкат обратно совместим: без новых ключей всё работает на
files.*. Для теста платформа кладёт своиNATS_JWT,NATS_SEEDи три subject'а одинаково всем трём сервисам; JWT окружения должен давать права publish/subscribe на эти subject'ы. - Ядро вычисляет subject при каждой публикации по
pipeline, поэтому после смены настроек повторная публикация заданий в работе уходит в новый subject;recognition_job.request_subjectзаписывает фактический subject.