Um relatório traz um estado desde o dia em que existem relatórios, e até ontem nada na interface conseguia mudar um. Dava para filtrar por ele a partir de três ecrãs e só dava para o definir pela API, o que significava que cada relatório ficava pendente para sempre e o distintivo no cartão era decoração.

O controlo de estado está agora na lista de relatórios recebidos, na linha de ações de cada cartão, ao lado do controlo de visibilidade. A triagem é uma coisa que se faz a uma fila e não a um relatório de cada vez, por isso pertence ao sítio onde está a fila: ler o cartão, definir o estado, passar ao seguinte, nunca abrir nada.

Quem pode usá-lo decorre do âmbito que o ecrã já tinha. Um relatório chega à sua caixa porque está na equipa dona do domínio para o qual foi enviado, por isso um relatório atribuído a nenhum site não mostra controlo algum em vez de mostrar um que recusa.

Enviar um relatório a quem tem de o corrigir

Um relatório privado abre para a equipa dona do domínio e para quem o enviou. A pessoa que ele costuma ter de alcançar não é nenhuma dessas: quem programa e recebe o erro, segue a ligação e ouve dizer que o relatório não existe.

A volta que havia era deixar as definições da equipa abertas noutro separador e lembrar-se do endereço. Existe agora um convite no próprio relatório. Traz essa pessoa para a equipa, porque é isso que aqui significa ler um relatório privado: não há uma segunda via de acesso nem uma ligação que dê acesso a quem a tiver na mão.

O gravador usa o plano inteiro

A nota da semana passada acabava com uma confissão: todos os planos vendiam uma duração de gravação que o seu próprio limite de envio recusava, tínhamos subido os tetos do servidor para condizerem, e o próprio gravador continuava a parar nos dez minutos certos para toda a gente.

A extensão 1.5.0 chegou ontem à Chrome Web Store e fecha isso. O painel grava durante o tempo que o plano vende - cinco minutos no Free, dez no Starter, trinta no Professional - e as duas pontas do cano já concordam sobre o mesmo número.

A mesma versão corrige uma coisa que era pior do que parecia. Nenhum botão dentro do painel fazia nada sempre que o painel corria como janela própria em vez de acoplado: My Replays, a ligação para a loja, a página de boas-vindas. O início de sessão era o pior caso, porque esperava por um separador que nunca ia abrir e deixava o painel indefinidamente em “Waiting for sign-in…”. Uma aplicação web instalada é onde alguém se depara com isso primeiro. Os separadores abrem agora numa janela de navegador a sério, esteja o painel onde estiver.

Session Replay

Extensão do Chrome gratuita. Um clique na página que se está a portar mal captura a captura de ecrã, a consola e o registo de rede, e entrega-lhe uma ligação para colar no ticket.

Obter a extensão

A página do MCP já diz o que escrever

A página que saiu na semana passada entregava o endereço e dizia que a autorização era OAuth 2.1 com PKCE. As duas coisas verdadeiras, e nenhuma delas uma instrução: o endereço vai para sítio diferente em cada cliente, cada um autentica-se à sua maneira, e quem tinha o URL estava exatamente onde começou.

O passo da ligação traz agora um separador por cliente, cada um com o endereço no lugar onde esse cliente o recebe e com o comando que o autoriza.

O último passo mudou por um motivo aparentado. Mostrava antes três envelopes JSON-RPC em cru e chamava-lhes a sua primeira chamada, o que ensinava a única coisa de que quem lê nunca precisa - escrever envelopes é o trabalho inteiro do agente que acabou de ligar - e pedia trabalho que ninguém ia fazer. Mostra agora cinco frases para dizer em voz alta ao agente, construídas a partir do seu próprio relatório mais recente e do seu próprio domínio verificado. Uma equipa ainda sem relatórios recebe uma primeira frase mais simples que nomeia o domínio.

Há também agora um ficheiro público em /agents/install.md: o domínio, a etiqueta de verificação, as duas vias de carregamento, o markup do botão, identify() e o que depende do plano, servido como texto simples e sem início de sessão. Se a via mais rápida para ter um botão no seu site for entregar o trabalho ao agente de código que já tem aberto, é esse o URL a dar-lhe. Sendo público, não guarda nada que pertença a um site em particular: o token é um marcador entre parênteses retos e o ficheiro diz para lhe pedirem a si o verdadeiro.

Três ferramentas MCP que agora cabem numa resposta

Vale a pena escrever isto com clareza, porque a primeira versão de cada uma estava errada de uma maneira que só aparecia num relatório a sério.

get_report devolvia o documento inteiro. Uma gravação de trinta e dois segundos dava 114 442 caracteres, dos quais 42 302 eram o registo de rede e 22 947 os seus cabeçalhos, o que passa daquilo que um cliente aceita num único resultado de ferramenta: a principal ferramenta de leitura da superfície não conseguia ler um relatório de todo. Passa agora a receber um argumento opcional sections que nomeia qualquer um de network, console e interactions. O que pedir volta inteiro, menos os cabeçalhos, os cookies e as cadeias de consulta que não trazem sinal nenhum que o URL do pedido já não traga. O que não pediu vem resumido.

set_status serializava o relatório inteiro de volta depois de mudar uma coluna, por isso uma escrita que já tinha chegado era comunicada a quem chamou como uma falha. Responde agora com um recibo: o token de partilha, em que ponto está o relatório e quando foi resolvido.

get_frame recebe uma posição na gravação, e nada no documento do relatório conseguia nomear uma. Cada entrada trazia uma hora absoluta de relógio e nenhum desvio, e quem lesse o relatório de fora da aplicação não conseguia daí deduzir o início da gravação, por isso na prática o desvio era adivinhado contra a duração - o que sobrevive a uma captura curta e a nada mais longo. O relatório traz agora os desvios que a ferramenta pede.

As cinco ferramentas também declaram sem rodeios os seus action hints: as quatro leituras são só de leitura, set_status não é, e nenhuma delas é destrutiva. Um hint omitido não é lido como falso por um cliente: recai na resposta prudente e pergunta a uma pessoa antes de cada leitura.

O painel da consola repete-se menos

As linhas de consola repetidas só eram agrupadas quando eram erros. Todo o resto ficava com uma linha por ocorrência, o que deixava precisamente os níveis que mais se repetem como os expandidos por inteiro.

Chegou um relatório com vinte e seis linhas de consola, das quais vinte e duas eram o mesmo aviso de terceiros ao nível de depuração dentro de um único milissegundo. Noutro, a única linha que nomeava o erro era a vigésima sexta. As linhas são agora agrupadas por nível, mensagem e URL em conjunto, em todos os níveis. Dois frames que falham da mesma maneira continuam a ser duas entradas, e as mesmas palavras registadas em dois níveis continuam a ser duas entradas.

Coisas mais pequenas

  • Quem administra uma equipa pode mudar-lhe o nome. O nome era escrito uma vez na inscrição e nunca mais, por isso quem se inscreveu antes de preencher o seu nome ficou para sempre com uma equipa chamada “someone@example.com’s team”, e é esse o nome que os colegas leem no seletor.
  • O painel está no menu de utilizador de quem tem sessão iniciada, onde as pessoas o procuravam.
  • Os dados do plano na página da equipa são um cartão em vez de quatro.
  • As páginas de erro planas cumprem o contraste AA, e o botão de contorno escuro lê-se em modo escuro.
  • O início de sessão web tem limite de tentativas. Estava protegido na API e não no formulário de entrada, contra as mesmas contas.