mirror of
https://github.com/wasrusgen/zov-tech.git
synced 2026-06-03 16:24:50 +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. Получить задачу на новый экран или изменение
|
1. **Прочитать `agents/design-status.md`** — понять что запроектировано, что нет
|
||||||
2. Если нужен прототип → открыть open-design (localhost:17573)
|
2. Получить задачу на новый экран или изменение
|
||||||
3. Написать/изменить CSS в `styles.css` или `podbor.css`
|
3. Если нужен прототип → открыть open-design (localhost:17573)
|
||||||
4. Проверить все 4 темы
|
4. Написать/изменить CSS в `styles.css` или `podbor.css`
|
||||||
5. Запустить CSS-линтер: `python -X utf8 tests/lint_css.py`
|
5. Проверить все 4 темы
|
||||||
6. Поднять версию `?v=` в `index.html`
|
6. Запустить CSS-линтер: `python -X utf8 tests/lint_css.py`
|
||||||
7. Запустить `/project:ui-check`
|
7. Поднять версию `?v=` в `index.html`
|
||||||
8. Коммит только после зелёных проверок
|
8. Запустить `/project:ui-check`
|
||||||
|
9. Коммит только после зелёных проверок
|
||||||
|
10. **Обновить `agents/design-status.md`**: что запроектировано, что нет, следующий шаг
|
||||||
|
|
||||||
## Компонентная библиотека (существующие классы)
|
## Компонентная библиотека (существующие классы)
|
||||||
```
|
```
|
||||||
|
|||||||
@ -34,12 +34,13 @@
|
|||||||
- Формат буквы: a → b → c → ... в течение одного дня
|
- Формат буквы: a → b → c → ... в течение одного дня
|
||||||
|
|
||||||
## Процесс работы
|
## Процесс работы
|
||||||
1. Прочитать задачу
|
1. **Прочитать `agents/dev-status.md`** — понять текущее состояние и бэклог
|
||||||
2. Найти нужные файлы (`Glob`, `Grep`, `Read`)
|
2. Найти нужные файлы (`Glob`, `Grep`, `Read`)
|
||||||
3. Написать код
|
3. Написать код
|
||||||
4. Поднять версию `?v=` если тронут miniapp
|
4. Поднять версию `?v=` если тронут miniapp
|
||||||
5. Запустить `/project:test` — убедиться что не сломал
|
5. Запустить `/project:test` — убедиться что не сломал
|
||||||
6. Закоммитить с понятным сообщением
|
6. Закоммитить с понятным сообщением
|
||||||
|
7. **Обновить `agents/dev-status.md`**: добавить в «Сделано», убрать из бэклога, написать новый «Следующий шаг»
|
||||||
|
|
||||||
## Чего НЕ делать
|
## Чего НЕ делать
|
||||||
- Не трогать `deploy/` и docker без `/project:devops`
|
- Не трогать `deploy/` и docker без `/project:devops`
|
||||||
|
|||||||
@ -65,10 +65,12 @@ curl -s https://api.wasrusgen1.pro/healthz
|
|||||||
- Проверить деплой: вкладка Actions в репозитории
|
- Проверить деплой: вкладка Actions в репозитории
|
||||||
|
|
||||||
## Процесс деплоя
|
## Процесс деплоя
|
||||||
1. `git push` в master → GitHub Pages обновляется автоматически
|
1. **Прочитать `agents/devops-status.md`** — проверить блокеры и известные проблемы
|
||||||
2. Для VPS (бот/бэкенд) — запустить SSH-команды выше
|
2. `git push` в master → GitHub Pages обновляется автоматически
|
||||||
3. Проверить: `curl https://api.wasrusgen1.pro/healthz` → должен вернуть 200
|
3. Для VPS (бот/бэкенд) — запустить SSH-команды выше
|
||||||
4. Запустить `/project:test` для подтверждения
|
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 — Проверка
|
### Шаг 3 — Проверка
|
||||||
```bash
|
```bash
|
||||||
python -X utf8 tests/test_manager.py # полный тест менеджера
|
python -X utf8 tests/test_manager.py # полный тест менеджера
|
||||||
python -X utf8 tests/smoke_api.py # smoke
|
python -X utf8 tests/smoke_api.py # smoke
|
||||||
|
node tests/ui_smoke.js # UI Playwright
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Шаг 4 — Обновление статуса
|
||||||
|
После реализации **обновить `agents/feature-status.md`** и **`ROADMAP.md`**:
|
||||||
|
- Переместить функцию из «Бэклог» в «✅ Реализовано»
|
||||||
|
- Обновить «Следующий шаг»
|
||||||
|
|
||||||
## API эндпоинты (существующие)
|
## 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-линтер
|
## Шаг 1 — CSS-линтер
|
||||||
```bash
|
```bash
|
||||||
@ -52,5 +55,6 @@ node tests/ui_smoke.js
|
|||||||
Эти два считать **предупреждением**, не блокирующей ошибкой, пока не расшарен файл в Google Drive.
|
Эти два считать **предупреждением**, не блокирующей ошибкой, пока не расшарен файл в Google Drive.
|
||||||
|
|
||||||
## После отчёта
|
## После отчёта
|
||||||
Если всё зелёное — написать одно предложение что стоит добавить в тесты следующим.
|
1. **Обновить `agents/test-status.md`**: результаты прогона, актуализировать пробелы в покрытии
|
||||||
Если есть ошибки — вызвать нужного агента: `/project:dev` (код), `/project:devops` (инфра), `/project:design` (CSS).
|
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