diff --git a/IDEAS.md b/IDEAS.md index 7e1d930..270f4da 100644 --- a/IDEAS.md +++ b/IDEAS.md @@ -128,12 +128,11 @@ team-board/ описание: "Markdown текст с деталями" статус: draft | ready | in_progress | review | completed | blocked - # Тип задачи (флаги/теги) - теги: ["кодинг", "api", "auth"] - тип: coding | analytics | design | testing | docs | other + # Лейблы (как в Jira — произвольные, создаются в трекере) + лейблы: ["coding", "api", "backend", "urgent"] - # PR (только для задач с кодом) - требует_pr: true | false # автоматически по типу задачи + # PR (вручную или по лейблу) + требует_pr: true | false # Назначение назначен: agent_id (или null) @@ -287,15 +286,29 @@ Task A ──depends_on──→ Task B таймаут: 600 # секунд ``` -### Связка: типы задач ↔ адаптеры +### Лейблы -``` -Задача с тегом "coding" → только агенты с адаптером, у которого capability "coding" -Задача с тегом "design" → только агенты с адаптером, у которого capability "design" -Задача с тегом "analytics" → только агенты с адаптером, у которого capability "analytics" +Произвольные метки, создаются в трекере (как в Jira): + +```sql +CREATE TABLE labels ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + name TEXT UNIQUE NOT NULL, -- "coding", "design", "urgent" + color TEXT, -- "#ff0000" + created_at TIMESTAMPTZ DEFAULT NOW() +); ``` -Агент-дизайнер НЕ возьмёт задачу на кодинг — у его адаптера нет такой возможности. +Примеры: `coding`, `design`, `analytics`, `testing`, `docs`, `backend`, `frontend`, `urgent`, `bug` + +### Связка: лейблы задач ↔ capabilities адаптеров + +``` +Задача с лейблом "coding" → только агенты с адаптером, у которого capability "coding" +Задача с лейблом "design" → только агенты с адаптером, у которого capability "design" +``` + +Агент-дизайнер НЕ возьмёт задачу с лейблом `coding` — у его адаптера нет такой capability. ### Типы провайдеров @@ -351,15 +364,10 @@ agent.heartbeat — пульс ### Не каждая задача = PR -| Тип задачи | Нужен PR? | -|------------|-----------| -| coding | Да | -| testing | Да | -| analytics | Нет — результат в виде файла/отчёта | -| design | Нет — результат в виде файла | -| docs | Возможно — зависит от проекта | - -Поле `требует_pr` определяется автоматически по типу, но можно переопределить вручную. +PR нужен когда задача связана с кодом. Определяется вручную или по лейблам: +- Лейбл `coding` / `testing` → `требует_pr = true` (по умолчанию) +- Лейбл `design` / `analytics` → `требует_pr = false` +- Можно переопределить вручную ### Флоу ревью (для задач с PR) @@ -487,8 +495,7 @@ CREATE TABLE tasks ( title TEXT NOT NULL, description TEXT, status TEXT DEFAULT 'draft', - task_type TEXT DEFAULT 'other', -- coding, analytics, design, testing, docs - tags TEXT[], + -- лейблы через связующую таблицу task_labels requires_pr BOOLEAN DEFAULT FALSE, assigned_agent_id UUID REFERENCES agents(id), priority TEXT DEFAULT 'medium', @@ -504,6 +511,21 @@ CREATE TABLE task_dependencies ( PRIMARY KEY (task_id, depends_on_id) ); +-- Лейблы +CREATE TABLE labels ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + name TEXT UNIQUE NOT NULL, + color TEXT, + created_at TIMESTAMPTZ DEFAULT NOW() +); + +-- Связка задач и лейблов +CREATE TABLE task_labels ( + task_id UUID REFERENCES tasks(id) ON DELETE CASCADE, + label_id UUID REFERENCES labels(id) ON DELETE CASCADE, + PRIMARY KEY (task_id, label_id) +); + -- Файлы задач CREATE TABLE task_files ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(),