55 lines
5.5 KiB
Markdown
55 lines
5.5 KiB
Markdown
# 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`
|