NATS: subject'ы и JWT по окружению из OpenBao (OPENBAO__NATS__*) (#80) #99
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/80-nats-env-config"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #80
Subject'ы обмена NATS и учётные данные NATS — секреты окружения
OPENBAO__NATS__*(у прода и теста свои наборы топиков и свой JWT; решение владельца 12.10.2026).Что в этом PR (docs)
nats-env-config: proposal, design (решения 1–7, рулинги R-1…R-15), дельтаrecognition-contract(ADDED «Subject'ы NATS — настройки окружения», MODIFIED требования запроса и результата), tasks.contracts/recognition-request.schema.json,recognition-result-message.schema.json— в описаниях subject'ов «настройка окружения, по умолчанию …»;schema_versionне меняется.context/03-architecture.md— subject'ы как настройки, перечень секретовOPENBAO__NATS__*по сервисам, требование одинакового набора у трёх сервисов.context/07-open-questions.md— OQ-83 частично закрыт (интеграционные тесты tabular-parser и scan-gateway на своих subject'ах;make e2eядра — открыт, R-7).dev/README.md,dev/.env.example,dev/contour-transfer-guide.md,dev/qa-guide.md,dev/frontend-api-guide.md,repo-templates/*.CLAUDE.md.docs/superpowers/plans/2026-10-13-nats-env-config.md.Проверки
make check CHANGE=nats-env-config— код 0 (validate-contracts, validate-openspec, test-snapshot, test-sync-web).openspec validate nats-env-config --strict— valid.Связанные PR (одна фича, change
nats-env-configв четырёх репозиториях)Порядок merge любой: умолчания subject'ов не меняются (
files.tabular_uploaded,files.img_uploaded,files.tabular_parsed), поэтому смешанное состояние «часть сервисов уже с настройками» на стенде ничего не ломает.Новые ключи в контуре задавать только после выката всех трёх сервисов — одинаковым набором для всех трёх.
Ключи окружения (одинаковые в трёх сервисах)
OPENBAO__NATS__NATS_TABULAR_REQUEST_SUBJECTfiles.tabular_uploadedOPENBAO__NATS__NATS_IMAGE_REQUEST_SUBJECTfiles.img_uploadedOPENBAO__NATS__NATS_RESULT_SUBJECTfiles.tabular_parsedOPENBAO__NATS__NATS_JWT,NATS_SEEDSecretStrSecretStrSecretStrКаждый сервис проверяет все три имени при старте (непустое, без пробелов,
*,>, пустых токенов; попарно различны) —иначе не стартует, ошибка называет ключ. JWT/seed не попадают в логи,
reprи т��ксты ошибок валидации(
hide_input_in_errors=Trueво всех классах настроек). Subject'ы сервиса — в логе старта и в/healthcheck.subjectsпри любом состоянии NATS. Queue group'ы и
schema_versionне меняются.Rulings I made
Решения без обсуждения —
docs/openspec/changes/nats-env-config/design.md, раздел «Decisions made without discussion».NATS_TABULAR_REQUEST_SUBJECT,NATS_IMAGE_REQUEST_SUBJECT,NATS_RESULT_SUBJECT(по образцу FileWorker; у нас два subject'а запроса).schema_versionне меняется: тела сообщений те же, subject'ы — окружение.subjectsв/healthcheckотдаётся и приnats = off.SecretStrне переводятся (вне запроса); в ошибках валидации они скрытыhide_input_in_errors.nats-env-configв четырёх репозиториях, один план SDD.arm-core); OQ-83 дляmake e2eоткрыт.make checkв docs запускается сCHANGE=nats-env-config(дефолт Makefile указывает на архивный change).Находки
subscribe.strip()seednats.pyqa-guide.md3a31674(docs)dev/README.md, порядок правилb60ed85(docs)recognition_job.request_subjectпосле смены настроек/healthcheckбезsubjects32fa327(docs)32fa327(docs)SHALL … files.*формально не помечают имена как умолчанияCLAUDE.mdсервисов иrepo-templatesбез «по умолчанию»32fa32762d7fd7(docs).env.exampleядра и сервисов.env.example/.env.testпроверяет тестfile_mismatch, переносы docstring'ов arm-corenpm install404 на rollup вweb-checkcheck-fullзелёныйОтложено (deferred → follow-up при закрытии)
tabular-recognition-service,image-recognition-gateway,recognition-job-exchange,recognition-contract) называютfiles.*вSHALLбез пометки «по умолчанию»; ADDED-требование это покрывает по смыслу, формально — нет. Решить отдельным change'ем.test_recognition_exchange.py,test_api_files_upload.py) перевести на уникальные subject'ы — закрыть OQ-83 дляmake test-integrationядра.docs/Makefile:CHANGE ?= slice-0-skeletonуказывает на архивный change,make checkбез параметра красный.hide_input_in_errors(pydantic обрезаетinput_value, длинный JWT без защиты не «утекает» целиком).🤖 Generated with Claude Code