{
  "initial_audit": {
    "date": "2026-09-23",
    "status": "passed",
    "scope": "Conferência de saídas locais e dos cálculos usados pela demonstração.",
    "origin": {
      "checks": 104,
      "passed": 104,
      "failed": 0
    },
    "browser_math": {
      "normalizations": 504,
      "coordinates": 1322496,
      "ranking_lists": 6912,
      "max_vector_absolute_error": 0,
      "max_divisor_relative_error": 2.384596118845396e-15,
      "max_score_relative_error": 1.0940482903899486e-14,
      "score_tolerance": 1e-11,
      "reference": "analysis.py da bancada local validada",
      "reference_sha256": "7f800336b40bb936de2ac0e4e1c9159b64860233b33c46d77427b6d44d333b2e",
      "cases": "21 entradas/variantes × 2 estágios × 3 agregações × 4 normalizações; rankings dos 8 fundos × 12 âncoras × 2 estágios × 3 agregações × 4 normalizações × 3 medidas."
    },
    "failures": []
  },
  "date": "2026-10-03",
  "status": "numerical_checks_passed",
  "scope": "Conferência de origem e matemática da demonstração; não é certificado de publicação ou de todos os gestos e dispositivos.",
  "extension_origin": {
    "verified_on": "2026-09-24",
    "raw_aggregate_checks": 168,
    "alpha_mask": "exact",
    "reference_vectors": 672,
    "reference_rankings": 6912,
    "reference_temporal_comparisons": 432
  },
  "extension_browser_math": {
    "verified_on": "2026-09-28",
    "vectorCases": 672,
    "rankingCases": 6912,
    "temporalCases": 432,
    "maxRelativeError": 1.0940482903899486e-14,
    "tolerance": 1e-11,
    "reference": "analysis.py da bancada validada",
    "reference_sha256": "7f800336b40bb936de2ac0e4e1c9159b64860233b33c46d77427b6d44d333b2e"
  },
  "zoom": {
    "verified_on": "2026-09-28",
    "cases": 1260,
    "result": "passed",
    "scope": "Janela, âncora, limites e preservação dos vetores. O gesto físico não é simulado; o usuário confirmou anteriormente que a pinça amplia somente o gráfico."
  },
  "coverage": {
    "images": 12,
    "transparent_background_variants": 8,
    "pattern_preparations": 8,
    "video_scenarios": 6,
    "aggregations": [
      "mean",
      "max",
      "median"
    ],
    "normalizations": [
      "none",
      "l1",
      "l2",
      "linf"
    ],
    "comparisons": [
      "cosine",
      "euclidean",
      "dot"
    ],
    "shared_charts": [
      "single_image",
      "video"
    ],
    "neighbor_recipe_editing": "Preservada; automação adicional da demo, ainda não alinhada à interface instalável."
  },
  "checked_data_sha256": {
    "dados-exemplos.js": "a1cae71f7f63c5baef7efff92bf4999453b7589904cf716e03d47edab6617f7a",
    "dados-extensoes.js": "8e8fa4d2f14d7a3c8112c5a9dc0b94a3f82de123f86d2f3659ab5aebbc39509d",
    "dados-fundos.js": "d2b0bd4e0dd17b971aa6cea4cf637d4db37c7abdf5ddbe64786a1401c7037364",
    "dados-padrao-branco.js": "a5eb962509488dca90492ecd0e28f7d665e39dc63e19ea4866e7193ad4ccc92a",
    "dados.js": "f148df334bfa7452608f187d87b8fdd55e2d104bc5c0f0a90f24e5a9827446cb",
    "analise.js": "434883b3b86523e6eeb0e3366a96adc03cd1883ec42cf50737c60378320f6d9a",
    "analysis-core.js": "0e4b476eeea1a5076ad76aa5c252c3dbd9c46ec8cb1ad778cfc92ea00bc916c3",
    "analysis_core.py": "2fa9e7a32831dbf54d0fef94f6f3b059481139ab989e8cbdc9bd26503612e5ab"
  },
  "limits": [
    "Não garante execução de arquivos arbitrários, de outro checkpoint ou em todos os navegadores.",
    "Valores já conferidos podem exigir nova validação se dados, matemática ou preparação forem alterados.",
    "A interface é uma leitura estática interativa; os tempos de inferência são os registrados, não o tempo deste navegador."
  ],
  "failures": [],
  "local_integration": {
    "verified_on": "2026-09-28",
    "result": "passed_for_checked_paths",
    "checks": [
      "Paleta e edições recentes de apresentação incorporadas à candidata.",
      "Máscara de opacidade corresponde ao alfa; não modifica a imagem preparada.",
      "Lote de 12 entradas com máximo e L1; progresso da reunião de vetores.",
      "Edição em Vizinhos preserva a receita original do conjunto.",
      "Alterar o fundo da imagem individual não altera o lote já reunido.",
      "MP4 com oito quadros, mediana, sem normalização, antes do merger e quarto par temporal.",
      "Quadros, pares, gráficos e três comparações temporais consecutivas apresentados.",
      "Largura de 390 px sem transbordamento horizontal da página ou IDs duplicados.",
      "Sem erros de JavaScript capturados nos percursos consultados."
    ],
    "limits": "Percursos selecionados no navegador interno; não equivale a testar todas as combinações em todos os navegadores."
  },
  "exports": {
    "verified_on": "2026-09-28",
    "serializers": {
      "json_roundtrip": "passed",
      "csv_rows": 4096,
      "npz_arrays": 6,
      "numpy_roundtrip": "passed_exact_fp32",
      "scope": "Vetores reais de lote e vídeo; conteúdo conferido independentemente do salvamento pelo navegador."
    },
    "complete_tokens_download": {
      "result": "passed",
      "file": "movimento_branco_mp4_oito_quadros_tokens.npz",
      "sha256": "aae7cc2df798a4cb345654104e298c6eb1c3426166f98158378746db79f82492"
    },
    "generated_download_in_regular_browser": {
      "status": "awaiting_user_check",
      "scope": "Botão Baixar registro e notas (.json). A automação do navegador interno não confirmou o salvamento do Blob."
    }
  },
  "checked_ui_sha256": {
    "index.html": "db81c485ddcb38be9a78e038b71c2d4c3817287de832c1eba51374b8860cedca",
    "demo.css": "f136cbe29328f3629ec88a8f75929170a3acf6d30142b9dc30e57e3df7fc7824",
    "demo.js": "78fbb3d44268567786aa861b48d2db48420e419e6fc791811948a6dc38268daf",
    "demo-modos.js": "61d399856f7ca4e47bfda469f1c1e33a36a5be38988b5767f4fb8f1a43ea73f7",
    "graficos.js": "c9eb0166cafac0258b4ab8ac6dff2eb7bc4171690d52380bca915a1bdadc6b6b",
    "recursos.js": "045488550a4182ee156341b5f28bc3ffe286f3b3c2e223d0d1f05e772d01636d"
  },
  "canonical_math": {
    "verified_on": "2026-09-28",
    "status": "passed",
    "version": "1.0.0",
    "source": "analysis_core.py",
    "source_sha256": "2fa9e7a32831dbf54d0fef94f6f3b059481139ab989e8cbdc9bd26503612e5ab",
    "generated_sha256": "0e4b476eeea1a5076ad76aa5c252c3dbd9c46ec8cb1ad778cfc92ea00bc916c3",
    "checks": {
      "vectorCases": 672,
      "rankingCases": 6912,
      "temporalCases": 432,
      "maxRelativeError": 0,
      "tolerance": 0
    },
    "previous_analysis_comparison": {
      "vector_hash_changes": 0,
      "ranking_order_changes": 0,
      "max_score_absolute_change": 2.682209014892578e-07
    },
    "scope": "Mesmos tokens e agregados da extração anterior; núcleo Python e artefato JavaScript gerado. Não houve nova inferência nem alteração dos pesos."
  },
  "historical_hashes_20260928": {
    "data": {
      "analise.js": "33b5710f623069dcd472009dd82e7b738b3df62d47131faf0a739ae5824dfa2a",
      "dados.js": "f148df334bfa7452608f187d87b8fdd55e2d104bc5c0f0a90f24e5a9827446cb",
      "dados-exemplos.js": "a1cae71f7f63c5baef7efff92bf4999453b7589904cf716e03d47edab6617f7a",
      "dados-fundos.js": "d2b0bd4e0dd17b971aa6cea4cf637d4db37c7abdf5ddbe64786a1401c7037364",
      "dados-padrao-branco.js": "a5eb962509488dca90492ecd0e28f7d665e39dc63e19ea4866e7193ad4ccc92a",
      "dados-sequencias.js": "10459d69a10d92227fb3a928e2128e64da6b72c06eb2c9899bad263b9119f947",
      "dados-extensoes.js": "8e8fa4d2f14d7a3c8112c5a9dc0b94a3f82de123f86d2f3659ab5aebbc39509d"
    },
    "ui": {
      "index.html": "e2a82bbbabfc1ae2629582197c5505140575b5b38f9ffd2141ad09dd06db28b5",
      "demo.css": "3a2c24732040123180c5c1adffd81ff6e7bfe96ec3d4023ff07782004e255a55",
      "demo.js": "e2bcdf976e18c16d4a5edbd908fb6c5d7df118f19c9bfca32fe862ea1efe0bf6",
      "demo-modos.js": "6825e9991b2fbbf7a4a258cc63981eab9431b8260f6dabc0c0944fcefc1919d4",
      "graficos.js": "6f5c0dcdcfb4bc79cf1be9c2a69671864769820f05dce2c5521d4521b461dce6",
      "recursos.js": "197a6c2d52de7124300a2e8a9af4778fe7e8c879a0aea94d891a3617868cd343"
    }
  },
  "publication_review": {
    "verified_on": "2026-10-03",
    "status": "passed_for_checked_scope",
    "tokens_and_assets": {
      "passed": true,
      "records": 34,
      "unique_token_files": 34,
      "aggregates_including_temporal_pairs": 288,
      "coordinates": 755712,
      "max_absolute_error": 0.0,
      "pair_stages": 28,
      "referenced_assets": 114,
      "core_hashes_match": true,
      "unique_html_ids": 200,
      "no_upload_input": true,
      "private_path_or_secret_patterns": 0,
      "public_files": 144
    },
    "ranking_and_exports": {
      "passed": true,
      "rankings_checked": 6912,
      "normalization_sets": 192,
      "top5_order_matches_numpy": true,
      "max_scaled_score_error": 3.192019621902078e-15,
      "all_statistics_match_numpy": true,
      "npz_export_roundtrip": true,
      "export_shapes": {
        "antes_merger": [
          12,
          1152
        ],
        "depois_merger": [
          12,
          4096
        ]
      }
    },
    "canonical_core_unit_tests": {
      "passed": 9,
      "javascript_python_parity_test_executed": true,
      "demo_matches_local_canonical_sources": true
    },
    "browser": {
      "tested_viewports_css_pixels": [
        992,
        390
      ],
      "checks": [
        "Inicialmente as três escolhas de análise estão desabilitadas.",
        "Padrão geométrico: preparação e revelação das representações.",
        "Lote: conferência de 12 imagens e reunião com máximo/L1.",
        "Vizinhos: cinco resultados por estágio com mediana/distância euclidiana; receita original preservada.",
        "MP4: oito quadros, mediana, sem normalização, antes do merger e quarto par temporal.",
        "Sem erros de JavaScript capturados nesses percursos.",
        "Rótulo do hero deslocado 6,4 px para cima; altura de 276 px preservada em desktop.",
        "Sem transbordamento horizontal da página nas larguras verificadas.",
        "Introdução de Vídeo/GIF reunida no cartão de escolha da sequência, com título, rótulo e explicação preservados.",
        "Introdução de Lote de imagens reunida no cartão de conferência das entradas, com título, rótulo e explicação preservados.",
        "Simulação guiada identifica o início das quatro guias com o mesmo estilo tipográfico."
      ],
      "generated_json_download": "Evento de salvamento não confirmado pela automação do navegador interno; conteúdo/serializadores têm conferência separada."
    },
    "cleanup": {
      "removed_files": [
        "dados-sequencias.js"
      ],
      "reason": "LAB_SEQUENCE_VARIANTS não possui consumidores nos controladores atuais; os seis cenários ativos usam LAB_EXTENSIONS.video_cases.",
      "excluded_local_backups": [
        "index.html.backup",
        "demo.css.backup"
      ],
      "retained": "Tokens completos NPZ, imagens, quadros, vídeos, fonte canônica, licença e registros de procedência."
    },
    "scope": "Atualização somente da demo pública. Pesos, entradas, tokens e agregados preservados. Não publica as alterações locais pendentes da bancada instalável. Os registros anteriores permanecem como histórico."
  },
  "presentation_review": {
    "date": "2026-10-04",
    "scope": "Composição dos cartões e marcas visuais dos gráficos. Dados, agregados e núcleo matemático preservados byte a byte.",
    "changes": [
      "Origem dos números e caderno Jupyter em dois tópicos recolhíveis no mesmo cartão.",
      "Bancada local é o último cartão comum às quatro guias.",
      "Rótulos roxos no alto à direita, ao lado de Simulação guiada.",
      "Limites das barras recortadas têm guias amarelas pontilhadas até o eixo vertical.",
      "Coordenada fixada na linha e seu ponto usam o vermelho oficial #c41838.",
      "Downloads da imagem dentro de Minhas observações, visíveis somente ao expandir.",
      "Uma única linha divisória acima das observações da imagem.",
      "Minha hipótese opcional recolhível depois da mensagem de preparação; caixa e legenda dentro do mesmo tópico; hipótese preservada no registro JSON.",
      "Reunir representações alinhado à direita; barra de progresso vazia clara, preenchimento azul celeste.",
      "Controles de opacidade, patches e grupos acima do tópico Entenda a preparação; cards 1 e 2 com alturas independentes.",
      "Vídeo/GIF usa campos numéricos, seletores de quadros e pixels, seletor nativo de cor e Preparar sequência, adaptados da interface local. Campos independentes; resultados somente quando todos os parâmetros correspondem a uma execução registrada.",
      "Passo 3 Acompanhe o lote antes dos downloads: progresso, contagens, receita, parada após imagem e tabela de sucessos/erros; coleção no passo 4 com seis colunas em desktop.",
      "Referência dos vizinhos exibe número da imagem e nome do arquivo original com extensão; contagem em comum separada dos botões e explicação dos selos verdes.",
      "Contagem em comum usa o mesmo selo azul claro da receita Média → L2 → Cosseno; selos dos itens em comum permanecem verdes.",
      "Imagem da referência selecionada ampliada de 7 para 9 rem em telas maiores; largura de 7 rem preservada em telas até 560 px."
    ],
    "validation": {
      "javascript_syntax": "passed",
      "unique_html_ids": 222,
      "local_links": "passed",
      "data_and_math_unchanged": true,
      "browser": [
        "Imagem e vídeo: marcas de limite positivas/negativas e guias até o eixo Y.",
        "Guias ausentes quando todas as barras cabem no enquadramento.",
        "Coordenada fixada da linha renderizada em rgb(196,24,56).",
        "Rótulos no canto superior; ordem dos tópicos e último cartão comum.",
        "Larguras de 992 e 390 px; sem transbordamento horizontal da página.",
        "Três downloads invisíveis ao recolher e visíveis ao expandir as observações; abertura e fechamento conferidos.",
        "Sem borda no contêiner externo e com uma borda superior no tópico de observações.",
        "Hipótese preservada ao escolher o padrão, preparar, revelar e mudar a versão da imagem.",
        "Hipótese fechada por padrão depois de workflowPrepareStatus; caixa e legenda ocultas juntas, texto preservado ao fechar/reabrir.",
        "Lote conferido e reunido: barra clara em zero e azul ao concluir 12/12; botão alinhado à direita.",
        "Campos de vídeo conferidos no navegador em tela de 390 px, sem transbordamento horizontal; tela normal restaurada; nenhum erro JavaScript observado.",
        "Em 1440 px, altura do card 2 permaneceu 708,06 px ao abrir Minha hipótese; card 1 permaneceu 603,48 px ao abrir os detalhes do card 2. Grade alternada com o tópico de explicação fechado.",
        "Seis execuções preparadas pelo novo botão, com quadros, pares e arquivo de tokens correspondentes. Cor editada, resolução sem registro e tempo além da duração ocultaram os resultados anteriores; parâmetros originais recuperados pelos presets.",
        "Lote interrompido com 5/12 e depois concluído com 12/12; tabela com 12 linhas válidas e seis colunas na galeria. Campos de vídeo em 390 px sem transbordamento; viewport restaurado; nenhum erro JavaScript observado.",
        "Vizinhos: circulo_azul.png identificado como imagem 1; troca para circulo_deslocado.png como imagem 7 e retorno conferidos. Contagem igual aos selos nos dois grupos, inclusive após troca de métrica. Nome sem corte em 390 px, viewport restaurado e nenhum erro JavaScript observado.",
        "Selo de contagem e selo de receita conferidos com mesmos valores de cor, fundo, borda, tamanho/peso de fonte e arredondamento no navegador.",
        "Referência com largura de 144 px em viewport de 1440 px e 112 px em viewport de 390 px; nome, contagem e ações acomodados no cartão, sem transbordamento horizontal; viewport restaurado."
      ],
      "hypothesis_export": "passed: texto com acentos/quebra de linha e valor vazio; notas e vetores preservados na função de exportação. Não confirma o salvamento pelo navegador.",
      "batch_progress": "passed: função real conferida em conclusão 12/12, parada após imagem, duas falhas parciais e todas as entradas com erro; vetores somente das válidas e controles liberados ao terminar."
    }
  },
  "batch_preparation_review": {
    "date": "2026-10-04",
    "changes": [
      "Passo 2 Defina as condições do lote: resolução, versão e seletor nativo de fundo antes de Escolha como analisar, com mesma organização da bancada local.",
      "Campos independentes de Uma imagem. O fundo foi transferido do passo 1, sem duplicar controles.",
      "Apenas combinações com registros correspondentes podem reunir vetores; oito fundos em cores originais com orçamento de 65.536 pixels. Outras escolhas exibem o limite e permitem restaurar condições registradas.",
      "Alterar condições limpa resultados anteriores na guia, preserva conjuntos já reunidos em Vizinhos e mantém as doze entradas originais na galeria.",
      "O registro exportado inclui uma cópia das condições usadas na execução do lote."
    ],
    "validation": {
      "javascript_syntax": "passed",
      "unique_html_ids": 228,
      "local_html_links": "passed",
      "record_matching": "72 combinações conferidas contra os dados reais: somente oito combinações registradas aceitas; proveniência do fundo correspondente preservada.",
      "batch_lifecycle": "Função real conferida com lote completo, interrupção após três imagens, duas falhas e todas as entradas com erro; controles liberados; exportação conserva as condições executadas.",
      "browser": [
        "Lote de 12 imagens concluído com fundo vermelho; registro contém condições e preparação correspondente da imagem transparente.",
        "Tons de cinza, limites do checkpoint e cor sem registro bloqueiam reunião; alteração de condições oculta downloads anteriores; restauração recupera escolhas registradas.",
        "Versão cinza no lote não altera versão original em Uma imagem.",
        "Campos dispostos em 2:1:1 em desktop e empilhados em 390 px, sem transbordamento horizontal; viewport restaurado; nenhum erro JavaScript observado."
      ],
      "data_and_math_unchanged": true
    }
  }
}
