Graduar um recurso do Labs
A graduação remove o switch de Labs de um recurso e o torna um recurso normal. Duas decisões separadas, tomadas pelo proprietário antes de qualquer código:
- Sair do Labs: o recurso ganha um local permanente (sua própria página de configurações ou plugin) e perde a terminologia "Labs".
- Padrão: ativado por padrão, ou ainda desativado por padrão.
Elas são independentes. #197029 tentou ambas primeiro, depois enviou apenas a primeira: o Advisor saiu do Labs, mas permaneceu desativado. Pergunte qual é desejada; não presuma que "graduar" signifique "ativado por padrão".
Precedentes: Swarm ativado por padrão (#136514), Tool Search ativado por padrão (#154068), UI de plugin nativa ativada sem opt-in do Labs (de50262a1f96), recursos do Labs movidos para Configurações (#145460), Advisor saiu do Labs e ainda desativado (#197029).
Antes do PR
- Meça custo ou risco na rota real se o recurso custa dinheiro ou tokens, ou altera o comportamento para usuários que nunca optaram. Números de hoje de mocks ou testes unitários não são prova. #197074 mesclou uma alegação de custo de cache de um mock que provedores ao vivo refutaram, e foi revertido em #197175. Use a medição ao vivo que os próprios PRs do recurso já estabeleceram, e coloque os números no corpo do PR.
- Resolva defeitos conhecidos primeiro. A graduação do Advisor esperou suas correções de cache fork (#197203, #197223, #197224, #197226) porque, se ativado por padrão, teria cobrado de cada usuário o custo não armazenado em cache.
- Encontre o caminho de ativação que permanece. Depois que a linha do Labs for removida, os usuários ainda devem poder ativar o recurso pela UI. Um plugin empacotado usa Configurações → Plugins → → Ativar; um recurso principal precisa de sua página de configurações. Adicione um switch somente se nenhum existir.
A mudança
- Padrão. Altere-o somente se o proprietário escolheu ativado por padrão:
enabledByDefaultde um plugin empacotado emopenclaw.plugin.json, ou o padrão de configuração principal. Umfalseexplícito existente (ou o valor de opt-out do recurso) deve continuar funcionando, e umtrueexistente deve permanecer ativado. Nunca adicione uma migração que reescreva configurações salvas para alterar a escolha de alguém. - Labs. Remova a entrada de
ui/src/pages/labs/labs-registry.tse tudo que apenas ela usava: linhas ou slots delabs-page.tsx, entradas delabs-feature-state.ts, strings e testes. - Documentação. Mova a seção do recurso de
docs/concepts/experimental-features.mdpara sua própria página de referência. Deixe uma nota de um parágrafo lá com a âncora antiga, informando que o recurso foi graduado, seu padrão e onde ativá-lo. Atualize a lista "Labs inclui ..." e a tabela "Flags atualmente documentadas". - Terminologia. Remova "Experimental" e "OpenClaw Labs" da descrição do manifesto, descrição do pacote, README, resumo do plugin e qualquer texto voltado para o usuário ou modelo, como prefixos de prompt.
- Arquivos gerados. Regere, nunca faça merge manual:
pnpm config:docs:gen,pnpm plugins:inventory:gen. Os artefatos de localização do Control UI (*.meta.json,*.tm.jsonl,catalog-fallbacks.json) ficam fora do PR conformeui/AGENTS.md; o fluxo de atualização de localização os atualiza.pnpm ui:i18n:verifydeve passar. - Prova de upgrade. Somente para uma alteração de padrão: prove em um upgrade real que nenhuma entrada salva recebe o novo padrão, um desativado explícito permanece desativado e um ativado explícito permanece ativado. Um padrão que permanece o mesmo não precisa de caso de upgrade; #197029 descartou o que havia construído para ativado por padrão.
Prova no PR
- Screenshots do Control UI, inspecionadas quanto a dados privados antes do upload: Labs antes e depois, e o caminho de ativação funcionando em um Gateway real. Anexe-os com
gh pr comment <n> --attach '<file>#<alt text>'. - O caminho de ativação testado de ponta a ponta: o switch salva a configuração esperada e entra em vigor sem necessidade de reinicialização.
- Os testes do recurso e os testes da página de Labs passam; a catraca de linhas de teste não aumenta.
- As alegações da documentação correspondem ao código. O ClawSweeper detectou o "no máximo uma revisão por
everyMinutes" do Advisor, que era falso comeveryToolCallsativado.
Após o merge
O novo local só aparece em builds que incluem o merge. Informe aos usuários o caminho exato e que builds mais antigos ainda mostram o switch do Labs.