5.4 KiB
Полный контракт записей источников — 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 не меняется.
Задачи и владельцы
- Budget/SME normalization и named list/detail payload schemas — агент Mostovik. Файлы budget_registry.py, sme_support.py, новые payload-модули и тесты.
- СРО: нормализация, разрешённый HTTP loader, staging, models/descriptors/tasks, access gate, миграции и тесты — агент требований.
- Cards/dashboard/jobs/logs/export typed contracts и counts — агент State Corp. Реализация находится исключительно в Mostovik backend.
- Root: organization-source-records validation/search/filter/order/pagination, serializer integration, discriminated OpenAPI, generated client checks.
- Независимое ревью, регрессия 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.