diff --git a/dev/README.md b/dev/README.md index e147ffb..bfd7017 100644 --- a/dev/README.md +++ b/dev/README.md @@ -101,9 +101,9 @@ docker compose --profile services ps -a # scan-emulator Up 8000/tcp (healthcheck нет: процесс без HTTP) # scan-gateway Up (healthy) 127.0.0.1:8002->8000/tcp # tabular-parser Up (healthy) 127.0.0.1:8001->8000/tcp -curl -s localhost:8000/healthcheck # {"uptime":"…","version":"1.0.0","nats":"ok"} -curl -s localhost:8001/healthcheck # {"uptime":"…","version":"1.0.0","nats":"ok"} -curl -s localhost:8002/healthcheck # {"uptime":"…","version":"1.0.0","nats":"ok","hotfolder":"ok"} +curl -s localhost:8000/healthcheck # {"uptime":"…","version":"1.0.0","nats":"ok","subjects":{"tabular_request":"…","image_request":"…","result":"…"}} +curl -s localhost:8001/healthcheck # {"uptime":"…","version":"1.0.0","nats":"ok","subjects":{"tabular_request":"…","result":"…"}} +curl -s localhost:8002/healthcheck # {"uptime":"…","version":"1.0.0","nats":"ok","hotfolder":"ok","subjects":{"image_request":"…","result":"…"}} docker compose --profile services logs arm-core-migrate # Running upgrade -> 0001_dbml_v5_13 …; Seed применён … docker compose --profile services logs scan-emulator # … корень /data/hotfolder …; Фикстуры: /fixtures/ocr, фикстур: 2 ``` @@ -403,7 +403,9 @@ postgres nats minio`, затем `make test-integration` (или `make check-ful > Интеграционные тесты `tabular-parser` и `scan-gateway` (`api/tests/integration/`) идут на уникальных subject'ах > прогона (префиксы `itest.` / `test-.`), поэтому не пересекаются с контейнерами профиля `services` и друг с > другом: **останавливать контейнеры стенда больше не нужно.** Интеграционные тесты `arm-core` от контейнеров -> изолированы: временная БД на сессию и уникальный subject результатов на тест. Исключение — `make e2e` ядра +> изолированы: временная БД на сессию и уникальный subject ответа на тест; публикации запросов в тестах ядра +> (`test_recognition_exchange.py`, `test_api_files_upload.py`) идут на умолчательные subject'ы запросов и достигают +> контейнеров стенда. Исключение — `make e2e` ядра > (`tests/e2e/`): он идёт на subject'ах по умолчанию (design R-7, OQ-83), поэтому ядро стенда (`arm-core` на > `:8000`) на время прогона нужно остановить — общая queue group `arm-core`; контейнер `tabular-parser` стенда на > умолчаниях ему, наоборот, нужен. diff --git a/openspec/changes/nats-env-config/design.md b/openspec/changes/nats-env-config/design.md index fadc2ae..083ddc6 100644 --- a/openspec/changes/nats-env-config/design.md +++ b/openspec/changes/nats-env-config/design.md @@ -47,7 +47,9 @@ Goals: subject'ы и учётные данные NATS задаются секр задают уникальные subject'ы через настройки и не пересекаются с контейнерами стенда. e2e ядра (`make e2e`) остаётся на subject'ах по умолчанию: он гоняет настоящий контейнер `tabular-parser` стенда, который слушает умолчания, а конфликт там — в общей queue group `arm-core` на subject'е ответа; требование останавливать ядро стенда сохраняется - (R-7). Интеграционные тесты NATS ядра уже работают на уникальных subject'ах. + (R-7). Интеграционные тесты NATS ядра идут на уникальном subject'е ответа; публикации запросов в тестах ядра + (`test_recognition_exchange.py`, `test_api_files_upload.py`) идут на умолчательные subject'ы запросов и достигают + контейнеров стенда. ## Risks / Trade-offs diff --git a/repo-templates/scan-gateway.CLAUDE.md b/repo-templates/scan-gateway.CLAUDE.md index 042252b..5753dd3 100644 --- a/repo-templates/scan-gateway.CLAUDE.md +++ b/repo-templates/scan-gateway.CLAUDE.md @@ -7,7 +7,7 @@ (временный `.part` — в `Tmp`), забрать все `Исходящие//*.json` (по одному json на документ), сохранить склеенный сырой ответ в S3 `raw/{job_id}.json` (в БД не регистрируется), очистить горячую папку (только при `SCAN_CLEANUP=true`), нормализовать в `../docs/contracts/recognition-result.schema.json` (`statementDocument`), опубликовать -`files.tabular_parsed`. Таймаут 5 мин → `TIMEOUT`. **Нет доступа к БД.** +`files.tabular_parsed` (по умолчанию; задаётся OPENBAO__NATS__NATS_*_SUBJECT). Таймаут 5 мин → `TIMEOUT`. **Нет доступа к БД.** ## Правила - Нормализация по фактическим ответам `../fixtures/ocr/aep_*.json`, а не по ТЗ (OQ-13, OQ-14): confidence → 0–100, diff --git a/repo-templates/tabular-parser.CLAUDE.md b/repo-templates/tabular-parser.CLAUDE.md index 912dfeb..d8d47cf 100644 --- a/repo-templates/tabular-parser.CLAUDE.md +++ b/repo-templates/tabular-parser.CLAUDE.md @@ -4,8 +4,8 @@ ## Что это Stateless-сервис разбора XLS/XLSX/XLSB: ОСВ по счетам (§1 правил) и ББ/ОФР из Excel (§12). Вход — NATS -`files.tabular_uploaded` + файл в S3 `uploads/`; выход — JSON по `../docs/contracts/recognition-result.schema.json` -в S3 `results/` + NATS `files.tabular_parsed`. **Нет доступа к БД.** Не знает про организации, периметры, план счетов — +`files.tabular_uploaded` (по умолчанию; задаётся OPENBAO__NATS__NATS_*_SUBJECT) + файл в S3 `uploads/`; выход — JSON по `../docs/contracts/recognition-result.schema.json` +в S3 `results/` + NATS `files.tabular_parsed` (по умолчанию; задаётся OPENBAO__NATS__NATS_*_SUBJECT). **Нет доступа к БД.** Не знает про организации, периметры, план счетов — возвращает структуру файла; нормализация и резолв — в arm-core. ## Главное правило