2026-05-11 Racines d’espace de travail OpenClaw, listes autorisées de dépôts et garde-fous monorepo sur un Mac cloud Apple Silicon loué sans tête (HK / JP / KR / SG / US)
Les passerelles sans tête semblent invisibles jusqu’à ce qu’un outil sorte du dépôt que vous pensiez éditer. Sur des hôtes Mac mini M4 loués à Hong Kong, Tokyo, Séoul, Singapour et aux États-Unis, le même UID héberge souvent OpenClaw, des voies xcodebuild et du matériel de signature longue durée — l’« espace de travail » est donc une propriété de sécurité, pas une ambiance. Ce guide 2026-05-11 enchaîne les politiques de chemins du transfert de fichiers, l’hygiène launchd et secrets, la discipline de checkpoint de session et l’isolement des voies parallèles en racines listées positivement, liens symboliques résolus et exercices opérateurs qui échouent fermés lorsque les assistants visent ~/Library ou des arbres CI voisins.
Pourquoi les garde-fous d’espace de travail fixent le rayon d’explosion sur hôtes loués partagés
Une racine mal bornée transforme des lectures bénignes en surprises proches du trousseau : le modèle suit un chemin relatif, le shell développe ~ différemment sous launchd, ou un lien symbolique obsolète part d’un sous-arbre « autorisé » vers le checkout d’un autre locataire. Les passerelles de production publient donc des listes positives de racines — ne vous fiez jamais seulement au « bon sens du modèle ». Associez ces listes à des tickets d’automatisation pour que chaque fusion de config infra déclenche la revue des politiques OpenClaw et des enveloppes CI adjacentes.
Anatomie : OPENCLAW_STATE_DIR, checkouts CI et voisinage DerivedData
Traitez l’état durable de l’assistant comme un stockage plan de données : ne le colocalisez ni avec des clones éphémères /tmp, ni avec des arbres Xcode DerivedData que les nettoyeurs suppriment au milieu d’un job. Documentez trois anneaux — state (checkpoint + fichiers de politique), workspace (racines git autorisées), scratch (exports jetables) — et assurez-vous que le cron de ménage respecte les frontières. Quand CI et assistants partagent un UID, appliquez la séparation des articles sur les voies parallèles pour éviter les verrous orphelins.
- Anneau state — extraits versionnés pour les listes autorisées + JSON scellé le cas échéant.
- Anneau workspace — une ou plusieurs racines absolues par ligne de dépôt/service.
- Anneau scratch — répertoires TTL sous préfixes TMP par job.
Listes autorisées intégrées aux politiques de transfert de fichiers et shell
Les défauts du plugin de transfert du 2026-05-07 penchent vers le refus ; les racines d’espace de travail doivent refléter ces défauts pour que fetch/listing ne remonte pas vers des parents qui n’existent que par sauts de liens symboliques. Encodez les racines par environnement (staging vs prod) et gardez les deux dans Git — promotion par PR plutôt qu’éditions SSH ad hoc. Dans un monorepo avec microservices, segmentez par paquet pour bloquer les lectures transversales déguisées en « exploration ».
readlink -f sur chaque racine configurée ; firmlinks APFS et montages VPN d’entreprise peuvent rerouter sans changer le texte de config sur disque.
Cas limites monorepo : nids SwiftPM, workspaces Xcode et sous-modules git
Les grands monorepos attirent les assistants avec plusieurs manifestes Package.swift et projets Xcode hybrides. Épinglez des racines séparées si les équipes divergent sur les frontières de propriété — ex. /build/mobile/ios vs /platform/android — et interdisez les sauts latéraux sans deuxième entrée de liste. Les sous-modules héritent du parent seulement après revue sécurité ; sinon traitez les .git imbriqués comme des racines explicites plus étroites.
# résoudre les liens symboliques avant d’approuver de nouvelles racines
/usr/bin/python3 - <<'PY'
import os
roots = ["/var/ci/job123/acme"]
for r in roots:
print(os.path.realpath(r))
PY
Où la CI clone à côté des assistants interactifs
La CI éphémère clone souvent dans des dossiers hachés sous /var/tmp ou des volumes dédiés ; les assistants lancés en SSH peuvent défaut sur ~/workspace. Harmonisez les conventions : exportez ASSISTANT_WORKSPACE_ROOT par région et formez les orchestrateurs à monter les checkouts uniquement sous des préfixes autorisés. Si des labels self-hosted GitHub Actions routent vers le même Mac qu’OpenClaw, imposez des chemins distincts pour que le nettoyage PR ne supprime pas en parallèle le scratch corrélé à l’assistant.
launchd : exporter les racines vers des passerelles non interactives
Les shells interactifs chargent des extraits de profil ; les démons non. Miroitez les listes dans EnvironmentVariables du plist ou un fichier env référencé avec vérification de somme. Rechargez les passerelles via un launchctl kickstart contrôlé après mise à jour et capturez stdout selon le guide des sondes de santé — vérifiez à la fois la disponibilité HTTP et des sondes fichiers vers chemins interdits.
Matrice de décision : intention de chemin vs couche d’application
| Scénario | Risque | Atténuation préférée |
|---|---|---|
L’assistant lit le dépôt et suit ../ |
Fuite vers les secrets d’un service voisin | Contrôles de préfixe positifs + refus des segments .. après normalisation |
| Lien symbolique vers Bureau/Documents | Attentes TCC différentes sans tête vs GUI | Résoudre la cible du lien ; recouper avec la doc confidentialité macOS |
| CI + assistant UID partagé | Courses de suppression sur arbres qui se chevauchent | Espaces de noms TMPDIR séparés par ID d’orchestration |
| Branche de correctif d’urgence | Élargissement temporaire sans plan de retour | Tickets de liste chronométrés + expiration automatique |
Déploiement en huit étapes pour la gouvernance d’espace de travail
- Inventorier chaque chemin touché par les assistants sur 30 jours via journaux d’audit.
- Encoder des listes minimales ; expansions soumises à VPEng + revue sécurité.
- Fusionner les politiques dans Git ; attacher une somme au bundle d’automatisation.
- Déployer plist/env région par région avec curls de santé.
- Exécuter des tests de refus scriptés couvrant les échappées par lien symbolique.
- Former l’astreinte à révoquer rapidement les PR de liste autorisée.
- Aligner les scripts de ménage sur les contrats TTL du scratch.
- Publier chaque trimestre des métriques rétrospectives refus vs autorisations.
Signaux SLO pour la gouvernance d’espace de travail
| Signal | Seuil | Action |
|---|---|---|
| Tentatives de chemins non approuvés | > 3 par semaine et par passerelle | Geler les changements de config ; rejouer les traces d’incident |
| Dérive de liste vs Git | Toute édition manuelle non déployée | Rollback hôte ; imposer le flux PR uniquement |
| Échecs d’audit de liens symboliques | > 0 constat critique | Bloquer la release ; reconstruire la carte des racines résolues |
FAQ
| Question | Réponse pratique (2026-05-11) |
|---|---|
Les racines doivent-elles inclure /Users/ci en entier ? |
Non — partitionnez par pipeline ou locataire ; un bloc entier annule la liste autorisée. |
| Les assistants peuvent-ils écrire hors workspace pour du cache ? | Uniquement dans des préfixes scratch déclarés avec quotas et éviction automatique. |
Pourquoi les locations Mac mini M4 simplifient la gouvernance du système de fichiers
Un NVMe rapide et une mémoire unifiée prévisible permettent audits de liens, triples clones et sondes de santé simultanées sans pousser le swap — crucial quand on itère les listes en incident. Budgétisez la capacité régionale via les tarifs ; orientez les ingénieurs hésitants vers le guide SSH/VNC avant d’élargir les racines.
Louez des builders où la politique d’espace de travail est applicable
HK / JP / KR / SG / US · SSH / VNC optionnel