Faire diplômer une fonctionnalité Labs
La graduation supprime l'interrupteur Labs d'une fonctionnalité et en fait une fonctionnalité normale. Deux décisions distinctes, prises par le propriétaire avant tout code :
- Quitter les Labs : la fonctionnalité trouve un emplacement permanent (sa propre page de paramètres ou de plugin) et perd le vocabulaire Labs.
- Par défaut : activée par défaut, ou toujours désactivée par défaut.
Elles sont indépendantes. #197029 a d'abord essayé les deux, puis n'a livré que la première : Advisor a quitté les Labs mais est resté désactivé. Demandez laquelle est souhaitée ; ne supposez pas que "diplômer" signifie "activé par défaut".
Précédents : Swarm activé par défaut (#136514), Tool Search activé par défaut (#154068), interface utilisateur de plugin natif activé sans option d'adhésion Labs (de50262a1f96), fonctionnalités Labs déplacées dans les Paramètres (#145460), Advisor sorti des Labs et toujours désactivé (#197029).
Avant la PR
- Mesurez le coût ou le risque sur la route réelle si la fonctionnalité coûte de l'argent ou des tokens, ou modifie le comportement des utilisateurs qui n'ont jamais adhéré. Les chiffres d'aujourd'hui issus de mocks ou de tests unitaires ne sont pas une preuve. #197074 a fusionné une affirmation de coût de cache provenant d'un mock que les fournisseurs en direct ont contredite, et a été annulée dans #197175. Utilisez la mesure en direct que les propres PRs de la fonctionnalité ont déjà établie, et mettez les chiffres dans le corps de la PR.
- Réglez les défauts connus d'abord. La graduation d'Advisor a attendu ses correctifs de cache de fourche (#197203, #197223, #197224, #197226) car l'activation par défaut aurait facturé à chaque utilisateur le coût non mis en cache.
- Trouvez le chemin d'activation qui reste. Après la disparition de la ligne Labs, les utilisateurs doivent toujours pouvoir activer la fonctionnalité depuis l'interface utilisateur. Un plugin groupé utilise Paramètres → Plugins → → Activer ; une fonctionnalité centrale a besoin de sa page de paramètres. Ajoutez un interrupteur seulement s'il n'en existe pas.
Le changement
- Par défaut. Modifiez-le seulement si le propriétaire a choisi l'activation par défaut :
enabledByDefaultd'un plugin groupé dansopenclaw.plugin.json, ou la valeur par défaut de la configuration centrale. Unfalseexplicite existant (ou la valeur de désactivation de la fonctionnalité) doit continuer à fonctionner, et untrueexistant doit rester activé. N'ajoutez jamais de migration qui réécrit la configuration enregistrée pour modifier le choix de quelqu'un. - Labs. Supprimez l'entrée de
ui/src/pages/labs/labs-registry.tset tout ce qui n'était utilisé que par elle : les lignes ou emplacements delabs-page.tsx, les entrées delabs-feature-state.ts, les chaînes et les tests. - Documentation. Déplacez la section de la fonctionnalité hors de
docs/concepts/experimental-features.mdvers sa propre page de référence. Laissez-y une note d'un paragraphe avec l'ancienne ancre, indiquant qu'elle a été diplômée, sa valeur par défaut, et où l'activer. Mettez à jour la liste "Les Labs incluent..." et le tableau "Indicateurs actuellement documentés". - Vocabulaire. Supprimez "Expérimental" et "OpenClaw Labs" de la description du manifeste, de la description du paquet, du README, du résumé du plugin, et de tout texte destiné à l'utilisateur ou au modèle, comme les préfixes d'invite.
- Fichiers générés. Régénérez, ne fusionnez jamais à la main :
pnpm config:docs:gen,pnpm plugins:inventory:gen. Les artefacts de localisation de Control UI (*.meta.json,*.tm.jsonl,catalog-fallbacks.json) restent hors de la PR conformément àui/AGENTS.md; le flux de travail d'actualisation des locales les met à jour.pnpm ui:i18n:verifydoit passer. - Preuve de montée de version. Uniquement pour un changement de valeur par défaut : prouvez lors d'une mise à niveau réelle qu'aucune entrée enregistrée n'obtient la nouvelle valeur par défaut, qu'un désactivé explicite reste désactivé, et qu'un activé explicite reste activé. Une valeur par défaut qui reste la même n'a pas besoin de cas de mise à niveau ; #197029 a supprimé celui qu'il avait construit pour l'activation par défaut.
Preuve dans la PR
- Captures d'écran de Control UI, inspectées pour les données privées avant le téléchargement : Labs avant et après, et le chemin d'activation fonctionnant sur une passerelle réelle. Attachez-les avec
gh pr comment <n> --attach '<fichier>#<texte alternatif>'. - Le chemin d'activation testé de bout en bout : l'interrupteur enregistre la configuration attendue et prend effet sans redémarrage.
- Les tests de la fonctionnalité et les tests de la page Labs réussissent ; le cliquet de lignes de test n'augmente pas.
- Les affirmations de la documentation correspondent au code. ClawSweeper a détecté le "au plus une révision par
everyMinutes" d'Advisor, qui était faux aveceveryToolCallsactivé.
Après la fusion
Le nouvel emplacement n'apparaît que dans les builds qui incluent la fusion. Indiquez aux utilisateurs le chemin exact, et que les builds plus anciennes affichent toujours l'interrupteur Labs.