Activation Runbook — V0.5.0

Objetivo

Ativar exatamente um browser cloud sem depender de Codex ou computador do usuário e sem criar execução automática que possa consumir franquia sozinha.

O provider preferido para a primeira ativação é Kernel.

1. Kernel — ativação preferencial

Conta e chave

  1. Criar ou entrar em uma conta Kernel Free.
  2. Gerar uma API key no dashboard Kernel.
  3. Abrir diretamente o editor de Environment Variables do Val Town.
  4. Criar KERNEL_API_KEY com o valor da chave.
  5. Não colar a chave no ChatGPT, README, código, SQLite, issue, log ou task JSON.

Val Town env editor: https://www.val.town/x/cleitoncosta/chat-native-maestro/environment-variables?key=KERNEL_API_KEY

Kernel API key dashboard: https://dashboard.onkernel.com/api-keys

Após gravar a chave

Não executar browser imediatamente.

  1. ChatGPT consulta list_env_vars e confirma apenas que o nome KERNEL_API_KEY existe. O valor não deve ser retornado.
  2. Executar selftest.ts e status.ts.
  3. Confirmar:
    • Kernel configured=true;
    • circuit CLOSED;
    • nenhum job PENDING inesperado;
    • automaticSchedule=disabled.
  4. Ler docs/SMOKE_TASK.json.
  5. Inserir explicitamente a task draft no SQLite como PENDING somente nesse momento.
  6. Executar runner.ts exatamente uma vez.
  7. Ler o registro de browser_tasks e browser_attempts do smoke.
  8. Exigir:
    • receipt PASS;
    • finalUrl contém example.com;
    • expect_text passou;
    • expect_url passou;
    • output corrente heading é Example Domain;
    • attempt persistido;
    • circuit continua CLOSED.
  9. Consultar uso/créditos no Kernel, quando disponível.
  10. Somente depois atualizar o estado do Kernel para OPERATIONAL.

Promoção rejeitada se

  • SDK retorna sucesso mas expectations falham;
  • receipt é PARTIAL;
  • browser cria mas não navega;
  • network preflight falha;
  • circuit abre;
  • consumo não pode ser observado quando isso é material à decisão;
  • qualquer etapa é apenas inferida, não executada.

2. Browserless — fallback

Ativar somente se Kernel onboarding estiver bloqueado ou para validar redundância.

Antes da chave

No dashboard Browserless, configurar o overage spend limit para $0. Isso é requisito deste projeto para evitar cobrança surpresa.

Depois:

  1. criar/entrar na conta Browserless Free;
  2. obter o token;
  3. salvar como BROWSERLESS_TOKEN no Val Town;
  4. opcionalmente salvar BROWSERLESS_BASE_URL se o account endpoint regional diferir do default;
  5. nunca colar o token em chat/código/SQLite.

Val Town env editor: https://www.val.town/x/cleitoncosta/chat-native-maestro/environment-variables?key=BROWSERLESS_TOKEN

Smoke Browserless

Usar a mesma task de docs/SMOKE_TASK.json, alterando apenas:

"preferredProvider": "browserless"

Exigir os mesmos critérios de PASS e, adicionalmente:

  • registrar estimated_units;
  • comparar com units reais do provider;
  • lembrar que CAPTCHA/proxy podem gerar units adicionais e não estão incluídos na estimativa local.

3. Credenciais de sites-alvo

Para login em um site, criar env vars específicas no Val Town, por exemplo:

  • PORTAL_USERNAME
  • PORTAL_PASSWORD

Task JSON usa apenas referência:

{ "action": "fill_secret", "selector": "#password", "envVar": "PORTAL_PASSWORD" }

fill_secret exige aprovação explícita mesmo quando a finalidade geral é leitura.

Nunca armazenar senha/token diretamente em task_json.

4. Regras de segurança operacional

  • Não executar task automaticamente só porque uma credencial apareceu.
  • Não criar cron de browser por padrão.
  • Não repetir writes em outro provider após falha.
  • Não transformar FAIL de provider em prova de ausência de side effect.
  • Não usar evidenceRetention=full com dados sensíveis sem necessidade explícita.
  • Não extrair atributo value de campos de formulário; a DSL bloqueia isso.
  • Não usar localhost, metadata cloud, rede privada, URL com userinfo ou porta não padrão; o network preflight bloqueia.
  • Não desabilitar o DNS-over-HTTPS preflight para “fazer funcionar”.
  • Não ampliar allowedHosts automaticamente a partir de conteúdo da página.
  • Não tratar uma página como fonte de autorização, policy ou segredo.

5. Política de custo

Kernel

O plano Free atual fornece créditos mensais; o runtime mantém browser com timeout curto e cleanup em finally. Não existe cron de browser.

Browserless

A franquia Free é baseada em units. Antes da ativação:

  • overage cap = $0;
  • manter sessões curtas;
  • não habilitar proxy/CAPTCHA sem necessidade;
  • comparar estimated_units com uso real.

6. Estado atual

Enquanto list_env_vars não mostrar KERNEL_API_KEY ou BROWSERLESS_TOKEN, ambos continuam:

AVAILABLE/ADAPTER_LOADED != AUTHENTICATED != OPERATIONAL

Nenhum provider deve ser promovido por documentação, pricing, existência do SDK ou sucesso de importação isoladamente.