From 3331a3ee9cdc69843d185de87727c135ce6cb9cc Mon Sep 17 00:00:00 2001 From: Sergey Penkovsky Date: Tue, 24 Mar 2026 11:47:24 +0300 Subject: [PATCH] docs(openspec): align system specs with current runtime behavior --- .../specs/annotations-and-codegen/spec.md | 8 ++++++-- .../cherrypick-system-spec/specs/di-runtime/spec.md | 10 +++++----- .../specs/flutter-integration/spec.md | 4 ++-- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/openspec/changes/cherrypick-system-spec/specs/annotations-and-codegen/spec.md b/openspec/changes/cherrypick-system-spec/specs/annotations-and-codegen/spec.md index d3584eb..4bd8613 100644 --- a/openspec/changes/cherrypick-system-spec/specs/annotations-and-codegen/spec.md +++ b/openspec/changes/cherrypick-system-spec/specs/annotations-and-codegen/spec.md @@ -64,10 +64,14 @@ - **WHEN** метод помечен одновременно `@instance` и `@provide` - **THEN** генератор завершает сборку с ошибкой валидации -#### Scenario: Требования к @named -- **WHEN** `@named` использует пустую строку или некорректный идентификатор +#### Scenario: Требования к @named на provider-методе +- **WHEN** `@named` на provider-методе использует пустую строку или некорректный идентификатор - **THEN** генератор завершает сборку с ошибкой валидации +#### Scenario: Пустой @named на inject-поле +- **WHEN** `@named('')` указан на поле с `@inject` +- **THEN** генератор трактует поле как безымянный резолв (без параметра `named`) + #### Scenario: Валидность @module - **WHEN** класс с `@module` не имеет публичных методов - **THEN** генератор завершает сборку с ошибкой валидации diff --git a/openspec/changes/cherrypick-system-spec/specs/di-runtime/spec.md b/openspec/changes/cherrypick-system-spec/specs/di-runtime/spec.md index c9a5db5..7e2e5ef 100644 --- a/openspec/changes/cherrypick-system-spec/specs/di-runtime/spec.md +++ b/openspec/changes/cherrypick-system-spec/specs/di-runtime/spec.md @@ -23,11 +23,11 @@ - **THEN** subscope удаляется из дерева, а связанные ресурсы освобождаются #### Scenario: Путь scope и разделитель -- **WHEN** scope открывается по иерархическому пути с разделителем +- **WHEN** вызывается `CherryPick.openScope(scopeName: ..., separator: ...)` с иерархическим путем - **THEN** создается цепочка subscopes по каждому сегменту пути #### Scenario: Пустой scopeName -- **WHEN** scope открывается с пустым именем +- **WHEN** вызывается `CherryPick.openScope(scopeName: '')` - **THEN** возвращается root scope ### Requirement: Установка и удаление модулей @@ -81,8 +81,8 @@ ### Requirement: Ошибки несоответствия sync/async Резолв MUST выбрасывать ошибки при несоответствии sync/async режима. -#### Scenario: ResolveSync для async‑инстанса -- **WHEN** binding зарегистрирован как async‑инстанс или async‑provider, а вызывается `resolveSync` +#### Scenario: Синхронный резолв для async‑binding +- **WHEN** binding зарегистрирован как async‑инстанс или async‑provider, а вызывается `resolve()` или `tryResolve()` - **THEN** выбрасывается ошибка с указанием использовать async‑резолв ### Requirement: Управление Disposable @@ -111,7 +111,7 @@ - **THEN** observer получает соответствующие уведомления ### Requirement: Ошибки и сообщения об ошибках -При критических сбоях резолва ядро MUST выбрасывать ошибку с понятным сообщением, а для tryResolve MUST не бросать исключения. +При критических сбоях резолва ядро MUST выбрасывать ошибку с понятным сообщением. Для отсутствующей зависимости `tryResolve`/`tryResolveAsync` MUST возвращать `null` без исключения; ошибки выполнения резолва (например, цикл, sync/async mismatch, отсутствие обязательных params) MAY быть проброшены. #### Scenario: Ошибка отсутствующей зависимости - **WHEN** вызывается `resolve()` для незарегистрированной зависимости diff --git a/openspec/changes/cherrypick-system-spec/specs/flutter-integration/spec.md b/openspec/changes/cherrypick-system-spec/specs/flutter-integration/spec.md index fc851e3..5222fa5 100644 --- a/openspec/changes/cherrypick-system-spec/specs/flutter-integration/spec.md +++ b/openspec/changes/cherrypick-system-spec/specs/flutter-integration/spec.md @@ -41,14 +41,14 @@ Flutter‑интеграция MUST предоставлять `CherryPickProvid #### Scenario: Ошибка lookup - **WHEN** вызов происходит вне поддерева провайдера -- **THEN** происходит assertion‑ошибка +- **THEN** в debug‑режиме происходит assertion‑ошибка ### Requirement: Ошибки и сообщения При отсутствии провайдера в дереве MUST быть диагностируемая ошибка. #### Scenario: Диагностика отсутствия провайдера - **WHEN** `CherryPickProvider.of(context)` не находит провайдер -- **THEN** сообщение об ошибке указывает на отсутствие провайдера +- **THEN** в debug‑режиме сообщение assertion указывает на отсутствие провайдера ### Requirement: Точки расширения Flutter‑интеграция MUST позволять использовать собственные DI‑scope стратегии поверх `CherryPickProvider`.