Andrey Epifancev fdb1f179cc docs(openspec): elimination-pairs-rule-totals — дельта вместо правки основной спеки, решения, README (ревью #175)
Основная спека 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>
2026-10-23 18:44:31 +04:00

2.6 KiB
Raw Blame History

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