spec-feature 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/viewer.html +295 -88
- package/package.json +1 -1
- package/spec/core/tasks.md +3 -0
- package/spec/features/create-task/plan.md +36 -0
- package/spec/features/create-task/spec.md +33 -0
- package/spec/features/create-task/tasks.md +33 -0
- package/spec/features/create-task/verify-report.md +29 -0
- package/spec/features/image-zoom/plan.md +237 -0
- package/spec/features/image-zoom/spec.md +135 -0
- package/spec/features/image-zoom/tasks.md +105 -0
- package/spec/features/invite-user/plan.md +32 -0
- package/spec/features/invite-user/spec.md +31 -0
- package/spec/features/invite-user/tasks.md +31 -0
- package/spec/features/invite-user/verify-report.md +33 -0
- package/spec/features/list-projects/plan.md +40 -0
- package/spec/features/list-projects/spec.md +33 -0
- package/spec/features/list-projects/tasks.md +35 -0
- package/spec/features/list-tasks/plan.md +41 -0
- package/spec/features/list-tasks/spec.md +34 -0
- package/spec/features/list-tasks/tasks.md +41 -0
- package/spec/features/metrics/plan.md +41 -0
- package/spec/features/metrics/spec.md +37 -0
- package/spec/features/metrics/tasks.md +31 -0
- package/spec/features/project-edit/plan.md +36 -0
- package/spec/features/project-edit/spec.md +32 -0
- package/spec/features/project-edit/tasks.md +36 -0
- package/spec/features/review-order/plan.md +37 -0
- package/spec/features/review-order/spec.md +28 -0
- package/spec/features/review-order/tasks.md +26 -0
- package/spec/features/review-order/verify-report.md +19 -0
- package/spec/features/supabase-init/plan.md +89 -0
- package/spec/features/supabase-init/spec.md +73 -0
- package/spec/features/supabase-init/tasks.md +51 -0
- package/spec/features/task-details/plan.md +38 -0
- package/spec/features/task-details/spec.md +33 -0
- package/spec/features/task-details/tasks.md +33 -0
- package/spec/features/telegram-initData/plan.md +46 -0
- package/spec/features/telegram-initData/spec.md +40 -0
- package/spec/features/telegram-initData/tasks.md +52 -0
- package/spec/features/tg-user-save-to-supabase/plan.md +137 -0
- package/spec/features/tg-user-save-to-supabase/spec.md +54 -0
- package/spec/features/tg-user-save-to-supabase/tasks.md +58 -0
- package/spec/features/user-profile/plan.md +39 -0
- package/spec/features/user-profile/spec.md +36 -0
- package/spec/features/user-profile/tasks.md +38 -0
- package/spec/features/user-profile-edit/plan.md +36 -0
- package/spec/features/user-profile-edit/spec.md +33 -0
- package/spec/features/user-profile-edit/tasks.md +33 -0
- package/spec/features/user-profile-edit/verify-report.md +26 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Tasks
|
|
2
|
+
|
|
3
|
+
**Context:** Подготовить и внедрить модуль метрик для владельца проектов с использованием данных из Supabase (`projects`, `orders`, `order_history`, `order_reminder_logs`, `project_members`), отобразить ключевые показатели эффективности, сроков, нагрузки, финансов и качества.
|
|
4
|
+
|
|
5
|
+
## Main directions
|
|
6
|
+
### Data & Analytics
|
|
7
|
+
- [ ] Разработать SQL-представления/материализованные представления для основных наборов метрик (project, orders, timing, team, finance, quality, reminders) с учётом фильтров по проекту и периоду.
|
|
8
|
+
- [ ] Настроить обновление и кеширование представлений (либо через Supabase cron/Edge Function), обеспечить выполнение запросов < 3 сек при объёме до 10k заказов.
|
|
9
|
+
- [ ] Подготовить скрипты миграций и документацию по обновлению схемы (описание индексов, требований к данным).
|
|
10
|
+
|
|
11
|
+
### Backend / API
|
|
12
|
+
- [ ] Реализовать серверный эндпоинт `/api/metrics` (или Edge Function) с параметрами `projectId`, `from`, `to`, который агрегирует данные из представлений и возвращает структуру, описанную в плане.
|
|
13
|
+
- [ ] Добавить валидацию входных параметров и контроль доступа (проверка `user_telegram_id` владельца, доступ только к своим проектам).
|
|
14
|
+
- [ ] Встроить логирование времени выполнения и обработку ошибок с единым форматом ответа.
|
|
15
|
+
|
|
16
|
+
### Frontend
|
|
17
|
+
- [ ] Создать страницу/виджет дашборда метрик с карточками, графиками и таблицами по разделам (прогресс, воронка, сроки, команда, финансы, ревью, напоминания), используя существующие UI-компоненты.
|
|
18
|
+
- [ ] Настроить навигацию из вкладки «Метрики» на странице редактирования проекта на новую страницу `/projects/:id/metrics` и обеспечить возврат назад.
|
|
19
|
+
- [ ] Реализовать глобальные фильтры периода и проекта, влияющие на все виджеты, и отображать состояния загрузки/ошибок.
|
|
20
|
+
- [ ] Покрыть вычисления форматированием (валюта, проценты, локализованные даты) и подсказками по метрикам.
|
|
21
|
+
|
|
22
|
+
## Supporting tasks
|
|
23
|
+
- [ ] Documentation: update relevant instructions and descriptions.
|
|
24
|
+
- [ ] Observability: add or clarify metrics, alerts, and/or logging.
|
|
25
|
+
- [ ] Code review and PR: prepare changes for review and accompanying information.
|
|
26
|
+
|
|
27
|
+
## Definition of Done
|
|
28
|
+
- [ ] All tasks are completed and tested.
|
|
29
|
+
- [ ] Relevant unit/e2e/integration tests pass successfully.
|
|
30
|
+
- [ ] Documentation and operational instructions are updated.
|
|
31
|
+
- [ ] `/spec/core/verify.md` is executed after completing all tasks to verify the task list.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Implementation Plan
|
|
2
|
+
|
|
3
|
+
**Plan:** Реализовать страницу `/projects/new`, повторяющую паттерны создания задачи, подключить её к существующим кнопкам добавления проекта и расширить состояние проектов возможностью добавления новой записи с валидацией данных.
|
|
4
|
+
|
|
5
|
+
## Data sources / schemas
|
|
6
|
+
|
|
7
|
+
- Расширить `useProjectsState` (в `composables/useProjectOrders.ts`) или создать отдельный композабл `useProjects` с методом `createProject`, который добавляет объект `Project` в состояние `projects-data`, пересчитывая `completed`/`total` по умолчанию (0 завершено, 0 всего) и создавая уникальный `id`.
|
|
8
|
+
- Определить интерфейс входных данных для проекта (название, описание, ссылка, дата запуска). При необходимости вынести в тип `CreateProjectInput`, чтобы переиспользовать в форме и тестах.
|
|
9
|
+
- Сохранить новые проекты в локальном состоянии, чтобы они были доступны на главной странице и в последующих сессиях во время работы приложения (reactive state).
|
|
10
|
+
|
|
11
|
+
## Contracts and interfaces
|
|
12
|
+
|
|
13
|
+
- Создать маршрут `/projects/new` (файл `pages/projects/new.vue`) с `useRoute`/`useRouter` и query-параметром `from` для возврата.
|
|
14
|
+
- Определить публичный метод `createProject` в новом/существующем композабле; метод возвращает созданный `Project` и выбрасывает ошибку при некорректных данных. Обновить потребителей, если потребуется.
|
|
15
|
+
- Настроить обработчики у кнопок «Создать проект» и плавающей кнопки на `/` для перехода через `router.push({ path: '/projects/new', query: { from: route.fullPath } })`.
|
|
16
|
+
- В форме предусмотреть интерфейс валидации: `title` обязательно, `link` — допустимые схемы `http/https`; ошибки отображаются рядом с полями и в нижнем статусе.
|
|
17
|
+
|
|
18
|
+
## Architecture / Components
|
|
19
|
+
|
|
20
|
+
- UI: переиспользовать визуальные паттерны из `pages/projects/[id]/orders/new.vue` — тёмный фон, фиксированный футер, sticky header с кнопкой закрытия. Выделить компоненты при необходимости (например, поле ввода), но можно ограничиться копированием стилевых классов с адаптацией текстов.
|
|
21
|
+
- Логика: внутри страницы использовать реактивные refs для полей формы, computed для валидаций, `isSubmitting` для блокировки кнопки. После успешного создания вызвать переход на `from` или `/`.
|
|
22
|
+
- Навигация: при закрытии формы и после успешного сабмита возвращаться на маршрут `from`; если query отсутствует, использовать `/`.
|
|
23
|
+
- Тестирование: дополнить существующие unit-тесты или добавить новые (например, в `tests/useProjectOrders.test.ts`) для метода `createProject` и маршрутизации.
|
|
24
|
+
|
|
25
|
+
## Risks
|
|
26
|
+
|
|
27
|
+
- Отсутствие серверной синхронизации может приводить к расхождению данных после перезагрузки — важно задокументировать ограничение.
|
|
28
|
+
- Возможные дубли `id` для проектов при генерации; нужно гарантировать уникальность (например, `project-${timestamp}`) и проверить отсутствие конфликтов в ссылках.
|
|
29
|
+
- Несогласованность стилей при копировании из страницы задач — требуется ручная проверка на мобильных разрешениях.
|
|
30
|
+
- Потенциальные несоответствия расчёта `completed/total` для новых проектов; нужно определить стартовые значения (0 и 0) и не ломать прогресс-бар.
|
|
31
|
+
|
|
32
|
+
## Assumptions
|
|
33
|
+
|
|
34
|
+
- Создание проекта не требует выбора задач или исполнителей на этапе создания; список задач и прогресс инициализируются пустыми значениями.
|
|
35
|
+
- Дополнительные поля (аватар, цвет, участники) не нужны в рамках текущей итерации.
|
|
36
|
+
- Переход из других страниц (например, будущей панели проектов) также будет использовать тот же маршрут, поэтому логика `from` универсальна.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Создание проекта
|
|
2
|
+
|
|
3
|
+
**Specification:** Добавить полноэкранную страницу создания проекта, оформленную в том же визуальном стиле и UX-паттернах, что и страница создания задачи (`/projects/[id]/orders/new`). Страница должна открываться по нажатию плавающей кнопки «плюс» и кнопки «Создать проект» в пустом состоянии списка проектов, обеспечивать ввод основных данных проекта и возвращать пользователя к списку после сохранения.
|
|
4
|
+
|
|
5
|
+
## User Stories
|
|
6
|
+
|
|
7
|
+
- Как руководитель команды, я хочу нажать на плавающую кнопку «добавить проект» на странице списка и попасть на страницу создания проекта, чтобы быстро зафиксировать новую инициативу.
|
|
8
|
+
- Как проджект-менеджер, я хочу заполнить название, описание и ключевые параметры нового проекта на отдельной странице, чтобы команда сразу увидела его в списке.
|
|
9
|
+
- Как пользователь Telegram Web App, я хочу, чтобы страница создания проекта выглядела и работала так же, как экран создания задачи, чтобы не разбираться в новой навигации и не тратить время на обучение.
|
|
10
|
+
|
|
11
|
+
## Main scenarios and rules
|
|
12
|
+
|
|
13
|
+
- Маршрут `GET /projects/new` (Nuxt страница) открывает форму создания проекта в тёмной теме, повторяя структуру шапки, подвала и отступов страницы создания задачи.
|
|
14
|
+
- Кнопки `Создать проект` в пустом состоянии и плавающая кнопка с иконкой «add» на `/` должны перенаправлять на `/projects/new`, передавая параметр `from` для возврата (по умолчанию `/`).
|
|
15
|
+
- Форма содержит обязательное поле «Название проекта» (валидация на непустое значение) и необязательные поля «Описание», «Ссылка на проект» (валидация URL) и «Дата запуска/дедлайн».
|
|
16
|
+
- Отправка формы создаёт запись проекта через существуемый стор/композабл (либо временный мок) и возвращает пользователя на маршрут `from` с показом нового проекта в списке.
|
|
17
|
+
- Ошибки сохранения отображаются в подвале формы, кнопка сабмита блокируется во время отправки или при невалидных данных.
|
|
18
|
+
- При закрытии (иконка «крестик») осуществляется возврат на маршрут `from` без создания проекта.
|
|
19
|
+
|
|
20
|
+
## Non-functional requirements
|
|
21
|
+
|
|
22
|
+
- Страница должна корректно отображаться на мобильных устройствах и адаптироваться под WebApp (использование текущих Tailwind классов и паттернов).
|
|
23
|
+
- Навигация и состояние должны быть управляемыми без перезагрузки страницы; переходы выполняются через Nuxt Router.
|
|
24
|
+
- Валидация выполняется на клиенте, сообщения об ошибках локализованы на русском языке.
|
|
25
|
+
- Код оформлен согласно существующим паттернам (Composition API, `<script setup lang="ts">`, композиционные хуки).
|
|
26
|
+
|
|
27
|
+
## Assumptions
|
|
28
|
+
|
|
29
|
+
- Создание проекта пока не синхронизируется с API; используется локальный стор `useProjectOrders` или отдельный мок до появления бэкенда.
|
|
30
|
+
- Параметр `from` передаётся строкой и используется только для клиентского редиректа после успешного создания или закрытия формы.
|
|
31
|
+
- Поле «Дата запуска» можно хранить как ISO-дату (`YYYY-MM-DD`) по аналогии с дедлайнами задач; уточнение формата возможно позднее.
|
|
32
|
+
- Если потребуются дополнительные поля (например, ответственный), их добавление будет отдельной задачей.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Orders
|
|
2
|
+
|
|
3
|
+
**Context:** Реализовать страницу создания проекта в стиле формы создания задачи, добавить навигацию с главной страницы и обеспечить сохранение нового проекта в общем состоянии.
|
|
4
|
+
|
|
5
|
+
## Main directions
|
|
6
|
+
|
|
7
|
+
### UI/UX
|
|
8
|
+
|
|
9
|
+
- [ ] Создать страницу `pages/projects/new.vue` с макетом, повторяющим шапку, футер и поля формы из `orders/new`, адаптировав тексты под создание проекта.
|
|
10
|
+
- [ ] Настроить клиентскую валидацию для полей (обязательное название, проверка URL), показать ошибки рядом с полями и в подвале.
|
|
11
|
+
- [ ] Реализовать сценарии закрытия и возврата на маршрут `from` (через query) с сохранением плавных анимаций и фокус-стилей.
|
|
12
|
+
|
|
13
|
+
### Состояние и логика
|
|
14
|
+
|
|
15
|
+
- [ ] Расширить состояние проектов (`useProjectsState` или новый композабл) методом `createProject`, который добавляет проект с начальными значениями прогресса и пустым списком задач.
|
|
16
|
+
- [ ] Обновить тесты/написать новые для проверки `createProject` (уникальный id, корректное добавление, значения completed/total).
|
|
17
|
+
- [ ] Подключить форму к методу `createProject`, обрабатывать состояния загрузки и ошибок, возвращать пользователя на `from` после успешного создания.
|
|
18
|
+
|
|
19
|
+
### Маршрутизация и интеграция
|
|
20
|
+
|
|
21
|
+
- [ ] Добавить маршрут `/projects/new` в навигацию: кнопка «Создать проект» из пустого состояния и плавающая кнопка на `/` переходят на новый экран с передачей `from`.
|
|
22
|
+
- [ ] Убедиться, что после создания проект отображается на главной странице без перезагрузки (реактивное состояние).
|
|
23
|
+
- [ ] Обновить консольные заглушки и убедиться, что нет неиспользуемых обработчиков.
|
|
24
|
+
|
|
25
|
+
## Supporting orders
|
|
26
|
+
|
|
27
|
+
- [ ] Документация: описать новый маршрут и форму в соответствующем README/спецификационном разделе, если требуется.
|
|
28
|
+
- [ ] Observability: добавить при необходимости `console.info`/`console.error` с контекстом создания проекта.
|
|
29
|
+
- [ ] Code review and PR: подготовить изменения, описание и скриншоты для ревью.
|
|
30
|
+
|
|
31
|
+
## Definition of Done
|
|
32
|
+
|
|
33
|
+
- [ ] Все задачи выполнены и протестированы.
|
|
34
|
+
- [ ] Релевантные unit/e2e/integration тесты успешно проходят.
|
|
35
|
+
- [ ] Документация и операционные инструкции обновлены.
|
|
36
|
+
- [ ] `/spec/core/verify.md` выполнен после завершения всех задач для проверки списка.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Implementation Plan
|
|
2
|
+
|
|
3
|
+
**Plan:** Реализовать новый экран отправки задачи на проверку и обновить навигацию с карточки задачи. Использовать существующие компоненты интерфейса, обеспечить обработку загрузки фотографий и комментариев, а также визуальное сокращение длинных имен файлов.
|
|
4
|
+
|
|
5
|
+
## Data sources / schemas
|
|
6
|
+
- Проверить доступные API/сторы для получения деталей задачи (название, статус) и возможности обновления статуса до «ожидает проверки».
|
|
7
|
+
- Уточнить и при необходимости расширить схему данных для хранения вложенных фотографий и комментария (использовать текущий механизм хранения файлов).
|
|
8
|
+
- Убедиться, что фронтенд поддерживает множественные загрузки изображений и ссылки на сохранённые файлы.
|
|
9
|
+
|
|
10
|
+
## Contracts and interfaces
|
|
11
|
+
- Определить маршрут страницы, например `/orders/[id]/review`, и согласовать параметры навигации из деталей задачи.
|
|
12
|
+
- Обновить контракт действия «Отметить выполненным», чтобы он инициировал переход на новую страницу вместо мгновенного изменения статуса.
|
|
13
|
+
- Согласовать формат передачи файлов и комментария при отправке (например, multipart/form-data или JSON с ссылками на заранее загруженные файлы).
|
|
14
|
+
- Обеспечить отображение ошибок загрузки и сохранения в едином стиле уведомлений.
|
|
15
|
+
|
|
16
|
+
## Architecture / Components
|
|
17
|
+
- Создать компонент страницы отправки на проверку с шапкой, кнопкой «Назад» и названием задачи (переиспользовать хедер из списка задач).
|
|
18
|
+
- Добавить компонент для загрузки фотографий, поддерживающий обрезку длинных названий (функция форматирования имени файла).
|
|
19
|
+
- Интегрировать текстовое поле комментария и кнопку отправки, используя существующие UI-компоненты.
|
|
20
|
+
- Настроить логику сохранения: загрузка файлов (при необходимости — предварительное сохранение) и отправка запроса изменения статуса.
|
|
21
|
+
- Реализовать переход назад по кнопке, возвращающий пользователя к деталям задачи.
|
|
22
|
+
|
|
23
|
+
## Risks
|
|
24
|
+
- Возможные ограничения бэкенда по количеству/размеру загружаемых файлов могут привести к ошибкам сохранения.
|
|
25
|
+
- Недоступность повторного использования хедера может потребовать дублирования стилей или временного решения.
|
|
26
|
+
- Некорректная обработка длинных имен файлов может вызвать разметку, выходящую за пределы контейнера.
|
|
27
|
+
|
|
28
|
+
## Assumptions
|
|
29
|
+
- Бэкенд уже поддерживает состояние задачи «ожидает проверки» и хранение комментариев и медиа.
|
|
30
|
+
- Маршрут и данные задачи доступны через Nuxt-роутер и сторы проекта.
|
|
31
|
+
- В проекте уже есть компонент уведомлений для отображения ошибок/успеха.
|
|
32
|
+
|
|
33
|
+
## Implementation summary (2025-11-03)
|
|
34
|
+
- Создан подмаршрут `/orders/[id]/review` с отдельной страницей отправки задачи на проверку, использующей базовый хедер и минималистичный интерфейс.
|
|
35
|
+
- Действие «Отметить выполненным» на странице деталей (`pages/orders/[id]/index.vue`) перенаправляет на новый экран вместо мгновенной смены статуса.
|
|
36
|
+
- Добавлен модуль `utils/orderReviewSubmission.ts`, имитирующий загрузку вложений и перевод задачи в статус `pending-review` до интеграции с бэкендом.
|
|
37
|
+
- На клиенте реализовано обрезание длинных имён файлов с троеточием и отзыв предварительных превью при очистке списка вложений.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Review Order Submission
|
|
2
|
+
|
|
3
|
+
**Specification:** На странице деталей задачи нужно изменить поведение кнопки «Отметить выполненным», чтобы пользователь переходил на новую страницу для отправки задачи на проверку. На новой странице он может прикрепить фотографии выполненной работы, оставить комментарий и отправить задачу на ревью. Интерфейс должен быть минималистичным: только шапка с кнопкой «Назад», названием задачи и форма для вложений и комментария. Длинные названия файлов необходимо сокращать с добавлением троеточия.
|
|
4
|
+
|
|
5
|
+
## User Stories
|
|
6
|
+
- Как исполнитель задачи, я нажимаю «Отметить выполненным» на странице деталей и автоматически перехожу на экран отправки на проверку, чтобы завершить работу без поиска нужного раздела.
|
|
7
|
+
- Как исполнитель задачи, я прикрепляю несколько фотографий результата и вижу, что длинные названия файлов корректно обрезаются с троеточием, чтобы интерфейс оставался аккуратным.
|
|
8
|
+
- Как исполнитель задачи, я добавляю текстовый комментарий к выполненной работе и отправляю задачу на проверку, чтобы заказчик получил контекст и подтверждение выполнения.
|
|
9
|
+
|
|
10
|
+
## Main scenarios and rules
|
|
11
|
+
- При нажатии кнопки «Отметить выполненным» на экране деталей задачи выполняется навигация на новую страницу подтверждения (например, `/orders/{id}/review`).
|
|
12
|
+
- Шапка новой страницы копирует стиль списка задач: кнопка «Назад» возвращает к предыдущему экрану, рядом отображается название задачи.
|
|
13
|
+
- На странице присутствует форма с полем для загрузки одной или нескольких фотографий (при загрузке отображаются названия файлов) и текстовым полем для комментария.
|
|
14
|
+
- Отображаемые названия загруженных файлов должны ограничиваться по длине с добавлением троеточия, сохраняя расширение файла и минимально достаточную часть имени.
|
|
15
|
+
- Страница не содержит дополнительных элементов (кнопок, подсказок, статистики); только элементы, необходимые для отправки на проверку.
|
|
16
|
+
- Должна быть кнопка отправки, которая сохраняет вложения и комментарий и переводит задачу в состояние «ожидает проверки».
|
|
17
|
+
- При ошибках загрузки файлов или сохранения данных пользователь получает стандартные уведомления проекта.
|
|
18
|
+
|
|
19
|
+
## Non-functional requirements
|
|
20
|
+
- Форма загрузки фотографий поддерживает основные форматы изображений (JPEG, PNG, HEIC) до установленного лимита размера (уточнить при реализации).
|
|
21
|
+
- Обработка загрузок должна использовать существующие механизмы хранения медиа, обеспечивая отзывчивость интерфейса (оптимальная реакция < 2 секунд при стабильном соединении).
|
|
22
|
+
- Страница и элементы управления соответствуют существующей дизайн-системе и адаптивно отображаются на мобильных и десктопных устройствах.
|
|
23
|
+
- Названия файлов обрезаются на клиенте без заметной задержки, чтобы избежать заморозки интерфейса.
|
|
24
|
+
|
|
25
|
+
## Assumptions
|
|
26
|
+
- Требуется уточнение максимального числа фотографий и их размерного лимита.
|
|
27
|
+
- Не определён процесс уведомления заказчика после отправки на проверку — предполагается, что он уже реализован в бекэнде.
|
|
28
|
+
- Ожидается, что данные о задаче (название, статус) доступны через существующие API/стор.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Orders
|
|
2
|
+
|
|
3
|
+
**Context:** Реализовать страницу отправки задачи на проверку с загрузкой фотографий и комментарием, перенаправляя пользователя с деталей задачи по кнопке «Отметить выполненным», и обеспечить сокращение длинных имен файлов.
|
|
4
|
+
|
|
5
|
+
## Main directions
|
|
6
|
+
### UI/UX
|
|
7
|
+
- [x] Обновить страницу деталей задачи, чтобы кнопка «Отметить выполненным» перенаправляла на маршрут страницы отправки на проверку.
|
|
8
|
+
- [x] Создать страницу отправки на проверку с шапкой (кнопка «Назад» и название задачи), формой загрузки фотографий, полем комментария и кнопкой отправки.
|
|
9
|
+
- [x] Реализовать клиентскую обрезку длинных названий файлов с добавлением троеточия при отображении списка вложений.
|
|
10
|
+
- [x] Убедиться, что интерфейс не содержит лишних элементов и соответствует дизайн-системе проекта.
|
|
11
|
+
|
|
12
|
+
### Data flow / интеграция
|
|
13
|
+
- [x] Настроить загрузку изображений и передачу их ссылок/идентификаторов вместе с комментарием в бэкенд.
|
|
14
|
+
- [x] Обновить логику смены статуса задачи на «ожидает проверки» после успешной отправки.
|
|
15
|
+
- [x] Обработать ошибки загрузки и отправки, используя существующий механизм уведомлений.
|
|
16
|
+
|
|
17
|
+
## Supporting orders
|
|
18
|
+
- [x] Documentation: update relevant instructions and descriptions.
|
|
19
|
+
- [x] Observability: add or clarify metrics, alerts, and/or logging.
|
|
20
|
+
- [x] Code review and PR: prepare changes for review and accompanying information.
|
|
21
|
+
|
|
22
|
+
## Definition of Done
|
|
23
|
+
- [x] All orders are completed and tested.
|
|
24
|
+
- [x] Relevant unit/e2e/integration tests pass successfully.
|
|
25
|
+
- [x] Documentation and operational instructions are updated.
|
|
26
|
+
- [x] `/spec/core/verify.md` is executed after completing all orders to verify the order list.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<!-- SAVE_AS: spec/features/review-order/verify-report.md -->
|
|
2
|
+
|
|
3
|
+
# Verify Report - review-order
|
|
4
|
+
|
|
5
|
+
**Date:** 2025-11-03
|
|
6
|
+
**Context:** Проверка выполнения задач по запуску страницы отправки задачи на проверку и обновлению пользовательского пути из деталей задачи.
|
|
7
|
+
|
|
8
|
+
## Discrepancy log
|
|
9
|
+
|
|
10
|
+
### 2025-11-03 - Positive results
|
|
11
|
+
|
|
12
|
+
No discrepancies detected.
|
|
13
|
+
|
|
14
|
+
#### Fully implemented components:
|
|
15
|
+
|
|
16
|
+
- ✅ UI-редирект с деталей задачи на страницу отправки на проверку (`pages/orders/[id]/index.vue`).
|
|
17
|
+
- ✅ Страница отправки с загрузкой фотографий, комментарием и валидацией (`pages/orders/[id]/review.vue`).
|
|
18
|
+
- ✅ Клиентская имитация загрузки вложений и смены статуса на «ожидает проверки» (`utils/orderReviewSubmission.ts`).
|
|
19
|
+
- ✅ Обновлён список задач и сопутствующая документация (`spec/features/review-order/orders.md`).
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Implementation Plan
|
|
2
|
+
|
|
3
|
+
**Plan:** Нужно добавить и настроить Supabase в проект на стороне сервера. Добавить env example и тд. Настроить минимально.
|
|
4
|
+
|
|
5
|
+
## Data sources / schemas
|
|
6
|
+
|
|
7
|
+
Не требуется — причина: задача только в базовой инициализации Supabase клиента на сервере. Работа с базой данных, создание схем, миграции и индексы выходят за рамки текущей задачи и будут реализованы в последующих фичах.
|
|
8
|
+
|
|
9
|
+
## Contracts and interfaces
|
|
10
|
+
|
|
11
|
+
### Переменные окружения
|
|
12
|
+
|
|
13
|
+
Обязательные переменные для серверной части:
|
|
14
|
+
|
|
15
|
+
- `SUPABASE_URL` — URL проекта Supabase (например, https://xxx.supabase.co)
|
|
16
|
+
- `SUPABASE_SERVICE_ROLE_KEY` — Service Role Key для серверных операций с полными правами доступа
|
|
17
|
+
|
|
18
|
+
Опциональные переменные (для будущего использования):
|
|
19
|
+
|
|
20
|
+
- `SUPABASE_ANON_KEY` — анонимный ключ для публичных операций
|
|
21
|
+
|
|
22
|
+
### API Supabase клиента
|
|
23
|
+
|
|
24
|
+
- Серверный клиент будет доступен через Nuxt server utilities (composable или helper)
|
|
25
|
+
- Клиент типа `SupabaseClient` из `@supabase/supabase-js`
|
|
26
|
+
- Клиент инициализируется один раз и переиспользуется
|
|
27
|
+
|
|
28
|
+
### Формат ошибок
|
|
29
|
+
|
|
30
|
+
- При отсутствии обязательных переменных: логирование предупреждения при старте
|
|
31
|
+
- При ошибке подключения: стандартные ошибки Supabase клиента
|
|
32
|
+
|
|
33
|
+
## Architecture / Components
|
|
34
|
+
|
|
35
|
+
### Структура компонентов
|
|
36
|
+
|
|
37
|
+
1. **Supabase серверный модуль/plugin**
|
|
38
|
+
- Создание серверного клиента Supabase при инициализации Nuxt
|
|
39
|
+
- Использование Nuxt plugins или server utilities для инъекции клиента
|
|
40
|
+
- Типизация клиента для TypeScript
|
|
41
|
+
|
|
42
|
+
2. **Переменные окружения**
|
|
43
|
+
- Файл `.env.example` с примером необходимых переменных
|
|
44
|
+
- Проверка наличия `.env` в `.gitignore`
|
|
45
|
+
|
|
46
|
+
3. **Зависимости**
|
|
47
|
+
- Установка `@supabase/supabase-js` пакета
|
|
48
|
+
- TypeScript типы уже включены в пакет
|
|
49
|
+
|
|
50
|
+
### Технический стек
|
|
51
|
+
|
|
52
|
+
- **Runtime**: Node.js (Nuxt 4 серверная часть)
|
|
53
|
+
- **Библиотека**: `@supabase/supabase-js` — официальный JavaScript клиент Supabase
|
|
54
|
+
- **Интеграция**: Nuxt plugins или server utilities для создания серверного singleton клиента
|
|
55
|
+
|
|
56
|
+
### Архитектурные решения
|
|
57
|
+
|
|
58
|
+
- **Singleton паттерн**: клиент создается один раз и переиспользуется
|
|
59
|
+
- **Lazy initialization**: клиент создается только при первом использовании или при старте сервера
|
|
60
|
+
- **Server-only**: клиент доступен только в server-side контексте Nuxt
|
|
61
|
+
|
|
62
|
+
### Интеграция с существующим кодом
|
|
63
|
+
|
|
64
|
+
- Интеграция с существующей структурой `server/api/`
|
|
65
|
+
- Возможность использования клиента в server routes и middleware
|
|
66
|
+
- Соответствие паттернам существующего кода (например, `server/api/telegram/validate-init-data.post.ts`)
|
|
67
|
+
|
|
68
|
+
## Risks
|
|
69
|
+
|
|
70
|
+
1. **Отсутствие переменных окружения в production**
|
|
71
|
+
- **Митигация**: проверка наличия переменных при инициализации с логированием ошибок
|
|
72
|
+
|
|
73
|
+
2. **Утечка Service Role Key в клиентский код**
|
|
74
|
+
- **Митигация**: использование только в server-side контексте, проверка через TypeScript типы и документация
|
|
75
|
+
|
|
76
|
+
3. **Конфликт версий пакета `@supabase/supabase-js`**
|
|
77
|
+
- **Митигация**: использование стабильной версии, обновление с осторожностью
|
|
78
|
+
|
|
79
|
+
4. **Избыточная сложность при минимальных требованиях**
|
|
80
|
+
- **Митигация**: строгое следование принципу минимальной настройки, без дополнительных абстракций
|
|
81
|
+
|
|
82
|
+
## Assumptions
|
|
83
|
+
|
|
84
|
+
1. Nuxt 4 поддерживает server plugins/utilities для создания серверных singleton сервисов
|
|
85
|
+
2. Проект Supabase уже создан, разработчик имеет доступ к URL и Service Role Key
|
|
86
|
+
3. TypeScript конфигурация проекта совместима с типами из `@supabase/supabase-js`
|
|
87
|
+
4. Минимальная настройка означает только базовое подключение без миграций, схем БД и дополнительных сервисов
|
|
88
|
+
5. `.gitignore` уже настроен и включает `.env` файл (требуется проверка)
|
|
89
|
+
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Supabase Initialization
|
|
2
|
+
|
|
3
|
+
**Specification:** Нужно добавить и настроить Supabase в проект на стороне сервера. Добавить env example и тд. Настроить минимально.
|
|
4
|
+
|
|
5
|
+
## User Stories
|
|
6
|
+
|
|
7
|
+
1. **Как разработчик**, я хочу иметь настроенный Supabase клиент на сервере, чтобы использовать его для работы с базой данных и другими сервисами Supabase в серверных API endpoints.
|
|
8
|
+
|
|
9
|
+
2. **Как разработчик**, я хочу иметь файл с примером переменных окружения (.env.example), чтобы быстро настроить проект на новой машине или в новом окружении без необходимости искать документацию.
|
|
10
|
+
|
|
11
|
+
3. **Как разработчик**, я хочу иметь минимальную конфигурацию Supabase, чтобы начать использовать его в проекте без избыточной сложности.
|
|
12
|
+
|
|
13
|
+
## Main scenarios and rules
|
|
14
|
+
|
|
15
|
+
### Основные сценарии
|
|
16
|
+
|
|
17
|
+
1. **Инициализация Supabase клиента на сервере**
|
|
18
|
+
- Клиент создается один раз при старте серверной части приложения
|
|
19
|
+
- Клиент доступен в серверных API handlers через Nuxt runtime utilities
|
|
20
|
+
- Клиент использует переменные окружения для подключения к Supabase
|
|
21
|
+
|
|
22
|
+
2. **Конфигурация через переменные окружения**
|
|
23
|
+
- URL Supabase проекта
|
|
24
|
+
- Service Role Key (для серверных операций с полными правами)
|
|
25
|
+
- Опционально: анонимный ключ для клиентской стороны (если будет использоваться)
|
|
26
|
+
|
|
27
|
+
3. **Минимальная настройка**
|
|
28
|
+
- Только базовые переменные для подключения
|
|
29
|
+
- Без дополнительных модулей или расширений
|
|
30
|
+
- Поддержка только серверной части
|
|
31
|
+
|
|
32
|
+
### Правила
|
|
33
|
+
|
|
34
|
+
- Все секретные данные хранятся только в переменных окружениях
|
|
35
|
+
- Файл .env.example содержит примеры значений без реальных ключей
|
|
36
|
+
- Файл .env должен быть в .gitignore (проверка наличия)
|
|
37
|
+
- Клиент Supabase инициализируется только на сервере
|
|
38
|
+
|
|
39
|
+
### Ограничения и ошибки
|
|
40
|
+
|
|
41
|
+
- Отсутствие обязательных переменных окружения должно логироваться при старте
|
|
42
|
+
- Невалидные учетные данные должны обрабатываться с понятными сообщениями об ошибках
|
|
43
|
+
|
|
44
|
+
## Non-functional requirements
|
|
45
|
+
|
|
46
|
+
### Производительность
|
|
47
|
+
|
|
48
|
+
- Клиент Supabase создается один раз при старте, без пересоздания на каждый запрос
|
|
49
|
+
- Минимальное влияние на время старта приложения
|
|
50
|
+
|
|
51
|
+
### Безопасность
|
|
52
|
+
|
|
53
|
+
- Service Role Key не должен попадать в клиентский код
|
|
54
|
+
- Все секретные значения должны быть защищены через переменные окружения
|
|
55
|
+
- Файл .env.example не содержит реальных ключей
|
|
56
|
+
|
|
57
|
+
### Надежность
|
|
58
|
+
|
|
59
|
+
- При отсутствии переменных окружения приложение должно информировать разработчика, а не падать молча
|
|
60
|
+
|
|
61
|
+
### Простота
|
|
62
|
+
|
|
63
|
+
- Минимальная конфигурация без избыточных настроек
|
|
64
|
+
- Простая интеграция с существующей Nuxt структурой проекта
|
|
65
|
+
|
|
66
|
+
## Assumptions
|
|
67
|
+
|
|
68
|
+
1. Проект использует Supabase Cloud (не self-hosted)
|
|
69
|
+
2. Supabase проект уже создан, URL и ключи уже есть у разработчика
|
|
70
|
+
3. Настройка требуется только для серверной части приложения
|
|
71
|
+
4. TypeScript используется в проекте (уже присутствует)
|
|
72
|
+
5. Минимальная настройка означает только базовое подключение, без миграций, без схем и без дополнительных сервисов (Storage, Auth конфигурация и т.д.)
|
|
73
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Orders
|
|
2
|
+
|
|
3
|
+
**Context:** Нужно добавить и настроить Supabase в проект на стороне сервера. Добавить env example и тд. Настроить минимально.
|
|
4
|
+
|
|
5
|
+
## Main directions
|
|
6
|
+
|
|
7
|
+
### Установка зависимостей
|
|
8
|
+
|
|
9
|
+
- [ ] Установить пакет `@supabase/supabase-js` в зависимости проекта. Проверить, что пакет добавлен в `package.json` в секции `dependencies`.
|
|
10
|
+
|
|
11
|
+
### Конфигурация переменных окружения
|
|
12
|
+
|
|
13
|
+
- [ ] Создать файл `.env.example` в корне проекта с примерами переменных `SUPABASE_URL` и `SUPABASE_SERVICE_ROLE_KEY` с комментариями о том, где их получить. Проверить, что файл содержит только примеры без реальных ключей.
|
|
14
|
+
|
|
15
|
+
- [ ] Проверить наличие `.env` в `.gitignore`. Если отсутствует, добавить `.env` в `.gitignore`. Убедиться, что реальные секреты не попадут в репозиторий.
|
|
16
|
+
|
|
17
|
+
### Инициализация Supabase клиента на сервере
|
|
18
|
+
|
|
19
|
+
- [ ] Создать серверный plugin или utility для инициализации Supabase клиента. Клиент должен создаваться один раз при старте сервера и быть доступен в server-side контексте. Проверить, что используется `SUPABASE_URL` и `SUPABASE_SERVICE_ROLE_KEY` из переменных окружения.
|
|
20
|
+
|
|
21
|
+
- [ ] Реализовать проверку наличия обязательных переменных окружения при инициализации. При отсутствии переменных логировать предупреждение. Проверить логирование при отсутствии переменных.
|
|
22
|
+
|
|
23
|
+
- [ ] Обеспечить доступность клиента в server API routes (например, в `server/api/`). Проверить, что клиент можно использовать в существующих или новых API endpoints.
|
|
24
|
+
|
|
25
|
+
- [ ] Добавить TypeScript типизацию для Supabase клиента. Проверить, что TypeScript не выдает ошибок при использовании клиента.
|
|
26
|
+
|
|
27
|
+
### Тестирование
|
|
28
|
+
|
|
29
|
+
- [ ] Протестировать инициализацию клиента при наличии всех переменных окружения. Проверить, что клиент успешно создается и доступен.
|
|
30
|
+
|
|
31
|
+
- [ ] Протестировать поведение при отсутствии переменных окружения. Проверить, что приложение логирует предупреждение и не падает с критической ошибкой.
|
|
32
|
+
|
|
33
|
+
## Supporting orders
|
|
34
|
+
|
|
35
|
+
- [ ] Документация: добавить комментарии в код о том, как использовать Supabase клиент в серверных API routes. Обновить README.md с инструкциями по настройке переменных окружения из `.env.example`.
|
|
36
|
+
|
|
37
|
+
- [ ] Observability: обеспечить логирование успешной инициализации Supabase клиента (опционально, для отладки). Добавить логирование ошибок при проблемах с подключением.
|
|
38
|
+
|
|
39
|
+
- [ ] Code review and PR: подготовить изменения для review. Убедиться, что все файлы соответствуют стандартам проекта и нет линтер ошибок.
|
|
40
|
+
|
|
41
|
+
## Definition of Done
|
|
42
|
+
|
|
43
|
+
- [ ] Все задачи выполнены и протестированы.
|
|
44
|
+
- [ ] Переменные окружения настроены и проверены (через `.env.example`).
|
|
45
|
+
- [ ] Supabase клиент инициализируется на сервере и доступен в API routes.
|
|
46
|
+
- [ ] TypeScript типы работают корректно без ошибок.
|
|
47
|
+
- [ ] Логирование работает при отсутствии переменных окружения.
|
|
48
|
+
- [ ] Файл `.env` добавлен в `.gitignore`.
|
|
49
|
+
- [ ] Документация обновлена с инструкциями по настройке.
|
|
50
|
+
- [ ] `/spec/core/verify.md` выполнен после завершения всех задач для проверки списка задач.
|
|
51
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Implementation Plan
|
|
2
|
+
|
|
3
|
+
**Plan:** Реализовать динамическую страницу `/orders/[id]`, отображающую детали задачи на основе мок-данных, с сохранением стиля приложения и подготовкой к замене данных на реальные источники в будущем.
|
|
4
|
+
|
|
5
|
+
## Data sources / schemas
|
|
6
|
+
|
|
7
|
+
- Использовать статические мок-данные, определённые прямо в компоненте страницы либо вынесенные в `data` директорию, чтобы имитировать структуру будущего API.
|
|
8
|
+
- Определить интерфейс OrderDetail (id, название, статусы, ответственный, сроки, приоритет, описание, вложения, история) для дальнейшей типизации.
|
|
9
|
+
- Подготовить структуру мок-данных таким образом, чтобы в дальнейшем можно было заменить на API вызов без изменения шаблона.
|
|
10
|
+
|
|
11
|
+
## Contracts and interfaces
|
|
12
|
+
|
|
13
|
+
- Динамический маршрут Nuxt `/orders/[id].vue`, принимающий `route.params.id`.
|
|
14
|
+
- Компонент страницы экспортирует объект с макетом и секциями, соответствующими макету (статусные чипы, блоки с иконками, история, кнопки).
|
|
15
|
+
- Предусмотреть интерфейсы/типы для вложений и истории, чтобы обеспечить проверку структуры данных.
|
|
16
|
+
- Тесты проверяют наличие ключевых блоков и отображение основных полей мок-данных.
|
|
17
|
+
|
|
18
|
+
## Architecture / Components
|
|
19
|
+
|
|
20
|
+
- Страница создаётся как отдельный файл в `pages/orders/[id].vue` с использованием `<script setup lang="ts">`.
|
|
21
|
+
- Использовать существующую систему Tailwind классов и тему (тёмная/светлая), избегать инлайновых стилей.
|
|
22
|
+
- Вынести повторно используемые UI-фрагменты (например, компонент бейджа статуса) в локальные компоненты или вспомогательные функции при необходимости, но без излишней декомпозиции.
|
|
23
|
+
- В футере добавить кнопку действия (например, "Отметить выполненным") с соответствующими стилями.
|
|
24
|
+
- Использовать Nuxt Layout, если у приложения есть общий layout для страниц задач (проверить текущую структуру; при отсутствии — использовать `<div>` контейнер с нужными классами).
|
|
25
|
+
|
|
26
|
+
## Risks
|
|
27
|
+
|
|
28
|
+
- Несоответствие текущему дизайн-гайду, если макет из примера не согласован с приложением.
|
|
29
|
+
- Возможные конфликты с существующей маршрутизацией, если `/orders/[id]` уже занят другой страницей.
|
|
30
|
+
- Перегруженность страницы на мобильных устройствах: важно протестировать адаптивность.
|
|
31
|
+
- Недостаточное покрытие тестами может привести к регрессии при замене мок-данных на реальные.
|
|
32
|
+
|
|
33
|
+
## Assumptions
|
|
34
|
+
|
|
35
|
+
- В проекте уже настроен Tailwind и тема, необходимые классы доступны.
|
|
36
|
+
- В Nuxt не требуется дополнительная настройка для динамических маршрутов.
|
|
37
|
+
- Дополнительные глобальные компоненты не нужны; можно использовать стандартные элементы.
|
|
38
|
+
- Дальнейшее подключение API будет выполнено в отдельной задаче.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Страница деталей задачи
|
|
2
|
+
|
|
3
|
+
**Specification:** Создать динамическую страницу деталей задачи, открывающуюся при переходе из списка задач по клику на карточку. Страница пока использует мок-данные и отражает ключевую информацию о задаче, статусы, историю, вложения, без серверной логики.
|
|
4
|
+
|
|
5
|
+
## User Stories
|
|
6
|
+
|
|
7
|
+
- Как менеджер по работе с задачими, я хочу открывать страницу деталей задачи из списка, чтобы видеть полную информацию по конкретной задаче.
|
|
8
|
+
- Как сотрудник службы поддержки, я хочу видеть на странице основные статусы и пометки по задачи, чтобы быстро ответить клиенту.
|
|
9
|
+
- Как руководитель команды, я хочу просматривать историю изменений по задаче, чтобы отслеживать исполнение и вовлечённых сотрудников.
|
|
10
|
+
|
|
11
|
+
## Main scenarios and rules
|
|
12
|
+
|
|
13
|
+
- Переход на страницу выполняется по маршруту с динамическим идентификатором задачи (`/orders/[id]`).
|
|
14
|
+
- При загрузке страницы отображаются мок-данные: статус, сроки, приоритет, ответственный, описание, вложения, история.
|
|
15
|
+
- Данные должны быть структурированы по блокам (шапка, статусные чипы, ключевые сведения, описание, вложения, история, управляющие кнопки).
|
|
16
|
+
- Страница сохраняет визуальный стиль текущего приложения (Tailwind, тёмная тема по умолчанию, соответствующие классы).
|
|
17
|
+
- Адаптивная вёрстка: корректное отображение на мобильных и десктопных разрешениях, основные блоки должны стекаться вертикально.
|
|
18
|
+
- Допускается отображение заглушек и мок-значений, но структура должна предусматривать замену на реальные данные в будущем.
|
|
19
|
+
|
|
20
|
+
## Non-functional requirements
|
|
21
|
+
|
|
22
|
+
- Поддержка тёмной темы и общей цветовой палитры приложения.
|
|
23
|
+
- Адаптивность: корректная работа на ширинах от 360px и выше.
|
|
24
|
+
- Компонентность: переиспользование существующих UI-компонентов где возможно (карточки, типографика).
|
|
25
|
+
- Код должен быть покрыт базовыми unit-тестами на рендеринг ключевых блоков (с использованием мок-данных).
|
|
26
|
+
- Страница не должна делать реальных сетевых запросов.
|
|
27
|
+
|
|
28
|
+
## Assumptions
|
|
29
|
+
|
|
30
|
+
- На данный момент страница работает полностью на статических мок-данных.
|
|
31
|
+
- Переход из списка задач уже реализован и будет настроен отдельно.
|
|
32
|
+
- Иконки и стили берутся из существующей дизайн-системы (Material Symbols и Tailwind конфигурация проекта).
|
|
33
|
+
- Размеры и точное содержимое блоков могут быть уточнены после демонстрации макета.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Orders
|
|
2
|
+
|
|
3
|
+
**Context:** Реализовать динамическую страницу деталей задачи `/orders/[id]` на мок-данных с адаптивной вёрсткой, соответствующей стилю приложения.
|
|
4
|
+
|
|
5
|
+
## Main directions
|
|
6
|
+
|
|
7
|
+
### UI
|
|
8
|
+
|
|
9
|
+
- [ ] Создать страницу `pages/orders/[id].vue` с разметкой и мок-данными.
|
|
10
|
+
- [ ] Добавить блоки: шапка с навигацией, статусные чипы, ключевые детали (ответственный, сроки, приоритет, проект), описание, вложения, история изменений, кнопка действия.
|
|
11
|
+
- [ ] Обеспечить адаптивность и корректное отображение в тёмной и светлой темах согласно дизайн-системе.
|
|
12
|
+
|
|
13
|
+
### Data & Typing
|
|
14
|
+
|
|
15
|
+
- [ ] Определить типы для деталей задачи, вложений и элементов истории.
|
|
16
|
+
- [ ] Настроить мок-данные, отражающие структуру будущих API-ответов.
|
|
17
|
+
|
|
18
|
+
### Testing
|
|
19
|
+
|
|
20
|
+
- [ ] Добавить unit-тесты, проверяющие рендеринг ключевых секций и отображение данных по умолчанию.
|
|
21
|
+
|
|
22
|
+
## Supporting orders
|
|
23
|
+
|
|
24
|
+
- [ ] Документация: обновить/добавить краткое описание новой страницы в README или отдельном разделе при необходимости.
|
|
25
|
+
- [ ] Наблюдаемость: Not required — reason: статическая мок-страница не использует сервисы и логи.
|
|
26
|
+
- [ ] Code review and PR: подготовить изменения для ревью, оформить summary и тест-план.
|
|
27
|
+
|
|
28
|
+
## Definition of Done
|
|
29
|
+
|
|
30
|
+
- [ ] All orders are completed and tested.
|
|
31
|
+
- [ ] Relevant unit/e2e/integration tests pass successfully.
|
|
32
|
+
- [ ] Documentation and operational instructions are updated.
|
|
33
|
+
- [ ] `/spec/core/verify.md` is executed after completing all orders to verify the order list.
|