architect/standards/3-process/process-task-queue.md

type: standard
aspect: process
title: "Стандарт: Очередь задач"
version: 1.0.0
date: 2026-02-19
status: active


Стандарт: Очередь задач

Версия: 2.0.0
Тип: Процесс
Дата: 2025-12-21


НАЗНАЧЕНИЕ

Единый конвейер управления задачами на платформе и в проектах.


ТЕРМИНОЛОГИЯ

Термин Значение
task Единица работы (общий термин)
ticket Входящая задача (проблема, запрос)
inbox Входящие — ещё не разобраны
backlog Разобраны, ожидают выполнения

Принцип: Ticket → Task (одна сущность, разные стадии)

TICKET (проблема) → TASK (работа) → DONE (готово)
     ↑                    ↑
  входящее           в разборе

ПРИНЦИП

ПЛАНИРОВЩИК                              ИСПОЛНИТЕЛЬ
(широкий контекст)                       (глубокий контекст)
      │                                        │
      │  анализирует                           │
      │  декомпозирует                         │
      │  создаёт задачи                        │
      │                                        │
      ├──────── .queue/pending/ ──────────────►│
      │                                        │
      │                                  берёт задачу
      │                                  читает контекст
      │                                  выполняет
      │                                        │
      │◄─────── .queue/done/ ─────────────────┤
      │                                        │
      │  проверяет результат                   │

ХРАНЕНИЕ

Принцип: Платформа + Проекты (раздельно)

/.queue/                            ← ПЛАТФОРМА (методология, агенты)
├── inbox/
├── backlog/
├── active/
└── done/

projects/pirotehnika/.queue/        ← ПРОЕКТ (его задачи)
├── inbox/
├── backlog/
├── active/
└── done/

Почему раздельно:
- Проект автономен (удалил папку — всё ушло)
- Задачи рядом с кодом
- Чисто и понятно

Расположение

Очередь Путь Кто управляет
Платформа /.queue/ Архитектор
Проект projects/{name}/.queue/ Проектор

Папки

.queue/
├── inbox/           входящие (не разобраны)
├── backlog/         разобраны, ожидают
├── active/          в работе
└── done/            выполнены (архив)

ФОРМАТ ЗАДАЧИ

Имя файла

{YYYY-MM-DD}_{NNN}_{slug}.yaml

Примеры:
2025-12-07_001_create-migrator.yaml
2025-12-07_002_update-claude-md.yaml

Структура файла

# ═══════════════════════════════════════════
# ИДЕНТИФИКАЦИЯ
# ═══════════════════════════════════════════
id: "2025-12-21_001"
type: "task"                    # ticket | task
created: "2025-12-21T15:30:00"
created_by: "architect"         # кто создал
assigned_to: "coder"            # кто выполняет (опционально)
project: "platform"             # platform | pirotehnika | ...
importance: "high"              # critical | high | medium | low

# ═══════════════════════════════════════════
# ЗАДАЧА
# ═══════════════════════════════════════════
title: "Краткое название"
description: |
  Подробное описание задачи.
  Что нужно сделать и почему.

# ═══════════════════════════════════════════
# КОНТЕКСТ (что прочитать)
# ═══════════════════════════════════════════
context:
  files:
    - path: "путь/к/файлу1"
      reason: "Зачем читать этот файл"
    - path: "путь/к/файлу2"
      reason: "Зачем читать"
  references:
    - "ссылка на стандарт"
    - "ссылка на пример"
  notes: |
    Дополнительные заметки для исполнителя.

# ═══════════════════════════════════════════
# ДЕЙСТВИЕ
# ═══════════════════════════════════════════
action:
  type: "create"                # create | edit | delete | analyze
  target: "путь/к/целевому/файлу"
  instructions: |
    Пошаговые инструкции:
    1. Первый шаг
    2. Второй шаг
    3. Третий шаг

# ═══════════════════════════════════════════
# ОЖИДАЕМЫЙ РЕЗУЛЬТАТ
# ═══════════════════════════════════════════
expected:
  result: "Что должно получиться"
  validation: |
    Как проверить:
    - Критерий 1
    - Критерий 2

# ═══════════════════════════════════════════
# СТАТУС
# ═══════════════════════════════════════════
status: "inbox"                 # inbox | triaged | assigned | active | blocked | review | done
started_at: null
completed_at: null
result: null                    # что сделано
blocked_by: null                # чем заблокировано (если blocked)

ЖИЗНЕННЫЙ ЦИКЛ (ВОРОНКА)

┌───────┐   разбор   ┌─────────┐   назначить   ┌──────────┐   взять   ┌────────┐   готово   ┌──────┐
 inbox  ─────────►  backlog  ────────────►  assigned  ────────►  active  ─────────►  done 
└───────┘            └─────────┘               └──────────┘           └────────┘            └──────┘
                                                                          
 входящее                                                              blocked
  (ticket)                                                           (заблокирован)

Статусы

Статус Папка Описание
inbox inbox/ Входящие, не разобраны
triaged backlog/ Разобраны, приоритет определён
assigned backlog/ Назначен исполнитель
active active/ В работе
blocked active/ Заблокирован (ждёт чего-то)
review active/ На проверке
done done/ Выполнено

Переходы

Из В Кто Когда
inbox triaged Планировщик Разобрал, определил приоритет
triaged assigned Планировщик Назначил исполнителя
assigned active Исполнитель Взял в работу
active blocked Исполнитель Ждёт внешнего ресурса
blocked active Исполнитель Разблокировано
active review Исполнитель Готово, на проверку
review done Планировщик Проверил, принял
review active Планировщик Вернул на доработку

КОМАНДЫ

Для планировщика

создать задачу [очередь] [исполнитель]
→ создать задачу платформа кодер
→ создать задачу pirotehnika инфра

Для исполнителя

очередь                     # показать все очереди
очередь [имя]               # показать конкретную
взять задачу [id]           # взять в работу
завершить задачу [id]       # отметить выполненной
отклонить задачу [id]       # не могу выполнить

Для всех

задачи                      # мои задачи (in_progress)
задачи pending              # ожидающие
задачи done                 # выполненные

РОЛИ

Планировщики (создают задачи)

Агент Очередь Создаёт для
Архитектор /.queue/ Кодер, Редактор
Проектор /{project}/.queue/ Кодер, Инфра, Аналитик

Исполнители (выполняют задачи)

Агент Берёт из Что делает
Кодер любая Пишет код, создаёт файлы
Инфра проекты Настраивает серверы
Аналитик проекты Анализирует данные
Редактор любая Редактирует документы

ПРАВИЛА

Для планировщика

  1. Одна задача = одно действие (не смешивать)
  2. Контекст полный — исполнитель не должен искать
  3. Инструкции конкретные — пошагово
  4. Критерии проверки — как понять что готово

Для исполнителя

  1. Прочитать контекст до начала работы
  2. Следовать инструкциям точно
  3. Заполнить result при завершении
  4. Отклонить если не хватает информации

ПРИОРИТЕТ (IMPORTANCE)

Уровень Когда Действие
critical Блокирует бизнес/платформу Немедленно
high Блокирует другие задачи В первую очередь
medium Важно, но не блокирует Планово
low Можно отложить Когда будет время

Примечание: Используем только importance (важность).
Urgency (срочность) не выделяем отдельно — если срочно, повышаем importance.


ПРИМЕРЫ

Задача на создание

id: "2025-12-07_001"
created_by: "architect"
assigned_to: "coder"
priority: "high"

title: "Создать агента Мигратор"

context:
  files:
    - path: "architect/standards/7-typology/ROLE.md"
      reason: "Стандарт описания агента"
    - path: "system/agents/coder.ai.md"
      reason: "Пример структуры"

action:
  type: "create"
  target: "architect/agents/migrator.ai.md"
  instructions: |
    1. Создать файл по шаблону ROLE.md
    2. Секции: КТО, ЗАЧЕМ, ЧТО, КАК, ЧЕМ, СКОЛЬКО
    3. Добавить ВЗАИМОДЕЙСТВИЕ

expected:
  result: "Файл ~100 строк"
  validation: |
    - Все секции заполнены
    - Соответствует стандарту

Задача на редактирование

id: "2025-12-07_002"
created_by: "projector"
assigned_to: "coder"
priority: "medium"

title: "Исправить баг в парсере цен"

context:
  files:
    - path: "pirotehnika/@ozon.api/solution/parser.py"
      reason: "Файл с багом"
  notes: |
    Баг: цена 1000.50 парсится как 1000
    Причина: int() вместо float()

action:
  type: "edit"
  target: "pirotehnika/@ozon.api/solution/parser.py"
  instructions: |
    1. Найти функцию parse_price()
    2. Заменить int(price) на float(price)
    3. Проверить все вызовы

expected:
  result: "Цены парсятся корректно"
  validation: |
    - 1000.50 → 1000.50 (не 1000)
    - Тесты проходят

СВЯЗИ


Версия: 1.0.0