Обновил описание задач
This commit is contained in:
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
# Spec Tasks Index
|
# Spec Tasks Index
|
||||||
|
|
||||||
> ⚠️ This file is generated. Do not edit manually.
|
> ⚠️ This file is generated. Do not edit manually.
|
||||||
> Generated at (UTC): `2026-03-07T11:09:24+00:00`
|
> Generated at (UTC): `2026-03-07T11:14:43+00:00`
|
||||||
|
|
||||||
## Tasks
|
## Tasks
|
||||||
|
|
||||||
|
|||||||
@@ -9,12 +9,14 @@ created: 2026-03-07
|
|||||||
Phase 1 в `spec/overview.md` требует поддержку provider CDEK с OAuth2 authentication и маппингом расчёта тарифа.
|
Phase 1 в `spec/overview.md` требует поддержку provider CDEK с OAuth2 authentication и маппингом расчёта тарифа.
|
||||||
|
|
||||||
## Goal
|
## Goal
|
||||||
Реализовать adapter interfaces и модули CDEK adapter: provider contract, OAuth2 token handling, HTTP client behavior и преобразование ответа в `DeliveryPrice`.
|
Реализовать adapter interfaces и модули CDEK adapter: provider contract, OAuth2 token handling, HTTP client behavior, преобразование ответа в `DeliveryPrice` и чтение параметров CDEK из секции `adapter` YAML-конфига.
|
||||||
|
|
||||||
## Constraints
|
## Constraints
|
||||||
- Только Adapter layer; без business decisions и sorting logic.
|
- Только Adapter layer; без business decisions и sorting logic.
|
||||||
- Внешний IO должен оставаться внутри adapter modules.
|
- Внешний IO должен оставаться внутри adapter modules.
|
||||||
- Timeout для CDEK должен быть 10 секунд согласно specification.
|
- Timeout для CDEK должен быть 10 секунд согласно specification.
|
||||||
|
- Параметры CDEK (`base_url`, OAuth2 credentials, retry policy, timeout, cache TTL) должны приходить из секции `adapter` в `.yaml` конфиге.
|
||||||
|
- Запрещён хардкод credentials и runtime-параметров адаптера.
|
||||||
- Не изменять файлы в `spec/`.
|
- Не изменять файлы в `spec/`.
|
||||||
|
|
||||||
## Acceptance criteria
|
## Acceptance criteria
|
||||||
@@ -23,6 +25,7 @@ Phase 1 в `spec/overview.md` требует поддержку provider CDEK с
|
|||||||
- CDEK client выполняет tariff request с timeout и retry behavior.
|
- CDEK client выполняет tariff request с timeout и retry behavior.
|
||||||
- CDEK mapper преобразует provider response в унифицированную schema `DeliveryPrice`.
|
- CDEK mapper преобразует provider response в унифицированную schema `DeliveryPrice`.
|
||||||
- Adapter наружу предоставляет только provider-facing API, необходимый Service.
|
- Adapter наружу предоставляет только provider-facing API, необходимый Service.
|
||||||
|
- Адаптер использует значения из секции `adapter` YAML-конфига, включая `timeout_seconds=10` и `cache_ttl_seconds=900` по умолчанию.
|
||||||
|
|
||||||
## Definition of Done
|
## Definition of Done
|
||||||
- [ ] Реализован base provider interface.
|
- [ ] Реализован base provider interface.
|
||||||
@@ -33,6 +36,7 @@ Phase 1 в `spec/overview.md` требует поддержку provider CDEK с
|
|||||||
## Tests
|
## Tests
|
||||||
- Добавить adapter unit tests для token lifecycle behavior.
|
- Добавить adapter unit tests для token lifecycle behavior.
|
||||||
- Добавить adapter tests для response mapping и HTTP error handling.
|
- Добавить adapter tests для response mapping и HTTP error handling.
|
||||||
|
- Добавить tests, проверяющие применение параметров CDEK из секции `adapter` YAML-конфига.
|
||||||
- Для внешних HTTP взаимодействий использовать stubs/mocks.
|
- Для внешних HTTP взаимодействий использовать stubs/mocks.
|
||||||
|
|
||||||
## Commands
|
## Commands
|
||||||
|
|||||||
@@ -9,12 +9,13 @@ created: 2026-03-07
|
|||||||
Product requirements требуют кеширование ответов provider с configurable TTL, а архитектура закрепляет доступ к данным за слоем Repository.
|
Product requirements требуют кеширование ответов provider с configurable TTL, а архитектура закрепляет доступ к данным за слоем Repository.
|
||||||
|
|
||||||
## Goal
|
## Goal
|
||||||
Реализовать `PriceCache` repository на Redis с операциями `get`, `set` и `invalidate`, включая поддержку TTL.
|
Реализовать `PriceCache` repository на Redis с операциями `get`, `set` и `invalidate`, включая поддержку TTL из секции `repository` YAML-конфига.
|
||||||
|
|
||||||
## Constraints
|
## Constraints
|
||||||
- Только Repository layer: data access и persistence mapping.
|
- Только Repository layer: data access и persistence mapping.
|
||||||
- В repository code не допускаются business decisions и workflow orchestration.
|
- В repository code не допускаются business decisions и workflow orchestration.
|
||||||
- Генерация cache key не должна реализовываться в repository.
|
- Генерация cache key не должна реализовываться в repository.
|
||||||
|
- Параметры Redis и TTL должны читаться из секции `repository` в `.yaml` конфиге.
|
||||||
- Не изменять файлы в `spec/`.
|
- Не изменять файлы в `spec/`.
|
||||||
|
|
||||||
## Acceptance criteria
|
## Acceptance criteria
|
||||||
@@ -22,6 +23,7 @@ Product requirements требуют кеширование ответов provid
|
|||||||
- `PriceCache` предоставляет async методы `get`, `set`, `invalidate`.
|
- `PriceCache` предоставляет async методы `get`, `set`, `invalidate`.
|
||||||
- `set` применяет TTL из configuration.
|
- `set` применяет TTL из configuration.
|
||||||
- Serialization/deserialization cached payload выполняются детерминированно.
|
- Serialization/deserialization cached payload выполняются детерминированно.
|
||||||
|
- Repository использует только параметры секции `repository` YAML-конфига для подключения к Redis и настройки TTL.
|
||||||
|
|
||||||
## Definition of Done
|
## Definition of Done
|
||||||
- [ ] Реализован Redis-backed cache repository.
|
- [ ] Реализован Redis-backed cache repository.
|
||||||
@@ -31,6 +33,7 @@ Product requirements требуют кеширование ответов provid
|
|||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
- Добавить repository tests для cache hit/miss, set/get roundtrip, invalidate и TTL expiration.
|
- Добавить repository tests для cache hit/miss, set/get roundtrip, invalidate и TTL expiration.
|
||||||
|
- Добавить tests, проверяющие чтение TTL и Redis connection settings из секции `repository` YAML-конфига.
|
||||||
- Использовать Redis test double или изолированный test Redis instance.
|
- Использовать Redis test double или изолированный test Redis instance.
|
||||||
|
|
||||||
## Commands
|
## Commands
|
||||||
|
|||||||
@@ -9,33 +9,39 @@ created: 2026-03-07
|
|||||||
Проект требует связать traces, metrics и logs через request correlation (`request_id` и `trace_id`) и добавить manual spans вокруг ключевых операций.
|
Проект требует связать traces, metrics и logs через request correlation (`request_id` и `trace_id`) и добавить manual spans вокруг ключевых операций.
|
||||||
|
|
||||||
## Goal
|
## Goal
|
||||||
Реализовать observability wiring: middleware для `request_id`, propagation structured logging context, OpenTelemetry instrumentation для FastAPI/httpx и manual spans для операций service/provider/cache.
|
Реализовать observability wiring: middleware для `request_id`, propagation structured logging context с корреляцией по `trace_id`, OpenTelemetry instrumentation для FastAPI/httpx, manual spans для операций service/provider/cache и метрики из `spec/overview.md`.
|
||||||
|
|
||||||
## Constraints
|
## Constraints
|
||||||
- Все observability concerns держать вне Business Logic.
|
- Все observability concerns держать вне Business Logic.
|
||||||
- При добавлении telemetry не вводить business decision-making.
|
- При добавлении telemetry не вводить business decision-making.
|
||||||
- Инструментировать только слои и операции, указанные в `spec/overview.md`.
|
- Инструментировать только слои и операции, указанные в `spec/overview.md`.
|
||||||
|
- Конфигурация telemetry должна читаться из секции `observability` в `.yaml` конфиге.
|
||||||
- Не изменять файлы в `spec/`.
|
- Не изменять файлы в `spec/`.
|
||||||
|
|
||||||
## Acceptance criteria
|
## Acceptance criteria
|
||||||
- Middleware назначает UUID `request_id` для каждого запроса.
|
- Middleware назначает UUID `request_id` для каждого запроса.
|
||||||
- `request_id` добавляется в structured logs через contextvars.
|
- `request_id` добавляется в structured logs через contextvars.
|
||||||
|
- Логи коррелируются с трассировкой через `trace_id`.
|
||||||
- Включена OpenTelemetry instrumentation для FastAPI и httpx.
|
- Включена OpenTelemetry instrumentation для FastAPI и httpx.
|
||||||
- Есть manual spans для `AggregatorService.get_all_prices`, provider `get_price` и cache operations.
|
- Есть manual spans для `AggregatorService.get_all_prices`, provider `get_price` и cache operations.
|
||||||
- Span attributes включают `provider`, `from_city`, `to_city`, `weight_kg`, `cache_hit`, `tariffs_found` там, где применимо.
|
- Span attributes включают `provider`, `from_city`, `to_city`, `weight_kg`, `cache_hit`, `tariffs_found` там, где применимо.
|
||||||
|
- Реализованы и экспортируются метрики: количество запросов, количество ошибок, latency (включая p50/p99), доступность провайдеров.
|
||||||
|
|
||||||
## Definition of Done
|
## Definition of Done
|
||||||
- [ ] Реализован middleware корреляции запросов.
|
- [ ] Реализован middleware корреляции запросов.
|
||||||
- [ ] В logging context есть binding `request_id`.
|
- [ ] В logging context есть binding `request_id`.
|
||||||
- [ ] Реализована автоматическая и manual tracing instrumentation.
|
- [ ] Реализована автоматическая и manual tracing instrumentation.
|
||||||
- [ ] Observability tests проверяют создание spans и обязательные attributes.
|
- [ ] Реализованы метрики, соответствующие overview.
|
||||||
|
- [ ] Observability tests проверяют создание spans, обязательные attributes и метрики.
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
- Добавить middleware tests для генерации и propagation `request_id`.
|
- Добавить middleware tests для генерации и propagation `request_id`.
|
||||||
- Добавить telemetry tests с in-memory span exporter для проверки names/attributes.
|
- Добавить telemetry tests с in-memory span exporter для проверки names/attributes.
|
||||||
- Добавить logging tests, проверяющие наличие `request_id` в log context.
|
- Добавить logging tests, проверяющие наличие `request_id` в log context.
|
||||||
|
- Добавить tests для проверки экспорта метрик (request count, error count, latency, provider availability).
|
||||||
|
|
||||||
## Commands
|
## Commands
|
||||||
- `poetry run pytest tests/controllers/test_middleware_request_id.py -q`
|
- `poetry run pytest tests/controllers/test_middleware_request_id.py -q`
|
||||||
- `poetry run pytest tests/observability/test_tracing.py -q`
|
- `poetry run pytest tests/observability/test_tracing.py -q`
|
||||||
- `poetry run pytest tests/observability/test_logging_context.py -q`
|
- `poetry run pytest tests/observability/test_logging_context.py -q`
|
||||||
|
- `poetry run pytest tests/observability/test_metrics.py -q`
|
||||||
|
|||||||
@@ -9,22 +9,22 @@ created: 2026-03-07
|
|||||||
`spec/overview.md` требует anomaly alerting через цепочку `SigNoz Alert Rules -> Webhook -> Telegram Bot API` с вынесением token в configuration.
|
`spec/overview.md` требует anomaly alerting через цепочку `SigNoz Alert Rules -> Webhook -> Telegram Bot API` с вынесением token в configuration.
|
||||||
|
|
||||||
## Goal
|
## Goal
|
||||||
Добавить configuration и infrastructure artifacts, необходимые для маршрутизации anomaly alerts из SigNoz в Telegram и для соответствия alert thresholds требованиям проекта.
|
Добавить configuration и infrastructure artifacts, необходимые для маршрутизации anomaly alerts из SigNoz в Telegram и для соответствия alert thresholds требованиям проекта через секцию `alerts` в `.yaml` конфиге.
|
||||||
|
|
||||||
## Constraints
|
## Constraints
|
||||||
- Alert transport/configuration должны быть отделены от business logic.
|
- Alert transport/configuration должны быть отделены от business logic.
|
||||||
- Telegram credentials должны приходить из configuration и не быть hardcoded.
|
- Telegram credentials должны приходить из секции `alerts` YAML-конфига и не быть hardcoded.
|
||||||
- Thresholds должны соответствовать alert conditions из `spec/overview.md`.
|
- Thresholds должны соответствовать alert conditions из `spec/overview.md`.
|
||||||
- Не изменять файлы в `spec/`.
|
- Не изменять файлы в `spec/`.
|
||||||
|
|
||||||
## Acceptance criteria
|
## Acceptance criteria
|
||||||
- Configuration содержит отдельную секцию Alerts с Telegram settings.
|
- Configuration содержит отдельную секцию `alerts` в `.yaml` конфиге с Telegram settings.
|
||||||
- Infrastructure artifact(s) описывают routing от SigNoz alert webhook к Telegram Bot API.
|
- Infrastructure artifact(s) описывают routing от SigNoz alert webhook к Telegram Bot API.
|
||||||
- Представлены alert conditions для:
|
- Представлены alert conditions для:
|
||||||
- provider 5xx: 5 ошибок за 5 минут
|
- provider 5xx: 5 ошибок за 5 минут
|
||||||
- provider p99 latency > 5000ms в течение 10 минут
|
- provider p99 latency > 5000ms в течение 10 минут
|
||||||
- provider unavailable более 5 минут
|
- provider unavailable более 5 минут
|
||||||
- Setup instructions содержат обязательные environment variables и шаги верификации.
|
- Setup instructions содержат пример секции `alerts` YAML-конфига и шаги верификации.
|
||||||
|
|
||||||
## Definition of Done
|
## Definition of Done
|
||||||
- [ ] Реализована schema конфигурации Alerts.
|
- [ ] Реализована schema конфигурации Alerts.
|
||||||
@@ -33,7 +33,7 @@ created: 2026-03-07
|
|||||||
- [ ] Инструкции валидации исполнимы в local environment.
|
- [ ] Инструкции валидации исполнимы в local environment.
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
- Добавить config tests для проверки загрузки alert settings и обязательных полей.
|
- Добавить config tests для проверки загрузки alert settings из секции `alerts` YAML-конфига и обязательных полей.
|
||||||
- Добавить tests для alert payload transformation/transport logic, если он реализован в коде.
|
- Добавить tests для alert payload transformation/transport logic, если он реализован в коде.
|
||||||
|
|
||||||
## Commands
|
## Commands
|
||||||
|
|||||||
Reference in New Issue
Block a user