Ir al contenido

Backlog

El plugin Backlog mantiene el trabajo que realiza un Blueprint (el plano) junto a la definición: un archivo markdown por tarea en la carpeta backlog/ de la raíz, cada una al servicio de los Blueprints que nombra por su id permanente, o de ninguno, en un tablero cuyos estados y columnas define la raíz. Una tarea no es un Blueprint: nunca es un elemento de colección, nunca se comprueba como tal, nunca está en el índice. Una tarea muere cuando el trabajo se entrega; el Blueprint se queda. Desactivado por defecto; eidos plugin enable backlog lo activa y declara la carpeta.

  • Board: una columna por columna configurada, una tarjeta por tarea con su tipo como icono antes del título, su id, su prioridad como un icono en su color y las propiedades propias de la raíz que lleva, arrastrada entre columnas para escribir el primer estado de la columna. Una columna muestra como mucho siete tarjetas a su altura completa, menos cuando la ventana no tiene sitio para siete, y, pasadas esas, se desplaza por dentro, con su cabecera y el recuento de todas sus tarjetas siempre a la vista, y una tarjeta arrastrada cerca de su borde superior o inferior la desplaza; el número es Column height en la pestaña Kanban (column_cards, 0 para todas). Una tarea en un estado Done que lleva sin actualizarse más días que Hide done tasks en la pestaña Kanban (hide_done_days, vacío por defecto, así que no se oculta ninguna) sale del tablero y de sus filtros, y su columna dice cuántas oculta; sigue en las tablas, en Attached tasks y en eidos backlog. La tabla del Backlog tiene una columna para el estado, la prioridad, la persona asignada, el hito, cada propiedad propia de la raíz, los Blueprints y el día de la última actualización, y la de los borradores para el estado, los Blueprints y el día de la última actualización, hasta que la pestaña Task properties pone una propiedad On table o la quita, en las dos a la vez. Backlog lista cada tarea en un estado de backlog con Promote al tablero. Ambos filtran por estado, prioridad, persona asignada, tipo, hito y Blueprint, y por cualquier propiedad de la raíz con Filter activado; la tabla ordena por cualquier columna, y estado, prioridad y persona asignada se editan en la fila. Una tabla de Milestones está al lado, filtrada de la misma manera por las propiedades de hito con Filter activado. Una caja de búsqueda encabeza los filtros del tablero, de la tabla del Backlog, de los borradores y de los hitos, como en todas las tablas: deja las tareas que tienen cada palabra escrita, sin importar mayúsculas, en el id, el título o un valor que muestra la fila salvo sus fechas, así que T-4KQ7 encuentra esa tarea y las tareas que la nombran como su tarea padre o una dependencia. Los filtros del tablero, de la tabla del Backlog y de los borradores están en la dirección de la página (/p/backlog?sprint=Sprint+12&assignee=plato, la búsqueda como q), así que un tablero filtrado se puede guardar en marcadores, compartir y recargar; By status, By type y My work conservan sus propias direcciones. Una vez filtrados, el tablero, la tabla del Backlog y los borradores ofrecen Save as view, y una vista guardada aparece en la actividad bajo Board, All tasks o Drafts; My work, los estados y los tipos son las vistas con las que empieza toda raíz. Vistas guardadas →
  • Una tarea se abre en un modal desde el tablero, la tabla o las tareas adjuntas de un Blueprint, con Expand para su propia página, y sigue a la tarea por su id cuando se renombra su archivo, desde la página o desde fuera: propiedades tipadas por clase (un calendario para una fecha), los criterios marcados en el archivo, cada sección una tarjeta en el editor, el archivo como texto, los hilos de Comments al pie, y Delete en todos los modos. Un clic derecho en una fila de la tabla del Backlog o de los borradores, o en una tarjeta del tablero, abre el menú de la tarea: Open, Open as a page, Assign to me (la persona como quien actúas, junto a quien ya la tenga), Copy id, las salidas al archivo, y Delete.
  • New task, desde las páginas, la actividad o las tareas adjuntas de un Blueprint, pide el tipo y el título de la tarea antes de crear nada (con más de un tipo, ninguno se toma hasta que se elige uno), luego crea el archivo, o un borrador de él, y lo abre, donde se rellena el resto.
  • Export, desde el ⋮ en la esquina superior derecha de la tabla del Backlog: Export this view… escribe las tareas que muestra la tabla, en su orden, y Export all tasks… todas las tareas de la carpeta, en un archivo CSV o un libro de Excel. Un diálogo pregunta el Format (CSV al empezar, o Excel: una hoja cuya primera fila, los nombres de los campos, queda a la vista y filtra) y qué campos: cada propiedad del formato y cada una que declara la raíz, todas marcadas al empezar, y Content aparte y sin marcar: el cuerpo entero de la tarea, cada sección y sus hilos de comentarios, la única manera en que los comentarios salen con una tarea. eidos backlog export hace lo mismo desde la terminal.
  • Backlog, una actividad en la barra de actividad con el recuento de tus tareas abiertas, listadas por columna, y My work: las tareas abiertas asignadas a ti. Cada estado tiene una categoría, como en Jira: To Do, In Progress o Done, que se elige junto al estado en la pestaña Settings (status_categories). Una tarea en un estado Done está terminada y nunca sale en My work ni en los recuentos de abiertas, y un estado Done se dibuja en verde. Un estado sin categoría elegida la toma de donde está: el backlog y la primera columna son To Do, las columnas siguientes In Progress, y un estado listado después de los de todas las columnas (un Done que se deja fuera del tablero), o si no la última columna, es Done.
  • Attached tasks, una vista en la barra lateral auxiliar: las tareas al servicio del Blueprint abierto, el recuento de las abiertas en su pestaña y una manera de empezar una para él o de adjuntar una ya escrita (Attach existing, que encuentra una tarea por su título o su id entre las que todavía no sirven al Blueprint). El menú de bloques del editor ofrece una tarea de la misma manera.
  • La página de ajustes del plugin tiene los estados, columnas, prioridades (cada una con un icono y un color, los de Jira según su lugar hasta que se elijan: arriba y rojo por encima del medio, igual y naranja en él, abajo y azul por debajo), hitos, una pestaña Task types (con cada campo de un tipo y de sus secciones etiquetado) y una pestaña Task properties. Las propiedades de una tarea y las de un hito se declaran como las del framework: una tarjeta cada una, cambiada en el mismo formulario (los tipos a los que se aplica una propiedad de tarea marcados como casillas, sus opciones añadidas de una en una y puestas en orden), colocadas en el orden en que el lector las muestra, y con Filter activado para ser un desplegable sobre el tablero y las tablas, u On table para ser una columna de la tabla del Backlog y de los borradores. Junto a Filter, Only show actively used in filters reduce ese desplegable a los valores que tiene una tarea abierta (una cuyo estado no es de la categoría Done; para una propiedad de hito, un hito con una tarea abierta o ninguna todavía), así que un sprint con todas sus tareas en Done sale del filtro y sigue declarado y en sus tareas. Las propiedades integradas que pone una persona también tienen allí un Order, el orden en que las muestran las propiedades de una tarea y New task, con las propias de la raíz detrás, y las que una tabla puede tener, On table (builtin_properties).

Frontmatter: id (el id permanente de la tarea, T- y cuatro caracteres como el de un Blueprint es B-, dado al crear la tarea y que nunca cambia), title, type (uno que la raíz declara; ausente significa default), status, assignee (alias de los usuarios de la raíz), milestone, priority, dependencies (otras tareas, por id), parent (una tarea, por id), created, updated, blueprints (los ids de los Blueprints a los que sirve la tarea; ninguno también vale), at (section e item: un lugar en el primero de ellos, por contenido), y cualquier propiedad que la raíz declare en los ajustes del plugin. Las etiquetas no son del formato: una raíz que las quiera declara una propiedad labels de tipo List con sus opciones.

El cuerpo son las secciones que declara el tipo de la tarea, todas opcionales: por defecto ## Description, ## Acceptance Criteria (una lista de líneas - [ ] #1 …), ## Implementation Plan y ## Implementation Notes; una raíz puede añadir las suyas (References o Modified Files como enlaces, Definition of Done como lista de verificación, Final Summary como texto). Cada una va dentro de una región propia del plugin, <!-- backlog:<key> --> … <!-- /backlog:<key> -->, reescrita entera cuando se fija la sección; todo lo demás en el archivo se conserva tal como se encuentra, así que editar una tarea a mano está bien.

El nombre del archivo sigue al título, y el id nunca entra en él: un cambio de título renombra el archivo, y sus hilos lo siguen. Un comando toma una tarea por su id o por su nombre. Una tarea escrita antes de los ids recibe uno con Assign id en la comprobación o con eidos backlog ids. La sección Tasks de un template (la plantilla) es donde un Blueprint lista las tareas que le sirven: en los ajustes del Framework (el marco), en Templates, cada sección tiene un tipo junto a su encabezado, Text por defecto o Tasks mientras el Backlog está activado, y una sección Tasks contiene una región <!-- backlog:tasks -->. En un Blueprint de ese template el plugin escribe ahí las tareas tras cualquier cambio, añade el encabezado de la sección en el orden del template donde el Blueprint no lo tiene, y quita una lista escrita en cualquier otro sitio, como al pie de un cuerpo antiguo. Un template sin sección Tasks no muestra tareas en el texto; siguen en Attached tasks. El enlace vive en la tarea; nunca escribas dentro de la región.

types son las clases de tarea con las que trabaja la raíz, cada una un nombre, un título, un icono y un color, y las secciones que contiene su cuerpo: un template por clase, como una colección tiene variants (variantes). Una raíz empieza con uno, default. statuses es la lista ordenada de la raíz; columns asigna cada columna del tablero a uno o más estados; un estado sin columna es un estado de backlog, listado en la página Backlog y nunca en el tablero. El predeterminado es el de Jira: Intake, To Do, In Progress, In Review, Done, con Intake en el backlog. Una tarea nueva cae en default_status.

Un borrador es una tarea que todavía no está en la carpeta: el mismo archivo, guardado bajo .eidos/plugins/backlog/drafts/ (compartido con la raíz) o .eidos/plugins/backlog/local/drafts/ (privado, nunca en commit), fuera de toda lista hasta que se publica, aunque show y set lo alcanzan por su nombre como a una tarea. Un borrador no tiene hilos y no se proyecta en ninguna parte.

  • backlog/ (o cualquier carpeta declarada owned_by: "@backlog/tasks"): las tareas, un archivo cada una. La raíz →
  • .eidos/plugins/backlog/settings.yaml, compartido: types, sections, statuses, columns, default_status, priorities, priority_icons, priority_colors, column_cards, hide_done_days, milestones, milestone_properties, properties y builtin_properties.
  • .eidos/plugins/backlog/drafts/ y local/drafts/: los borradores.
Ventana de terminal
eidos backlog # every task, grouped by column
eidos backlog --status "In Progress" --assignee ada # --column, --milestone, --blueprint, --type, --where key=value, --json
eidos backlog --search "login page" # every word, in any case, in the id, the title, or a value the row shows
eidos backlog drafts --search T-4KQ7 # a draft by the task id it holds
eidos backlog add "Rate limit the login form" --for @login --type bug --criterion "Locks after five tries"
eidos backlog show T-4KQ7 # a task by its id, or by its file name
eidos backlog set rate-limit-the-login-form --status "In Progress"
eidos backlog set rate-limit-the-login-form --body implementation-notes="Tried a sliding window first."
eidos backlog check rate-limit-the-login-form 1 # tick criterion #1; --undo, --in <section>
eidos backlog promote <task> # from the backlog onto the board
eidos backlog remove T-4KQ7 # delete a task, as the page's Delete does
eidos backlog export --assignee ada --field id --field title --content --out tasks.csv # the tasks the filters keep; --json
eidos backlog export --out tasks.xlsx # an Excel workbook, every task and every field
eidos backlog types # the types; sections [--type] lists a type's sections
eidos backlog configure:property add labels --type List --filter # a task property; set|remove, properties lists them
eidos backlog configure:type add bug --icon bug --color red --section "Steps:checklist" # a task type; set|remove
eidos backlog add "Old task" --property labels=finance,feature --created 2025-03-01 --updated 2025-04-02 # an import
eidos backlog draft "An idea" --private # drafts, draft:move <draft> shared|private, publish <draft>
eidos backlog project # rewrite every backlog:tasks region that drifted
eidos backlog ids # ids for tasks written before them, and references moved onto ids

set fija una cosa por opción: --type, --status, --title, --assignee, --milestone, --priority, --for, --section, --item, --dependency, --parent, --property name=value, --description, o --body key=text para una sección declarada.

--property toma el tipo que declara la propiedad: una List recibe sus elementos separados por comas o la opción repetida, un Number un número, un Checkbox on u off. Cada escritura pone updated en la fecha de hoy; --created y --updated en add y set dan las fechas en su lugar, así una importación conserva las que traía. configure:property y configure:type escriben las propiedades y los tipos de tarea en el settings.yaml del plugin como lo hace su página, una entrada cada vez; --dry-run muestra la entrada y no escribe nada.

Para tomar una tarea como agente: lee sus Blueprints, pon el estado en el de la columna de trabajo, haz el trabajo en el Blueprint o en el código, marca los criterios según se cumplen, escribe lo aprendido bajo Implementation Notes y pon el estado en el de la última columna. Nunca escribas el nombre de una tarea en un Blueprint.

backlog/blueprint-missing (una tarea nombra un Blueprint que la raíz no tiene), backlog/status-unknown, backlog/type-unknown, backlog/dependency-missing (una dependencia que el backlog no tiene), backlog/id-missing (una tarea escrita antes de los ids; Assign id la arregla), backlog/id-duplicate (dos archivos con un mismo id), backlog/reference-by-name (una dependencia o tarea padre escrita aún como nombre de archivo; Use ids la arregla) y backlog/region-stale (una región backlog:tasks de un Blueprint que no es lo que las tareas escribirían; Project la arregla). Desactivado de nuevo, la carpeta y sus tareas se quedan donde están, todavía declaradas, y nada del plugin se muestra.