Skip to content
Эта страница создана и переведена с помощью ИИ. Если вы заметили неточности, помогите нам улучшить её. Редактировать на GitHub

Состояния рабочего процесса

Каждая задача в OpenPR имеет состояние, отражающее её позицию в рабочем процессе. Колонки kanban-доски напрямую соответствуют этим состояниям.

OpenPR поставляется с четырьмя состояниями по умолчанию, но поддерживает полностью настраиваемые состояния рабочего процесса через систему разрешения 3-го уровня. Вы можете определять разные рабочие процессы для каждого проекта, рабочего пространства или полагаться на системные значения по умолчанию.

Состояния по умолчанию

mermaid
graph LR
    BL["Backlog"] --> TD["To Do"]
    TD --> IP["In Progress"]
    IP --> DN["Done"]

    IP -.->|"blocked"| TD
    DN -.->|"reopened"| IP
    BL -.->|"prioritized"| IP
СостояниеЗначениеОписание
BacklogbacklogИдеи, будущая работа и незапланированные элементы. Ещё не запланировано.
To DotodoЗапланировано и приоритизировано. Готово к выполнению.
In Progressin_progressАктивно выполняется исполнителем.
DonedoneЗавершено и проверено.

Это встроенные состояния, с которых начинает каждое новое рабочее пространство. Вы можете настроить их или добавить дополнительные состояния, как описано в разделе Пользовательские рабочие процессы ниже.

Переходы состояний

OpenPR допускает гибкие переходы состояний. Нет принудительных ограничений — любое состояние может переходить в любое другое. Распространённые паттерны:

ПереходТриггерПример
Backlog -> To DoПланирование спринта, приоритизацияЗадача перенесена в предстоящий спринт
To Do -> In ProgressРазработчик берёт работуИсполнитель начинает реализацию
In Progress -> DoneРабота завершенаПул-реквест смёрджен
In Progress -> To DoРабота заблокирована или приостановленаОжидание внешней зависимости
Done -> In ProgressЗадача переоткрытаОбнаружена регрессия бага
Backlog -> In ProgressСрочный хотфиксКритическая проблема в продакшене

Пользовательские рабочие процессы

OpenPR поддерживает пользовательские состояния рабочего процесса через систему разрешения 3-го уровня. Когда API валидирует состояние рабочего элемента, он разрешает эффективный рабочий процесс, проверяя три уровня по порядку:

Рабочий процесс проекта  >  Рабочий процесс рабочего пространства  >  Системные значения по умолчанию

Если проект определяет собственный рабочий процесс, он имеет приоритет. В противном случае используется рабочий процесс уровня рабочего пространства. Если ни один не существует, применяются четыре системных состояния по умолчанию.

Схема базы данных

Пользовательские рабочие процессы хранятся в двух таблицах (введены в миграции 0024_workflow_config.sql):

  • workflows — Определяет именованный рабочий процесс, прикреплённый к проекту или рабочему пространству.
  • workflow_states — Отдельные состояния внутри рабочего процесса.

Каждое состояние имеет следующие свойства:

ПолеТипОписание
keystringМашиночитаемый идентификатор (например, in_review)
display_namestringЧеловекочитаемое имя (например, "In Review")
categorystringГруппировочная категория для состояния
positionintegerПорядок отображения на kanban-доске
colorstringHex-код цвета для значка состояния
is_initialbooleanЯвляется ли это состояние начальным для новых задач
is_terminalbooleanПредставляет ли это состояние завершение

Создание пользовательского рабочего процесса через API

Шаг 1 — Создать рабочий процесс для проекта:

bash
curl -X POST http://localhost:8080/api/workflows \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{
    "name": "Engineering Flow",
    "project_id": "<project_uuid>"
  }'

Шаг 2 — Добавить состояния в рабочий процесс:

bash
curl -X POST http://localhost:8080/api/workflows/<workflow_id>/states \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{
    "key": "in_review",
    "display_name": "In Review",
    "category": "active",
    "position": 3,
    "color": "#f59e0b",
    "is_initial": false,
    "is_terminal": false
  }'

Пример: 6-состояний инженерного рабочего процесса

mermaid
graph LR
    BL["Backlog"] --> TD["To Do"]
    TD --> IP["In Progress"]
    IP --> IR["In Review"]
    IR --> QA["QA"]
    QA --> DN["Done"]

    IR -.->|"changes requested"| IP
    QA -.->|"failed"| IP
СостояниеКлючКатегорияНачальноеКонечное
Backlogbacklogbacklogданет
To Dotodoplannedнетнет
In Progressin_progressactiveнетнет
In Reviewin_reviewactiveнетнет
QAqaactiveнетнет
Donedonecompletedнетда

Динамическая валидация

При обновлении состояния рабочего элемента API валидирует новое состояние по эффективному рабочему процессу для этого проекта. Если вы устанавливаете ключ состояния, который не существует в разрешённом рабочем процессе, API возвращает ошибку 422 Unprocessable Entity. Состояния не захардкожены — они динамически ищутся во время запроса.

Kanban-доска

Вид доски отображает задачи в виде карточек в колонках, соответствующих состояниям рабочего процесса. Перетаскивайте карточки между колонками для изменения состояния. При активных пользовательских рабочих процессах доска автоматически отражает пользовательские состояния и их настроенный порядок.

Каждая карточка показывает:

  • Идентификатор задачи (например, API-42)
  • Заголовок
  • Индикатор приоритета
  • Аватар исполнителя
  • Значки меток

Обновление состояния через API

bash
# Перевести задачу в "in_progress"
curl -X PATCH http://localhost:8080/api/issues/<issue_id> \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{"state": "in_progress"}'

Обновление состояния через MCP

json
{
  "method": "tools/call",
  "params": {
    "name": "work_items.update",
    "arguments": {
      "work_item_id": "<issue_uuid>",
      "state": "in_progress"
    }
  }
}

Уровни приоритета

В дополнение к состояниям каждая задача может иметь уровень приоритета:

ПриоритетЗначениеОписание
НизкийlowЖелательно, но без срочности
СреднийmediumСтандартный приоритет, плановая работа
ВысокийhighВажно, должно быть выполнено в ближайшее время
СрочныйurgentКритично, требует немедленного внимания

Отслеживание активности

Каждое изменение состояния записывается в ленте активности задачи с указанием исполнителя, временной метки и старых/новых значений. Это обеспечивает полный журнал аудита.

Следующие шаги

Released under the Apache-2.0 License.