Основная спека consolidations-api возвращена к main: фиксация версии правил, пары тройки и список версии — в дельте change (MODIFIED «Создание консолидации», ADDED «Пары ВГО тройки», «Пары ВГО версии», «Правила элиминации зафиксированной версии», REMOVED старое требование правил); data-model — DBML 5.23 и миграция 0010. design.md — решения владельца 23.10 и «Decisions made without discussion» R-1…R-6. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.6 KiB
MODIFIED Requirements
Requirement: Версия DBML зафиксирована в коде
Пакет моделей SHALL объявлять константу версии DBML (DBML_VERSION = "5.23"); скрипт сверки SHALL сравнивать её с версией в шапке файла
DBML и падать при расхождении — смена модели без осознанного обновления ORM невозможна.
Scenario: Новая версия DBML без обновления ORM
- WHEN в
docs/model/появляетсяdata-model-v5.24.dbml, а константа в ORM —5.23 - THEN сверка против нового файла падает с сообщением о версии до сравнения таблиц
ADDED Requirements
Requirement: Миграция DBML v5.23 — версия правил элиминации обязательна
Миграция 0010_dbml_v5_23 после 0009_dbml_v5_21 SHALL заполнить пустой consolidation_version.elimination_rules_version
номером версии правил, действовавшей на московскую дату created_at версии (пустой created_at — текущая дата), а если
такой нет — последней открытой версии (valid_to IS NULL), затем сделать колонку NOT NULL. Если после заполнения
остаются пустые значения (правил нет вовсе), миграция SHALL завершиться ошибкой с числом таких версий до изменения схемы.
Откат SHALL снимать только NOT NULL, значения сохраняются. v5.22 структуру БД не меняла, отдельной миграции у неё нет.
Scenario: Заполнение по дате создания
- WHEN правила v1 действуют до 30.06.2026, v2 — с 01.07.2026, версии созданы 01.03.2026, 30.06.2026 21:30 UTC и без даты
- THEN после
upgrade headу них 1, 2 и 2; колонка NOT NULL;downgrade 0009_dbml_v5_21снимает NOT NULL, значения остаются
Scenario: Версии без правил
- WHEN в БД есть версия консолидации и нет ни одного правила элиминации
- THEN
upgrade headпадает с ошибкой «миграция v5.23 невозможна…», ревизия остаётся0009_dbml_v5_21