Documentar Tela — guia visual (docx) com prints reais
Objetivo: produzir um .docx que explica uma feature navegando o app real, tirando os
prints de cada passo e escrevendo o texto ao redor. Nasceu do guia
D:\AFL\presentations\Visibilidade_Como_Funciona.docx.
O harness fica em scripts/ (nesta pasta da skill) e é data-driven: você explora a
feature, escreve um shots.json (o que capturar) e um doc.json (a estrutura do
documento), e os scripts fazem o resto. Fluxos complexos podem ter um script Playwright
avulso — reaproveite scripts/pw.js (require('../..../scripts/pw')).
Pré-requisitos (checar rápido, não perguntar o óbvio)
- App rodando. Descubra a porta:
netstat -ano | grep LISTEN (Vite=5173, etc.) ou
pergunte a URL. Defina APP_BASE se não for http://localhost:5173.
- Credenciais. Default = seed afl-teste:
admin@aflteste.com.br / 1611.
Outro app? Peça e passe por env (APP_EMAIL, APP_PASS) + seletores se diferirem.
- Chrome instalado (os scripts usam
channel: chrome).
- Playwright disponível para os scripts. Uma vez só:
cd "<esta-pasta>/scripts" && npm i playwright (os browsers são globais, sem
re-download). Confirme com npm ls playwright nessa pasta.
- Diretório de trabalho = o scratchpad da sessão. É onde vão
state.json,
shots.json, doc.json e os .png. Rode os node/python com o cwd no scratchpad
(a resolução de módulo do Playwright vem da pasta do script, então funciona).
Fluxo
- Entender a feature. Se não conhecer, faça uma exploração rápida do código do front
(rotas, componentes, labels pt-BR) — um subagente Explore é ótimo para isso. Liste as
telas/estados na ordem que o usuário percorre.
- Logar:
node <scripts>/login.js → gera state.json no cwd. (Faça uma vez.)
- Achar rotas/seletores/dados reais:
node <scripts>/probe.js /rota imprime botões,
links, inputs, selects (com opções) e o texto da página. Use para descobrir IDs de
rota (clientes/empresas), nomes de botões e para escolher uma entidade que tenha
dados de verdade (empresa com relatórios, template com widgets) — prints vazios são ruins.
- Montar
shots.json (veja examples/shots.visibilidade.json). Um shot por tela/estado.
Regras de ouro:
- Prefira
clickButton (por role) e clickHasText (escopo + texto único, ex. um CNPJ)
a clickText genérico — este último clica no menu de navegação por engano.
- Selecione uma empresa-modelo / entidade com dados antes de capturar canvases/dashboards.
- Para modais, capture logo após abrir; para dropdowns, capture com ele aberto.
settleMs maior (5000-7000) em telas que buscam dados (dashboards, previews).
- Capturar:
node <scripts>/shot.js shots.json <pastaSaida>. Confira o log (OK/FAIL).
- Revisar cada PNG abrindo-o (ferramenta Read na imagem). Refaça os que saíram com
tour aberto, menu aberto por engano, vazios ou cortados. Ajuste
shots.json e rode de novo.
- Escrever
doc.json (veja examples/doc.visibilidade.json): capa, intro (o que é +
fluxo em 1 linha), toc, sections (cada uma com paragraphs/bullets/steps e as
figures apontando os PNGs + legendas curtas), e glossary. Texto claro, pt-BR, tom de
guia — explique o "para quê", não só o "onde clicar".
- Gerar:
python <scripts>/gerar_docx.py doc.json <pastaDosPNGs>. Saída = campo
output do doc.json.
- Validar: confira que nº de imagens embutidas == nº de figuras e que os headings
batem (pequeno script python-docx). Entregue o caminho + resumo das seções e
ofereça ajustes (mais/menos prints, tom, PDF, capa com logo).
Onde salvar o docx
- AFL →
D:\AFL\presentations\{Feature}_Como_Funciona.docx (junto dos outros guias).
- Outro contexto → pergunte a pasta, ou proponha uma. Nome:
{Feature}_Como_Funciona.docx.
Referência das ações do shots.json
wait, waitFor, press, scrollBottom/scrollTop, clickButton (por nome/role),
clickText (+exact), clickSelector (CSS), clickHasText ({selector,text}), fill
({selector,value}), selectOption ({selector,value|label|index}). Detalhes no cabeçalho
de scripts/shot.js.
Variáveis de ambiente (todas opcionais)
APP_BASE, APP_EMAIL, APP_PASS, APP_EMAIL_SEL, APP_PASS_SEL, APP_LOGIN_BTN,
APP_LOGIN_PATH, STATE_PATH, TOUR_KEYS (chaves de localStorage p/ matar onboarding;
default main_tour_completed,workflow_tour_completed), VW/VH/DSF, HEADED=1.
Regras
- Sempre prints reais do app rodando — nada de placeholder. Se o app não estiver de pé,
avise e pare (ou pergunte a URL).
- Desligue tours/onboarding (o
pw.js já injeta as TOUR_KEYS); se aparecer outro overlay,
adicione a chave em TOUR_KEYS.
- Use dados de verdade nos prints (escolha entidade com movimento).
- Se uma tela do produto for mockada/simulada, diga isso no texto (não venda como real).
- Deixe
shots.json, doc.json, scripts avulsos e PNGs no scratchpad (não no projeto).
- Não commitar nada — o Gabriel revisa e commita. (ver memória
nao-commitar.)
- Responder e escrever o documento em português.
1---2name: documentar-tela3description: Gera um DOCX-guia explicando uma tela/feature de um sistema web que está RODANDO, tirando prints reais da própria aplicação (via Playwright/Chrome) e montando o documento no estilo "Como funciona" (capa + seções numeradas + print + legenda). Use quando o Gabriel pedir para "criar um docx explicando a X", "documentar a feature/tela Y com prints/screenshots", "fazer um guia da tela Z", "explicar o módulo W com telas", "algo como o afl-connect-v3-validacao / Visibilidade_Como_Funciona". NÃO é a skill `documentar` (aquela é spec/resolução por ID de tarefa, sem prints) — esta é o guia VISUAL de uma feature com capturas reais.4---56# Documentar Tela — guia visual (docx) com prints reais78Objetivo: produzir um `.docx` que explica uma feature navegando o app real, tirando os9prints de cada passo e escrevendo o texto ao redor. Nasceu do guia10`D:\AFL\presentations\Visibilidade_Como_Funciona.docx`.1112O harness fica em `scripts/` (nesta pasta da skill) e é data-driven: você **explora** a13feature, escreve um `shots.json` (o que capturar) e um `doc.json` (a estrutura do14documento), e os scripts fazem o resto. Fluxos complexos podem ter um script Playwright15avulso — reaproveite `scripts/pw.js` (`require('../..../scripts/pw')`).1617## Pré-requisitos (checar rápido, não perguntar o óbvio)18191. **App rodando.** Descubra a porta: `netstat -ano | grep LISTEN` (Vite=5173, etc.) ou20 pergunte a URL. Defina `APP_BASE` se não for `http://localhost:5173`.212. **Credenciais.** Default = seed **afl-teste**: `admin@aflteste.com.br` / `1611`.22 Outro app? Peça e passe por env (`APP_EMAIL`, `APP_PASS`) + seletores se diferirem.233. **Chrome instalado** (os scripts usam `channel: chrome`). 244. **Playwright disponível para os scripts.** Uma vez só:25 `cd "<esta-pasta>/scripts" && npm i playwright` (os browsers são globais, sem26 re-download). Confirme com `npm ls playwright` nessa pasta.275. **Diretório de trabalho** = o scratchpad da sessão. É onde vão `state.json`,28 `shots.json`, `doc.json` e os `.png`. Rode os `node`/`python` com o cwd no scratchpad29 (a resolução de módulo do Playwright vem da pasta do script, então funciona).3031## Fluxo32331. **Entender a feature.** Se não conhecer, faça uma exploração rápida do código do front34 (rotas, componentes, labels pt-BR) — um subagente Explore é ótimo para isso. Liste as35 telas/estados na ordem que o usuário percorre.362. **Logar:** `node <scripts>/login.js` → gera `state.json` no cwd. (Faça uma vez.)373. **Achar rotas/seletores/dados reais:** `node <scripts>/probe.js /rota` imprime botões,38 links, inputs, selects (com opções) e o texto da página. Use para descobrir IDs de39 rota (clientes/empresas), nomes de botões e para **escolher uma entidade que tenha40 dados de verdade** (empresa com relatórios, template com widgets) — prints vazios são ruins.414. **Montar `shots.json`** (veja `examples/shots.visibilidade.json`). Um shot por tela/estado.42 Regras de ouro:43 - Prefira `clickButton` (por role) e `clickHasText` (escopo + texto único, ex. um CNPJ)44 a `clickText` genérico — este último clica no menu de navegação por engano.45 - Selecione uma **empresa-modelo / entidade com dados** antes de capturar canvases/dashboards.46 - Para modais, capture logo após abrir; para dropdowns, capture com ele aberto.47 - `settleMs` maior (5000-7000) em telas que buscam dados (dashboards, previews).485. **Capturar:** `node <scripts>/shot.js shots.json <pastaSaida>`. Confira o log (OK/FAIL).496. **Revisar cada PNG** abrindo-o (ferramenta Read na imagem). Refaça os que saíram com50 tour aberto, menu aberto por engano, vazios ou cortados. Ajuste `shots.json` e rode de novo.517. **Escrever `doc.json`** (veja `examples/doc.visibilidade.json`): capa, `intro` (o que é +52 fluxo em 1 linha), `toc`, `sections` (cada uma com `paragraphs`/`bullets`/`steps` e as53 `figures` apontando os PNGs + legendas curtas), e `glossary`. Texto claro, pt-BR, tom de54 guia — explique o "para quê", não só o "onde clicar".558. **Gerar:** `python <scripts>/gerar_docx.py doc.json <pastaDosPNGs>`. Saída = campo56 `output` do doc.json.579. **Validar:** confira que nº de imagens embutidas == nº de figuras e que os headings58 batem (pequeno script python-docx). Entregue o **caminho** + resumo das seções e59 ofereça ajustes (mais/menos prints, tom, PDF, capa com logo).6061## Onde salvar o docx6263- AFL → `D:\AFL\presentations\{Feature}_Como_Funciona.docx` (junto dos outros guias).64- Outro contexto → pergunte a pasta, ou proponha uma. Nome: `{Feature}_Como_Funciona.docx`.6566## Referência das ações do shots.json6768`wait`, `waitFor`, `press`, `scrollBottom`/`scrollTop`, `clickButton` (por nome/role),69`clickText` (+`exact`), `clickSelector` (CSS), `clickHasText` (`{selector,text}`), `fill`70(`{selector,value}`), `selectOption` (`{selector,value|label|index}`). Detalhes no cabeçalho71de `scripts/shot.js`.7273## Variáveis de ambiente (todas opcionais)7475`APP_BASE`, `APP_EMAIL`, `APP_PASS`, `APP_EMAIL_SEL`, `APP_PASS_SEL`, `APP_LOGIN_BTN`,76`APP_LOGIN_PATH`, `STATE_PATH`, `TOUR_KEYS` (chaves de localStorage p/ matar onboarding;77default `main_tour_completed,workflow_tour_completed`), `VW`/`VH`/`DSF`, `HEADED=1`.7879## Regras8081- Sempre **prints reais** do app rodando — nada de placeholder. Se o app não estiver de pé,82 avise e pare (ou pergunte a URL). 83- Desligue tours/onboarding (o `pw.js` já injeta as `TOUR_KEYS`); se aparecer outro overlay,84 adicione a chave em `TOUR_KEYS`.85- Use dados de verdade nos prints (escolha entidade com movimento).86- Se uma tela do produto for **mockada/simulada**, diga isso no texto (não venda como real).87- Deixe `shots.json`, `doc.json`, scripts avulsos e PNGs no **scratchpad** (não no projeto).88- **Não commitar** nada — o Gabriel revisa e commita. (ver memória `nao-commitar`.)89- Responder e escrever o documento em português.