## ADDED Requirements ### Requirement: Сущность адаптера логирования Адаптер MUST предоставлять `TalkerCherryPickObserver`, реализующий `CherryPickObserver`. #### Scenario: Доступность адаптера - **WHEN** разработчик импортирует пакет адаптера - **THEN** `TalkerCherryPickObserver` доступен для использования ### Requirement: Жизненный цикл наблюдателя Наблюдатель MUST подключаться при создании scope и работать в течение жизненного цикла этого scope. #### Scenario: Подключение наблюдателя - **WHEN** observer передан при открытии scope - **THEN** все DI‑события в scope направляются в Talker ### Requirement: Маппинг уровней логирования Адаптер MUST маршрутизировать DI‑события в Talker с корректными уровнями (info/warning/verbose/handle). #### Scenario: Диагностика - **WHEN** DI‑ядро генерирует диагностическое событие - **THEN** адаптер логирует его как verbose #### Scenario: Ошибка резолва - **WHEN** DI‑ядро генерирует ошибку - **THEN** адаптер логирует ее через `handle` и включает stack trace при наличии ### Requirement: Ненавязчивость поведения Адаптер MUST быть наблюдателем и не изменять DI‑поведение, жизненный цикл или кэширование. #### Scenario: Разрешение с адаптером - **WHEN** адаптер подключен - **THEN** резолв и поведение DI не изменяются, кроме появления логов ### Requirement: Ошибки логирования Адаптер MUST передавать ошибки логирования как есть и не содержит собственной обработки исключений. #### Scenario: Исключение в Talker - **WHEN** Talker выбрасывает исключение при логировании - **THEN** исключение пробрасывается вызывающему коду ### Requirement: Точки расширения Адаптер MUST позволять использовать пользовательские настройки Talker без изменения адаптера. #### Scenario: Кастомная конфигурация Talker - **WHEN** пользователь передает кастомный Talker - **THEN** адаптер использует переданную конфигурацию для всех DI‑событий