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

5.4 KiB
Raw Blame History

Полный контракт записей источников — 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.