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/ |
Кодер, Инфра, Аналитик |
| Агент | Берёт из | Что делает |
|---|---|---|
| Кодер | любая | Пишет код, создаёт файлы |
| Инфра | проекты | Настраивает серверы |
| Аналитик | проекты | Анализирует данные |
| Редактор | любая | Редактирует документы |
| Уровень | Когда | Действие |
|---|---|---|
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