docs(reports): add ss-prod agentic E2E gap analysis and task notes

Add 2026-09-08 production gap/spec-coverage/refresh-plan and dashboard
scenario E2E plan/report, axiom-mcp feedback, and 2026-09-11 data-team
maintenance dev-test run notes.
This commit is contained in:
2026-09-11 17:27:50 +03:00
parent 605c5d0552
commit f37a46e366
8 changed files with 1229 additions and 0 deletions

View File

@@ -0,0 +1,94 @@
# Задача: тестовый прогон maintenance (banner) на DEV и интеграция скриптов
**Команда:** Data Engineering
**Приоритет:** P2
**Окружение:** только DEV (PROD не трогать)
**Дата постановки:** 2026-09-11
**Спека:** `specs/031-maintenance-banner/`
## Контекст
В superset-tools реализован функционал maintenance banner: внешний инструмент (ETL, cron,
CI/CD, Airflow) через API запускает «плашку» «Ведутся технические работы» на дашбордах
Superset и снимает её. Нужно прогнать функционал на DEV и встроить скрипты запуска/снятия
плашек в инструменты команды.
## Цель
1. Добавить в инструменты команды (Airflow DAG / CI job / cron / runbook) скрипты запуска
и снятия плашек, работающие против DEV-окружения.
2. Прогнать функциональный сценарий на DEV и подтвердить корректность баннеров.
## 1. Подготовка доступа
- Создать API-ключ в superset-tools с permissions: `maintenance:start`, `maintenance:end`,
`maintenance:end_all` (Admin → API Keys).
- Узнать точный id DEV-окружения: `GET {BASE_URL}/api/environments`. Во всех командах
ниже `{DEV_ENV_ID}` — это реальный id из ответа (в примерах фигурирует `ss-dev` —
сверить с конфигом стенда).
- Определить `{BASE_URL}` DEV-стенда (например, `http://127.0.0.1:8000` для локального
или адрес dev-стенда команды).
- Ключ хранить в секретах (CI/CD secrets, vault, `.env` вне git). **Не передавать ключ
аргументом командной строки.**
## 2. Включить скрипты в инструменты команды
Взять готовые примеры и адаптировать под свой пайплайн:
| Файл | Назначение |
|---|---|
| `examples/maintenance/maintenance-api-bash.sh` | bash/curl — для shell, cron, CI |
| `examples/maintenance/maintenance-api-python.py` | Python/requests — для ETL/Airflow (`start_maintenance` / `end_maintenance` / `end_all_maintenance` можно импортировать) |
| `examples/maintenance/README.md` | описание API, параметров и ошибок |
Требования к интеграции:
- скрипты добавлены в репозиторий команды (например `dags/`, `ci/`, `scripts/`);
- окружение (`{DEV_ENV_ID}`) и `{BASE_URL}` параметризованы, по умолчанию — DEV;
- API-ключ читается из переменной окружения/секрет-хранилища;
- ненулевой код возврата на ошибках, чтобы пайплайн не «проглатывал» сбой.
## 3. Тест-сценарии на DEV
| # | Сценарий | Команда (bash) | Ожидание |
|---|---|---|---|
| 1 | Старт maintenance на известной таблице | `./maintenance-api-bash.sh start schema.table 4 {DEV_ENV_ID}` | `202`, `task_id` + `maintenance_id`; плашка на затронутых дашбордах |
| 2 | Проверка событий и баннеров | `GET /api/maintenance/events`, `GET /api/maintenance/dashboard-banners` | событие `active`, баннер виден в Superset |
| 3 | Ручное завершение | `./maintenance-api-bash.sh end {maintenance_id}` | `202`; при повторе `already_completed` (идемпотентно); плашка снята |
| 4 | Идемпотентность старта | повтор сценария 1 с тем же окном | `409 {status:"already_active"}`, тот же `maintenance_id` |
| 5 | Авто-завершение | `./maintenance-api-bash.sh start schema.table 4 {DEV_ENV_ID} "ETL" --auto-end` | плашка снимается автоматически в `end_time` |
| 6 | Аварийное снятие всех | `./maintenance-api-bash.sh end-all {DEV_ENV_ID}` | все активные события завершены, плашки сняты |
| 7 | Негатив: неизвестное окружение | `start schema.table 4 unknown-env` | `404` |
| 8 | Негатив: ключ без права | ключ без `maintenance:start` | `403` |
Проверить в UI superset-tools (Admin, вкладка Maintenance) список активных/завершённых
событий и настройки; баннер — в Superset на дашборде, который использует указанную таблицу.
## 4. Артефакты
- PR/ссылка на скрипты, добавленные в инструменты команды.
- Короткий отчёт: команды, HTTP-коды, `task_id` / `maintenance_id` по каждому сценарию.
- Скриншоты плашки «до» и «после» снятия на DEV.
- Подтверждение, что PROD не затронут.
## Критерии приёмки
- [ ] Скрипты запуска/снятия плашек есть в инструментах команды, параметризованы по окружению.
- [ ] На DEV плашка появляется на дашбордах, затронутых указанными таблицами.
- [ ] `end` и `end-all` снимают плашку; повторные вызовы идемпотентны.
- [ ] `--auto-end` снимает плашку по истечении окна.
- [ ] Ошибки `403` / `404` / `409` обрабатываются скриптом, пайплайн не падает молча.
- [ ] Ключ не передаётся в командной строке; используется секрет-хранилище.
## Ограничения и безопасность
- Тестировать только на DEV. **Fan-out без `environment_id` стартует во всех PROD-окружениях
— на этом прогоне не использовать.**
- `end-all` снимает плашки со всех дашбордов — применять осознанно.
- Не коммитить API-ключ и `.env` со секретами.
## Ссылки
- `examples/maintenance/README.md`
- `specs/031-maintenance-banner/spec.md`, `quickstart.md`
- API: `{BASE_URL}/api/maintenance/*` (все мутации возвращают `202` + `task_id`)