docs: лейблы вместо типов задач

- Произвольные лейблы (как в Jira)
- Таблица labels + task_labels
- Связка лейблов с capabilities адаптеров
This commit is contained in:
Markov 2026-02-15 18:22:34 +01:00
parent 51a091148f
commit d39354f7dd

View File

@ -128,12 +128,11 @@ team-board/
описание: "Markdown текст с деталями" описание: "Markdown текст с деталями"
статус: draft | ready | in_progress | review | completed | blocked статус: draft | ready | in_progress | review | completed | blocked
# Тип задачи (флаги/теги) # Лейблы (как в Jira — произвольные, создаются в трекере)
теги: ["кодинг", "api", "auth"] лейблы: ["coding", "api", "backend", "urgent"]
тип: coding | analytics | design | testing | docs | other
# PR (только для задач с кодом) # PR (вручную или по лейблу)
требует_pr: true | false # автоматически по типу задачи требует_pr: true | false
# Назначение # Назначение
назначен: agent_id (или null) назначен: agent_id (или null)
@ -287,15 +286,29 @@ Task A ──depends_on──→ Task B
таймаут: 600 # секунд таймаут: 600 # секунд
``` ```
### Связка: типы задач ↔ адаптеры ### Лейблы
``` Произвольные метки, создаются в трекере (как в Jira):
Задача с тегом "coding" → только агенты с адаптером, у которого capability "coding"
Задача с тегом "design" → только агенты с адаптером, у которого capability "design" ```sql
Задача с тегом "analytics" → только агенты с адаптером, у которого capability "analytics" 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
| Тип задачи | Нужен PR? | PR нужен когда задача связана с кодом. Определяется вручную или по лейблам:
|------------|-----------| - Лейбл `coding` / `testing`ребует_pr = true` (по умолчанию)
| coding | Да | - Лейбл `design` / `analytics`ребует_pr = false`
| testing | Да | - Можно переопределить вручную
| analytics | Нет — результат в виде файла/отчёта |
| design | Нет — результат в виде файла |
| docs | Возможно — зависит от проекта |
Поле ребует_pr` определяется автоматически по типу, но можно переопределить вручную.
### Флоу ревью (для задач с PR) ### Флоу ревью (для задач с PR)
@ -487,8 +495,7 @@ CREATE TABLE tasks (
title TEXT NOT NULL, title TEXT NOT NULL,
description TEXT, description TEXT,
status TEXT DEFAULT 'draft', status TEXT DEFAULT 'draft',
task_type TEXT DEFAULT 'other', -- coding, analytics, design, testing, docs -- лейблы через связующую таблицу task_labels
tags TEXT[],
requires_pr BOOLEAN DEFAULT FALSE, requires_pr BOOLEAN DEFAULT FALSE,
assigned_agent_id UUID REFERENCES agents(id), assigned_agent_id UUID REFERENCES agents(id),
priority TEXT DEFAULT 'medium', priority TEXT DEFAULT 'medium',
@ -504,6 +511,21 @@ CREATE TABLE task_dependencies (
PRIMARY KEY (task_id, depends_on_id) 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 ( CREATE TABLE task_files (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),