Decisions
O plugin Decisions guarda o que foi decidido sobre os Blueprints (os planos) como registros próprios: um arquivo markdown por decisão na pasta decisions/ da raiz, cada uma tomada para os Blueprints e as tarefas que nomeia pelos ids permanentes. Uma decisão não é um Blueprint nem uma tarefa: nunca é um item de coleção, nunca é verificada como um, nunca está no índice. Ela é pequena, mais perto de um comentário do que de uma tarefa: um título que diz o que foi decidido, um tipo, um status, quem a registrou e notas sobre o porquê. Um agente que decide algo por conta própria enquanto trabalha a registra como si mesmo, para o dono do framework confirmar. Desligado por padrão; eidos plugin enable decisions o liga e declara a pasta.
No navegador
Seção intitulada “No navegador”- Decisions, uma atividade na barra de atividades com a contagem de decisões por confirmar no seu ícone: All decisions, Unconfirmed (a caixa de entrada, com a sua contagem), Assigned to me (as decisões por confirmar passadas para você, com a sua contagem), as visões salvas da tabela em Decision views, By status, By type e as configurações no pé.
- A tabela de Decisions: uma linha por decisão com o seu tipo como ícone antes do título e o seu id, o seu status e o seu responsável alterados na linha, quem a registrou, os Blueprints e os dias de criação e de confirmação. Ela filtra por categoria, status, tipo, responsável, Blueprint e quem registrou, com uma caixa de busca à frente dos filtros como em toda tabela, e qualquer filtro é guardado como visão compartilhada ou privada com Save as view. Um clique com o botão direito em uma linha abre o seu menu: Open, Open as a page, Confirm, Assign to me, Copy id, as saídas para o arquivo, e Delete.
- Uma decisão abre em um modal a partir da tabela ou de um Blueprint, com Expand para a sua própria página, construída como o leitor de uma tarefa: as propriedades editadas no lugar, as notas em Reading e Editor, o arquivo como Source, Confirm enquanto está por confirmar, e as threads do Comments no pé.
- No Home, Decisions assigned to you lista as decisões por confirmar passadas para você, para que uma que cabe a você confirmar ou sobre a qual cabe a você agir apareça ali; quando é confirmada ou posta de lado, sai do cartão.
- New decision, a partir da página ou da atividade, pede o tipo e a decisão em uma linha, depois cria o arquivo e o abre.
- Em um Blueprint, cada região
decisions:logé desenhada como a lista viva das decisões tomadas para ele, com Confirm em uma por confirmar e Log a decision, que registra uma para o Blueprint no primeiro tipo da seção. Decisions, uma visão na barra lateral auxiliar, lista as do Blueprint aberto. - A página de configurações do plugin tem os status (cada um com a sua categoria e a sua cor), o status padrão, os Decision types (um nome, um título, um ícone, uma cor e para que serve) e o tipo padrão.
O arquivo da decisão
Seção intitulada “O arquivo da decisão”Frontmatter: id (o id permanente da decisão, D- e quatro caracteres como o de uma tarefa é T-, dado quando ela é criada e nunca alterado), title (a própria decisão, em uma linha), type (um que a raiz declara), status, author (o alias do usuário da raiz que a registrou, o do próprio agente quando um agente a registrou), assignee (os alias dos usuários da raiz a quem é passada, para a confirmar ou agir sobre ela), blueprints (os ids dos Blueprints para os quais foi tomada), tasks (os ids das tarefas do Backlog para as quais foi tomada), created, updated, confirmed (o dia em que passou para um status confirmado) e confirmed_by (quem a levou até lá), e qualquer propriedade que a raiz declare nas configurações do plugin.
O corpo são as notas: por quê, o que mais foi pesado, o que ela descarta. Ele não tem seções que a raiz declare. O nome do arquivo segue o título, e um comando pega uma decisão pelo id ou pelo nome do arquivo. Uma decisão é um anfitrião do Comments endereçado pelo seu id (decisions:D-…); uma thread sobre ela, e uma @menção na thread, é como se pergunta a alguém sobre ela.
Tipos e status
Seção intitulada “Tipos e status”types mantém separadas as espécies de decisão, para que uma decisão de desenvolvimento que um agente tomou por conta própria nunca seja confundida com uma de escopo ou com uma que uma reunião encerrou. Cada um é um nome (o type da decisão), um título, um ícone e uma cor, e um significado. Uma raiz começa com três:
- Development: como é construído, uma abordagem, uma biblioteca ou uma troca escolhida ao construí-lo. Um agente registra uma que tomou por conta própria.
addo usa quando nenhum tipo é dado (default_type). - Scope: o que entra e o que fica de fora, um comportamento prometido ou abandonado, um limite traçado.
- Meeting: o que uma reunião encerrou, registrado a partir das notas dela por quem as tiver.
statuses é a lista ordenada da raiz, cada um em uma de três categorias (status_categories): unconfirmed (esperando por quem decide: a caixa de entrada), confirmed ou closed (posta de lado sem ser confirmada). Um status não nomeado é unconfirmed. Um status que passa para a categoria confirmed põe em confirmed o dia e em confirmed_by quem a levou até lá; sair dela apaga os dois. O padrão é Proposed, Confirmed, Rejected e Superseded, e uma decisão nova cai em default_status, Proposed. Não há prioridade.
Onde um Blueprint mostra as suas decisões
Seção intitulada “Onde um Blueprint mostra as suas decisões”Nas configurações do Framework (a estrutura), em Templates, cada seção de um template (o modelo) tem um tipo ao lado do seu título: Text, o padrão, Decisions ou Tasks (onde o Backlog lista as tarefas que servem o Blueprint), cada um oferecido enquanto o seu plugin está ligado. Uma seção Decisions nomeia os tipos de decisão que mostra (nenhum é todos os tipos), mantém a sua intenção (o significado de um tipo preenche uma vazia) e qualquer conteúdo padrão, e escreve uma região no fim do seu corpo:
## Constraints & Decisions
<!-- decisions:log types=development,scope --><!-- /decisions:log -->Um Blueprint criado a partir do template carrega a região sob esse título, e o plugin escreve nela, depois de qualquer mudança, cada decisão tomada para o Blueprint: cada uma na primeira região que recolhe o seu tipo, como uma linha com o título ligado ao arquivo, o id, o status e o autor, marcada depois de confirmada. Uma decisão cujo tipo só uma seção que o Blueprint não tem recolhe ganha essa seção, com o seu título adicionado na ordem do template; uma cujo tipo nenhuma seção do template recolhe não aparece em lugar nenhum do texto, só na visão Decisions ao lado do Blueprint. Um Blueprint sem decisões e sem região não é tocado. O vínculo vive na decisão; nunca digite dentro da região.
Em disco
Seção intitulada “Em disco”decisions/(ou qualquer pasta declaradaowned_by: "@decisions/records"): as decisões, um arquivo cada. A raiz →.eidos/plugins/decisions/settings.yaml, partilhado:statuses,status_categories,status_colors,default_status,types,default_typeeproperties. As propriedades de decisão próprias da raiz são declaradas aqui à mão por enquanto.
A partir do shell
Seção intitulada “A partir do shell”eidos decisions # every decision, grouped by categoryeidos decisions --unconfirmed # the inbox; --status, --type, --blueprint, --task, --author, --assignee, --where key=value, --search, --jsoneidos decisions add "Cache the index in memory" --type development --for @search --task T-4KQ7 --notes "Why, and what else was weighed" --as platoeidos decisions show D-7M2P # a decision by its id, or by its file nameeidos decisions set D-7M2P --status Rejected # --title, --type, --for, --task, --assignee, --notes, --property name=valueeidos decisions confirm D-7M2P D-9XQ4 # to the first confirmed status; --aseidos decisions types # the types and what each is for; statuses lists the statuseseidos decisions project # rewrite every decisions:log region that drifted; or one blueprinteidos decisions remove D-7M2P # delete a decision, as the page's Delete doesTodo comando aceita --json. Uma escrita é assinada com --as <alias>, senão com EIDOS_USER, senão com o usuário que age, e o alias é guardado como o author da decisão (ou o seu confirmed_by); um alias que não é de ninguém é recusado com o eidos users add que o cria. Cada escrita põe updated na data de hoje.
Um agente registra uma decisão que tomou ele mesmo no momento em que a toma, como si mesmo, ligada aos Blueprints e às tarefas que ela afeta: ele se adiciona uma vez com eidos users add "<Seu nome>" --alias <alias> --agent quando eidos users não o lista, e passa --as <alias> em cada add. Ele nunca confirma, rejeita ou muda o status de uma decisão que registrou; isso é o dono quem faz.
O que a verificação relata
Seção intitulada “O que a verificação relata”decisions/blueprint-missing (uma decisão nomeia um Blueprint que a raiz não tem), decisions/task-missing (uma tarefa que o backlog não tem), decisions/status-unknown, decisions/type-unknown, decisions/id-missing, decisions/id-duplicate (dois arquivos com um mesmo id) e decisions/region-stale (um Blueprint cujas regiões decisions:log não são o que as suas decisões escreveriam; Project o corrige). Desligado de novo, a pasta e as suas decisões ficam onde estão, e nada do plugin roda.