Andrey Epifancev 52e760fd9d openspec: change nats-env-config — subject'ы и JWT NATS по окружению из OpenBao
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 13:38:50 +04:00

3.1 KiB
Raw Blame History

Why

Прод и тест будут работать с разными наборами subject'ов NATS и разными JWT; платформа передаёт в под только OPENBAO__*. Сейчас subject'ы — константы api/src/contract/subjects.py. Решение владельца 12.10.2026: subject'ы и JWT задаются по окружению секретами группы OPENBAO__NATS__, как в RSHB/armka_file_worker. Сквозной change — ../docs/openspec/changes/nats-env-config (RSHB/arm-ka-docs#80); здесь — его часть для tabular-parser (RSHB/arm-tabular-parser#31).

Срез: вне плана срезов 09-delivery-plan.md — подготовка к контуру. Таблицы DBML v5.17 не затрагиваются (recognition_job.request_subject по-прежнему хранит фактический subject публикации).

What Changes

  • NATSSettings: NATS_TABULAR_REQUEST_SUBJECT (files.tabular_uploaded), NATS_IMAGE_REQUEST_SUBJECT (files.img_uploaded), NATS_RESULT_SUBJECT (files.tabular_parsed); проверка всех трёх при старте (непустые, без пробелов, *, > и пустых токенов, попарно различны).
  • NATS_JWT, NATS_SEED — SecretStr; Settings(hide_input_in_errors=True).
  • Сервис подписан на tabular_request (queue group tabular-parser), публикует ack и результат в result — по настройкам; константы contract/subjects.py — только умолчания.
  • Лог при старте и /healthcheck.subjects (tabular_request, result), независимо от состояния NATS.
  • Тесты roundtrip (tests/integration/test_roundtrip.py) задают собственные subject'ы через настройки (OQ-83).
  • .env.example, README.

Non-goals

  • schema_version контракта и копии схем не меняются (кроме побайтной синхронизации description из docs, если она изменится).
  • Queue group'ы — константы; механизм nkeys/JWT не меняется.
  • Пароли MinIO/SMB в SecretStr не переводятся.
  • Настройка через OPENBAO__APP__* не вводится.

Capabilities

New Capabilities

Modified Capabilities

  • tabular-recognition-service: subject'ы обмена и учётные данные NATS — настройки окружения; /healthcheck.subjects.

Impact

Файлы: api/src/core/config.py, api/src/contract/subjects.py, api/src/core/nats.py, api/src/core/worker.py, api/src/app.py (/healthcheck, лог старта), тесты (tests/unit/test_config*.py, tests/unit/test_nats.py, tests/unit/test_app.py, tests/integration/test_roundtrip.py), api/.env.example, README. Выкат обратно совместим (умолчания — текущие имена); набор окружения задаётся одинаково всем трём сервисам.