CI de publication OpenClaw
Utilisez cette compétence avec $release-openclaw-maintainer et $openclaw-testing lorsqu'un candidat de publication nécessite une validation complète, une preuve d'installation/mise à jour, des vérifications de fournisseurs en direct ou une récupération de CI.
Garde-fous
- Pas d'incrémentation de version, de tag, de publication npm, de version GitHub ou de promotion de publication sans approbation explicite de l'opérateur.
- Après une compaction, une reprise ou une nouvelle orientation, réécrivez l'objectif effectif et la phase actuelle à partir de la dernière instruction explicite de l'opérateur. Ne fusionnez pas l'ancien périmètre dans la publication active.
- Maintenez le périmètre de publication une fois qu'une branche de publication ou un SHA de code existe. Validez et expédiez cette publication exacte ; ne transformez pas
mainmouvant en une deuxième file de travail. - Enregistrez C (candidat), Q (qualification), P (admission/vérificateur/éditeur), groupe de réexécution, profil, trempage effectif et références de contexte/transport. La qualification par défaut d'un nouveau candidat est Q=C, incluant le flux de travail complet, le flux de travail réutilisable, l'action locale, le script, le planificateur, le contrat et la clôture de couverture. Le SHA de code et le SHA de publication restent des rôles de cycle de vie, pas des identités de flux de travail supplémentaires.
- L'assistant candidat accepte un tag de publication absent ou un tag léger ou annoté existant qui se résout au SHA exact du candidat. Un tag conflictuel ou une recherche distante échouée arrête la validation ; ne déplacez jamais un tag pour récupérer.
- Gelez C/Q et sélectionnez indépendamment un P de confiance sur
mainou sur un tag de publication protégé. C/Q n'ont pas besoin d'être un ancêtre de P. Les contrats candidats manquants nécessitent un backport délibéré ; ne substituez jamais silencieusement un outillagemainplus récent. - Appliquez une coupure de publication après le gel du SHA de code. Admettez uniquement les défauts de produit confirmés, les octets de paquet erronés ou invérifiables, les défauts de sécurité ou les échecs rendant la publication impossible. Mettez en file d'attente les autres résultats pour la confiance post-publication ou la prochaine bêta. Les avis de dépendance ne sont jamais des admissions de coupure de publication : enregistrez-les comme preuve de publication et mettez en file d'attente le bump sur
mainaprès la publication ; seul un logiciel malveillant connu arrête la publication. - Les enfants de CI gelés utilisent le planificateur de shard Node de Q et les coûts mesurés, tout en découvrant et en exécutant les tests à partir du checkout candidat. Les plans de publication complète hébergés divisent les lignes mesurées au-dessus de 12 minutes ; préservez la couverture des fichiers, les limites de travailleurs et les générations de temps complètes. Un propriétaire indivisible au-dessus du budget doit être divisé plutôt que d'augmenter le budget de publication. Une fois l'enfant terminé, la clôture exécute
scripts/ci-shard-timings-refresh.mtspour cette exécution exacte et valide les coûts générés ; ne modifiez pas les mesures à la main. - La qualification candidate exécute sa propre clôture Q gelée. Les vérifications uniquement sur
mainet les scénarios futurs demainne sont pas des exigences implicites de publication. Réparer un harnais de qualification gelé signifie un nouveau C/Q, avec de nouvelles preuves liées. Une réparation P uniquement d'admission/vérificateur/éditeur peut conserver C/Q et leurs preuves originales. - Les tags légers protégés
release-publish/<12sha>-<provenance-run>identifient P, pas Q. Le suffixe enregistre la provenance de création du tag, pas le parent actuel. Les assistants de publication conservent leur argument--workflow-sha <P>; l'argument--workflow-shade l'assistant FRV sélectionne plutôt Q et doit être égal à C sur la route candidate. - Touchez
mainuniquement pour un changement demandé par l'opérateur ou le plus petit bloqueur critique appartenant àmainqui empêche cette publication et ne peut pas être traité depuis la branche de publication. La santé CI demainne bloque jamais une publication. Si un atterrissage d'outillage de publication est bloqué par des échecsmainqu'il ne cause pas, prouvez sur un checkout propre demainque l'échec existe déjà là, enregistrez-le dans le corps de la PR et fusionnez ; pendant une publication active, une fusion admin est autorisée pour ce cas exact. Une voie séparée corrige lemainrouge en parallèle, hors du chemin critique de la publication. - Atterrissez les correctifs d'outillage uniquement sur
mainavec l'étiquetterelease-fast-laneajoutée avant le push (voir Voie rapide d'outillage de publication) :openclaw/ci-gateexécute ensuite lint, types, gardes, dépendances, documentation et les lignes Node modifiées uniquement. Atterrissez via le chemin natifscripts/pravec sa revue ClawSweeper terminée ; les résultats sont consultatifs pour cette étiquette, alors enregistrez tout P1 que le propriétaire de la publication refuse de corriger dans la PR avec son suivi avant l'atterrissage. OPENCLAW_RELEASE_RUNNER_GROUPachemine optionnellement les parents et travailleurs de validation et le parent de publication plus ses enfants de publication vers une capacité réservée avec des étiquettes inchangées ; les travaux d'édition et d'approbation avec informations d'identification restent sur les étiquettes hébergées GitHub par défaut. Configurez d'abord les runners éligibles et l'accès au dépôt ; non défini préserve l'acheminement ordinaire. Les travailleurs partagés héritent du groupe de l'appelant ; la CI PR/main et le travail planifié non lié restent en dehors.- Vérifiez le parent nocturne pour le SHA de code avant d'envoyer une nouvelle validation
main; il scelle les reçus par enfant que les envois à cible exacte adoptent lorsque les entrées correspondent. Le nocturne exécute cette route d'assistantmainde confiance explicite (--sha <main-sha> --workflow-sha <main-sha> --trusted-workflow-ref main), donc son parent s'exécute sur une brancherelease-ci/<sha12>-<id>, pasmain. - Chaque voie de validation sélectionnée doit réussir ; voir Exigences de publication. Les tags stables nécessitent des preuves stables/complètes, un trempage et des performances bloquantes. Les preuves de profil bêta ne peuvent pas qualifier de stable. Aucune voie ou dérogation de trempage ne contourne ces exigences. La qualification de tous les groupes nécessite les neuf combinaisons d'installation/mise à niveau Gateway Linux/Windows/macOS. Préservez les premiers échecs, l'identité et les preuves complètes.
- La publication native macOS, Windows, Linux et Android est indépendante de npm/ClawHub, de la finalisation GitHub et de la clôture
main. Chaque plateforme conserve ses propres exigences de signature, qualification, artefact et mise à jour ; signalez les plateformes en attente avec précision et réparez les échecs natifs uniquement en parallèle. - Ne définissez pas de secrets GitHub à partir de candidats 1Password non validés. Si un candidat renvoie 401/403, laissez le secret existant tranquille et signalez le fournisseur manquant exact.
- Utilisez
$one-passwordpour les lectures/écritures de secrets : une session tmux persistante, éléments ciblés uniquement, pas de sortie de secret. - Surveillez une exécution parent avec
pnpm frv watch --run <parent>(voir Surveillance). Évitez les boucles larges degh run view; le quota REST est facile à épuiser. - Récupérez les logs uniquement pour les travaux en échec ou actuellement bloquants. Si le quota est bas, arrêtez le sondage et attendez la réinitialisation.
- Traitez les échecs de fournisseurs en direct séparément des échecs de code : prouvez la validité de la clé, le statut HTTP du fournisseur, les preuves de nouvelle tentative et la voie exacte en échec avant de modifier le code.
- Lors du diagnostic d'un échec de fournisseur en direct, une réponse de liste de modèles prouve l'authentification, pas la facturation ou le droit d'inférence. Confirmez l'information d'identification avec un sondage de complétion réel avant de le traiter comme valide. Corrigez d'abord l'information d'identification ; n'ajoutez pas de chemin d'authentification alternatif simplement pour contourner une information d'identification de publication en échec.
- La validation complète de publication sépare l'envoi d'enfant exact, la décision de publication et le drainage diagnostique. Avec
fail_fast=false, elle ne fait aucun appel d'annulation d'enfant ; le drainage diagnostique suit chaque enfant sélectionné jusqu'au terminal à moins que le collecteur lui-même ne soit annulé ou perde l'accès à l'API GitHub. Avecfail_fast=true, la décision de publication peut annuler uniquement l'enfant exact encore actif qui possède un échec bloquant. - La continuation du même parent nécessite que la racine originale ait été envoyée avec
fail_fast=false. Le contrôleur vérifie cette entrée exacte enregistrée avant toute mutation de réexécution. - Un parent qui a produit ses propres artefacts candidats scellés ne peut pas être continué : les réexécutions GitHub rendent ces artefacts de tentative précédente indisponibles. Gardez les SHA candidats et de qualification gelés, remplacez ce parent et démarrez une nouvelle validation complète de publication de tous les groupes.
- Après l'envoi, un artefact de plan d'exécution immuable enregistre la tentative parente originale, les tuples et titres exacts des enfants, la couverture sélectionnée, les portes et l'identité de réutilisation. Les mêmes octets sont sauvegardés sous une clé de cache d'ID d'exécution exacte. La décision, le drainage, l'écriture du manifeste, la validation des preuves et la vérification finale consomment l'artefact pour leur tentative actuelle. Une nouvelle tentative de collecteur restaure le plan mis en cache, le valide, retélécharge son artefact et adopte les mêmes enfants ; un état de plan manquant est un échec d'orchestration, pas une permission de reconstruire le plan ou de réenvoyer.
- Les preuves réutilisées ne sont pas fiables simplement parce que le scellement du plan les a trouvées. La décision de publication répète le SHA cible scellé, le SHA de preuve, la politique, les chemins modifiés, l'exécution sélectionnée, l'exécution racine, le manifeste source, l'identité d'outillage de confiance et les vérifications d'enfant exact avant de renvoyer
passed. - Les nouvelles tentatives parent sélectionnent indépendamment les artefacts de décision et de drainage les plus récents ; les deux doivent lier le même plan immuable même lorsque leurs tentatives source diffèrent.
- Les nouvelles tentatives enfant font partie du même plan immuable uniquement lorsque l'ID d'exécution enfant, le chemin de flux de travail, la référence, le SHA Q, le titre d'envoi, l'événement, la cible, le candidat et les entrées de validation restent exacts. Les tentatives enfant plus récentes remplacent les travaux correspondants ; les travaux absents d'une tentative plus récente sont reportés. Une identité de travail en double, une tentative manquante, une tentative régressée ou un tuple modifié échoue fermé.
frv statusetcontinuepermettent jusqu'à 60 secondes de réconciliation en lecture seule lorsque GitHub renvoie temporairement des travaux en double dans la tentative de nouvelle tentative la plus récente. Le tuple d'exécution et la tentative restent épinglés ; les doublons persistants et les conflits de tentative plus ancienne restent des erreurs. - Utilisez
pnpm frv status|watch|rerun --job|rerun --child|continue --failed|verifypour une récupération tenant compte des tentatives. Le contrôleur est sans état : le plan d'exécution immuable, les tentatives d'exécution GitHub exactes, le drainage diagnostique et le manifeste final sont les seules autorités. Il n'écrit jamais de tag, de paquet, d'entrée de registre, de candidat de publication ou de publication. - La preuve de contrôleur post-fusion doit utiliser le SHA atterri examiné sur
mainprotégé via leFRV Proof Brokeret leFRV Proof Fixturenon liés à la publication. Envoyez le courtier avec le numéro de PR fusionné et le commit atterri exact. Le courtier doit exiger que le commit de fusion de cette PR corresponde au commit atterri, prouver que le commit atterri est identique ou un ancêtre de son SHA de flux de travail de confiance, et répéter les vérifications d'autorité, de fusion et d'ascendance immédiatement avant de réexécuter le fixture. Exigez que l'exécution fixe du fixture no-op exacte passe d'un échec intentionnel de la tentative un à une réussite de la tentative deux. Le courtier doit émettre son reçu sans créer de candidat de publication, d'artefact de publication, de publication, de référence de dépôt, de parent de remplacement ou d'autre mutation de flux de travail. Il s'agit de la preuve de réexécution de travail ciblé hébergé GitHub ; les tests de contrôleur ciblés possèdent l'éligibilité au plan immuable, la préservation de la tentative verte, la collection du même parent et l'invocation de vérificateur strict. N'utilisez jamais une vraie exécution de validation complète de publication pour cette preuve. Voir Validation complète de publication. - Utilisez un opérateur de publication, un
frv watchet au plus un enquêteur pour la surface d'échec actuelle. Ne construisez pas d'arbres de plan de révision d'audit autour d'une seule transition de flux de travail. - Pour les versions stables/bêta régulières, le SHA de code peut déjà contenir les notes finales et servir de SHA de publication. Un seul parent frais complet réussi peut qualifier les deux rôles et leurs octets de publication exacts. Si les notes changent ensuite, un SHA de publication ultérieur peut réutiliser les preuves de produit uniquement lorsque son delta complet par rapport au SHA de code modifie le
CHANGELOG/YYYY.M.PATCH.mdsélectionné et optionnellementCHANGELOG.mdetCHANGELOG/records/YYYY.M.PATCH.md, sans autres chemins, renommages ou suppressions ; ses octets modifiés nécessitent encore une qualification. - La version étendue stable valide une seule pointe de branche exacte ; elle ne réutilise pas le modèle de preuve SHA de code/SHA de publication régulier.
- Dans un arbre de travail clairsemé ou une synchronisation source Testbox, confirmez d'abord
package.json,pnpm-lock.yamlet chaque chemin source que la vérification sélectionnée lit. Si l'un d'eux est absent, ce checkout ne peut pas valider une dépendance de publication ou une voie Docker : arrêtez-vous et utilisez la porte modifiée distante du dépôt ou un arbre de travail de tâche complet. Lorsque les entrées sont présentes et qu'un correctif de publication modifiepackage.jsonoupnpm-lock.yaml, reconstruisez uniquement la boîte jetable appartenant à la tâche avecCI=true pnpm install --frozen-lockfile, puis exécutez un sondagerequire.resolve()explicite avant Docker ou les tests ciblés. Le drapeau CI permet à pnpm de recréer un répertoire de modules préchauffé sans confirmation interactive. N'affaiblissez pas le lockfile et n'étiquetez pas les échecs de checkout clairsemé comme des échecs de produit/Docker. - Si le candidat est rebasé ou que son SHA de base change après le préchauffage, arrêtez la boîte appartenant à la tâche et préchauffez-en une fraîche avant de tester. La synchronisation source Testbox est relative à l'arbre source préchauffé ; continuer peut mélanger un ancien fichier de base avec un nouveau diff candidat et produire de faux échecs de lockfile ou Docker.
- Les Testboxes réutilisées sont vérifiées par rapport à leur source enregistrée après leur première exécution réussie. Les modifications de source uniquement peuvent réutiliser le bail ; la dérive de la base, de la dépendance, du wrapper ou du flux de travail Testbox nécessite un nouveau bail. Ne définissez pas
OPENCLAW_TESTBOX_ALLOW_STALE=1pour les preuves de publication. - Pour un candidat de publication validé avec le wrapper compatible capsule pris en charge, exécutez
node scripts/crabbox-wrapper.mjs run --blacksmith-ref main -- <commande>à partir du checkout de ce candidat lors de l'utilisation de Testbox. La capsule préserve le code source candidat et les dépendances gelées tandis quemainfournit les limites d'admission actuelles. Si le candidat manque de ce contrat de wrapper, utilisez la route de validation de publication à cible exacte ci-dessous avec des SHA de validation et d'outillage séparés. N'envoyez pas de références de flux de travail Testbox candidates et n'empruntez pas le wrapper d'un autre checkout.
Récupération CI différée
La validation de publication ne met pas en pause la CI ou les flux de travail de support. La variable héritée OPENCLAW_RELEASE_PRIORITY_RUN est ignorée par l'admission actuelle du flux de travail, et pnpm frv prioritize --run est retirée. Utilisez pnpm frv prioritize --restore <record> pour récupérer les exécutions différées par des révisions de flux de travail plus anciennes.
[suite tronquée pour la traduction]