Files
mostovik-backend/docs/source-records-contract-plan.md
Aleksandr Meshchryakov 18971d33ec
All checks were successful
Mostovik Backend CI/CD / Tests and lint (push) Successful in 3m55s
Mostovik Backend CI/CD / Build linux/amd64 release images (push) Successful in 3m43s
Mostovik Backend CI/CD / Deploy and verify internal main (push) Has been skipped
Mostovik Backend CI/CD / Deploy customer main (push) Has been skipped
Mostovik Backend CI/CD / Deploy dev (push) Successful in 1m45s
feat: complete published registry contracts and gated SRO ingestion
2026-09-14 17:01:02 +02:00

58 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Полный контракт записей источников — 14.09.2026
Основание: `source-records-backend-improvements.md`, присланный пользователем.
Пользователь явно включил весь документ, включая СРО, специальные фильтры МСП
и полный detail бюджета. Запрет на сообщения Глебу сохраняется.
База backend: `49cbfd2`, ветка `codex/source-records-contract`.
14.09 штатный SSH-маршрут оказался недоступен на первом переходе; доступ
восстановлен через существующий российский узел Tailscale с проверенными ключами.
Свежий fetch подтвердил backend `49cbfd2`, frontend origin/dev `c6f2ec7`;
проверки генерации выполняются в отдельном worktree, рабочий frontend не меняется.
## Задачи и владельцы
1. Budget/SME normalization и named list/detail payload schemas — агент Mostovik.
Файлы budget_registry.py, sme_support.py, новые payload-модули и тесты.
2. СРО: нормализация, разрешённый HTTP loader, staging, models/descriptors/tasks,
access gate, миграции и тесты — агент требований.
3. Cards/dashboard/jobs/logs/export typed contracts и counts — агент State Corp.
Реализация находится исключительно в Mostovik backend.
4. Root: organization-source-records validation/search/filter/order/pagination,
serializer integration, discriminated OpenAPI, generated client checks.
5. Независимое ревью, регрессия SQLite/PostgreSQL, migration/OpenAPI, dev release
и доступные живые проверки после восстановления соединения.
## Согласование общих границ
| Участки | Общая поверхность | Решение |
| --- | --- | --- |
| 1/4 | Payload normalizers и response serializer | Агент создаёт отдельные typed payload serializers и нормализатор старого payload; root подключает их в serializers.py. |
| 2/3 | Source cards и parser run | Агент 2 передаёт descriptor/task/gate интерфейсы; source_cards.py и parser views редактирует агент 3. |
| 1/2 | Snapshot infrastructure | Переиспользуется registry_snapshots.py; изменения общего механизма согласуются сообщением. |
| 3/4 | Record export actions | source_record_export.py — агент 3; organizations/views.py — root по переданному интерфейсу. |
| 1 | Известные/неизвестные поля | Не угадывать коды и значения; unknown blocks сохраняются с lineage и метрикой. |
| 2 | Upstream approval | Default disabled; до разрешения владельца upstream оба ручных запуска дают typed409 до enqueue. Задача повторно проверяет gate. |
| 3 | Counts | Для трёх новых источников весь published dataset; ОПК coverage отдельно. Legacy источники сохраняют scope. |
| 4 | Совместимость | Legacy payload/search сохраняются. Новые source-specific поля валидируются и не игнорируются. |
Ruling: канонический ticket flow остаётся ready201 → native form download200,
как в новом handoff и действующем frontend; устаревшее требование preparing202
в SME/SRO source-first docs синхронизируется с этим контрактом. Стоимость ошибки:
если требуется отдельная on-demand генерация, понадобится согласованный frontend polling.
Ruling: публикация СРО без согласованного доступа не запускается. Реализация и
fixture acceptance обязательны; отсутствие разрешения отражается typed409,
а не успешной пустой загрузкой. Стоимость: СРО останется без живого snapshot до разрешения.
## Проверки завершения
- Все требования отмечаются результатами в этом документе, пропуски отдельно.
- Runtime и OpenAPI: required/nullable, source variants, errors, page metadata.
- Фильтры, null-last ordering и ties UID до пагинации на PostgreSQL.
- Fixtures: empty/one/many, Budget partial/large/unknown blocks, SME mixed units,
документы/нарушения, несколько СРО, unsafe URL и идентификационные конфликты.
- Генерация `bun run apigen`, затем `bun run type-check` без ручного изменения generated.
- Совместимость опубликованных данных и сохранение предыдущего snapshot при ошибке.
- Миграции, pytest, scope review, dev release только после сверки remote.