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