docs(openspec): align system specs with current runtime behavior

This commit is contained in:
Sergey Penkovsky
2026-03-24 11:47:24 +03:00
parent 3c550db8cd
commit 3331a3ee9c
3 changed files with 13 additions and 9 deletions

View File

@@ -64,10 +64,14 @@
- **WHEN** метод помечен одновременно `@instance` и `@provide` - **WHEN** метод помечен одновременно `@instance` и `@provide`
- **THEN** генератор завершает сборку с ошибкой валидации - **THEN** генератор завершает сборку с ошибкой валидации
#### Scenario: Требования к @named #### Scenario: Требования к @named на provider-методе
- **WHEN** `@named` использует пустую строку или некорректный идентификатор - **WHEN** `@named` на provider-методе использует пустую строку или некорректный идентификатор
- **THEN** генератор завершает сборку с ошибкой валидации - **THEN** генератор завершает сборку с ошибкой валидации
#### Scenario: Пустой @named на inject-поле
- **WHEN** `@named('')` указан на поле с `@inject`
- **THEN** генератор трактует поле как безымянный резолв (без параметра `named`)
#### Scenario: Валидность @module #### Scenario: Валидность @module
- **WHEN** класс с `@module` не имеет публичных методов - **WHEN** класс с `@module` не имеет публичных методов
- **THEN** генератор завершает сборку с ошибкой валидации - **THEN** генератор завершает сборку с ошибкой валидации

View File

@@ -23,11 +23,11 @@
- **THEN** subscope удаляется из дерева, а связанные ресурсы освобождаются - **THEN** subscope удаляется из дерева, а связанные ресурсы освобождаются
#### Scenario: Путь scope и разделитель #### Scenario: Путь scope и разделитель
- **WHEN** scope открывается по иерархическому пути с разделителем - **WHEN** вызывается `CherryPick.openScope(scopeName: ..., separator: ...)` с иерархическим путем
- **THEN** создается цепочка subscopes по каждому сегменту пути - **THEN** создается цепочка subscopes по каждому сегменту пути
#### Scenario: Пустой scopeName #### Scenario: Пустой scopeName
- **WHEN** scope открывается с пустым именем - **WHEN** вызывается `CherryPick.openScope(scopeName: '')`
- **THEN** возвращается root scope - **THEN** возвращается root scope
### Requirement: Установка и удаление модулей ### Requirement: Установка и удаление модулей
@@ -81,8 +81,8 @@
### Requirement: Ошибки несоответствия sync/async ### Requirement: Ошибки несоответствия sync/async
Резолв MUST выбрасывать ошибки при несоответствии sync/async режима. Резолв MUST выбрасывать ошибки при несоответствии sync/async режима.
#### Scenario: ResolveSync для asyncинстанса #### Scenario: Синхронный резолв для asyncbinding
- **WHEN** binding зарегистрирован как asyncинстанс или asyncprovider, а вызывается `resolveSync` - **WHEN** binding зарегистрирован как asyncинстанс или asyncprovider, а вызывается `resolve<T>()` или `tryResolve<T>()`
- **THEN** выбрасывается ошибка с указанием использовать asyncрезолв - **THEN** выбрасывается ошибка с указанием использовать asyncрезолв
### Requirement: Управление Disposable ### Requirement: Управление Disposable
@@ -111,7 +111,7 @@
- **THEN** observer получает соответствующие уведомления - **THEN** observer получает соответствующие уведомления
### Requirement: Ошибки и сообщения об ошибках ### Requirement: Ошибки и сообщения об ошибках
При критических сбоях резолва ядро MUST выбрасывать ошибку с понятным сообщением, а для tryResolve MUST не бросать исключения. При критических сбоях резолва ядро MUST выбрасывать ошибку с понятным сообщением. Для отсутствующей зависимости `tryResolve`/`tryResolveAsync` MUST возвращать `null` без исключения; ошибки выполнения резолва (например, цикл, sync/async mismatch, отсутствие обязательных params) MAY быть проброшены.
#### Scenario: Ошибка отсутствующей зависимости #### Scenario: Ошибка отсутствующей зависимости
- **WHEN** вызывается `resolve<T>()` для незарегистрированной зависимости - **WHEN** вызывается `resolve<T>()` для незарегистрированной зависимости

View File

@@ -41,14 +41,14 @@ Flutterинтеграция MUST предоставлять `CherryPickProvid
#### Scenario: Ошибка lookup #### Scenario: Ошибка lookup
- **WHEN** вызов происходит вне поддерева провайдера - **WHEN** вызов происходит вне поддерева провайдера
- **THEN** происходит assertionошибка - **THEN** в debugрежиме происходит assertionошибка
### Requirement: Ошибки и сообщения ### Requirement: Ошибки и сообщения
При отсутствии провайдера в дереве MUST быть диагностируемая ошибка. При отсутствии провайдера в дереве MUST быть диагностируемая ошибка.
#### Scenario: Диагностика отсутствия провайдера #### Scenario: Диагностика отсутствия провайдера
- **WHEN** `CherryPickProvider.of(context)` не находит провайдер - **WHEN** `CherryPickProvider.of(context)` не находит провайдер
- **THEN** сообщение об ошибке указывает на отсутствие провайдера - **THEN** в debugрежиме сообщение assertion указывает на отсутствие провайдера
### Requirement: Точки расширения ### Requirement: Точки расширения
Flutterинтеграция MUST позволять использовать собственные DIscope стратегии поверх `CherryPickProvider`. Flutterинтеграция MUST позволять использовать собственные DIscope стратегии поверх `CherryPickProvider`.