Срез 0 реализован и влит (PR #3), change перенесён в openspec/changes/archive, спеки — в openspec/specs. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
7.9 KiB
7.9 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(конверт:status∈ processing | done | needs_check | error; условные обязательные поля черезif/then); проверить метасхемой - 1.4 [docs] Примеры
docs/contracts/examples/:request-tabular.json,request-image.json,result-message-processing.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, ack черезprocessing, повторная публикация; проверить, что текст ссылается на существующие файлы
2. Инфраструктура разработки
- 2.1 [docs]
docs/dev/docker-compose.yml: сервисыpostgres(16),nats(2.10, без--jetstream),minio,minio-init(создаёт бакетarm-ka), healthcheck'и, именованные тома;docs/dev/.env.example; проверка:docker compose up -d→ все healthy,mc lsвидит бакет,curl :8222/varzотвечает - 2.2 [docs]
docs/dev/README.md: запуск инфраструктуры, переменные, сброс томов, запуск сервисов из venv без Nexus (make venvфильтруетraisa_*), черновик — дописывается в 5.4
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(python:3.11-slim, + строка убрана из.gitignore),Makefile(общие цели +migrate,seed),ENV_FILEв Settings,raisa-*вweb/package.json→optionalDependencies - 3.2 [arm-core] ORM 1:1 с DBML v5.13 + миграция 0001 +
check_dbml_vs_orm.py; проверка: upgrade → downgrade → upgrade на compose-PostgreSQL 16, скрипт сверки — 0 расхождений - 3.3 [arm-core] Seed справочников/ролей/прав + dev-пользователи; auth (JWT, dev-эмитент,
require(permission)),GET /api/v1/me - 3.4 [arm-core] Вендоренный контракт + outbox-паблишер + подписка
recognition.result(queue grouparm-core): ackprocessing, повторная публикация без ack, дедуп поresult_msg_id,dlq, вахтёрreply_deadline; интеграционный тест на compose: queued → published → processing → done; дубликат результата игнорируется; потерянный запрос публикуется повторно - 3.5 [arm-core]
make check-fullзелёный; итог — в описание PR
4. Проверки качества (параллельно с 3.x, после первых тестов)
- 4.1 [docs]
docs/dev/checks.md: общие целиMakefile(up,test,test-integration,lint,check,check-full), что делает каждая, порядок перед PR, как пропускаются тесты без фикстур/docs; проверка: целиarm-coreсоответствуют описанию - 4.2 [docs] Эталонный фрагмент
docs/dev/Makefile.common(включается вMakefileсервисов черезincludeили копируется); проверка:make checkв трёх репозиториях вызывает одинаковые команды (diffобщих целей)
5. Сервисы распознавания (детали — в их change'ах) и профиль services
- 5.1 [tabular-parser] Вырезать фронт/БД, вендоренный контракт, подписчик queue group
tabular-parserс ackprocessingи заглушкойNOT_IMPLEMENTED, Dockerfile 3.11,make check-full - 5.2 [scan-gateway] Вырезать фронт/БД, вендоренный контракт, горячие папки (local/smb), эмулятор, подписчик queue group
scan-gatewayс ack и таймаутом, Dockerfile 3.11,make check-full - 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 сnats = ok - 5.4 [docs] Сквозная проверка руками по README: вставить
recognition_jobв БД черезpsql(или тестовый скрипт arm-core) → паблишер публикует →tabular-parserотвечает ack иNOT_IMPLEMENTED→recognition_job.statusпроходитpublished → processing → error,error_code = NOT_IMPLEMENTED; то же дляimageчерез эмулятор (raw/{job_id}.jsonпоявляется в MinIO); остановитьtabular-parser, вставить задание — через 30 с повторная публикация, после трёх —dlq; зафиксировать в 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/, проверки вместо CI - 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по именам файлов)