Skip to content

CI: canário noturno das APIs privadas do player numa live real#47

Open
juansilvadesign wants to merge 2 commits into
joaogfc:mainfrom
juansilvadesign:ci/nightly-canary
Open

CI: canário noturno das APIs privadas do player numa live real#47
juansilvadesign wants to merge 2 commits into
joaogfc:mainfrom
juansilvadesign:ci/nightly-canary

Conversation

@juansilvadesign

Copy link
Copy Markdown
Contributor

Descrição da mudança

O ROADMAP chama o acoplamento do motor às APIs privadas do player de risco existencial — e hoje o alarme são os relatórios de usuário, DEPOIS do estrago. Esta PR adiciona um canário noturno: um workflow diário que carrega a extensão descompactada num Chrome (via puppeteer, devDep que o repo já tem) numa live 24/7 real e verifica:

  1. que as oito APIs privadas que o probe_caps do motor usa ainda existem (getStatsForNerds, getProgressState, getVideoData, setPlaybackRate, getPlaybackRate, seekToLiveHead, playVideo, getPlayerStateObject);
  2. que o motor realmente liga e amostra a live, provado pela ponte de diagnóstico (_zd_diag_request/_zd_diag_response) — content script injetado, engine attach, telemetria rodando.

Comportamento em falha: abre/atualiza uma issue deduplicada (label canary) com o canary-report.json embutido e a instrução de verificar localmente antes de reagir — nunca bloqueia merge, porque YouTube visto de IP de datacenter é instável por natureza (validado na prática: numa das redes de teste a live carrega com playability UNPLAYABLE mesmo com todas as APIs presentes; o relatório distingue esse caso de uma mudança real de API). Duas tentativas com navegador novo por execução; CANARY_VIDEO (repository variable) troca a live padrão (Lofi Girl) se ela um dia cair; npm run canary roda localmente.

⚠️ Depende da #43 (ponte de diagnóstico) — este branch a inclui como base, então a PR mostra os dois commits. Mergeando a #43 primeiro, esta fica só com o commit do canário.

Tipo de mudança

  • Correção de bug (não quebra nada existente)
  • Novo recurso (não quebra nada existente)
  • Mudança que quebra compatibilidade (comportamento existente muda)
  • Documentação / tooling (sem alteração no código da extensão)

Impacto em storage

  • Não mexe em chaves de storage
  • Adiciona uma chave nova (não renomeia nem remove as existentes)
  • Atenção: renomeia/remove uma chave existente (explique a migração abaixo)

Testes

  • Rodei npm run lint sem erros
  • Rodei npm test sem falhas
  • Testei manualmente em uma live real do YouTube — Sim (o próprio canário: executado de ponta a ponta localmente — navegador + extensão + live real; relatório com as 8 APIs presentes)
    • Navegador testado: Chrome (puppeteer, extensão descompactada)

Screenshots

N/A — tooling de CI.

Checklist final

  • O código segue o estilo do projeto (ESLint passa)
  • Atualizei a documentação relevante (README, CHANGELOG, etc.) quando aplicável
  • Estou de acordo com a licença GPL-3.0-or-later do projeto

🤖 Generated with Claude Code

https://claude.ai/code/session_01AiLQznJ15KbuK73b9YxAjS

juansilvadesign and others added 2 commits July 9, 2026 16:05
…popup

Novo engine/telemetry.js (dual-load, como o controller): um log limitado de
amostras (1/s, 2 min — [t, latência, buffer, velocidade aplicada]) e contadores
de sessão por stream (tempo assistido, atraso recuperado pelo catch-up, pulos
para o ao vivo, travadas, latência média ponderada). Tudo vive só na memória
da aba; nada é persistido nem enviado.

O popup ganha duas ações no painel avançado: "Diagnóstico" copia um JSON com
as amostras, caps do player, estado do controlador, modo e configurações —
pronto para issues (o template de bug agora traz o bloco) — e "Resumo da
sessão" copia um texto curto e compartilhável. A ponte popup→content→página
segue o padrão do video-meta: só responde o frame que tem live de verdade;
sem live, o timeout do popup vira o aviso "abra uma live".

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AiLQznJ15KbuK73b9YxAjS
Todo dia, scripts/canary.mjs (npm run canary) carrega a extensão descompactada
num Chrome via puppeteer (devDep que o repo já tinha), abre uma live 24/7
(padrão: Lofi Girl; CANARY_VIDEO para trocar) e verifica as duas coisas que
hoje só relatório de usuário revelava DEPOIS do estrago: (1) as oito APIs
privadas do player que o motor usa ainda existem — o risco que o próprio
ROADMAP chama de existencial — e (2) o motor liga e amostra a live de verdade,
provado pela ponte de diagnóstico (_zd_diag_request/_response). Duas tentativas
com navegador novo; relatório em canary-report.json (gitignored, vira artifact).

Falha abre/atualiza UMA issue deduplicada (label canary) — nunca bloqueia
merge, porque YouTube visto de IP de datacenter é instável por natureza
(validado na prática: nesta rede a live carrega playability UNPLAYABLE mesmo
com todas as APIs presentes; o relatório agora distingue esse caso de uma
mudança real de API e manda verificar localmente).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AiLQznJ15KbuK73b9YxAjS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant