Andrey Epifancev f2e0fd98f8 openspec: архив use-installed-statements-library (AURORA-1677)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 17:02:44 +04:00

55 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# statement-library Specification
## Purpose
Поставка общей нормализации форм как устанавливаемой библиотеки с правилами и идентификатором версии, доступной ядру без встроенной копии исходников.
## Requirements
### Requirement: Установка локальной библиотеки
Команда `make install` SHALL устанавливать или переустанавливать дистрибутив `pylib-ai-arm-statements` в окружение backend `api/.venv` из соседнего репозитория `../pylib_ai_arm_statements`. Путь SHALL переопределяться через `STATEMENTS_DIR`. При отсутствии окружения команда SHALL создавать его на Python 3.11.
#### Scenario: Повторная установка после изменения библиотеки
- **WHEN** разработчик выполняет `make install` после изменения исходников или YAML-правил локальной библиотеки
- **THEN** backend получает обновлённую библиотеку, даже если номер версии дистрибутива не изменён
#### Scenario: Другой путь к исходникам
- **WHEN** разработчик выполняет `make install STATEMENTS_DIR=/tmp/local-statements`
- **THEN** библиотека устанавливается из указанного каталога в окружение backend
### Requirement: Подготовка окружения разработки
При установке `api/requirements.txt` команда `make venv` SHALL пропускать строки с префиксами `raisa_` и `pylib_ai`. Обработка `requirements-dev.txt` SHALL сохраняться: исключаются вложенные строки `-r`. После установки requirements локальная библиотека SHALL устанавливаться в окружение backend.
#### Scenario: Внутренний пакет не запрашивается из реестра
- **WHEN** requirements содержит `pylib_ai_arm_statements==0.1.1` и выполняется `make venv`
- **THEN** этот пакет не запрашивается из реестра по requirements и устанавливается из локального репозитория
### Requirement: Совместимость импортов и ресурсов
Установленная библиотека SHALL предоставлять импорт `arm_statements` и необходимые YAML-правила. Нормализация и загрузка стандартных правил MUST работать без каталога `api/arm_statements/` и без обращения к исходникам соседнего репозитория во время исполнения.
#### Scenario: Стандартные правила из установленного пакета
- **WHEN** установлен собранный дистрибутив и backend загружает стандартные правила
- **THEN** `statement_checks.yaml` и остальные необходимые YAML доступны внутри пакета; ошибка отсутствующего файла не возникает
### Requirement: Версия установленной библиотеки
Версия библиотеки SHALL определяться непустым стандартным маркером `VERSION`, а при его отсутствии или пустом содержимом — метаданными дистрибутива `pylib-ai-arm-statements`. Если оба источника недоступны, результат SHALL быть `None`. Явно переданный отсутствующий или пустой файл SHALL возвращать `None` без подстановки метаданных.
#### Scenario: Пакет без внутреннего VERSION
- **WHEN** у установленного дистрибутива версии `0.1.1` нет внутреннего `VERSION`
- **THEN** версия библиотеки равна `0.1.1`, а не `None`
#### Scenario: Приоритет маркера
- **WHEN** внутренний `VERSION` содержит непустой идентификатор, а метаданные содержат версию дистрибутива
- **THEN** возвращается идентификатор из `VERSION` без окружающих пробелов
#### Scenario: Явно указанный файл отсутствует
- **WHEN** вызывающий передаёт путь к отсутствующему файлу версии
- **THEN** возвращается `None`, даже если дистрибутив установлен
#### Scenario: Пустой стандартный маркер
- **WHEN** стандартный `VERSION` пуст, но метаданные дистрибутива доступны
- **THEN** возвращается версия дистрибутива
#### Scenario: Нет доступного идентификатора
- **WHEN** стандартного маркера и метаданных дистрибутива нет
- **THEN** возвращается `None`