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>
7.1 KiB
7.1 KiB
Tasks: Срез 0 — сквозной скелет
Порядок — по зависимостям между репозиториями. Префикс в квадратных скобках — репозиторий. Задачи сервисов перечислены
кратко; их детализация — в tasks.md дочерних change'ей. Каждая задача ≤ половины дня.
1. Контракт v1.0 (первым — от него зависят все сервисы)
- 1.1 [docs]
docs/contracts/recognition-result.schema.json: снять «ЧЕРНОВИК» из title, добавить$commentо версионировании, добавитьNOT_IMPLEMENTEDвerror.code; проверитьpython -m jsonschemaна файле схемы (метасхема 2020-12 валидна) - 1.2 [docs] Новый
docs/contracts/recognition-request.schema.jsonпо specrecognition-contract(поля, enum, форматы uuid/date-time); проверить метасхемой - 1.3 [docs] Новый
docs/contracts/recognition-result-message.schema.json(конверт результата, условные обязательные поля черезif/then); проверить метасхемой - 1.4 [docs] Примеры
docs/contracts/examples/:request-tabular.json,request-image.json,result-message-done.json,result-message-error.json,result-osv-minimal.json,result-statement-minimal.json,result-error.json; скриптdocs/scripts/validate_contracts.pyвалидирует все примеры схемами и возвращает 0 - 1.5 [docs]
03-architecture.md: таблица «Контракт обмена через NATS» — ссылки на три файла схем, правилаNats-Msg-Id, убратьgroup_schemaиз конверта; проверить, что текст ссылается на существующие файлы
2. Инфраструктура разработки
- 2.1 [docs]
docs/dev/docker-compose.yml: сервисыpostgres(15),nats(2.10,--jetstream),minio,minio-init(создаёт бакетarm-ka), healthcheck'и, именованные тома;docs/dev/.env.example; проверка:docker compose up -d→ все healthy,mc lsвидит бакет - 2.2 [docs]
docs/dev/README.md: запуск инфраструктуры, переменные, сброс томов, запуск сервисов из venv (черновик, дописывается в 5.2)
3. Ядро (детали — arm-core/openspec/changes/slice-0-skeleton/tasks.md)
- 3.1 [arm-core] Инструменты:
api/pyproject.toml(ruff, mypy),requirements-dev.txtс-r requirements.txt,Dockerfile(+ строка убрана из.gitignore),Makefile(up/test/lint/migrate),ENV_FILEв Settings - 3.2 [arm-core] ORM 1:1 с DBML v5.13 + миграция 0001 +
check_dbml_vs_orm.py; проверка: upgrade → downgrade → upgrade на compose-PostgreSQL, скрипт сверки — 0 расхождений - 3.3 [arm-core] Seed справочников/ролей/прав + dev-пользователи; auth (JWT, dev-эмитент,
require(permission)),GET /api/v1/me - 3.4 [arm-core] Вендоренный контракт + outbox-паблишер + consumer
recognition.result+ вахтёрreply_deadline; интеграционный тест на compose: queued → published → результат → done, дубликат игнорируется - 3.5 [arm-core]
.gitea/workflows/ci.ymlиз шаблона 4.1 (после его готовности), jobweb
4. CI-шаблон (после того как хотя бы один сервис имеет тесты)
- 4.1 [docs]
docs/dev/ci/python-service.yml: job'ыlint,test(services: postgres/nats/minio),contract,build; опциональные шаги arm-core (migrations,dbml-check); checkoutarm-ka-docs/arm-ka-fixturesпо секретам с graceful skip; проверка: workflow проходит вarm-coreна ветке среза - 4.2 [docs]
docs/dev/ci/web.yml(фрагмент jobwebдля arm-core: npm ci, biome, tsc, build); проверка — зелёный run в arm-core - 4.3 [docs]
docs/dev/ci/README.md: как копировать шаблон, какие секреты нужны (DOCS_TOKEN,FIXTURES_TOKEN, реестр образов), правило «отличия только в блоке env»
5. Сервисы распознавания (детали — в их change'ах) и профиль services
- 5.1 [tabular-parser] Вырезать фронт/БД, вендоренный контракт, worker NATS/S3 с заглушкой
NOT_IMPLEMENTED, Dockerfile, CI - 5.2 [scan-gateway] Вырезать фронт/БД, вендоренный контракт, горячие папки (local/smb), эмулятор, worker с таймаутом, Dockerfile, CI
- 5.3 [docs]
docker-compose.yml: профильservices—arm-core(8000),tabular-parser(8001),scan-gateway(8002),scan-emulator(томhotfolder,../../fixtures/ocr:ro); проверка:--profile services up --build, все/healthcheck200, streamRECOGNITIONсоздан - 5.4 [docs] Сквозная проверка руками по README: вставить
recognition_jobв БД черезpsql(или тестовый скрипт arm-core) → паблишер публикует →tabular-parserотвечаетNOT_IMPLEMENTED→recognition_job.status = error,error_code = NOT_IMPLEMENTED; то же дляimageчерез эмулятор (raw/{job_id}.jsonпоявляется в MinIO); зафиксировать в README как «проверка окружения»
6. Документы контекста и закрытие
- 6.1 [docs]
06-test-data.md§6:fixtures/directories/— только тестовые ЮЛ/ГК (Срез 1); план счетов, правила элиминации, права —arm-core/api/seed/;09-delivery-plan.mdСрез 0: решение D-1 по пакету контрактов, ссылка наdocs/dev/ - 6.2 [docs]
07-open-questions.md: OQ по итогам Среза 0 (контрактdata_type = NUvs enumosv_data_type; обязательность ОСВ расширенного подхода; источник полного плана счетов 1С) и расхождения макета из задачи B; статусы допущений - 6.3 [docs] Итоговая проверка:
openspec validate slice-0-skeleton --strictзелёный в четырёх репозиториях; ссылки между документами ведут на существующие файлы (grepпо именам файлов)