mirror of
https://github.com/wasrusgen/zov-tech.git
synced 2026-06-03 14:04:48 +00:00
feat: система активных агентов — ROADMAP, статусы, команда /project:review
- ROADMAP.md — единый роадмап продукта (реализовано / в работе / бэклог) - agents/dev-status.md — состояние кода, долг, следующий шаг - agents/devops-status.md — VPS, блокеры, инфра-бэклог - agents/design-status.md — компоненты, нереализованные экраны - agents/feature-status.md — таблица функционала, приоритизированный бэклог - agents/test-status.md — покрытие, пробелы, следующий шаг - .claude/commands/review.md — мастер-команда: сводный отчёт по всем агентам - Все агенты обновлены: читают и пишут свой status.md в начале/конце работы Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
ff35dd769f
commit
7b874e0195
@ -72,14 +72,16 @@ color: #F5F5F5; /* ✅ почти белый — невидим на свет
|
||||
|
||||
## Процесс работы с дизайном
|
||||
|
||||
1. Получить задачу на новый экран или изменение
|
||||
2. Если нужен прототип → открыть open-design (localhost:17573)
|
||||
3. Написать/изменить CSS в `styles.css` или `podbor.css`
|
||||
4. Проверить все 4 темы
|
||||
5. Запустить CSS-линтер: `python -X utf8 tests/lint_css.py`
|
||||
6. Поднять версию `?v=` в `index.html`
|
||||
7. Запустить `/project:ui-check`
|
||||
8. Коммит только после зелёных проверок
|
||||
1. **Прочитать `agents/design-status.md`** — понять что запроектировано, что нет
|
||||
2. Получить задачу на новый экран или изменение
|
||||
3. Если нужен прототип → открыть open-design (localhost:17573)
|
||||
4. Написать/изменить CSS в `styles.css` или `podbor.css`
|
||||
5. Проверить все 4 темы
|
||||
6. Запустить CSS-линтер: `python -X utf8 tests/lint_css.py`
|
||||
7. Поднять версию `?v=` в `index.html`
|
||||
8. Запустить `/project:ui-check`
|
||||
9. Коммит только после зелёных проверок
|
||||
10. **Обновить `agents/design-status.md`**: что запроектировано, что нет, следующий шаг
|
||||
|
||||
## Компонентная библиотека (существующие классы)
|
||||
```
|
||||
|
||||
@ -34,12 +34,13 @@
|
||||
- Формат буквы: a → b → c → ... в течение одного дня
|
||||
|
||||
## Процесс работы
|
||||
1. Прочитать задачу
|
||||
1. **Прочитать `agents/dev-status.md`** — понять текущее состояние и бэклог
|
||||
2. Найти нужные файлы (`Glob`, `Grep`, `Read`)
|
||||
3. Написать код
|
||||
4. Поднять версию `?v=` если тронут miniapp
|
||||
5. Запустить `/project:test` — убедиться что не сломал
|
||||
6. Закоммитить с понятным сообщением
|
||||
7. **Обновить `agents/dev-status.md`**: добавить в «Сделано», убрать из бэклога, написать новый «Следующий шаг»
|
||||
|
||||
## Чего НЕ делать
|
||||
- Не трогать `deploy/` и docker без `/project:devops`
|
||||
|
||||
@ -65,10 +65,12 @@ curl -s https://api.wasrusgen1.pro/healthz
|
||||
- Проверить деплой: вкладка Actions в репозитории
|
||||
|
||||
## Процесс деплоя
|
||||
1. `git push` в master → GitHub Pages обновляется автоматически
|
||||
2. Для VPS (бот/бэкенд) — запустить SSH-команды выше
|
||||
3. Проверить: `curl https://api.wasrusgen1.pro/healthz` → должен вернуть 200
|
||||
4. Запустить `/project:test` для подтверждения
|
||||
1. **Прочитать `agents/devops-status.md`** — проверить блокеры и известные проблемы
|
||||
2. `git push` в master → GitHub Pages обновляется автоматически
|
||||
3. Для VPS (бот/бэкенд) — запустить SSH-команды выше
|
||||
4. Проверить: `curl https://api.wasrusgen1.pro/healthz` → должен вернуть 200
|
||||
5. Запустить `/project:test` для подтверждения
|
||||
6. **Обновить `agents/devops-status.md`**: статус блокеров, новые проблемы, следующий шаг
|
||||
|
||||
## Мониторинг и диагностика
|
||||
- Если бот не отвечает → проверить логи бота
|
||||
|
||||
@ -70,12 +70,21 @@ if (prefill) { /* применить */ sessionStorage.removeItem("prefillClient
|
||||
- Применить минимальный патч
|
||||
- Не ломать существующий функционал
|
||||
|
||||
### Шаг 0 — Контекст
|
||||
**Прочитать `agents/feature-status.md` и `ROADMAP.md`** — понять что реализовано, что нет, приоритеты.
|
||||
|
||||
### Шаг 3 — Проверка
|
||||
```bash
|
||||
python -X utf8 tests/test_manager.py # полный тест менеджера
|
||||
python -X utf8 tests/smoke_api.py # smoke
|
||||
node tests/ui_smoke.js # UI Playwright
|
||||
```
|
||||
|
||||
### Шаг 4 — Обновление статуса
|
||||
После реализации **обновить `agents/feature-status.md`** и **`ROADMAP.md`**:
|
||||
- Переместить функцию из «Бэклог» в «✅ Реализовано»
|
||||
- Обновить «Следующий шаг»
|
||||
|
||||
## API эндпоинты (существующие)
|
||||
| Эндпоинт | Описание |
|
||||
|---|---|
|
||||
|
||||
85
.claude/commands/review.md
Normal file
85
.claude/commands/review.md
Normal file
@ -0,0 +1,85 @@
|
||||
# Агент: Ревью продукта
|
||||
|
||||
Ты — координатор. Собираешь полную картину состояния продукта от всех агентов и формируешь план следующего шага.
|
||||
|
||||
## Что делаешь
|
||||
|
||||
### Шаг 1 — Читай статусы всех агентов
|
||||
```
|
||||
agents/dev-status.md
|
||||
agents/devops-status.md
|
||||
agents/design-status.md
|
||||
agents/feature-status.md
|
||||
agents/test-status.md
|
||||
ROADMAP.md
|
||||
```
|
||||
|
||||
### Шаг 2 — Проверь живое состояние
|
||||
|
||||
**Git: последние изменения**
|
||||
```bash
|
||||
git log --oneline -10
|
||||
git status
|
||||
```
|
||||
|
||||
**VPS: сервисы живы?**
|
||||
```bash
|
||||
curl -s https://api.wasrusgen1.pro/healthz
|
||||
```
|
||||
|
||||
**Тесты: последний прогон чистый?**
|
||||
```bash
|
||||
python -X utf8 tests/smoke_api.py 2>&1 | tail -20
|
||||
```
|
||||
|
||||
### Шаг 3 — Сформируй отчёт
|
||||
|
||||
Выведи строго в этом формате:
|
||||
|
||||
```
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
РЕВЬЮ ПРОДУКТА — zov-tech [дата]
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
ИНФРАСТРУКТУРА
|
||||
VPS / API ✅/❌ [статус]
|
||||
GitHub Pages ✅/❌ [последний деплой]
|
||||
Drive-доступ ✅/❌ [shipments/arrivals]
|
||||
|
||||
КОД
|
||||
Последний коммит: [хэш] [сообщение]
|
||||
Открытый долг: [N пунктов]
|
||||
|
||||
ТЕСТЫ
|
||||
CSS-линтер ✅/❌
|
||||
Smoke API ✅/⚠️/❌ (N/12)
|
||||
Менеджер ✅/⚠️/❌ (N/19)
|
||||
UI Playwright ✅/❌ (N/10)
|
||||
|
||||
ФУНКЦИОНАЛ
|
||||
Реализовано: [N функций из ROADMAP]
|
||||
В работе: [что сейчас в процессе]
|
||||
Следующий MVP: [первый незакрытый Приоритет 1]
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
БЛОКЕРЫ (требуют действия Руслана)
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
[список — каждый блокер одной строкой]
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
ПЛАН НА СЛЕДУЮЩИЙ СПРИНТ
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
1. [задача — агент — оценка]
|
||||
2. [задача — агент — оценка]
|
||||
3. [задача — агент — оценка]
|
||||
```
|
||||
|
||||
### Шаг 4 — Обнови статус-файлы
|
||||
|
||||
Если при проверке обнаружил устаревшие данные в `agents/*.md` — исправь их.
|
||||
Если ROADMAP не соответствует реальному состоянию — исправь.
|
||||
|
||||
### Шаг 5 — Рекомендация
|
||||
|
||||
Одним предложением: что делать прямо сейчас и какой агент вызвать.
|
||||
Пример: «Вызови `/project:feature` — экран «Мой статус» готов к реализации, дизайн не нужен.»
|
||||
@ -1,6 +1,9 @@
|
||||
# Агент: Тестировщик
|
||||
|
||||
Запусти все тесты и выдай сводный отчёт с замечаниями к устранению.
|
||||
Запусти все тесты, выдай сводный отчёт и обнови статус покрытия.
|
||||
|
||||
## Шаг 0 — Читай статус
|
||||
Прочитай `agents/test-status.md` — знай что уже покрыто и что пропускается намеренно.
|
||||
|
||||
## Шаг 1 — CSS-линтер
|
||||
```bash
|
||||
@ -52,5 +55,6 @@ node tests/ui_smoke.js
|
||||
Эти два считать **предупреждением**, не блокирующей ошибкой, пока не расшарен файл в Google Drive.
|
||||
|
||||
## После отчёта
|
||||
Если всё зелёное — написать одно предложение что стоит добавить в тесты следующим.
|
||||
Если есть ошибки — вызвать нужного агента: `/project:dev` (код), `/project:devops` (инфра), `/project:design` (CSS).
|
||||
1. **Обновить `agents/test-status.md`**: результаты прогона, актуализировать пробелы в покрытии
|
||||
2. Если всё зелёное — написать одно предложение что стоит добавить в тесты следующим
|
||||
3. Если есть ошибки — вызвать нужного агента: `/project:dev` (код), `/project:devops` (инфра), `/project:design` (CSS)
|
||||
|
||||
83
ROADMAP.md
Normal file
83
ROADMAP.md
Normal file
@ -0,0 +1,83 @@
|
||||
# ROADMAP — zov-tech CRM MiniApp
|
||||
> Обновляется агентами автоматически. Последнее обновление: 2026-05-18
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Продуктовая цель
|
||||
Telegram MiniApp для 112 менеджеров салонов ЗОВ: подбор техники, замеры, сборки, CRM-клиенты.
|
||||
Привязка менеджеров к куратору через инструмент. Клиентский кабинет — воронка покупки.
|
||||
|
||||
---
|
||||
|
||||
## ✅ Готово (реализовано)
|
||||
|
||||
### Инфраструктура
|
||||
- [x] VPS на Docker (FastAPI + aiogram + Caddy)
|
||||
- [x] GitHub Pages для MiniApp (auto-deploy при push в master)
|
||||
- [x] Google Sheets как БД
|
||||
- [x] HMAC-SHA256 аутентификация через Telegram initData
|
||||
- [x] Pre-push hook: CSS-линтер + UI Playwright блокируют сломанный код
|
||||
- [x] CI: GitHub Actions запускает тесты при каждом push
|
||||
|
||||
### Модули MiniApp (менеджер/admin)
|
||||
- [x] Список клиентов + поиск + карточка клиента
|
||||
- [x] Создание/редактирование клиента
|
||||
- [x] Замеры: создание, фото, закрытие заявки
|
||||
- [x] Заявка на замер (назначение замерщику)
|
||||
- [x] Сборки: создание, список, детальная карточка
|
||||
- [x] Подбор техники (proposals): создание, варианты, голосование клиента
|
||||
- [x] Подбор через AI (GigaChat/Claude)
|
||||
- [x] Приватность клиентских данных (имена/телефоны скрыты визуально)
|
||||
- [x] 4 темы оформления: Default, Foundry, Boardroom, Atelier
|
||||
|
||||
### Качество
|
||||
- [x] 15-секундный таймаут на все fetch-запросы (все модули)
|
||||
- [x] CSS-линтер (запрещённые паттерны + WCAG-контраст)
|
||||
- [x] Smoke API тесты (12 эндпоинтов)
|
||||
- [x] Полный тест кабинета менеджера (19 сценариев)
|
||||
- [x] UI Playwright smoke (10 проверок JS-ошибок)
|
||||
|
||||
---
|
||||
|
||||
## 🔄 В работе
|
||||
|
||||
| Задача | Агент | Статус |
|
||||
|--------|-------|--------|
|
||||
| Доступ сервисного аккаунта к Google Drive (отгрузки/поступления) | devops | ⏳ ждём подтверждения |
|
||||
|
||||
---
|
||||
|
||||
## 📋 Бэклог (приоритизирован)
|
||||
|
||||
### Приоритет 1 — Завершение MVP менеджера
|
||||
- [ ] Экран «Мой статус» для менеджера (роль, активность, дата последней сделки)
|
||||
- [ ] Входящие задачи менеджера (`/api/manager_pending`) — экран уведомлений
|
||||
- [ ] Отгрузки и поступления склад (после решения Drive)
|
||||
|
||||
### Приоритет 2 — Клиентский кабинет
|
||||
- [ ] Базовый клиентский экран (сейчас только `#/picker`)
|
||||
- [ ] История заказов клиента
|
||||
- [ ] Самозамер (5-шаговая форма для клиента)
|
||||
- [ ] Калькулятор стоимости кухни
|
||||
|
||||
### Приоритет 3 — Аналитика и управление
|
||||
- [ ] Дашборд куратора: активность менеджеров, воронка сделок
|
||||
- [ ] Реестр менеджеров: поле `last_order_date`, 90-дневный контроль активности
|
||||
- [ ] Метрики: количество замеров, подборов, сборок по менеджеру
|
||||
|
||||
### Приоритет 4 — Монетизация
|
||||
- [ ] Платёжная интеграция (Telegram Stars / ЮKassa)
|
||||
- [ ] Статусы подписки менеджеров (бесплатно / платно)
|
||||
|
||||
### Технический долг
|
||||
- [ ] `Content-Type: application/json` в `_fetchWithTimeout` (все модули)
|
||||
- [ ] Аудит `app.js` роутера на edge cases
|
||||
- [ ] Тест карточки клиента в Playwright (нужна фикстура)
|
||||
- [ ] Staging-окружение (отдельный VPS или Docker Compose override)
|
||||
|
||||
---
|
||||
|
||||
## 🚫 Не в скоупе (решение принято)
|
||||
- Нативное мобильное приложение (остаётся MiniApp)
|
||||
- База знаний, Обучение, FAQ (отдельный продукт)
|
||||
- Партнёрская комиссия от производителей
|
||||
38
agents/design-status.md
Normal file
38
agents/design-status.md
Normal file
@ -0,0 +1,38 @@
|
||||
# Статус агента: Дизайнер
|
||||
> Обновляется агентом `/project:design` после каждой задачи.
|
||||
|
||||
**Последнее обновление:** 2026-05-18
|
||||
|
||||
---
|
||||
|
||||
## ✅ Сделано
|
||||
- 4 темы оформления: Default (светлая/тёмная), Foundry, Boardroom, Atelier
|
||||
- Компонентная библиотека: 15+ классов (client-card, podbor-step, btn-primary и др.)
|
||||
- CSS-линтер: WCAG-контраст, запрещённые паттерны, версии кэша
|
||||
- Privacy-режим: имена и телефоны клиентов скрыты (`color: #F5F5F5`)
|
||||
- Анимации: splash-экран с логотипом, spinner, плавные переходы
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Известные проблемы
|
||||
| Проблема | Файл | Приоритет |
|
||||
|----------|------|-----------|
|
||||
| open-design требует ручного запуска (нет autostart) | — | низкий |
|
||||
| Экраны «Мой статус», «Входящие» — не запроектированы | — | средний |
|
||||
| Тёмная тема Default не проверялась системно по всем экранам | styles.css | средний |
|
||||
| Нет адаптации под iPhone SE (320px) | styles.css | низкий |
|
||||
|
||||
---
|
||||
|
||||
## 📋 Бэклог дизайнера
|
||||
1. Спроектировать экран «Мой статус» менеджера (данные роли, активность, бейджи)
|
||||
2. Спроектировать экран «Входящие задачи» (карточки заявок)
|
||||
3. Аудит тёмной темы Default — пройти по всем экранам вручную
|
||||
4. Типография: проверить иерархию заголовков на экранах замеров и сборок
|
||||
5. Добавить empty-state иллюстрации (сейчас только текст «пока нет»)
|
||||
|
||||
---
|
||||
|
||||
## 🔜 Следующий шаг
|
||||
**Спроектировать экран «Мой статус»** в open-design (localhost:17573).
|
||||
Данные для экрана: роль, имя менеджера, дата последней сделки, количество клиентов/замеров/сборок.
|
||||
37
agents/dev-status.md
Normal file
37
agents/dev-status.md
Normal file
@ -0,0 +1,37 @@
|
||||
# Статус агента: Разработчик
|
||||
> Обновляется агентом `/project:dev` после каждой задачи.
|
||||
|
||||
**Последнее обновление:** 2026-05-18
|
||||
**Последний коммит:** `fix: добавить 15-секундный таймаут fetch во все модули`
|
||||
|
||||
---
|
||||
|
||||
## ✅ Сделано (последние задачи)
|
||||
- `escAttr is not defined` — добавлена функция, карточка клиента работает
|
||||
- `_fetchWithTimeout` (15с AbortController) — внедрён во все 5 модулей: clients, measurements, assembly, proposals, request
|
||||
- Карточка клиента: убран баг с загрузкой proposals вместо карточки
|
||||
- Сравнение `client_tg_id` через `String()` — исправлен silent TypeError
|
||||
- Примечания клиента: кнопка больше не зависает на «Сохраняем...»
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Известные проблемы
|
||||
| Проблема | Файл | Приоритет |
|
||||
|----------|------|-----------|
|
||||
| Нет `Content-Type: application/json` в `_fetchWithTimeout` | все модули | низкий (бэкенд прощает) |
|
||||
| `app.js` роутер не аудирован на edge cases | app.js | средний |
|
||||
| `measurements.js` — статический fetch `zamer-checklist.md` без таймаута | measurements.js | низкий |
|
||||
|
||||
---
|
||||
|
||||
## 📋 Бэклог разработчика
|
||||
1. Добавить `Content-Type: application/json` в `_fetchWithTimeout` (все модули)
|
||||
2. Аудит `app.js`: неизвестные хэши → 404-экран, а не падение
|
||||
3. Экран «Мой статус» менеджера (API `/api/me` уже есть)
|
||||
4. Проверить обработку ошибок в `measurements.js` после рефакторинга fetch
|
||||
|
||||
---
|
||||
|
||||
## 🔜 Следующий шаг
|
||||
**Добавить `Content-Type` в `_fetchWithTimeout`** — патч в 5 файлах, 2 минуты работы.
|
||||
Или: реализовать экран «Мой статус» (приоритет 1 в ROADMAP).
|
||||
47
agents/devops-status.md
Normal file
47
agents/devops-status.md
Normal file
@ -0,0 +1,47 @@
|
||||
# Статус агента: DevOps / VPS
|
||||
> Обновляется агентом `/project:devops` после каждой задачи.
|
||||
|
||||
**Последнее обновление:** 2026-05-18
|
||||
**VPS:** `94.241.170.144` | **API:** `https://api.wasrusgen1.pro`
|
||||
|
||||
---
|
||||
|
||||
## ✅ Сделано
|
||||
- Docker Compose: bot + backend + caddy — все сервисы работают
|
||||
- Auto-deploy GitHub Pages через GitHub Actions при push в master
|
||||
- HTTPS через Caddy — сертификат активен
|
||||
- Pre-push hook защищает от деплоя сломанного кода
|
||||
|
||||
---
|
||||
|
||||
## 🔴 Блокеры
|
||||
| Проблема | Описание | Решение |
|
||||
|----------|----------|---------|
|
||||
| Drive 404 для shipments/arrivals | Сервисный аккаунт `zov-backend@zov-sborka.iam.gserviceaccount.com` не имеет доступа к файлу отгрузок | ⏳ Ждём расшаривания файла `1KCJUXjhVR2NWEz9bD0kjTaEADsxF8gI5GMzLwJ2bw84` |
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Известные проблемы
|
||||
| Проблема | Приоритет |
|
||||
|----------|-----------|
|
||||
| Нет алертинга при падении сервисов (только ручной мониторинг) | средний |
|
||||
| Нет staging-окружения — правки идут сразу в прод | средний |
|
||||
| Логи не ротируются автоматически | низкий |
|
||||
|
||||
---
|
||||
|
||||
## 📋 Бэклог DevOps
|
||||
1. ✅ Проверить Drive-доступ после расшаривания файла
|
||||
2. Настроить алертинг: если `/healthz` падает → уведомление в Telegram
|
||||
3. Настроить staging (`api-dev.wasrusgen1.pro`) для тестирования без риска прода
|
||||
4. Автоматическая ротация логов Docker
|
||||
5. Backup Google Sheets → локальный снэпшот раз в сутки
|
||||
|
||||
---
|
||||
|
||||
## 🔜 Следующий шаг
|
||||
**Проверить Drive-доступ** как только придёт подтверждение:
|
||||
```bash
|
||||
python -X utf8 tests/smoke_api.py
|
||||
```
|
||||
Ожидаем: `POST /api/shipments` и `POST /api/arrivals` перестают падать с 404.
|
||||
57
agents/feature-status.md
Normal file
57
agents/feature-status.md
Normal file
@ -0,0 +1,57 @@
|
||||
# Статус агента: Функционал
|
||||
> Обновляется агентом `/project:feature` после каждой задачи.
|
||||
|
||||
**Последнее обновление:** 2026-05-18
|
||||
|
||||
---
|
||||
|
||||
## ✅ Реализованные функции
|
||||
|
||||
### Менеджер / Admin
|
||||
| Функция | Маршрут | Статус |
|
||||
|---------|---------|--------|
|
||||
| Список клиентов + поиск | `#/clients` | ✅ работает |
|
||||
| Создание клиента | `#/clients/new` | ✅ работает |
|
||||
| Карточка клиента + примечания | `#/clients/client/{key}` | ✅ работает |
|
||||
| Заявка на замер | `#/request` | ✅ работает |
|
||||
| Новый замер + фото | `#/measurements` | ✅ работает |
|
||||
| Закрытие заявки на замер | `#/measurements?id=...` | ✅ работает |
|
||||
| Список сборок | `#/assembly` | ✅ работает |
|
||||
| Создание сборки | `#/assembly/new` | ✅ работает |
|
||||
| Детальная сборка | `#/assembly/{id}` | ✅ работает |
|
||||
| Подбор техники (proposals) | `#/picker` | ✅ работает |
|
||||
| AI-подбор (GigaChat/Claude) | через proposals | ✅ работает |
|
||||
|
||||
### Отсутствует из ТЗ (Приоритет 1 ROADMAP)
|
||||
| Функция | Маршрут | Статус |
|
||||
|---------|---------|--------|
|
||||
| Мой статус менеджера | `#/me` или `#/status` | ❌ не реализован |
|
||||
| Входящие задачи | `#/inbox` | ❌ не реализован |
|
||||
| Отгрузки завода | — | ❌ блокер: Drive 404 |
|
||||
| Поступления склада | — | ❌ блокер: Drive 404 |
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Известные проблемы
|
||||
| Проблема | Приоритет |
|
||||
|----------|-----------|
|
||||
| Клиентский кабинет — только `#/picker`, нет полноценного кабинета | высокий |
|
||||
| Нет экрана 404 для неизвестных хэшей | средний |
|
||||
| Нет пагинации списка клиентов (сломается при 500+ записях) | средний |
|
||||
|
||||
---
|
||||
|
||||
## 📋 Бэклог функционала
|
||||
1. **Экран «Мой статус»** — вызов `/api/me`, показать роль + статистику
|
||||
2. **Экран «Входящие»** — вызов `/api/manager_pending`, карточки заявок
|
||||
3. **Клиентский кабинет** — базовый экран для роли `client`
|
||||
4. **Пагинация / виртуальный скролл** в списке клиентов
|
||||
5. **Фильтры в замерах** — по дате, по замерщику, по статусу
|
||||
|
||||
---
|
||||
|
||||
## 🔜 Следующий шаг
|
||||
**Реализовать экран «Мой статус»** (`#/me`):
|
||||
- API `/api/me` уже возвращает роль, `first_name`, `username`
|
||||
- Добавить счётчики клиентов/замеров/сборок (требует нового поля в `/api/me` или отдельного запроса)
|
||||
- Дизайн-агент проектирует экран, dev-агент реализует
|
||||
44
agents/test-status.md
Normal file
44
agents/test-status.md
Normal file
@ -0,0 +1,44 @@
|
||||
# Статус агента: Тестировщик
|
||||
> Обновляется агентом `/project:test` после каждого прогона.
|
||||
|
||||
**Последнее обновление:** 2026-05-18
|
||||
**Последний прогон:** UI smoke 10/10 ✅
|
||||
|
||||
---
|
||||
|
||||
## ✅ Тестовое покрытие
|
||||
|
||||
| Сьют | Команда | Охват | Статус |
|
||||
|------|---------|-------|--------|
|
||||
| CSS-линтер | `python -X utf8 tests/lint_css.py` | Запрещённые паттерны, WCAG, версии кэша | ✅ зелёный |
|
||||
| Smoke API | `python -X utf8 tests/smoke_api.py` | 12 эндпоинтов (без auth) | ⚠️ 2 предупреждения (Drive 404) |
|
||||
| Кабинет менеджера | `python -X utf8 tests/test_manager.py` | 19 сценариев: auth, CRUD, edge cases | ✅ зелёный* |
|
||||
| UI Playwright | `node tests/ui_smoke.js` | 10 JS-проверок по экранам | ✅ 10/10 |
|
||||
|
||||
*Кроме shipments/arrivals (Drive блокер)
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Пробелы в тестировании
|
||||
| Что не покрыто | Приоритет |
|
||||
|----------------|-----------|
|
||||
| Карточка клиента в Playwright (пропускается — нет тестового клиента) | высокий |
|
||||
| POST /api/shipments, /api/arrivals (Drive 404) | ждём доступ |
|
||||
| Экраны «Мой статус», «Входящие» (не реализованы) | после реализации |
|
||||
| Мобильные размеры (320px, landscape) в Playwright | средний |
|
||||
| Тёмная тема Default — нет визуальных тестов | низкий |
|
||||
|
||||
---
|
||||
|
||||
## 📋 Бэклог тестировщика
|
||||
1. Добавить фикстуру в `ui_smoke.js`: создать тестового клиента через API перед тестом, удалить после
|
||||
2. Добавить тест карточки клиента: открытие, примечание, быстрые действия
|
||||
3. Проверить shipments/arrivals после получения Drive-доступа
|
||||
4. Параметризовать `ui_smoke.js` на разные viewport (iPhone SE 320px, iPad 768px)
|
||||
5. Добавить скриншот-дифф между релизами (визуальная регрессия)
|
||||
|
||||
---
|
||||
|
||||
## 🔜 Следующий шаг
|
||||
**Добавить фикстуру в Playwright**: создать клиента через `/api/client_create` в начале теста → протестировать карточку → удалить клиента через `/api/client_delete`.
|
||||
Это закроет единственный пропускаемый тест.
|
||||
Loading…
Reference in New Issue
Block a user