FXCode
ENTRAR →
Doc. 11 — Funciones

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:

  • queuePosition es la única fuente de orden (cola y Kanban). 1 es 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

  1. Toma la tarea de fxc tasks next --project-id <id> (MCP: next_task).
  2. Pásala a «Working», trabájala y ciérrala con fxc tasks finish <id>.
  3. 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 }