Destaques
O uso agora contabiliza cada hora em que seu período de faturamento vigora, garantindo que o total de créditos na sua página de Uso e Limites cubra o período desde o primeiro segundo. As organizações receberam o acompanhamento que faltava na semana passada: a pessoa adicionada é notificada, o proprietário do plano pagante também, e o seletor de funções finalmente descreve as permissões de cada cargo. Além disso, revisamos o Dashboard e reescrevemos as mensagens que tinham sido pensadas para nós, e não para você.
Novidades
Cada hora do seu período conta
Seu período de faturamento começa no segundo exato em que você se cadastrou. O uso é medido em intervalos fixos. Essas duas variáveis quase nunca coincidem, portanto a aritmética que mapeia uma na outra precisa ser precisa nas extremidades.
Agora ela é. O período é dividido em blocos inteiros com a resolução mais precisa disponível para cada parte, sem divisões parciais e sem contagem dupla. Todos os três pontos que consultam o uso compartilham a mesma implementação, o que representa a correção real. Manter três cópias do mesmo cálculo é a razão pela qual uma delas acaba falhando.
O que você vai notar: cada número na página de Uso e Limites aparece um pouco maior do que na semana passada. O tráfego é o mesmo, mas a contagem está mais completa. Ninguém foi empurrado para fora dos limites do plano por conta dessa alteração. A mesma aritmética controla sua cota, logo ela impactava em ambas as direções.
Ninguém entra em uma organização em silêncio
As organizações chegaram na semana passada e já era possível adicionar um colega, atribuir uma função e permitir o uso de chaves pagas pela empresa. O que não era possível era notificá-lo. A dica abaixo do formulário sugeria que você mesmo fizesse isso.
Agora são dois emails. A pessoa adicionada recebe uma mensagem com o nome da organização, quem a adicionou, o que sua função permite fazer e como sair caso não esperasse por isso. O proprietário recebe um email quando alguém entra, já que as chaves da organização são cobradas no plano dele e uma pessoa a mais consumindo créditos é assunto dele, não uma cortesia. Nenhum email é enviado para quem clicou no botão. Você não precisa de um comprovante para a sua própria ação.
A notificação do proprietário é disparada em ambos os fluxos: quando alguém é adicionado diretamente e quando um convite é aceito no primeiro login, situação em que não há intermediário porque o próprio usuário concluiu o acesso.
As funções agora também são explicadas. Uma linha abaixo do seletor é atualizada conforme você escolhe, e a coluna de Funções inclui uma tooltip cobrindo as três opções, incluindo a de proprietário. Ter que escolher entre "Membro" e "Admin" sem saber o que cada um faz é a razão pela qual privilégios de administrador acabavam sendo concedidos por padrão.
Um único passo para adicionar um colega
Digite um endereço de email e clique em Adicionar. Se a pessoa já usa o FourA, ela entra imediatamente. Se não usa, enviamos um convite por email e ela terá acesso assim que fizer login. O mesmo botão, a mesma confirmação, a mesma resposta para ambos os casos, e a página descreve os dois cenários em uma única frase em vez de detalhar qual deles se aplica ao endereço digitado.
Aquele segundo diálogo sumiu, assim como a resposta que costumava informar se um endereço já tinha uma conta aqui. Saber se um e-mail arbitrário está registrado conosco não é uma pergunta que respondemos.
O Dashboard parou de escrever no log
"Failed to fetch organizations" é uma linha interna nossa. Ela estava aparecendo para você.
Trinta e cinco dessas mensagens se tornaram frases acionáveis para pessoas, como "Não foi possível carregar suas organizações. Tente novamente em instantes." Linguagem natural onde humanos leem. "Invalid member id" e semelhantes agora explicam o erro em vez de citar o nome de uma variável. As linhas de console com as quais eram confundidas continuam intocadas, pois realmente são para nós. O mesmo vale para a validação de formato da API retornada quando você nos chama via código, além dos códigos legíveis por máquina usados nas ramificações do Dashboard.
Os e-mails passaram pelo mesmo ajuste. Um convite pedindo para alguém entrar em "uma organização" vai direto para o lixo, então os nomes reais escolhidos por você voltaram: a conta, a chave, a organização e quem convidou você. O texto livre digitado por um cliente continua de fora de qualquer e-mail enviado por nós.
Sob o capô
O Browser estava vazando um file handle por sessão de renderização, e a causa não era nosso código. Uma dependência upstream fecha um de seus dois handles de log, retorna prematuramente e ignora o segundo, mas apenas quando quem chama fornece seu próprio diretório de perfil. Nós fornecemos um a cada inicialização, tornando o vazamento garantido e contínuo.
O patch envolve esse método específico em vez de criar um fork da dependência. Ele executa o original primeiro e só atua se o handle ainda estiver aberto, garantindo que, no dia em que o upstream mover essa linha para antes do return, nosso patch passe a ser um no-op de forma transparente. Os testes reproduzem o vazamento antes da aplicação do patch, permitindo que o arquivo declare claramente contra o que está se defendendo, em vez de apenas afirmar que está tudo bem.
Efeito prático: instâncias de longa duração do Browser mantêm sua capacidade em vez de degradar conforme as sessões se acumulam. Se você quiser controlar como essas sessões aparecem na rede, browser profiles foram lançados junto com isso.
Ambas as correções acima começaram no mesmo ponto. Algo passou por uma validação que não era a validação que realmente importava: uma suíte de testes verde enquanto uma hora desaparecia de cada período, um processo reportando disponibilidade enquanto havia esgotado o único recurso de que precisava. Obter verde nos testes é fácil. A pergunta difícil é o que seus instrumentos precisariam detectar para ficar vermelhos, e se eles têm capacidade de enxergar isso.