Kanban, cola y relaciones
Tablero por estado, una sola cola de trabajo (En curso → Sigue → Después), relaciones entre tareas, subtareas, vistas guardadas y limpieza en lote.
Las tareas de un proyecto se ven como lista o como tablero Kanban, y las dos comparten un único orden: la cola de trabajo del proyecto. Los agentes usan esa misma cola para saber qué toca después.
Kanban por estado
En la pestaña Tareas del proyecto, alterna entre Lista y Kanban. El tablero tiene una columna por estado, en el orden de tu catálogo (Ajustes → Estados de tarea).
- Arrastra una tarjeta a otra columna para cambiar su estado. Llevarla a un estado «terminado» la fecha como completada y la saca de la cola.
- Arrastra dentro de una columna para reordenarla. Ese orden es el de la cola (
queuePosition): no hay un «orden manual» aparte para el tablero. - Los filtros (estado, prioridad, entorno, versión, asignado, etiqueta y texto) se aplican al tablero igual que a la lista.
- Las tareas archivadas y las ideas nunca salen en el tablero.
La cola de trabajo: En curso → Sigue → Después
La página del proyecto y Mis tareas muestran tres secciones:
| Sección | Qué contiene |
|---|---|
| En curso | Tareas en un estado animado («Working»): alguien, o un agente, las está tocando ahora |
| Sigue | La primera de la cola que no está bloqueada: destacada, es la que se toma a continuación |
| Después | El resto de la cola, en orden (las bloqueadas incluidas, con quién las bloquea) |
Reglas:
queuePositiones la única fuente de orden (cola y Kanban).1es la primera.- Solo entran tareas sin terminar. Terminar o archivar una tarea la saca; las ideas y las tareas sueltas (sin proyecto) no entran.
- Una tarea bloqueada por otra sin terminar nunca es «Sigue»: lo es la siguiente libre.
- Reordena arrastrando en la web o desde la terminal:
fxc tasks queue <tareaId> # al final
fxc tasks queue <tareaId> --first
fxc tasks queue <tareaId> --after <otraId>
fxc tasks queue --remove <tareaId>
fxc tasks queue --project-id <proyectoId> # ver En curso / Sigue / Después
fxc tasks next --project-id <proyectoId> # la que toca tomar ahora (--mine: mías o sin asignar)
El ciclo del agente
- Toma la tarea de
fxc tasks next --project-id <id>(MCP:next_task). - Pásala a «Working», trabájala y ciérrala con
fxc tasks finish <id>. - Vuelve a preguntar con
fxc tasks next. Si la cola está vacía, para y dilo.
Por MCP existen las mismas herramientas: next_task, queue_task y get_queue, en el servidor local y en el remoto.
Relaciones entre tareas
| Tipo | Significado |
|---|---|
relates_to |
Relacionadas (simétrica) |
blocks / blocked_by |
Una no puede avanzar hasta que la otra termine. blocked_by se guarda como blocks leído desde el otro extremo |
duplicates / duplicated_by |
Una es duplicada de la otra (fusionar deja esta relación) |
- Las dos tareas tienen que ser del mismo proyecto.
- Crear la inversa de un bloqueo que ya existe (B bloquea a A cuando A ya bloquea a B) devuelve 409. Crear una que ya existe la devuelve tal cual.
- Una tarea bloqueada muestra quién la bloquea en la lista, en el tablero y en su detalle, mientras la bloqueadora no esté terminada ni archivada.
fxc tasks link-task <id> --blocked-by <otraId>
fxc tasks link-task <id> --relates-to <otraId>
fxc tasks relations <id>
fxc tasks unlink-task <id> --blocked-by <otraId> # o --relation <relationId>
En la web, las relaciones se gestionan desde el detalle de la tarea. Por MCP: link_tasks y unlink_tasks; get_task devuelve las relaciones, blockedBy, la madre y las subtareas.
Subtareas
Una tarea puede tener madre (parentId, del mismo proyecto). La madre muestra sus subtareas y cada subtarea su madre. Los ciclos se rechazan (una tarea no puede ser madre de su propia antecesora), y mover una tarea a otro proyecto le quita la madre, las relaciones y el sitio en la cola.
fxc tasks create -t "Formulario de login" --project-id <id> --parent-id <madreId>
fxc tasks list --parent-id <madreId> # sus subtareas (--parent-id none: solo las de primer nivel)
Vistas guardadas
Guarda con un nombre los filtros que usas (estado, prioridad, entorno, versión, asignado, etiqueta, texto), junto con la agrupación y la disposición (lista o Kanban). Las vistas son personales y por proyecto: nadie más ve ni edita las tuyas. API: GET|POST /tasks/views, PUT|DELETE /tasks/views/:viewId.
Operaciones en lote y fusionar duplicadas
Selecciona varias tareas en la lista (o en el tablero) para cambiarles el estado, la prioridad, el asignado, el entorno, la versión o las etiquetas, archivarlas o fusionarlas.
fxc tasks update --ids a,b,c --status Working --priority Alta --add-tag sprint-3 --remove-tag backlog
fxc tasks archive <id> <id> … # las archivadas salen de las listas, del avance y del MCP
fxc tasks unarchive <id>
fxc tasks list --archived # solo archivadas (--archived all: todas)
fxc tasks merge <destinoId> <origenId> <origenId> …
Fusionar mueve a la tarea destino los comentarios, adjuntos, enlaces, notas enlazadas, solicitudes de cliente vinculadas, subtareas y relaciones de las de origen, une sus etiquetas, archiva las de origen y deja una relación «duplicada de». Todas tienen que ser del mismo proyecto.
Solicitudes vinculadas a una tarea existente
Una solicitud de cliente que coincide con trabajo que ya tienes no necesita otra tarea: vincúlala. Queda «Aceptada» y se cierra sola cuando la tarea se termina, igual que una convertida.
fxc requests link <solicitudId> --task <tareaId>
En la web, con Vincular a tarea en la solicitud; por MCP, link_request.
API
| Endpoint | Qué hace |
|---|---|
GET /tasks?archived=true|all&assignee=&changelogId=&parentId= |
Filtros (además de priority, environment, version, status, tags, search) |
PATCH /tasks/bulk |
{ ids, taskStatusId?, priorityId?, assignedUserId?, assignedPersonId?, environment?, version?, changelogId?, addTags?, removeTags?, archived? } |
POST /tasks/:id/merge |
{ fromIds } |
GET / POST /tasks/:id/relations |
{ type, taskId } |
DELETE /tasks/:id/relations/:relationId |
O ?type=blocks&taskId=<otra> |
POST / DELETE /tasks/:id/queue |
{ after? } o { position: "first" | "last" } |
GET /tasks/queue?projectId= |
{ inProgress, next, later } |
GET /tasks/next?projectId=&mine=1 |
{ task, inProgress, queued, blocked } (task: null = cola vacía) |
POST /client-requests/:id/link |
{ taskId } |