Este módulo cobre os casos difíceis. Alguns já funcionam no capture.mjs; outros ainda exigem dirigir o agent-browser na mão e estão no backlog. Cada tópico marca claramente o status.
📜 Scroll antes do screenshot roadmap
Páginas longas exigem scrollIntoView na seção antes de capturar. Hoje, feito na mão.
O capture.mjs não rola a página. Nas telas do inemaVOX, foi preciso dirigir o agent-browser na mão, fazendo scrollIntoView por seção antes de cada screenshot.
Por isso é a prioridade nº 1 do backlog. Enquanto não chega, rolar na mão antes de medir/capturar funciona — só dá mais trabalho.
⚛️ Inputs controlados por React/Vue parcial
Setar .value mostra o texto mas não dispara o estado — botões ficam disabled.
- ✗
el.value = "768"via eval puro - ✗ O React não percebe → botão segue disabled
- ✗ O screenshot sai com o controle inativo
- ✓
setValuedisparainput+change - ✓ Ideal (roadmap):
fillnativo do Playwright - ✓ Conferir que o botão habilitou no shot
O ideal é o capture.mjs chamar agent-browser fill @ref (fill nativo do Playwright) em vez de setar .value — simula digitação real e dispara o estado de forma confiável.
⏱️ Esperar CONDIÇÃO, não tempo fixo roadmap
Hoje o capture usa wait (ms). O ideal é um waitFor de texto/seletor.
| Abordagem | wait (ms) — hoje | waitFor — roadmap |
|---|---|---|
| Critério | tempo fixo | condição real |
| Geração lenta | chuta a folga | espera o <img> |
| Risco | cedo demais / lento | sai na hora certa |
O flux2-klein levou ~2,5 min no POC. Antes do screenshot do resultado, faça poll por um <img> de fato carregado no painel — não confie só no relógio. Trocar wait por waitFor é o backlog nº 3.
🔄 Fluxos assíncronos multi-estado feito na mão
Analisar → aprovar → dublar → concluído: capturados como sub-passos nomeados, com poll de conclusão.
Dispara o processamento; o status muda. Captura o estado "analisando".
O fluxo para até a aprovação. Captura o estado de espera e a ação de aprovar.
Processo longo; poll de conclusão entre as capturas.
Resultado final, com zoom. Encerra o walkthrough antes da CTA.
No POC, o poll de conclusão (poll-job*.sh) foi feito fora do capture.mjs. Embuti-lo como sub-passos nomeados com poll é o backlog nº 4.
⏸️ Estados como waiting_approval
Estados disparados por evento (não por tempo) precisam de um poll de status — não de um wait fixo.
Um waiting_approval muda quando alguém aprova — não quando o relógio bate. Esperar X ms pode capturar antes da hora (ou tarde demais).
O waiting_approval é o caso de uso que justifica o waitFor do tópico 3: esperar uma condição (status mudou) em vez de um tempo.
⚠️ Armadilhas de captura
Os erros que mais custam tempo — aplique antes de renderizar. Detalhe em gotchas.md.
- ✗ Viewport inconsistente → cursor erra o alvo
- ✗ Refs @eN deslocam após mudança de DOM
- ✗
eval --jsonaninhado: data URL emdata.result - ✗ Screenshot estourando os limites do canvas
- ✓ Mesmo viewport para bbox e shot; recapturar tudo
- ✓ CSS selectors / {tag,text} + re-snapshot
- ✓ Ler
data.result; decodificar base64 se salvar - ✓ Viewport 1280×800 → print x320..1600, y148..948
Se o app gera um arquivo (ex.: imagem), pegue o src (data: URL) via eval — que vem em data.result — e decodifique base64 para PNG, ou clique no botão de download.
🗺️ O que já funciona vs o que é roadmap
A fronteira honesta da skill: o que o capture.mjs faz hoje e o que ainda exige a mão.
- ✓ actions.json: fill, click, clickText, setValue, wait
- ✓ Bboxes via getBoundingClientRect → steps.json
- ✓ 1 shot por estado + moldura + cursor + zoom + CTA
- ✓ Páginas longas e multi-estado, dirigindo na mão
- 1. Scroll/scrollIntoView no capture.mjs
- 2. fill nativo do Playwright para inputs React
- 3. waitFor (condição) em vez de wait fixo
- 4. Poll multi-estado embutido · 5. 9:16 · 6. v3 gravação
Estado dinâmico vira print estático (movimento real seria v3, gravar a tela). App com login precisa de credenciais de teste. O formato natural é 16:9 — 9:16 exigiria reenquadre.
🎯 Resumo do módulo
- ✓ Páginas longas: scrollIntoView na mão hoje (scroll = backlog nº 1)
- ✓ Inputs React: use setValue (dispara input/change); fill nativo é nº 2
- ✓ Esperar condição (waitFor) > tempo fixo; poll por <img> real (nº 3)
- ✓ Multi-estado (analisar→aprovar→dublar→concluído) com poll (nº 4)
- ✓ Aplique os gotchas antes de renderizar; marque sempre o que é roadmap