Seus testes continuam Playwright, Selenium e pytest. Não os substituímos. Nós os deixamos prontos para empresas, e você é dono de tudo: código, evidências e histórico.

Um teste com falha. Tudo o que ele deixou no seu disco.

Uma execução real, não uma simulação: TC92 em 2026-09-30, sem interface gráfica, no Chromium, Firefox e WebKit. Ele abre example.com, segue o link Learn more até a IANA e espera que o título seja Example Domain. A página diz Example Domains. Estes são os arquivos da execução no Chromium, seus tamanhos reais e o conteúdo de cada um.

evidence/bug-reports/chromium/TC92 - Iana heading/2026-09-30_14-34 [BREACHED]

5 arquivos
na pasta da execução, mais uma linha no Histórico
531.2 kB
a pasta inteira, incluindo o vídeo
32 campos
em metadata.json, para máquinas
9 seções
em report.md, o relatório forense

O que uma falha deixa para trás

O que o Evidence Locker guarda quando um teste falha?

Um teste que falha arquiva uma pasta com seu relatório forense, seus metadados, o log bruto e um screenshot do frame em que falhou, além do vídeo no caso de uma falha real. A linha 23 de TC92_Iana_heading.js espera que o título seja Example Domain. A página da IANA diz Example Domains: em 10000 ms o locator foi resolvido 23 vezes e leu o plural todas as vezes. BREACHED, nos três engines. Aqui está o frame em que ele falhou e todos os arquivos que gravou.

https://www.iana.org/help/example-domains
A página da IANA no momento em que o TC92 falhou: o título diz Example Domains, mas o teste esperava Example Domain
screenshot.png · 89,8 kB · uma captura de tela da viewport do último quadro, 1280×720: o que um usuário teria visto quando a verificação foi executada
Error: expect(locator).toHaveText(expected) failed

Locator:  getByRole('heading', { level: 1 })
Expected: "Example Domain"
Received: "Example Domains"
Timeout:  10000ms

  23 × locator resolved to <h1 id="example-domains">Example Domains</h1>
     - unexpected value "Example Domains"

No Evidence Locker, o mesmo registro abre em cinco abas:

ReportMetadataTelemetryRaw LogAI Analysis

report.md5.3 kB

O relatório forense, em Markdown: pode ser lido sem o Studio.

  1. Incident summary
  2. Root cause analysis
  3. Network telemetry
  4. Failure timeline
  5. Historical stability
  6. Self-healing log
  7. Evidence artifacts
  8. Performance budget
  9. Lazy-loading audit

Use para abrir um ticket: o Incident summary nomeia o teste, o navegador, a página e o impacto no negócio, e a Root cause analysis a verificação que falhou, o seletor, os valores esperado e recebido e a linha do código-fonte.

metadata.json2.2 kB

32 campos, legíveis por máquina. Alguns deles, exatamente como foram gravados:

"status": "BREACHED",
"pageUrl": "https://www.iana.org/help/example-domains",
"selector": "getByRole('heading', { level: 1 })",
"expectedVal": "\"Example Domain\"",
"receivedVal": "\"Example Domains\"",
"timeoutMs": "10000ms",
"securityIssueCount": 3,
"attempt": { "number": 2, "of": 2 },
"lazy": { "score": 85, "grade": "B", … }

Use para filtrar falhas com um script em vez de um parser de Markdown. É também o arquivo que a cadeia de custódia sela: uma pasta com um metadata.json é um registro.

raw-data.json5.1 kB

O registro bruto: cada linha do console, erro de rede, problema de segurança e erro de página da execução, além das amostras de desempenho.

"consoleLogs": [],
"networkErrors": [],
"securityIssues": [
  "Missing CSP: https://example.com/",
  "Missing CSP: https://example.com/s.js",
  "Missing CSP: https://iana.org/help/example-domains"
],
"jsErrors": [],
"performance_metrics": { "lcp": 992, … }

Use para ver o que a página fez em torno da falha. Uma aprovação FLAKY ou AUTO_RECOVER mantém o raw-data.json da tentativa que falhou, de modo que uma nova tentativa que escondeu a falha ainda deixa seu log.

Telemetrymedido

Medido ao final do teste, em relação aos seus limites. A barra representa a medição em relação ao respectivo limite.

  • LCP992 / 2500 ms
  • FCP992 / 1800 ms
  • CLS0.0295 / 0.1
  • TTFB727 / 800 ms
  • TBT0 / 200 ms
  • DOM114 / 1500 nodes
  • Heap5 / 50 MB
  • INPnot measured

Tudo dentro dos limites, e o relatório sinaliza que o TTFB está próximo do limite. O INP aparece como não medido, nunca como aprovado: não houve cliques nem digitação na página medida. A auditoria de carregamento sob demanda deu à página 85 de 100, nota B: uma imagem sem largura e altura.

Use para distinguir uma página lenta de uma asserção errada.

video.webm428.8 kB
Um quadro de video.webm, aos oito segundos: a página da IANA com o título Example Domains, enquanto a verificação tentava novamente
0:08 de 0:16

A sessão inteira, 16.6 segundos: example.com, o clique em Saiba mais e, depois, a página da IANA enquanto a verificação tentava novamente. Mantida porque a execução teve o status BREACHED, ela pode ser reproduzida no Cofre de evidências. Uma falha real mantém seu vídeo: BREACHED, BREACHED_FLAKY e CHAOS_BREACHED por padrão, TIMEOUT e BLOCKED quando você os ativa em Configurações. CRASHED e UNREACHABLE nunca são oferecidos, pois a gravação fica corrompida ou vazia. Somente execuções web e móveis emuladas com Playwright gravam: um celular Android real, uma execução com Selenium e um teste de API não gravam.

Use para ver como a página chegou à verificação que falhou, passo a passo; a captura de tela acima é o último quadro.

Análise de IAsua IA

Ativada por padrão, com sua IA conectada. Com um modelo local do Ollama, a opção padrão, ou outro provedor que você escolher, o mecanismo adiciona quatro seções ao relatório: Diagnóstico, Causa provável, Impacto e Ação recomendada. Quando sua própria ferramenta de IA de linha de comando está ativada no redator de IA, ela lê report.md após a execução, para até cinco falhas por execução, e adiciona uma quinta seção:

  • Diagnosis
  • Classificação (somente ferramenta de linha de comando)
  • Probable cause
  • Impact
  • Recommended action

A classificação é exatamente uma destas: APP_BUG, APP_CHANGE, TEST_AUTHORSHIP, TEST_SETUP ou INFRA_FLAKY. Sem IA conectada: nenhuma análise, e os cinco arquivos permanecem iguais.

trace.zip é um sexto arquivo. Com Record a forensic trace on failure ativado, que é o padrão, uma pasta BREACHED também registra um trace do Playwright (snapshots do DOM, capturas de tela e fontes), aberto com npx playwright show-trace trace.zip. Ele não é gravado em um celular Android real. O TC92 foi executado antes de o tracing se tornar o padrão, então sua pasta contém os cinco arquivos acima.

O que uma falha registra

TC91 no chromium, 2026-09-30 13:26 TIMEOUT

A pasta real da execução reproduzida na demo no topo da página inicial, um teste montado de propósito contra o texto antigo do link de example.com, como o Evidence Locker a abre: bug-reports/chromium/TC91 - Example more info/2026-09-30_13-26 [TIMEOUT].

https://example.com/
example.com no momento em que o tempo limite de TC91 se esgotou: o link que o teste aguardava, Mais informações..., agora diz Saiba mais
screenshot.png · 12.6 kB · o quadro exato no momento da falha
  • report.md4.9 kBResumo do incidente, causa raiz, telemetria de rede, linha do tempo da falha, estabilidade histórica, registro de autocorreção, artefatos de evidência, orçamento de desempenho e auditoria de carregamento sob demanda.
  • metadata.json2.3 kB32 campos, entre eles o seletor, o tempo limite de 30000ms, estabilidade CRÍTICA, falhas consecutivas, tentativa 2 de 2, modo furtivo e a pontuação de carregamento sob demanda (100, A).
  • raw-data.json4.2 kBO registro bruto: linhas do console, erros de rede, problemas de segurança (aqui 2: ausência de CSP), erros de JS e métricas de desempenho.
  • Telemetryno relatórioLCP 156 ms · FCP 156 ms · CLS 0.0018 · TTFB 122 ms · TBT 0 ms · 808 nós DOM · 2 MB de heap. INP não medido: nada para cronometrar.
  • video.webmfalhas reaisGravado em caso de falha real. Um TIMEOUT como este não mantém nenhum vídeo, porque TIMEOUT está desativado por padrão, e o relatório informa isso.
  • Análise de IAsua IACom sua IA conectada, ela acrescenta ao relatório um diagnóstico, a causa provável, o impacto e uma ação recomendada; por meio da sua própria ferramenta de IA de linha de comando, ela também classifica a falha.

Veredictos

Quais são os 14 verdicts e o que fazer em seguida?

Cada um dos 14 verdicts indica de quem é a vez: ninguém, do teste, da aplicação, do ambiente ou do harness. O verdict está no nome da pasta: a do TC92 termina em [BREACHED]. O classificador lê uma falha em uma ordem fixa: primeiro o harness, depois uma falha de execução, um bloqueio, um host inacessível e um timeout, e só então BREACHED_FLAKY ou BREACHED. Assim, um BREACHED é uma falha que nenhum padrão de ambiente explica. Cada card diz de quem é a vez e o que aquele verdict arquiva.

  • SECURENinguém

    Passou por conta própria: sem nova tentativa, sem seletor reparado. Nada a fazer. Arquivado em evidence-passed-test, os 5 mais recentes por teste e navegador.

    screenshot.pngmetadata.json

  • CHAOS_RESILIENTNinguém

    Passou enquanto uma falha era injetada, então o app resistiu. Arquivado em chaos-runs, separado dos relatórios de bugs, para que o caos nunca distorça os números de estabilidade.

    screenshot.pngchaos-meta.jsonchaos-report.mdmetadata.jsonvideo.webm

  • AUTO_RECOVERTeste

    Verde, mas não sem ajuda: o self-healer trocou um seletor quebrado. O locator no teste está morto, e a próxima mudança no DOM quebra a suíte de verdade. Corrija o locator. O raw-data.json aparece quando uma nova tentativa foi necessária, e é o da tentativa que falhou.

    screenshot.pngmetadata.jsonraw-data.json

  • FLAKYTeste ou app

    Falhou, depois uma nova tentativa passou, e nada foi reparado. Isso é instabilidade sem explicação no app ou no teste, não uma correção. Leia o raw-data.json da tentativa que falhou e depois a tendência do History.

    screenshot.pngmetadata.jsonraw-data.json

  • PERFORMANCE_DEGRADEDApp

    As asserções passaram e a página estava lenta demais: um orçamento de Web Vitals ou de lazy-loading foi excedido. Apenas consultivo até você tornar a verificação estrita.

    screenshot.pngmetadata.json

  • A11Y_VIOLATIONApp

    As asserções passaram, a acessibilidade não. O metadata.json lista cada regra do axe-core que disparou, com seu impacto e a contagem de nós. Apenas consultivo até você tornar a verificação estrita.

    screenshot.pngmetadata.json

  • SECURITY_VIOLATIONApp

    As asserções passaram, os cabeçalhos de segurança não (um CSP ausente, por exemplo). Corrija os cabeçalhos de resposta. Apenas consultivo até você tornar a verificação estrita.

    screenshot.pngmetadata.json

  • BREACHEDApp

    Uma asserção falhou e nenhum padrão de ambiente ou de harness explica o erro. Leia Expected e Received no report.md, assista ao vídeo e marque como Real bug ou False alarm, com um motivo.

    report.mdmetadata.jsonraw-data.jsonscreenshot.pngvideo.webmtrace.zip

  • BREACHED_FLAKYApp ou teste

    Falhou na última tentativa depois de uma nova tentativa anterior: a própria falha é inconsistente. Compare as tentativas antes de abrir um bug. Seu vídeo é mantido por padrão.

    report.mdmetadata.jsonraw-data.jsonscreenshot.pngvideo.webm

  • CHAOS_BREACHEDApp

    Quebrou sob uma falha injetada. Um achado de resiliência, mantido separado dos relatórios de bugs funcionais; o relatório registra a falha aplicada e o impacto para o usuário. A retenção nunca remove uma execução que quebrou. Seu vídeo é mantido por padrão.

    screenshot.pngvideo.webmchaos-meta.jsonchaos-report.mdmetadata.json

  • TIMEOUTAmbiente

    Não respondeu a tempo, o que não é prova de que o app está quebrado. Verifique a velocidade da página em Telemetry antes de mexer em qualquer ajuste: um limite maior não esconde um elemento quebrado, apenas faz a falha acontecer mais tarde. Seu vídeo vem desativado por padrão; ative em Settings, em Keep failure video for.

    report.mdmetadata.jsonraw-data.jsonscreenshot.pngvideo.webm

  • UNREACHABLEAmbiente

    Não foi possível alcançar o host: o DNS ou a conexão falhou antes de qualquer página ser observada. Verifique a URL, a rede e a disponibilidade do alvo. Não é um achado sobre o app. Nenhuma página carregou, então o vídeo ficaria em branco e nenhum é oferecido.

    report.mdmetadata.jsonraw-data.jsonscreenshot.pngvideo.webm

  • BLOCKEDAmbiente

    O site se defendeu: um 403, um 429, uma página de bloqueio ou um desafio de bot. O metadata.json nomeia a defesa quando uma estava na tela. Não é um achado sobre o app, e o Jira nunca registra um bloqueio. Seu vídeo vem desativado por padrão; ative em Settings, em Keep failure video for.

    report.mdmetadata.jsonraw-data.jsonscreenshot.pngvideo.webm

  • CRASHEDHarness

    O navegador ou o processo morreu: uma página fechada, um erro do protocolo DevTools, uma sessão do WebDriver encerrada. Infraestrutura, não o app. Verifique a máquina e o driver. A gravação de um navegador encerrado sai corrompida, então nenhuma é oferecida.

    report.mdmetadata.jsonraw-data.jsonscreenshot.pngvideo.webm

Fora dos 14: CONFIG_ERROR (o harness não conseguiu iniciar o teste: uma importação quebrada, um valor ausente no .env), SKIPPED e INTERRUPTED. Nenhum é um resultado sobre o seu app, então nenhum gera uma pasta de evidência ou uma linha no History. Um CONFIG_ERROR ainda é gravado por completo, com uma dica, em um log em .run-cache/config-errors/, para que o teste quebrado seja corrigido. Os testes de API têm sete veredictos próprios: API tests.

History

O que o History registra a cada execução?

Além da pasta, cada execução acrescenta um registro a history/<browser>/<test>/runs.json: as últimas 50 execuções de cada teste em cada navegador, por padrão. Estes são os três registros do TC92, um por navegador, exatamente como foram gravados. O mesmo error_signature nos três indica que é um único erro, não três.

  1. webkitBREACHED

    status
    breached
    duration_ms
    13570
    error_category
    UI_UNSTABLE_ELEMENT
    error_severity
    MEDIUM
    error_signature
    70f7532d
    perf.lcp
    638 ms
    perf.ttfb
    null
    evidence_ref: bug-reports/webkit/TC92 - Iana heading/2026-09-30_14-33 [BREACHED]
  2. firefoxBREACHED

    status
    breached
    duration_ms
    20013
    error_category
    UI_UNSTABLE_ELEMENT
    error_severity
    MEDIUM
    error_signature
    70f7532d
    perf.lcp
    4353 ms
    perf.ttfb
    3877 ms
    evidence_ref: bug-reports/firefox/TC92 - Iana heading/2026-09-30_14-34 [BREACHED]
  3. chromiumBREACHED

    status
    breached
    duration_ms
    12291
    error_category
    UI_UNSTABLE_ELEMENT
    error_severity
    MEDIUM
    error_signature
    70f7532d
    perf.lcp
    992 ms
    perf.ttfb
    727 ms
    evidence_ref: bug-reports/chromium/TC92 - Iana heading/2026-09-30_14-34 [BREACHED]

Um valor que o navegador não consegue medir é gravado como null, nunca como zero: o WebKit não informa o TTFB aqui. Os horários dos registros estão em UTC, conforme gravados; os nomes das pastas usam o horário local da máquina, UTC−5 nesta.

Cada campo de um registro

schema_versiontimestampstatusdetail_statusretry_attemptattemptsrun_idruntimeplatformduration_msbrowserchaosvarianterror_summaryerror_categoryerror_severityerror_signatureperfraw_log_refevidence_ref

perf contém LCP, FCP, CLS, TTFB, TBT, INP, tarefas longas, tamanho do DOM, memória heap, todas as páginas visitadas e a pontuação de carregamento sob demanda. raw_log_ref e evidence_ref apontam para a pasta acima.

O que o mecanismo exibe a partir dele

TC92 chromium BREACHED 13.7s

expect(locator).toHaveText(expected) failed

at TC92_Iana_heading.js:23 waiting for getByRole('heading', { level: 1 })

stability CRITICAL 0% · 0/1 runs · 1 failed in a row

# TC91, a demonstração preparada na página inicial: um BREACHED, depois um TIMEOUT

stability CRITICAL 0% · 0/2 runs · 2 failed in a row

O duration_ms do registro, 12291, corresponde ao teste em si, conforme cronometrado pelo Playwright, na segunda de suas duas tentativas.

Os mesmos registros alimentam a seção Estabilidade histórica do relatório, as tendências da tela Histórico (Regrediu, Recuperado, Ainda com falha, Mais lento) e a classificação de risco, na qual nada é considerado instável com menos de cinco execuções.

A tela Histórico →

Retain evidence

Quanta evidência o Nexus Studio guarda, e por quanto tempo?

Uma aprovação guarda um screenshot e seus metadados, uma falha guarda tudo o que é preciso para reproduzi-la, e os arquivos mais antigos saem primeiro. Uma suíte que roda toda noite enche um disco. O engine limita cada pasta que grava, por teste e navegador, e mantém toda a evidência sob um único orçamento, de 20 GB por padrão, enquanto o disco mantém 10 GB livres, de modo que o disco para de crescer em um tamanho que você escolhe. Uma falha ainda guarda o que é preciso para reproduzi-la: o erro com seu seletor e valores, a URL da página, o frame, as linhas de console, rede e erros de página, o runtime e a plataforma, e o contexto da execução, ou seja, contra o que ela foi medida. Os limites e o orçamento são definidos em Settings, em Evidence & Retention.

  • Uma falha BREACHED

    report.mdmetadata.jsonraw-data.jsonscreenshot.pngvideo.webmtrace.zip

    A pasta completa acima: 531,2 kB para o TC92 no Chromium, sendo 428,8 kB só do vídeo. O trace.zip vem além disso enquanto o tracing está ativado.

  • A TIMEOUT

    report.mdmetadata.jsonraw-data.jsonscreenshot.pngvideo.webm

    Os mesmos arquivos sem a gravação, pois o vídeo para TIMEOUT fica desativado por padrão: 23.9 kB para o TIMEOUT do TC91, a demonstração preparada na página inicial.

  • Uma aprovação

    screenshot.pngmetadata.json

    Arquivado separadamente dos relatórios de bugs, as 5 mais recentes por teste e navegador. A captura de tela é o que a regressão visual compara. Uma aprovação FLAKY ou AUTO_RECOVER também mantém sua pasta, com o raw-data.json da tentativa que falhou, enquanto Keep evidence of a FLAKY / AUTO_RECOVER pass estiver ativado.

Configurações · Evidências & Retenção · padrões

  • Bug reports kept per test20NEXUS_BUGREPORT_RETAIN
  • Passing screenshots kept5NEXUS_PASSED_RETAIN
  • Keep evidence of a FLAKY / AUTO_RECOVER passonNEXUS_RECOVERED_RETAIN
  • Raw run history window50 runsNEXUS_HISTORY_RETAIN
  • Smart Monkey sessions kept10NEXUS_MONKEY_RETAIN
  • Run contexts kept (what each run tested against)100NEXUS_RUN_CONTEXT_RETAIN
  • Record failure videoonNEXUS_VIDEO_ENABLED
  • Keep failure video for3 verdictsNEXUS_VIDEO_VERDICTS=BREACHED,BREACHED_FLAKY,CHAOS_BREACHED
  • Record a forensic trace on failureonNEXUS_TRACE_ENABLED
  • Total evidence budget20 GBNEXUS_EVIDENCE_MAX_GB
  • Free disk to keep10 GBNEXUS_MIN_FREE_GB

Após cada execução, exibido pelo mecanismo

[CACHE RETENTION] 3 files archived → .run-cache/telemetry/2026-09/run_30-1434.zip

[CACHE RETENTION] .cache purged (freed 8.9 KB)

[CACHE RETENTION] Archive health: 1/2 files · 9.3 KB / 500 MB used

Estas três linhas vieram após a execução do TC92. Os arquivos temporários de telemetria da execução nunca são evidência: eles vão para um zip, as cópias soltas são apagadas, e ficam no máximo 2 zips de até 7 dias, dentro de 500 MB. Esses três limites são NEXUS_CACHE_ZIPS, NEXUS_CACHE_RETENTION_DAYS e NEXUS_CACHE_MAX_MB no .env, não campos em Settings.

Em Configurações, Limpar cache exclui as pastas test-results e playwright-report do espaço de trabalho e fecha qualquer navegador deixado aberto por uma execução que travou ou foi encerrada à força. A ação é recusada enquanto uma patrulha está em execução.

Workspace · Disk · o limite que cada pasta tem hoje

area limit today

Bug reports newest 20 runs per test and browser

Passed tests newest 5 runs per test and browser

API evidence newest 20 passing runs per test; failures kept

Chaos runs newest 20 held runs; runs that broke kept

Smart Monkey newest 10 sessions

Visual regressions newest 10 per test and checkpoint

Run context newest 100 runs

Run history newest 50 runs per test and browser

Chain of custody append-only, never trimmed

Archive no automatic limit

O painel Disk lista cada pasta em que uma execução grava, da maior para a menor, com seu tamanho, número de arquivos e data mais antiga, o total e o espaço livre na unidade. Uma pasta sem limite automático é sinalizada. Clean só é oferecido onde é seguro: o cache de execução, versões de arquivos de teste com mais de 14 dias e relatórios Executive com mais de 30 dias. Ele nunca toca em evidências nem no arquivo.

Além dos limites, todas as evidências compartilham um único orçamento, de 20 GB por padrão, e o disco mantém 10 GB livres. Após cada execução, o engine verifica os dois e, ao ultrapassar qualquer um, remove as execuções mais antigas, as aprovadas antes das com falha, até que ambos sejam cumpridos; a execução mais recente de cada teste e navegador sempre permanece. O painel mostra as evidências em relação ao orçamento, o espaço livre em relação ao piso e o que a última passagem liberou, com Run maintenance now.

Armazenamento e automanutenção →

Evidence Locker · mantenha o que importa, libere o resto

Archive… copia exatamente as partes que você marcar, com Screenshot e Report marcados por padrão, para View → Archive. A cópia fica ao lado da pasta de evidência, não dentro dela, então nenhuma varredura de retenção a alcança, e a execução no Locker não é tocada.

Restore, na tela Archive, devolve um registro ao lugar onde estava e de volta à contagem. Se a pasta dele foi liberada, as partes arquivadas são gravadas de volta no Evidence Locker. Um veredicto False alarm ainda o mantém fora da contagem.

Free disk envia uma pasta para a lixeira. Onde o registro está lacrado, o engine grava primeiro a disposição, de modo que nexus verify informa PURGED, não TAMPERED. A retenção faz o mesmo ao remover a pasta mais antiga, e o ledger continua comprovando o hash da pasta, quem a removeu e quando. O lacre é opcional: até o primeiro veredicto Real bug ou False alarm, ou nexus verify --seal, o Locker mostra UNVERIFIED.

Veja o que suas próprias falhas deixam para trás.

Grátis por 30 dias, com todos os recursos, nas suas máquinas. Sem necessidade de cartão.