Skip to content
Read in English

Versão

v1.2.30

O que foi entregue, em números

126
PRs integrados
170,792
Linhas adicionadas
60,912
Linhas de código
Código
60,912
Testes
83,142
Docs
26,738
Soma · código + testes + docs
170,792

de 126 integrados

  • bug 26 21%
  • feature 56 44%
  • polish 0 0%
  • docs 24 19%
  • groundwork 3 2%
  • unclassified 17 14%

desde v1.2.29 · tag em

A carta

A carta do fundador, na íntegra

Read in English →

Oi,

Na 1.2.29, um dia que a FlowForge não tinha lido podia ser desenhado como zero (#7537, #7538), uma sessão que uma máquina fechou tarde podia cobrar tempo que ninguém trabalhou (#6946, #5305), e uma execução do Waves podia ficar parada sobre vagas livres com tickets prontos (#8132). Esta versão trata de uma coisa só: os números que você recebe, na tela e numa fatura, agora dizem o que sabem.

O que eu mostraria primeiro é a tela Stats reconstruída. Ela põe as horas que você passou à mesa ao lado das horas que as suas sessões entregaram, mostra o custo de IA do mês com quantas sessões esse número cobre e diz quando o GitHub foi lido pela última vez (#6098).

Teste três coisas primeiro: aperte P para o Stats e depois p para as suas horas por projeto (#6098); aperte enter numa linha de épico ◉ no War Room (#6160); e, com duas execuções rodando, aperte Tab até a linha de ondas ficar com o foco (#7981). Numa máquina ocupada, os workers agora deixam a CPU primeiro para você (#7542, #7550, #7556). Depois, feche e abra de novo cada cockpit aberto e o FlowForge Desktop. Antes de começar, leia Ainda não no fim: um limite que a carta da 1.2.29 disse que esta versão corrigiria continua em aberto (#7916). 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

Números que dizem o que sabem, e Waves que preenche todas as vagas livres. 113 pull requests mesclados desde a 1.2.29. A tela Stats foi reconstruída. Ela põe as horas que você passou à mesa ao lado das horas que as suas sessões entregaram, mostra o custo de IA do mês com quantas sessões esse número cobre, dá as suas horas por projeto e diz quando o GitHub foi lido pela última vez. Um dia que a FlowForge não conseguiu ler agora diz isso, em vez de desenhar um zero. O tempo que nenhum trabalho sustenta deixa de ser cobrado: uma sessão que uma máquina fechou cobra até o último evento real mais dois minutos, e uma sessão fechada não pode mais registrar mais tempo do que o próprio intervalo. Uma execução do Waves agora reabastece as vagas à medida que os workers terminam, uma sprint em espera mostra o plano dela e um épico abre o próprio board em todas as sprints. Numa máquina ocupada, os workers agora deixam a CPU primeiro para você. O elenco chega a 53 com fft-lifecycle-marketer. O que ainda não está pronto está listado no fim, inclusive o que a 1.2.29 disse que esta versão corrigiria.

A tela Stats, reconstruída

  • 🔴 O seu dia, multiplicado. O primeiro cartão põe as suas horas de relógio ao lado das horas entregues nas suas sessões, e o fator entre as duas, por exemplo This month · 11.2h wall-clock · 132.3h delivered · ×11.8 (#6098).
  • 🔴 O custo de IA, com o que ele cobre. Uma linha dá o custo do mês e a população por trás dele: ◇ AI cost $412.80 this month · 61 of 902 sessions carry a cost (6.8%) · 14 calls unpriced. O número nunca esconde em quão poucas sessões ele se apoia (#6098).
  • Horas por projeto. p lista todos os projetos do período com as horas entregues de cada um, cada sessão creditada ao projeto em que começou, (no project) incluído (#6098).
  • Quando o GitHub foi lido pela última vez. Os totais terminam com GitHub fetched 14:32 · device data live, ou dizem que uma atualização falhou e que a última leitura boa foi mantida, ou que nada pôde ser lido. O ponteiro ▸ open the desktop pane for the team view indica onde ficam os números da equipe (#6098).
  • Um dia não lido diz "not read", nunca zero. Os pull requests mesclados de um dia dizem PRs not read yet até o GitHub responder, e, depois de uma boa leitura, um dia sem sessão é um 0 h medido. As primeiras comparações com o período anterior são feitas no mesmo ponto dele (#7537).
  • Em larguras estreitas, as tendências diárias são barras que distinguem um dia ausente de um zero: ▁ é um zero medido e · é um dia não lido. As horas por dia também são desenhadas ali, e a linha em que elas ficam, que nunca era renderizada antes, agora é (#7538).

O tempo que nenhum trabalho sustenta deixa de ser cobrado

  • 🔴 Uma sessão que uma máquina fechou cobra até o último evento real, mais dois minutos. Antes, uma sessão de worker em que ninguém mexeu cobrava o intervalo inteiro até um fechamento em lote posterior. Um timer que você mesmo inicia e para continua cobrando o intervalo inteiro. As faturas leem o mesmo intervalo, então o total cobrado de uma fatura pode cair exatamente por essa cauda sem sustentação (#6946).
  • 🔴 Uma sessão fechada não pode mais registrar mais tempo do que o próprio intervalo. O cockpit continuava gravando heartbeats em sessões que já tinham fechado. Essas gravações agora são recusadas. Ao atualizar, o seu armazenamento local repara toda sessão fechada acima do próprio intervalo e guarda os valores originais de cada linha numa tabela de registro (ledger), e o próprio armazenamento limita qualquer gravação posterior. As horas cobradas não mudam; as horas-agente divulgadas podem diminuir (#5305).

Waves preenche todas as vagas livres

  • 🔴 Uma execução reabastece as vagas à medida que os workers terminam. Uma execução podia manter tickets prontos ao lado de vagas livres e não disparar nenhum por horas. Agora ela os dispara conforme as vagas se liberam, um ticket já mesclado na linha da versão nunca é disparado de novo, e uma execução que fica 10 minutos sobre vagas livres diz isso uma vez, na faixa do ACE (#8132).
  • 🔴 Uma sprint em espera é uma linha de verdade. A linha dela mostra as ondas e os tickets, enter abre o plano dela somente para leitura com S start now, e b abre o board da sprint sob o cursor, não o da que está rodando (#8111).
  • O board do Waves ordena as linhas por estado. Execuções em andamento e execuções que precisam de você ficam acima do divisor, sprints em espera abaixo dele, na ordem da fila, e execuções terminadas ficam em History. Um movimento posiciona uma sprint só entre as que estão em espera. Iniciar uma sprint cuja execução parou retoma essa execução, com a letra dela. c minúsculo em History limpa só as execuções concluídas (#7978).
  • A linha de ondas é uma parada de foco. Com duas execuções ou mais, Tab chega a ela; < > escolhem a execução, ↑ ↓ percorrem as linhas e enter a abre. Toda execução viva que couber é mostrada (#7981).

O épico como escopo próprio

  • 🔴 enter numa linha de épico ◉ abre o board do próprio épico: todo filho em todas as sprints e os que não têm sprint, cada cartão marcado com a sua sprint quando o épico atravessa mais de uma. W mostra as ondas dele, e um filho que espera por um ticket de fora do épico é marcado com ◂ waits for #B. esc volta à linha em que você apertou (#6160).
  • O caminho crítico de um épico diz PARTIAL quando um membro espera por um ticket de fora do épico, e o nomeia: PARTIAL — #18 waits on #40 outside this epic (#6162).
  • U pede o responsável pelo épico, que passa a ser o assignee dele e aparece ao lado de ◉ EPIC (#7174).
  • Alicerces para épicos: uma execução registra o épico que ela conduz (#6161), o board e o início leem um único conjunto de arestas (#6159), e o roadmap tem uma única mensagem tipada de abertura (#7904).

Sua máquina continua sua enquanto os workers rodam

  • No macOS, as ferramentas de um worker rodam na faixa de segundo plano; o próprio Claude não, então o início do próprio worker não é atrasado (#7542). O servidor tmux e o daemon começam fora dessa faixa (#7554). No Linux, o escopo do worker pesa CPU e disco a seu favor, ou recorre a nice quando não há systemd (#7556).
  • Os builds e testes em Go dividem um único orçamento do host inteiro: um shim go no caminho de cada worker distribui ncpu − 2 fichas, com as equipes de revisão primeiro (#7550, #7551).
  • Um processo de hook por chamada de ferramenta em vez de um por portão (#7546), cada guarda registrado uma só vez (#7541), e um verbo de guarda começa mais barato (#7547).
  • Os worktrees novos ficam sob um único diretório pai, ~/.flowforge/worktrees/. flowforge worktrees stale e a linha stale-temp-worktrees do doctor listam worktrees temporários antigos e só os removem com a sua confirmação (#7555).
  • Uma equipe de revisão que espera pela trava dos testes ou cabe no seu tempo ou diz isso na hora, e a espera dela não consome mais o tempo da revisão (#7552, #7553).
  • O daemon agora mede o quanto a sua máquina está ocupada, e só registra isso; nada é recusado com base nessa leitura ainda (#7548).

A FlowForge Monthly e as cartas de versão

  • A FlowForge Monthly, uma carta separada destas cartas de versão, tem página própria em flowforgesoft.com/newsletter, com uma versão em português: a promessa, a data do próximo envio, o formulário de inscrição e o arquivo (#7822, #8083, #8274, #8270). Ao se inscrever, registra-se o seu idioma e um e-mail de confirmação é enviado na hora; um clique confirma (#7811, #7812, #7810, #7814, #7815, #7819). A caixa começa desmarcada e nomeia a carta (#7818). O formulário é limitado por endereço e verificado contra robôs sem custo para uma pessoa (#7813). A página de cancelamento de inscrição nomeia as duas cartas (#7823). A página de privacidade diz o que a carta guarda e quem responde por isso (#7816). Cada edição tem página própria, e cada idioma tem um feed (#7821, #7833).
  • Nenhuma tag de publicidade dispara para um visitante da UE ou do EEE, seja qual for a escolha de consentimento (#7825).
  • Para um projeto que envia as próprias cartas: uma carta é nomeada por um id de pacote com o seu tipo (#7826). flowforge newsletter digest <YYYY-MM> conta um mês (#7828). Uma carta de versão vai para as contas, e uma edição vai também para os assinantes (#7829). Todo promote deixa uma linha datada que flowforge release promote audit imprime (#7827). A dupla de agentes e o "Você sabia?" nunca se repetem nas duas séries (#7830). O portão e a pré-checagem conhecem uma edição mensal (#7832, #7834), cujo e-mail tem um cabeçalho (masthead) em texto vivo e uma versão gêmea em texto simples (#7831). As palavras de consentimento vêm nos dois idiomas (#7817), uma reconfirmação vai para as contas que nunca compraram (#7837), devoluções (bounces) e reclamações entram no registro de entrega (#7846), e as entradas e saídas da lista (#7835) e as visitas vindas de uma edição (#7845) são lidas de fontes próprias, nunca adivinhadas.
  • flowforge version bump aconselha e nunca cria tag. A preparação da versão agora nomeia o corte e a única porta de tag, flowforge release tag (#7898).

Componentes de dados

  • Um único conjunto de componentes de dados para o terminal, o site e o app desktop: o cartão de KPI, o chip de variação (delta), as barras de spark, a barra de progresso e o medidor, o gráfico bullet, os tiles de status, a faixa de estado e o cabeçalho de abas segmentado. Cada um carrega "desconhecido" como desconhecido, e os três ambientes foram conferidos contra um único contrato compartilhado (#7519, #7520, #7521, #7522, #7523, #7524, #7525, #7526, #7527, #7528, #7529, #7530, #7531, #7533, #7534, #7536). As amostras (specimens) deles, para o terminal (#7532) e para a web (#7535), e o capítulo deles no manual de design da TUI (#7539).

Mais estável por baixo do capô

  • A palavra destacada do resumo falado acompanha a voz, no ritmo medido de cada voz, e só começa quando o áudio começa (#7543).
  • Um portão do fundador declarado nunca se resolve em nada, em toda porta de merge (#8012).
  • Um worker cujo painel ainda está sendo desenhado nunca é relatado como ilegível (#7544).
  • Um merge em outro repositório não faz mais down-merge nas linhas deste checkout (#7877).
  • Os pull requests mesclados são contados uma vez cada nos totais da nuvem, pelo commit de merge, com o histórico recalculado (#5381). Uma máquina é uma identidade na exportação para a nuvem, e não uma por inicialização (#5776).
  • As capturas de tela de referência carregam números de exemplo inventados, e uma guarda impede a entrada de números reais (#8047).
  • Correções trazidas da main: o Go toolchain da auditoria de dependências e a citação de uma alegação do site (#7936), e a página de roadmap do site (#7959) (#7964, #7969, #7975).

Estudos, registros e alicerces

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

  • A especificação e os contratos da tela Stats: a tela do terminal especificada (#6087), o contrato de dados do snapshot e da janela (#6088), as quatro consultas de produção somente leitura (#6084) e o registro de entrega de custo (#6086).
  • O brief de medição dos componentes de dados (#7518).
  • A FlowForge Monthly, edição 1: o pacote em inglês e em português e as suas rodadas (#7843, #8281, #8286), o digest do mês e os itens entregues (#7842), as alegações que ela pode fazer (#7841), as notas científicas dela (#7839, #7840), a checklist do dia do envio (#7844), o rascunho do explicativo e a postura de canal (#7847), o brief de schema da lista e o relatório de operação (#7809, #7808), a ativação (#7824), a leitura do DNS de e-mail (#7836), a concessão permanente para o e-mail de confirmação (#7820) e a cerimônia do vínculo de identidade, que espera por duas migrações (#5834).
  • O estudo da página de roadmap, portão 1 (#7970).
  • Estas notas de versão e a carta (#8306).

Agentes — 53: um adicionado

  • Adicionado fft-lifecycle-marketer — é responsável pelo programa de e-mail sob o head de marketing: cada edição da newsletter montada a partir das lanes que cuidam de cada parte, a saúde da lista lida com o analista de dados, a checklist do dia do envio, jornadas e entregabilidade. Ele faz o briefing das palavras e nunca envia; quem envia é você. O head de marketing e os outros agentes ligados a ele agora passam o trabalho de e-mail para ele (#7838).

Um passo de configuração

  • Feche e abra de novo cada cockpit aberto e o FlowForge Desktop depois de atualizar, para que a nova tela Stats, a linha de ondas e o board de épico sejam os que estão rodando.

Ainda não

  • Com muitas execuções ao mesmo tempo, uma execução ainda pode esperar por uma vaga que um worker já terminado segura, e uma execução iniciada pela linha de comando pode não começar. As notas da 1.2.29 disseram que isso seria corrigido na 1.2.30. Ainda não: a #8132 corrigiu uma causa, e o resto continua em aberto (#7916).
  • S e F no board de um épico ainda não iniciam nem disparam o épico; eles dão a resposta "nothing started" (#6160).
  • A leitura de máquina ocupada é registrada, não usada para agir (#7548).

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.

v1.2.30 — 126 PRs, 171k lines, made with FlowForge