Skip to content
Read in English

Versão

v1.2.28

O que foi entregue, em números

102
PRs integrados
227,637
Linhas adicionadas
93,001
Linhas de código
Código
93,001
Testes
60,867
Docs
73,769
Soma · código + testes + docs
227,637

de 102 integrados

  • bug 32 31%
  • feature 46 45%
  • polish 0 0%
  • docs 15 15%
  • groundwork 3 3%
  • unclassified 6 6%

desde v1.2.27 · tag em

A carta

A carta do fundador, na íntegra

Read in English →

Oi,

Esta versão deixa de fazer três coisas com você. Ela não manda mais você a um terminal para ratificar: toda porta de ratificação agora termina o trabalho onde você já está, numa tela, com um aperto seu, e um passo que pede para você confirmar um briefing agora é uma ação no cockpit, nunca um comando para colar (#7637). Ela não deixa mais uma sprint concluída aberta: uma sprint e o épico dela fecham quando o último ticket fecha, seja qual for o jeito como ele foi fechado, enquanto antes uma sprint podia ficar "ativa" com 12 de 12 concluídos até alguém fechá-la à mão (#7638). E ela não chama mais de bloqueada e travada uma frota ocupada quando os workers estão simplesmente trabalhando (#7643).

A mudança que eu mostraria primeiro é que você pode conectar um banco de dados, e permitir que o assistente de banco de dados o leia, dentro do produto: três passos curtos e um aperto de tecla, sem terminal e sem colar nenhum segredo num chat (#7641). Mais duas coisas merecem o seu tempo. A tela Waves agora é fácil de encontrar: é a primeira tela, a uma tecla do War Room (#7501, #7506). E o módulo de briefing chegou: antes de um play construir qualquer coisa, ele entrevista você, rascunha o que ouviu e só constrói sobre o que você ratificar (#6705). O elenco continua em 52, e três especialistas foram recortados.

Você está entre as primeiras pessoas a rodar esta versão, então esta página foi escrita para você: o que mudou, o que testar primeiro, o que precisa de um passo seu e o que ainda não está pronto. Teste três coisas primeiro: abra um plano ou um estudo na gaveta Documents e escolha Ratify… no menu ⋯ dele (#7504), aperte Q numa sprint do War Room para abrir o Waves nela (#7506) e abra Settings ▸ Databases no cockpit para conectar um banco de dados, se quiser que o assistente de banco de dados leia um (#7641). Depois, feche e abra de novo cada cockpit aberto e o FlowForge Desktop. Se algo quebrar ou parecer errado, responda à carta ou abra um ticket. Uma captura de tela, e a tela em que ela foi tirada, resolve a maioria dos relatos de uma vez.

Um abraço, Alex

Ratifique onde você está, e deixe o trabalho concluído se fechar sozinho. 93 pull requests mesclados, e esta seção cobre todos eles. Toda porta de ratificação agora conclui uma ratificação onde você está: a prévia do desktop, o pop-up de merge do cockpit e o trilho do ACE. A gaveta Documents mostra uma ratificação onde quer que ela tenha sido feita. Uma sprint e o épico dela fecham sozinhos quando o último ticket fecha, seja qual for o jeito como ele foi fechado. Você pode conectar um banco de dados e permitir que o assistente de banco de dados o leia dentro do produto: três passos curtos e um aperto de tecla, sem terminal. O painel Workers deixa de chamar de bloqueada uma frota ocupada. Waves vira uma tela fácil de encontrar: é a primeira tela, a uma tecla do War Room, com a ordem e a largura da fila à vista. O módulo de briefing também chegou. Antes de um play construir qualquer coisa, ele entrevista você, rascunha o que ouviu e só constrói sobre o que você ratificar. O elenco continua em 52, e três especialistas foram recortados. O que precisa de um passo seu, e o que ainda não está pronto, está dito no fim.

Ratifique onde você está

  • 🔴 Toda porta de ratificação conclui a ratificação onde você está. No FlowForge Desktop, os documentos de um briefing ganham a faixa de portão. O Ratify destrava depois que você abre o documento de apresentação naquela revisão. No cockpit, um merge retido por uma ratificação abre o pop-up de decisão, agora com uma variante para um ticket, um briefing ou os dois. Ali, Ratify registra o seu sim e o merge segue. Uma ratificação que você dá ao ACE no chat espera na linha Ratified in chat do trilho, e ctrl+n a confirma, seja qual for o checkout que guarda o briefing. Nenhuma porta conclui só com a palavra de um agente: cada uma exige o ato de uma pessoa numa tela. Um passo que pede para você confirmar um briefing agora é uma ação no cockpit, nunca um comando para colar (#7637).
  • 🔴 Ratifique um plano ou um estudo pela gaveta. Antes disso, um plano ou um estudo que esperava por você não tinha porta de ratificação nenhuma. Agora toda linha da gaveta tem um menu ⋯ com Open e Ratify…. O clique com o botão direito, Shift+F10 e o ⋯ da prévia abrem o mesmo menu. Ratify… abre a oferta da faixa para a versão que está na tela, e nada é registrado até você apertar. Um plano pronto para disparar vai para "Plans ready to fire". Quando o Ratify não pode rodar, o rótulo dele diz por quê, por exemplo "commit your changes first" (#7504).
  • 🔴 Uma ratificação feita fora da gaveta chega até ela. Uma gaveta aberta relê as suas marcas a cada 10 segundos e sempre que você volta a ela. A faixa na tela sai de "waiting" no mesmo instante (#7598).
  • O selo da gaveta distingue três casos: ratificado nesta versão, ratificado numa versão mais antiga (ratifique de novo) e não ratificado. A faixa continua depois de uma ratificação, mostra quem ratificou e diz por qual porta ela passou (#7449).
  • Uma ratificação devida antes de um merge pode ser dada antes do merge. flowforge founder-step open --ticket N abre na gaveta a versão do pull request de cada documento, e ratificar ali marca o passo como feito. A FlowForge não aconselha mais mover o passo para depois do merge, o que nunca poderia dar certo, porque o merge esperava por essa mesma ratificação (#7445).
  • Ratifique um briefing no cockpit. A tela ForgePlay mostra os documentos do briefing apresentado e lista os desenhos dele pela legenda. o abre o conjunto de rascunho e c muda uma resposta enquanto você lê. O primeiro A abre um passo de confirmação que mostra a revisão, as incógnitas conhecidas e a oferta de revisor, e y registra (#6729). Uma tecla no trilho do ACE transforma uma ratificação que você deu no chat numa confirmação no cockpit (#6730).

Sprints e épicos fecham sozinhos

  • 🔴 Uma sprint e o épico dela fecham quando o último ticket fecha, mesmo fora de um merge. Antes disso, eles fechavam só dentro do ciclo de merge, então uma sprint podia ficar "ativa" com 12 de 12 concluídos até alguém fechá-la à mão. flowforge ticket close <N> fecha um ticket e todo contêiner que ele conclui, numa só ação. Um ticket fechado com gh issue close ou no site do GitHub é pego pela varredura do daemon da FlowForge, a cada 15 minutos por projeto registrado. Um contêiner que você reabriu à mão continua aberto, e um contêiner sem filhos nunca fecha. O War Room e o Waves deixam de mostrar uma sprint fechada como ativa, e o Waves nunca mais a oferece (#7638).

Conecte um banco de dados, no produto

  • 🔴 Conecte um banco de dados e permita o assistente de banco de dados uma vez, sem terminal. O cockpit tem uma aba nova em Settings, Databases (que aparece como Data quando a faixa de abas está curta). Cada banco de dados mostra quatro fatos: Listed (listado), Sign-in saved (login salvo), Reading allowed (leitura permitida) e Last check (última verificação). O botão Connect a database leva três passos (onde o banco está, o login, revisar e permitir) e depois um aperto. O aperto salva o login no chaveiro (keychain) do seu sistema e permite que o assistente de banco de dados leia o banco. O login usa por padrão usuário e senha, e a FlowForge monta o link de conexão sozinha, então uma senha com @ : / ? # % simplesmente funciona. Connected só aparece depois que a primeira leitura do assistente dá certo. Toda recusa é uma linha com um próximo passo, dentro do produto. A tela Settings do FlowForge Desktop ganha uma seção Databases, por enquanto sob Terminal appearance, que mostra os mesmos quatro fatos com as mesmas palavras. O flowforge doctor ganha uma linha db-door, e flowforge db-door relata os mesmos fatos sem conectar nem ler nenhum segredo (#7641).
  • Um login que já está no seu chaveiro abre a porta com um aperto confirmado. Antes disso, apertar Enter num login salvo não registrava nada, e a porta continuava fechada. Quando o assistente de banco de dados pede acesso, o banner de passos do cockpit mostra "1 database grant to give", e F abre uma confirmação que nomeia o banco de dados, o login e o motivo. Mais jeitos de escrever um link de conexão são aceitos, e um link que é recusado é nomeado pela forma que a FlowForge viu. Leituras de produção precisam entrar com o papel somente leitura. Um link que tenta trocar o usuário ou o host por meio de suas opções é recusado (#7640).
  • flowforge db target add confere o que você informa. Uma URL passada como --host é recusada, e a recusa nomeia o host simples que deve ser usado. Um login salvo que aponta para outro host, outra porta ou outro banco é recusado, e nada é gravado. Todo checkout e toda worktree de um repositório agora leem uma única lista compartilhada de bancos de dados, e uma lista existente se muda para lá sozinha na primeira vez (#7625).
  • A nova skill flowforge-dba-onboarding ensina esse caminho aos agentes (veja Agentes, abaixo).

O painel Workers diz a verdade

  • 🔴 Uma frota trabalhando não aparece mais como bloqueada e travada. Um worker que espera os próprios agentes em segundo plano aparece como working · 2 agents, e não como blocked · with ACE. Um agente em segundo plano que terminou deixa de contar o tempo. Ele termina sozinho, e um interrompido de propósito mostra ⊘. O ACE não recebe mais avisos "UNABLE TO READ" sobre workers cujos painéis leem bem. A contagem de workers no cabeçalho e as linhas voltam a concordar, inclusive para um worker que começou logo depois de o cockpit reiniciar (#7643).
  • Um worker pensando no meio de um turno nunca aparece como bloqueado. GOAL LOST agora nomeia Alt+G para rearmar o goal (#7459).
  • Um worker que devolve o trabalho ao ACE acorda o ACE e aparece como ◷ with ACE, nunca como um "needs you" chamativo (#7458).
  • Uma onda em espera diz do que ela espera. Por exemplo ≈2 waits on #7501 · remediating · review round 1, na faixa do cockpit e sobre o grupo do bloqueador em Workers. Toda linha de worker vivo mantém o tempo decorrido, e a lane conhecida de uma execução nunca aparece como ∅ (#7600).
  • Duas execuções vivas aparecem como duas ondas. Os workers de cada execução ficam sob a própria letra no painel Workers. Com duas ou mais execuções, a faixa de ondas do cockpit lista uma linha alinhada por execução. Na tela Waves, tab percorre todas as execuções retidas (#7576).
  • Live Reviews abre nas revisões em andamento. c mostra os últimos 7 dias de histórico e volta. As linhas agora usam as cores que a legenda explica (#7592).

Waves, fácil de encontrar

  • 🔴 A visão geral do Waves é a primeira tela sempre que existe alguma coisa, inclusive quando está vazia. Uma fila ainda não lida avisa isso e nunca é mostrada como "no waves" (#7501).
  • 🔴 A uma tecla do War Room. Q abre o Waves na sprint sob o seu cursor: na execução dela, na entrada dela na fila ou no formulário de adicionar com essa sprint já escolhida, então adicioná-la é Q e depois ↵ (#7506). O War Room mostra o que o Waves está fazendo numa única marca só de leitura, ▶ 2 running · 3 queued · Q, e não diz nada quando nada está rodando (#7507).
  • A faixa. O topo da visão geral vira peças: running, needs you, waiting, at once n/max e next. Uma contagem que ainda não foi lida mostra …, nunca 0 (#7509). A faixa e os gráficos são desenhados uma vez por mudança, nunca a cada quadro (#7508).
  • Adicione uma sprint pela tela Waves. a abre o formulário de adicionar a partir de qualquer linha. Um board vazio mostra uma linha de convite, queue empty · a add a sprint. Nenhuma tela manda você à linha de comando para adicionar uma (#7503). Aberto a partir de uma sprint do War Room que não está rodando, o Waves oferece Q para colocá-la na fila ou R para rodá-la ao lado da execução viva (#7448).
  • A ordem e a largura da fila estão à vista. Toda linha em espera traz o seu lugar na fila. A largura aparece como at once 2/4, contra o teto de workers do host. +- e [ ] aparecem onde podem agir (#7505). Settings ganha uma aba Waves: defina quantas ondas rodam ao mesmo tempo e leia todas as outras configurações de ondas num só lugar (#7450).
  • Uma execução iniciada com S é uma linha com letra na visão geral, como qualquer execução na fila (#7502). O cabeçalho de drill-in da execução vira marcas (um medidor de progresso, k/N, o tempo decorrido e uma estimativa) em vez de três linhas de prosa (#7510).
  • Um ticket que espera a sua ratificação depois do merge não deixa mais a onda parada. Ele aparece como merged · awaits ratification, e os tickets que dependem dele seguem em frente (#7630).
  • Uma execução na fila conta os tickets dela como uma execução viva, então o N não pula mais quando a execução começa. Tickets que a sprint fechou antes de a execução começar não são mais contados numa linha da fila (#7511).

O módulo de briefing

  • 🔴 Um briefing antes da construção. O analista de requisitos entrevista você em rodadas de no máximo sete perguntas. Você pode responder, aceitar uma sugestão ou dizer "ainda não sei". Ele rascunha o que ouviu, e você ratifica. O play então constrói só sobre o briefing que você ratificou, na revisão que você leu. Os verbos flowforge brief o conduzem: open, status, round, reply, answer, note, record, assert, ratify, confirm, tweak e handoff (#6705). Por baixo estão as regras e a checagem do briefing (#6699), as rodadas de perguntas (#6700), um formulário em branco para cada play (#6701), a pasta própria do briefing em .flowforge/requirements/<slug>/ (#6702) e as portas que o levam adiante (#6704). A skill flowforge-brief é instalada em toda máquina (#6722). Enquanto um briefing está aberto, uma pergunta destinada a ele é enviada pelas rodadas do próprio briefing (#6723).
  • A sua ratificação é um registro. Ela fica guardada no histórico de auditoria da FlowForge, com as suas próprias palavras, presa à revisão que você leu (#6703).
  • Os plays abrem com o briefing, e ele não pode ser pulado. Os ForgePlays trazem a etapa do briefing e se recusam a seguir sem um handoff ratificado para aquele play (#6706, #6707). O Plan a Feature pede o briefing uma vez. O portão posterior dele mostra o briefing ratificado só para leitura e pergunta apenas sobre o que foi construído em cima dele (#6735). Landing Page (#6733), Legacy Analysis, que pode apontar para qualquer repositório ou branch (#6736), e Go-to-Market (#6734) também abrem com ele. O play launch-product ganha a sua etapa de briefing (#6737). flowforge feature start abre ou retoma o briefing da feature, e flowforge feature produce exige o handoff dele (#6732).
  • O que um briefing entrega a você. Um documento de apresentação e um deck no mesmo visual, iguais para o rascunho e para a versão final (#6713, #6708). A etapa de apresentação confere que toda seção está lá, em ordem, rastreada até as suas palavras, com as incógnitas listadas (#6709). O conjunto imprime: o índice técnico cabe numa página e o deck imprime um slide por página (#6716). Desenhos do fluxo central, do escopo, dos envolvidos e dos riscos são renderizados com o briefing, e um desenho que não consegue ser renderizado diz por quê no lugar dele (#6710, #6711).
  • Acabamento, tradução, auditoria. flowforge brief polish produz o conjunto final só a partir da revisão ratificada, nos dois temas, sem mudar uma palavra (#6718). flowforge brief translate faz uma tradução marcada da revisão ratificada. As citações ficam na língua em que foram ditas, e uma tradução nunca segura nada (#6719). As páginas trazem a sua língua, e todo rótulo é renderizado em inglês, português (Brasil) e espanhol (#6714). flowforge brief audit relata qualquer briefing sobre o qual se construiu sem uma ratificação válida, e o flowforge doctor ganha as linhas brief-complete e brief-module (#6724).
  • Um segundo leitor opcional. Cada apresentação oferece uma revisão nova pelo analista de requisitos. Ela demora mais, e a qualidade é melhor. A sua escolha fica lembrada na configuração brief.reviewer (#6721).
  • No cockpit. A entrevista tem uma superfície própria: um trilho de cobertura, o lote atual de perguntas, uma fita de cobertura e um rascunho para cada pergunta. As suas respostas são gravadas à medida que você as dá (#6728). A revisão e a ratificação estão cobertas acima (#6729, #6730).
  • Texto que um time ou um investidor consegue ler. A nova skill flowforge-layperson-copy escreve a apresentação em palavras simples (#6717). O analista de requisitos ganha três modos para o briefing (#6720). Os dois estão no bloco de Agentes, abaixo.
  • Correções achadas ao rodar o módulo sobre o próprio briefing. Um desenho que ainda guarda um espaço de modelo como [step 1] é recusado na apresentação, com o espaço e a correção nomeados (#7585). Uma seção do deck pode continuar num segundo slide numa quebra --- (#7586). Todo valor no bloco de título de um desenho cabe na sua célula (#7587).

Teclas que se comportam

  • 🔴 Esc e ⌘F não fecham mais o FlowForge Desktop. Qualquer uma das teclas podia derrubar o app, e a janela simplesmente desaparecia. As duas teclas agora funcionam como deveriam (#7424).
  • Atualize o ACE e faça o handoff enquanto você digita. Digite /refresh ou /handoff sozinho na linha do composer, ou aperte F6 ou F7 no meio de um rascunho. As duas abrem a mesma confirmação de antes (#7425).

As cartas de versão e a própria versão

  • Toda carta de versão traz as suas imagens, nomeia os seus agentes e abre com uma citação com fonte. A carta da v1.2.27 saiu sem as imagens: uma configuração que deveria só impedir que as imagens fossem embutidas também apagava as hospedadas. As imagens hospedadas agora ficam, e uma carta sem nenhuma imagem na tela é recusada antes de ser enviada (#7589).
  • O corte de um único sim. flowforge release cut --dry-run confere toda linha do pré-voo numa única passada e imprime toda lacuna com a sua correção. Ele constrói e verifica o branch da versão e roda os testes observados (#7451).
  • Duas correções do corte da v1.2.27: os números de versão da v1.2.27 no site foram preenchidos (#7415), e a seção completa da v1.2.26 destas notas foi restaurada, para que os links da carta da v1.2.26 caiam no lugar certo (#7417).

Mais estável por baixo do capô

  • Um merge não fica mais retido para uma pessoa porque a pasta de um worker que já terminou ainda estava sendo apagada. Uma worktree agora sai em um único passo (#7474).
  • Atualizar o armazenamento de histórico local da FlowForge não falha mais num armazenamento em que flowforge audit-recompute-costs --apply foi rodado (#7493).
  • Os painéis deixam de ficar em branco com "could not infer owner/repo" enquanto o GitHub ainda tem chamadas sobrando. O ritmo compartilhado segue o orçamento real do GitHub, e uma leitura com ritmo controlado diz que foi controlada (#7447).
  • As conclusões de uma revisão chegam ao worker mesmo depois de ele ter enviado um head mais novo, em vez de serem relatadas como não entregáveis (#7446).
  • O banner de passos que esperam por você mostra uma linha por ticket, em palavras simples e com uma ação. Por exemplo: #6738 needs you · 3 documents to ratify · holds the merge · F open (#7444).
  • O relógio CONTEXT fica dentro do medidor de qualidade de contexto do ACE. O timer de sessão da FlowForge não muda (#7477).

Colado

Colado é um termo do jiu-jitsu — uma posição está colada quando está justa, perfeitamente ajustada, sem espaço, com pressão total — e é o nome da família de portões da FlowForge que não deixam espaço entre a regra e o trabalho. Esta versão fecha estas brechas:

  • Uma ratificação não pode mais ser concluída só com a palavra de um agente. Toda porta exige o ato de uma pessoa numa tela (#7637).
  • Uma permissão de banco de dados não pode mais ser registrada sem um aperto confirmado. Um link de conexão não pode mais trocar o login ou o host por meio de suas opções (#7640).
  • Uma sprint concluída não pode mais ficar aberta porque o último ticket dela fechou fora de um merge (#7638).
  • Uma carta de versão não pode mais sair com as imagens apagadas (#7589).

Estudos, registros e alicerces

Nada disto muda o que você roda. Cada item aparece aqui só como o que é.

  • Estudos: ondas fáceis de encontrar, e números do War Room e do Gantt que você consegue ver (#7452). Componentes de dados para o design system (#7453). Por que digitar para o ACE fica lento com muitos workers, medido (#7455). Uma revisão do banco de dados, com os passos que ela precisa de você (#7602).
  • O briefing do próprio módulo de briefing, conduzido pelo módulo já construído, apresentado (#6740, PR #7582), e a ratificação dele registrada (#6740, PR #7636). O módulo contado como uma história, em inglês e em português (Brasil) (#7588). Um pacote de vídeo e artigo, "What is FlowForge" (#7594).
  • Registros de design do módulo de briefing: a especificação visual do tema da apresentação (#6712), a composição do cockpit (#6726), a especificação das telas do cockpit (#6727) e ponteiros dos registros mais antigos (#6738). O ADR-0100 fica registrado como substituído (#6739).
  • Alicerces: entradas de espaço reservado nunca podem contar para a checagem de um briefing (#6731). Um briefing inteiro rodado numa máquina limpa é testado para igualar o de uma máquina de desenvolvimento (#6725). Dois pull requests levaram a main para a linha 1.3.0 (#7421, #7423).

Agentes — 52, sem mudança na contagem: três especialistas recortados

  • Alterado fft-requirements-analyst (1.0.0 → 1.1.0) — ganha três modos para o módulo de briefing: rodadas de entrevista, um rascunho com fontes citadas e uma revisão a frio opcional. Ele faz no máximo sete perguntas por rodada em todos os modos e nunca diz quantas perguntas ou rodadas ainda faltam (#6720).
  • Alterado fft-content-strategist (2.0.0 → 2.1.0) — escreve o documento e o deck que você mostra a um time ou a um investidor, com a nova skill flowforge-layperson-copy: palavras simples, nenhum identificador no corpo do texto, cada palavra rastreada até o briefing (#6717).
  • Alterado fft-release-engineer — toda carta de versão precisa trazer uma imagem do que foi entregue, nomear todos os agentes deste bloco e abrir com uma citação com fonte; uma carta enviada com as imagens apagadas agora é uma regressão em que ele para (#7589).
  • Skill nova flowforge-dba-onboarding, levada por fft-dba e fft-database-architect: conectar um banco de dados e permitir o assistente de banco de dados é um único ato no produto — Settings ▸ Databases —, nunca um comando de terminal nem um segredo colado no chat (#7641).

Um passo de configuração

  • Feche e abra de novo cada cockpit aberto e o FlowForge Desktop depois de atualizar, para que as novas portas de ratificação, as telas Waves, as leituras do painel Workers e a aba Databases sejam as que estão rodando.
  • Opcional: conecte um banco de dados em Settings ▸ Databases, no cockpit, se quiser que o assistente de banco de dados leia um (#7641).

Ainda não

  • A seção Databases do FlowForge Desktop só lê. Ela não tem campo de login, então o login e o aperto acontecem no cockpit, e o desktop mostra o resultado. Hoje ela fica dentro do painel Terminal appearance; uma seção própria em Settings vem depois desta versão (#7650).
  • Uma leitura de banco de dados recusada ainda não leva você a Settings ▸ Databases por conta própria. Essa tela está pronta para abrir na linha certa, mas nada leva você até ela ainda (#7649).
  • A tela Connected não mostra o que a primeira leitura encontrou (#7641).
  • Um worker deixado parado por mais de 30 minutos ainda pode fazer o recap do ACE ler os workers como UNKNOWN. Mudar isso é uma decisão de política, deixada de fora desta versão de propósito (#7643).
  • O corte de um único sim está construído só em parte. A simulação em uma única passada já saiu. Outros itens do mesmo ticket ainda estão por fazer, entre eles a validade da atestação, a checagem de alcance da notarização e um down-merge automático depois de uma parada antecipada (#7451).

Atualizar

  • flowforge update numa instalação existente, ou curl -fsSL https://get.flowforgesoft.com/install.sh | sh para uma nova. Os dois gravam o mesmo binário de release em /usr/local/bin e em ~/.flowforge/bin, juntos. flowforge update --repair reinstala os arquivos instalados sem a rede. Depois, feche e abra de novo cada cockpit aberto.

Os números desta página são uma leitura pontual: flowforge release stats v1.2.28 --ref origin/release/1.3.0 no head nomeado em NUMBERS.md §1 (c8172c4b8), intervalo v1.2.27..origin/release/1.3.0, 3 dias corridos. A v1.2.28 ainda não tem tag, então estas cifras são derivadas de novo na tag, antes do corte.

v1.2.28 — 102 PRs, 228k lines, made with FlowForge