# Visão — trabalho e operação ## Correção A-0296/A-0297 sobre o portal existente O portal https://visao.oddsbet.tech já foi implantado pelo coordenador (A-0302). Esta revisão local não altera a infraestrutura, o login, o diário persistente nem a VPS. O pacote precisa ser promovido pelo coordenador; não copiar infraestrutura antiga ou voltar ao compartilhamento de rede do aplicativo com TLS. A entrada chama-se Visão, tem Abrir PONTE em destaque, frentes EM PARALELO, entrega anterior com limites, próximo passo PREVISTO com dependência e atalhos para as superfícies existentes. Decisão humana só aparece quando `decision` contém pergunta concreta e impacto. Nenhum relógio global é apresentado como data máxima de todos os fatos. A observação do estado, a última tentativa de detalhe e o horário do fornecedor são distintos; este último não existe no contrato atual de status e não é inventado. ### Atualização de trabalho sem agente/cron de IA `GET /api/visao/work` usa a autenticação existente e lê somente `PROGRESS_PREVIEW_WORK_FILE`, quando definido, ou `work.json` no mesmo diretório do arquivo explícito `PROGRESS_PREVIEW_STATUS_FILE`. Não procura arquivos, não lê FRENTES em tempo de execução, não varre runtime/repositório e não mede processos. Ausente/inválido/maior que 1 MiB: 503. Query de seleção de arquivo e escrita HTTP são recusadas. Contrato: `work.schema.json`; validador/projeção: `work-contract.mjs`; exemplo real datado pronto para alimentar inicialmente o arquivo: `work_snapshot.json`. Campos: `schema=visao-work/1`, `observed_at`, `current[]`, `previous`, `next`, `decision`. Cada frente contém nome, executor, estado, natureza da evidência, relógio, ação, limite e referências HTTPS. `basis=declared` nunca vira prova de execução atual; `service_observation` mede serviço, não agente. `next.state` é obrigatoriamente `awaiting`, com `classification=PREVISTO|RECOMENDADO` e dependência. `decision=null` não gera alerta vazio. O coordenador escreve o arquivo sanitizado atomicamente após eventos de início/conclusão/mudança. Preservar os horários desses eventos, mantendo `observed_at` pelo menos igual ao registro mais recente contido. Não atualizar relógios apenas por consulta. A UI relê a cada 30 segundos, preserva a última versão em erro e informa quando só há snapshot datado. O horário HTTP está em `X-Work-Response-At`, separado. Referências aceitam HTTPS sem usuário/senha, query ou fragmento arbitrário. Campos desconhecidos são descartados; padrões de credenciais e caminhos privados em texto são recusados. Isso não substitui a revisão de conteúdo público pelo coordenador. `import_work_evidence.mjs DIRETORIO_EXPLICITO` projeta somente recibos nomeados e a declaração FRENTES, registrando identificação de conteúdo em `work_evidence.json`. O handoff posterior do consumidor prevalece sobre o início antigo: executor encerrado, recuperação não concluída, candidato não promovido. Não foram somadas leituras parciais como ofertas recuperadas. Para promoção seletiva, incluir os novos `visao-work.js`, `visao-work.css`, `work-contract.mjs`, `work.schema.json`, `work_snapshot.json`, `work_evidence.json` e `visao_links.json`, além dos arquivos atualizados listados no inventário. O servidor importa `work-contract.mjs`; ele é obrigatório mesmo se work.json ainda estiver ausente. Conferir o repasse autenticado da nova rota no gateway do coordenador. Usar o mesmo diário de comentários existente, sem migração/cópia do Atlas. QA: incluir `tests/progress-preview-work.test.mjs` na suíte Node. `qa_preview.cjs` confere os marcadores A0296, decisão concreta versus ausência de decisão, atualização por arquivo/evento, relógios preservados, fallback e comentários desktop/mobile, além da regressão anterior. Nenhuma credencial real é usada. ## Histórico da entrega visual anterior ## Entrega atual — monitor operacional e comentários protegidos A abertura é MONITOR. Nove fontes do recibo A-0285 (19/09/2026 21:52:46 BRT) aparecem como snapshot histórico, nunca como leitura atual. A integração terminou localmente (123 aprovados, 31 PG skips), sem aceite remoto. O carregamento inicial do consumidor falhou; isso não significa ausência de contrato. O fluxo legível tem sete blocos: coletor, guarda de CRU, publicador, normalização, PostgreSQL, API e tela. As rotas nativa e OddsAlerts permanecem separadas. O plano, fontes e mapa funcional existentes não foram substituídos. Geração atual: `python docs/progresso/gerar.py`, `python docs/progresso/gerar.py --check` e `python docs/archify/gerar.py`. Este último reutiliza o Archify fixado e acrescenta descrições/inspector legíveis. Nunca editar os HTMLs derivados à mão. Proveniência: `raw_snapshot.json`, `integration_snapshot.json` e `snapshot_provenance.json` são projeções dos dois recibos explicitamente selecionados. `import_evidence.mjs` recebe somente os caminhos desses recibos; não consulta rede, runtime, .env ou originais privados. A hora de geração é independente do relógio das evidências. ### Preview pronto para publicação pelo coordenador Usar cópia congelada com inventário SHA256; nunca publicar a árvore de desenvolvimento inteira. O processo `node tools/progress-preview.mjs PORTA` escuta somente 127.0.0.1. Publicação TLS/proxy/túnel e leitura remota são responsabilidade do coordenador, não foram executadas nesta entrega. Variáveis de configuração (valores privados não devem aparecer no terminal ou no pacote): - `PROGRESS_PREVIEW_AUTH_FILE`: arquivo privado de autenticação Basic existente, obrigatório. Não criar credenciais reais no repositório. - `PROGRESS_PREVIEW_DOCS_ROOT`: diretório docs da cópia congelada. - `PROGRESS_PREVIEW_STATUS_FILE`: único arquivo operacional explicitamente selecionado, alimentado atomicamente pelo coordenador com o contrato de `start_raw.py/verification.json`. Não apontar para CRU ou .env. - `PROGRESS_PREVIEW_FEEDBACK_DIR`: diário privado persistente, fora do pacote e distinto do Atlas. Sem essa configuração, não há botão de gravação. - `PROGRESS_PREVIEW_PUBLISHED_AT`: ISO com fuso do instante real de publicação, informado pelo coordenador. Ausente = publicação não informada. O servidor não inventa esse horário. - `PROGRESS_PREVIEW_ATLAS_URL`: link opcional fornecido pela sessão responsável. Apenas HTTP(S), sem credenciais, query ou fragmento. Links contendo chaves não devem ser incorporados. Ausente = nenhuma URL presumida. `GET /api/visao/status` exige a mesma autenticação dos documentos. Retorna `observed_at`, `sources`, `source_count`, `running_count`, `baseline_unchanged`, `harmonization`, `online_claimed`, `window`. Campos de fonte seguem o contrato existente. Caminhos privados, host, deployment e campos desconhecidos não saem na resposta; mensagens livres de erro/pausa viram `redacted` salvo códigos operacionais conhecidos. Não aceita parâmetro de arquivo, escrita nem seleção de caminho via HTTP. Arquivo ausente, inválido ou maior que 1 MiB retorna 503 sem detalhes privados. A UI consulta a cada 30 segundos, sem renovar `observed_at`. Mais de 90 segundos indica medição desatualizada, não falha automática do coletor. Em erro, mantém a última medição e mostra falha. O header `X-Status-Response-At` é o horário de resposta, não de evidência. `file://` funciona sem endpoint, como leitura histórica e sem gravação de comentários. Os comentários reutilizam o backend existente: escolher ponto, contradição/ajuste/decisão, salvar e reler com versão SHA256, autor e horário BRT/ISO. Página renderizada de versão antiga não pode receber a versão nova silenciosamente. Registro não executa código, não muda regra e não copia o diário do Atlas. ### QA atual - `node --test tests/progress-preview-status.test.mjs tests/progress-preview-feedback.test.mjs` - `python -m pytest docs/progresso/test_monitor.py -q` em ambiente com pytest. - `node docs/progresso/qa_preview.cjs` com Playwright/Chrome disponíveis (variáveis `PROGRESS_PLAYWRIGHT_MODULE` e `PROGRESS_BROWSER_PATH` substituem os caminhos locais de fallback). O ensaio de preview usa servidor real, autenticação aleatória e diário isolados no temporário, encerrando/removendo apenas os recursos próprios. Recibo e capturas atuais em `qa/preview/`. `qa.cjs`, `qa_monitor.cjs` e capturas antigas são históricos e não certificam este artefato. Não executar o servidor genérico histórico de QA para publicar o projeto. ## Histórico anterior — não usar como estado atual ## Abertura Monitor e rastreabilidade — correção A-0274 A página abre em Situação da VPS: snapshot datado, separação baseline/TEST/código, responsabilidades, próxima entrega e limites. Os seis cartões são um resumo de responsabilidades, NÃO uma cadeia única. Arquitetura mostra duas rotas confrontadas com funções reais: nativas por manifesto `/v4/captures`, normalizadas no servidor; OddsAlerts normalizada no publicador e enviada a `/v4/batches`. Outbox emissora e recepção autenticada são separadas. `mapa_funcional.json` descreve 10 funções e 13 ligações. Cada detalhe traz função, entrada, saída, implantação, responsável, próximo passo e fontes exatas. `fontes_codigo.json` fixa paths relativos, símbolos, linhas e SHA-256 dos bytes locais observados; não afirma que a worktree inteira é release. `build_sources.py --pilot-root CAMINHO --engine-root CAMINHO` recompila esse índice por AST sem importar/executar código do produto. `monitor.py --snapshot-dir CAMINHO_DOS_SNAPSHOTS` importa ESTADO_VPS.json e FRENTES.json por allowlist para `snapshots.json`. Não copia task_file, caminhos locais ou env. Cada frente conserva horário próprio de observação. A interface indica envelhecimento documental após 30 minutos: isto é uma convenção de aviso, não SLA. Snapshots não alteram gates de publicação/online. Mudança de implantação exige revisar o mapa factual e o recibo específico; não reescrever o layout. Prova PG A-0272: `pg_verification.json`, projeção sanitizada com hash do recibo original. 91 testes em banco descartável não são instalação permanente. Inventário Docker não mede processos externos a Docker; ausência nele é ausência de comprovação, não impossibilidade de execução em outro lugar. O plano mestre e o plano de execução integral permanecem. Textos históricos não são autoridade automática sobre o estado; A-0274 corrige nomes e topologia. Fable é identificador técnico de pasta/pacote, ASTRA é autoria histórica, não nomes de componentes aprovados. Geração: importar snapshots; opcionalmente atualizar índice de fontes após revisão dos bytes; `tools/build-progress-operations.py`; `docs/progresso/gerar.py`; `docs/progresso/gerar.py --check`. QA: `pytest docs/progresso/test_monitor.py`, `node docs/progresso/qa_monitor.cjs` e `node docs/progresso/qa.cjs`, com as variáveis Playwright abaixo. CSS adicionais locais: monitor.css e functional.css. O Archify real continua fixado. Seu inspector nativo não comporta toda a proveniência exigida; o link gerado “Por que dizemos isso?” abre o inspector rico do painel. Não é substituição do Archify por SVG genérico. Em telas pequenas, use a lista funcional legível do painel; o diagrama Archify é panorâmico. ## Documentação anterior preservada (leia com os limites acima) Abra [index.html](index.html). A documentação local agora tem cinco áreas: plano de execução, arquitetura, casas/fontes, regras/decisões e evidências. A primeira tela apresenta a decisão de containers, a próxima entrega, as ondas com trabalho concreto e as frentes paralelas. Selecione uma entrega para ver ações, dependências, prova de aceite, responsabilidade e código reaproveitado. O plano mestre integral e o Archify têm acessos próprios. ## Escopo e corte Este documento representa o estado dos recibos e as decisões do plano. Não acompanha a VPS ao vivo nem executa coletas ou implantações. TEST tem três serviços e verificações sintéticas V1; preparo Linux não certifica rede, leitores, cobertura ou fluxo V4. OddsPapi permanece pausada; Bet365 própria em standby; RUN ainda não implantado no corte atual. Em 19/09, a meta canônica passou a ser pelo menos nove casas principais online. O primeiro lote real na VPS sondou dez fontes: oito nativas e OddsAlerts capturaram catálogo/detalhes; Pinnacle nativa recebeu HTTP 403. São sete das nove principais com captura própria, porque VBET/BetConstruct é adicional e não substitui BetMGM. O agregado OddsAlerts ainda não comprova Bet365 ou Pinnacle individualmente. Online permanece em zero enquanto publicação V4/PostgreSQL/API/consumidor e recorrência não tiverem suas próprias provas. O corte do painel vem dos recibos datados. Preparo, captura real, publicação e operação são marcos separados. A lista histórica de provas de 17/09 continua acessível, mas o cabeçalho usa o lote real mais recente por fonte. O plano mestre, suas decisões e arquitetura não são modificados pelo compilador de resultados. A origem completa está em [Plano mestre](../plano-mestre/index.html), preservada de “Planejar nova VPS de odds”. Regras e decisões mostram as onze fases originais, mudanças atuais e índice de cobertura. O ensaio de 10–20 casas é paralelo; coleta de rede pode avançar após agenda/workers seguros, enquanto V4 avança em outra frente. Antes do aceite operacional, o subconjunto precisa convergir no produto completo. ## Fonte e geração | Arquivo | Papel | |---|---| | plano_execucao.json | Plano canônico: ondas, tarefas, escolhas, políticas e rastreabilidade | | dados_operacionais.json | Compilação do plano com fontes, componentes, estado e evidências | | meta_principais.json | Cópia documental gerada da meta canônica em config/goal/principal-houses.json, com hash da origem | | progresso.json | Estado histórico das fases e fatos de preservação/preparo | | template.html | Estrutura da aplicação e JSON incorporado com escape seguro | | app.js | Navegação, busca, filtros, mapa e detalhes; sem fetch | | styles.css | Layout responsivo com recursos locais | | gerar.py | Validação e geração usando a biblioteca padrão Python | | render_receipt.json | Hash do HTML, dos dados e dos recursos que ele usa | | qa.cjs e qa/ | QA em navegador e capturas do artefato identificado | A atualização segue a compilação existente do projeto: ```powershell python tools/build-progress-operations.py python docs/progresso/gerar.py python docs/progresso/gerar.py --check ``` Não edite o HTML gerado. O gerador verifica IDs, dependências obrigatórias e alternativas, ondas, frentes, relações e caminhos de evidências. Estados e critérios continuam exigindo revisão semântica das provas; não existe porcentagem global de conclusão. O compilador lê `config/goal/principal-houses.json` e os recibos `docs/validation/source_probe_*.json` com schema `vpsnova-source-probe-result/1`. Para cada fonte usa o resultado datado mais recente. Captura requer catálogo e detalhe capturados com originais completos, bytes e recibos; uma resposta 403 preservada não vira captura de odds. Esses recibos promovem somente o marco de captura. `online: true`, configuração habilitada ou importação não promovem publicação/operação. Quando houver novos recibos específicos de publicação e recorrência, seus contratos devem ser incorporados explicitamente antes de mudar esses marcos. As contagens distinguem fontes, casas principais, trabalhos, recibos originais e bytes. O campo de requests das nativas pode incluir WebSocket e não é somado como HTTP. As treze chamadas HTTP de OddsAlerts são identificadas apenas no detalhe desse conector. Nenhuma cobertura individual de bookmaker é inferida da captura agregada. O HTML incorpora o JSON e carrega apenas app.js e styles.css do mesmo diretório. Funciona por arquivo local e por HTTP. A política do servidor pode manter script-src 'self', styles locais/inline e connect-src 'none'. Nenhuma dependência, CDN ou fonte remota é necessária. ## Navegação e conteúdo - Plano: arquitetura adotada; ondas; entregas; organização por frente paralela; dependências; ações; aceite e responsabilidade. - Arquitetura: mapa clicável do sistema; cinco modelos de containers; custo/benefício; provas de código; imagem versus instância; TEST/RUN e promoção pelo mesmo digest; ambientes verificados. - Casas/fontes: 23 nativas, OddsAlerts e fontes em pausa/standby; busca por nome, provedor ou domínio; filtros por origem/leitor; próximo trabalho e evidências por fonte. - Regras/decisões: aceites do dono, políticas, formatos, responsabilidades, onze fases do plano mestre, reconciliação das mudanças e índice de cobertura. Metas originais aparecem como propostas sem medição; definições administrativas explicam quando são necessárias e o que realmente bloqueiam. OpenViking continua opcional, conforme o plano. - Evidências: registros datados com links aos arquivos e limites do que cada um comprova. Dependências “qualquer uma” são apresentadas separadamente das obrigatórias. Por exemplo, T1 requer um fluxo completo I2 ou I3, sem aguardar todos os caminhos. Os chips de entregas centrais não desenham dependências que não existem. Em celular, componentes são apresentados em lista clicável, preservando detalhes e relações sem reduzir um diagrama largo até ficar ilegível. Tabelas permitem rolagem horizontal quando necessário. O modal fecha com Escape, mantém o foco interno e devolve o foco ao item escolhido. ## Referências de desenho [diagram-design](https://github.com/cathrynlavery/diagram-design) orientou hierarquia, economia visual e distinção das relações. [Archify](../archify/index.html) é a visualização técnica preparada pelo integrador, com conteúdo PT-BR e controles próprios em inglês. O mapa embutido e a matriz são interfaces locais do plano, não o renderer Archify. A avaliação inicial permanece fundamentada no [SKILL.md de diagram-design](https://github.com/cathrynlavery/diagram-design/blob/9874ad73813715fc36875e45afd9cd94c68f3c3f/skills/diagram-design/SKILL.md) e no [SKILL.md de Archify](https://github.com/tt-a1i/archify/blob/72c750bb070d95171dbb2244e5b62b1b7da69c12/archify/SKILL.md). A interface foi refeita para preservar o conteúdo do plano completo, em vez de reduzi-lo a uma lista de fases. ## Verificação reproduzível Use o Playwright já instalado, sem baixar pacotes: ```powershell $env:PROGRESS_PLAYWRIGHT_MODULE = 'CAMINHO/para/node_modules/playwright' $env:PROGRESS_BROWSER_PATH = 'CAMINHO/para/chrome.exe' node docs/progresso/qa.cjs ``` O teste abre um servidor temporário apenas em 127.0.0.1, aplica CSP sem scripts inline executáveis e o encerra ao finalizar. Exercita navegação, busca, filtros, dependências alternativas, modais, teclado, mapa e cobertura de conteúdo em desktop e celular. O recibo contém o hash exato do HTML e dos recursos. Capturas automáticas e inspeção perceptiva ficam separadas em qa/qa_receipt.json e qa/REVISAO_VISUAL.md.