NATS: subject'ы и JWT по окружению из OpenBao (OPENBAO__NATS__*) (#106) #107
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/106-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 #106
Subject'ы и учётные данные NATS ядра — из
OPENBAO__NATS__*(контракт и общая дельта — RSHB/arm-ka-docs#80).Что в этом PR (arm-core)
NATSSettings:NATS_TABULAR_REQUEST_SUBJECT,NATS_IMAGE_REQUEST_SUBJECT,NATS_RESULT_SUBJECTс валидацией;NATS_JWT/NATS_SEED→SecretStr(в nkeys —get_secret_value());hide_input_in_errors=Trueво всех классах настроек.request_subject(pipeline, subjects); outbox (publish_pending/run_publisher_loop) и создание задания (primary_files) берут subject запроса из настроек; повторная публикация обновляетrecognition_job.request_subject(I-1).NATS_RESULT_SUBJECT(queue grouparm-core— константа).used_subjects()→ лог старта и/healthcheck.subjects(tabular_request,image_request,result) при любомnats..env.example,.env.test, README, CLAUDE.md; дочерний changenats-env-config(спекаrecognition-job-exchange).Проверки
make check-full— код 0: lint (ruff, mypy), unit 1335 passed, integration 905 passed,make e2e1 passed (на умолчаниях, R-7), web-check, docker-build.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).Находки
subscribedb8b0bc(arm-core).strip()seednats.pyqa-guide.mddev/README.md, порядок правилrecognition_job.request_subjectпосле смены настроекc9d6090(arm-core)/healthcheckбезsubjectsc9d6090(arm-core), 32fa327 (docs)c9d6090, 1b50d65, c10f927SHALL … files.*формально не помечают имена как умолчанияCLAUDE.mdсервисов иrepo-templatesбез «по умолчанию»c9d6090, 1b50d65, c10f927, 32fa327.env.exampleядра и сервисов.env.example/.env.testпроверяет тестfile_mismatch, переносы docstring'ов arm-coreeaa563c(arm-core)npm 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