Graduar una funcionalidad de Labs
La graduación elimina el interruptor de Labs de una funcionalidad y la convierte en una funcionalidad normal. Dos decisiones separadas, tomadas por el propietario antes de cualquier código:
- Dejar Labs: la funcionalidad obtiene un hogar permanente (su propia página de configuración o de plugin) y pierde la redacción de Labs.
- Valor predeterminado: activada por defecto, o aún desactivada por defecto.
Son independientes. #197029 primero probó ambas, luego envió solo la primera: Advisor salió de Labs pero permaneció desactivado. Pregunta cuál se desea; no asumas que "graduar" significa "activado por defecto".
Precedentes: Swarm activado por defecto (#136514), Tool Search activado por defecto (#154068), interfaz de plugin nativa activada sin opt-in de Labs (de50262a1f96), funcionalidades de Labs trasladadas a Configuración (#145460), Advisor fuera de Labs y aún desactivado (#197029).
Antes del PR
- Mide el costo o riesgo en la ruta real si la funcionalidad cuesta dinero o tokens, o cambia el comportamiento de usuarios que nunca optaron. Los números actuales de mocks o pruebas unitarias no son prueba. #197074 fusionó una afirmación de costo de caché de un mock que los proveedores en vivo refutaron, y fue revertido en #197175. Usa la medición en vivo que los propios PRs de la funcionalidad ya establecieron, y pon los números en el cuerpo del PR.
- Resuelve los defectos conocidos primero. La graduación de Advisor esperó sus correcciones de caché fork (#197203, #197223, #197224, #197226) porque si se hubiera activado por defecto, habría cobrado a cada usuario el costo no cacheado.
- Encuentra la ruta de activación que permanece. Después de que desaparezca la fila de Labs, los usuarios aún deben poder activar la funcionalidad desde la interfaz. Un plugin empaquetado usa Configuración → Plugins → → Activar; una funcionalidad central necesita su página de configuración. Agrega un interruptor solo si no existe ninguno.
El cambio
- Valor predeterminado. Cámbialo solo si el propietario eligió activado por defecto:
enabledByDefaultde un plugin empaquetado enopenclaw.plugin.json, o el valor predeterminado de configuración central. Unfalseexplícito existente (o el valor de exclusión de la funcionalidad) debe seguir funcionando, y untrueexistente debe permanecer activado. Nunca agregues una migración que reescriba la configuración guardada para cambiar la elección de alguien. - Labs. Elimina la entrada de
ui/src/pages/labs/labs-registry.tsy todo lo que solo ella usaba: filas o slots delabs-page.tsx, entradas delabs-feature-state.ts, cadenas y pruebas. - Documentación. Mueve la sección de la funcionalidad fuera de
docs/concepts/experimental-features.mda su propia página de referencia. Deja una nota de un párrafo allí con el ancla antigua, diciendo que se graduó, su valor predeterminado y dónde activarla. Actualiza la lista "Labs incluye..." y la tabla "Indicadores documentados actualmente". - Redacción. Elimina "Experimental" y "OpenClaw Labs" de la descripción del manifiesto, descripción del paquete, README, resumen del plugin y cualquier texto dirigido al usuario o al modelo, como prefijos de prompt.
- Archivos generados. Regenera, nunca combines manualmente:
pnpm config:docs:gen,pnpm plugins:inventory:gen. Los artefactos de localización de Control UI (*.meta.json,*.tm.jsonl,catalog-fallbacks.json) se quedan fuera del PR segúnui/AGENTS.md; el flujo de trabajo de actualización de localización los actualiza.pnpm ui:i18n:verifydebe pasar. - Prueba de actualización. Solo para un cambio de valor predeterminado: demuestra en una actualización real que ninguna entrada guardada obtiene el nuevo valor predeterminado, que un explícito desactivado permanece desactivado y que un explícito activado permanece activado. Un valor predeterminado que permanece igual no necesita caso de actualización; #197029 eliminó el que había construido para la activación por defecto.
Prueba en el PR
- Capturas de pantalla de Control UI, revisadas para datos privados antes de subirlas: Labs antes y después, y la ruta de activación funcionando en una puerta de enlace real. Adjúntalas con
gh pr comment <n> --attach '<archivo>#<texto alternativo>'. - La ruta de activación probada de extremo a extremo: el interruptor guarda la configuración esperada y surte efecto sin necesidad de reinicio.
- Las pruebas de la funcionalidad y las pruebas de la página de Labs pasan; el trinquete de líneas de prueba no crece.
- Las afirmaciones de la documentación coinciden con el código. ClawSweeper detectó la afirmación de Advisor de "como máximo una revisión por
everyMinutes", que era falsa coneveryToolCallsactivado.
Después de la fusión
La nueva ubicación solo aparece en las compilaciones que incluyen la fusión. Indica a los usuarios la ruta exacta y que las compilaciones más antiguas aún muestran el interruptor de Labs.