openspec init (config с контекстом docs-репозитория) и change slice-0-skeleton: proposal, design (11 решений без обсуждения, открытые вопросы к человеку), спеки recognition-contract, dev-environment, ci-template, tasks в порядке зависимостей между репозиториями. 06-test-data.md §6: справочники продукта — seed arm-core, не фикстуры. 09-delivery-plan.md: Срез 0 по факту (change'и, compose в docs/dev, контракт копией без общего пакета, seed). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
8.1 KiB
Proposal: Срез 0 — сквозной скелет (контракт v1.0, окружение разработки, CI-шаблон)
Срез: 0 «Скелет» (docs/context/09-delivery-plan.md). Репозиторий: arm-ka-docs (сквозная часть).
Issue: RSHB/arm-ka-docs#1. Дочерние change'и: arm-core/openspec/changes/slice-0-skeleton (arm-core#1),
tabular-parser/openspec/changes/slice-0-skeleton (arm-tabular-parser#1),
scan-gateway/openspec/changes/slice-0-skeleton (arm-scan-gateway#1).
Why
Три сервисных репозитория развёрнуты из шаблона команды, но между ними ещё нет ничего общего: контракт результата
распознавания помечен «черновик», сообщения NATS описаны только таблицей в 03-architecture.md, локально поднять
PostgreSQL + NATS + MinIO + ИС Сканирование нечем, CI-конфигурации у шаблона нет. Без этого Срез 1 (справочники) и
Срез 2 (парсер) нельзя начать параллельно в трёх репозиториях: каждый сервис придумает свой формат сообщений и своё
окружение. Срез 0 фиксирует общие точки один раз и проверяет их end-to-end на пустых обработчиках.
What Changes
- Контракт распознавания v1.0 (
docs/contracts/):recognition-result.schema.json— снять пометку «черновик»,schema_version="1.0", добавить код ошибкиNOT_IMPLEMENTED(сервис не поддерживает тип документа в текущей версии); структура документов (osvDocument,statementDocument) не меняется — она уточняется в Срезе 2/3 версией 1.x (additive) или 2.0 (breaking).- Новое:
recognition-request.schema.json— тело сообщенияrecognition.{tabular|image}.request(job_id,file_id,pipeline,file_type,original_name,s3 {bucket, key},reply_deadline,attempt). - Новое:
recognition-result-message.schema.json— тело сообщенияrecognition.result(конверт:job_id,file_id,status,error,service,result_s3 {bucket, key},result_schema_version,raw_s3_key,metrics). Полеgroup_schemaв конверт не входит — ядро берёт его изdocuments[].group_schemaфайла результата (правка таблицы в03-architecture.md). - Правила заголовков NATS:
Nats-Msg-Idзапроса =<job_id>:<attempt>, результата =result:<job_id>:<attempt>. - Примеры сообщений и результата —
docs/contracts/examples/(валидируются в CI сервисов).
- Окружение разработки
docs/dev/:docker-compose.ymlworkspace-уровня: PostgreSQL 15, NATS 2.10 с JetStream, MinIO (+ init-контейнер: бакетarm-ka), эмулятор ИС Сканирование (образscan-gateway, команда эмулятора, общая папка горячих каталогов), сервисыarm-core,tabular-parser,scan-gateway(профильservices; сборка из соседних каталогов workspace)..env.examplec переменными шаблона (OPENBAO__*,DEBUG) и флагами разработки (AUTH_DEV_ISSUER,SCAN_EMULATOR).README.md: как поднять инфраструктуру, как запустить сервисы из venv против compose, как прогнать интеграционные тесты.
- CI-шаблон
docs/dev/ci/: workflow Gitea Actions для Python-сервиса (ruff, mypy, pytest с сервисами PostgreSQL/NATS/MinIO, проверка идентичности вендоренного контракта сdocs/contracts, сборка образа; для arm-core — плюс миграции с нуля и назад,check_dbml_vs_orm.py, job дляweb/: biome, tsc, rsbuild build). Checkoutarm-ka-fixturesв../fixtures(илиARM_KA_FIXTURES) — через секрет с правом чтения. - Документы контекста:
03-architecture.md— раздел «Соглашения шаблона команды», раскладкаapi/src/, схемаdkb, один бакет S3, конверт результата безgroup_schema;00-workspace-layout.md— worktree-workspace.wt/<срез>/;06-test-data.md§6 — справочники для seed продукта (план счетов, правила элиминации, права) живут вarm-core/api/seed/, вfixtures/directories/остаются только тестовые справочники (ЮЛ и ГК группы «Русский бисквит», Срез 1);09-delivery-plan.md— решение по пакету контрактов (без общего пакета, см. design);07-open-questions.md— новые OQ. - Сверка макета (задача B kickoff):
10-user-journey.md,mockup/INDEX.md, новые снимкиmockup/screens/,scripts/mockup_crawl_extra.py; расхождения — в07-open-questions.md.
Capabilities
New Capabilities
recognition-contract: контракт обмена между ядром и сервисами распознавания — тела сообщений NATS, файл результата в S3, правила версионирования и идемпотентности.dev-environment: воспроизводимое локальное окружение workspace (PostgreSQL, NATS JetStream, MinIO, эмулятор ИС Сканирование, три сервиса) с однимdocker compose up.ci-template: обязательный набор проверок CI для сервисных репозиториев и порядок их выполнения.
Modified Capabilities
Impact
- Читают контракт:
arm-core(outbox публикует запрос, consumer читает конверт результата и файл результата),tabular-parserиscan-gateway(читают запрос, пишут результат и конверт). Каждый сервис вендорит копию схем вapi/contracts/и проверяет идентичность сdocs/contractsв CI. - Таблицы DBML v5.13, которые опираются на контракт:
recognition_job(request_msg_id,result_msg_id,schema_version,result_schema_version,service_name/version,result_s3_object_id,metrics,group_schema,error_code),s3_object(bucket_role,bucket,key,created_by),stored_file(file_type). Новых полей нет. - Внешние зависимости: Docker/Compose у разработчика; Gitea Actions с раннером, умеющим
services:иdocker build(вопрос к человеку — см. design «Open Questions»).
Non-goals
- Финальная структура
osvDocument/statementDocument(уточняется в Срезах 2–3 по реальным файлам; здесь только фиксируется версия и правила эволюции). - Контракт
ex-payload-v1.schema.json(Срез 7). - Production-значения инфраструктуры банка (адреса NATS/S3/OpenBao, nkeys) — compose только для разработки.
- Публикация общего python-пакета контрактов (решено: не делать, см. design D-1).
- Какие-либо экраны фронта.