État : installation pilote réussie (2026-10-13). Application enregistrée, clé en coffre local et secret GitHub Actions, tests d'identité et d'écriture verts. Ancien compte
drop-agent-botretiré des auteurs de confiance le 2026-10-14 (retrait). Aucun déploiement modifié.
- Organisation :
memolabs-dev. - Ancien compte :
drop-agent-bot(GitHubtype: User, non GitHub App). - Exemples de PR ouvertes par l'ancien compte et fusionnées :
memolabs-dev/cuesheet#36memolabs-dev/uni-protocol#16memolabs-dev/problem-intelligence-engine#23
- Les workflows
cuesheet/.github/workflows/auto-merge.ymletuni-protocol/.github/workflows/auto-merge.ymlutilisent explicitementdrop-agent-botouguillaume-flambarddans leur filtre d'auteur. - Les workflows CI ordinaires utilisent
GITHUB_TOKENet ne dépendent pas nécessairement de ce compte. - Le workflow
lab-hub/.github/workflows/build.ymlconstruit et publie une image GHCR. Le déploiement est géré séparément par le VPS. - La liste d'installations de l'organisation consultée via
gh api /orgs/memolabs-dev/installationsétait vide au moment de l'audit.
Un compte utilisateur ne peut pas devenir une GitHub App en conservant son type et son identité. L'application créée utilise réellement l'identité memo-labs-automation[bot].
Créer une nouvelle GitHub App dans les paramètres de l'organisation : https://github.com/organizations/memolabs-dev/settings/apps/new
Configuration prévue :
- Nom :
memo-labs-automation(ou autre nom libre ; mettre alors à jour les contrôles d'auteur avant migration). - Homepage :
https://github.com/memolabs-dev. - Propriétaire : organisation
memolabs-dev; installation autorisée uniquement sur ce compte. - Webhooks : désactivés (la première version sert à authentifier des outils et workflows, pas à recevoir des événements).
- OAuth utilisateur : non requis ; ne pas activer Request user authorization.
- Permissions de départ : Repository Contents Read & write, Pull requests Read & write, Issues Read & write, Actions Read-only. Metadata Read-only est implicite.
- Permission Workflows Read & write (si proposée) : ne pas accorder initialement ; ajout uniquement après preuve du besoin d'éditer des fichiers
.github/workflows/, avec revue de sécurité. - Ne pas demander les permissions d'administration, de gestion des secrets, d'organisation ou des runners.
- Installation : Selected repositories, initialement le dépôt
memolabs-dev/.githubuniquement.
Ensuite : onglet Credentials de l'application, générer une clé privée (PEM) et la conserver dans un gestionnaire de secrets. Ne jamais l'inclure dans une issue, une PR, des logs ou un message de chat.
Dans ce dépôt memolabs-dev/.github, configurer :
- Variable GitHub Actions
MEMOLABS_APP_CLIENT_ID= Client ID de la GitHub App. - Secret GitHub Actions
MEMOLABS_APP_PRIVATE_KEY= contenu intégral de la clé privée PEM.
Commande possible depuis une session gh connectée à l'organisation, sur la machine possédant le PEM :
gh variable set MEMOLABS_APP_CLIENT_ID --repo memolabs-dev/.github --body 'YOUR_APP_CLIENT_ID'
gh secret set MEMOLABS_APP_PRIVATE_KEY --repo memolabs-dev/.github < /path/to/private-key.pemNe pas coller de clé privée ni utiliser un argument en ligne de commande contenant sa valeur.
Déclencher manuellement Verify Memo Labs GitHub App depuis Actions. Il doit produire un jeton d'installation de courte durée et prouver uniquement l'accès en lecture à ce dépôt. Le test est volontairement incapable de déployer, pousser ou fusionner une PR.
- App
memo-labs-automation, installation170927025, sélection explicite des dépôts.githubetcuesheet. - Lecture installation/jeton temporaire :
Actions #38378857946— success. - Première PR émise par la GitHub App :
memolabs-dev/.github#1, draft. - Accès réel à CUESHEET avec jeton limité :
Actions #38380373269— success. - PR créée par la GitHub App dans CUESHEET :
memolabs-dev/cuesheet#57, draft, tests CI obligatoires réussis ; fusion volontairement désactivée. - Transition de l'allowlist auto-merge :
memolabs-dev/cuesheet#58— fusionnée automatiquement après tests obligatoires verts. La nouvelle identité est ajoutée sans retirerdrop-agent-bot. - Emplacement de la clé privée sur le Mac :
~/.config/memolabs/secrets/github-app/memo-labs-automation.private-key.pem(0600). Aucun secret dans le dépôt.
Raison. Le 14 octobre 2026, l'organisation memolabs-dev exige une 2FA sécurisée. drop-agent-bot ne la satisfait pas et se trouve bloqué : la documentation GitHub indique qu'un membre sans méthode sécurisée est empêché d'accéder aux ressources de l'organisation, mais reste membre et occupe un siège (Requiring two-factor authentication in your organization). Le compte ne peut donc plus rien produire. Le garder dans les listes de confiance n'apporte rien et laisse une identité de type User, dont les jetons sont longs, capable de faire fusionner une PR si elle était débloquée ou compromise.
Vérifié avant retrait. Aucun script ni service du Mac ou du VPS lab n'utilise son jeton. La GitHub App memo-labs-automation[bot] couvre l'auteur automatisé (preuves ci-dessus).
Fait dans les dépôts (branche chore/retire-drop-agent-bot, une par dépôt, à fusionner par PR) :
memolabs-dev/.github:TRUSTED_AUTHORSdescripts/land.pyréduit àguillaume-flambardetmemo-labs-automation[bot]; test de refusuntrusted_authorpourdrop-agent-bot; contrat de fusion et ce document mis à jour.memolabs-dev/cuesheetetmemolabs-dev/uni-protocol: filtre d'auteur de.github/workflows/auto-merge.ymlréduit aux deux mêmes identités. Ces fichiers sont sous.github/, donc chemins protégés : la fusion reste humaine.
Reste au propriétaire (actions de compte, aucune automatisée) :
- Retirer
drop-agent-botde l'organisation : https://github.com/orgs/memolabs-dev/people , cocherdrop-agent-bot, puis Remove from organization (doc). Le siège est libéré. - Révoquer ses accès en se connectant en tant que
drop-agent-bot:- application OAuth GitHub CLI : https://github.com/settings/applications , onglet Authorized OAuth Apps, GitHub CLI, Revoke (doc) ;
- jetons personnels : https://github.com/settings/personal-access-tokens (fine-grained) et https://github.com/settings/tokens (classic), Delete sur chacun (doc) ;
- clés SSH : https://github.com/settings/keys . Ou supprimer le compte : https://github.com/settings/admin , Delete your account (doc). La suppression est définitive. La documentation consultée (Personal account reference) ne précise pas comment s'affichent ensuite les PR et commits que ce compte a rédigés dans les dépôts de l'organisation : si cette attribution compte, révoquer les accès sans supprimer le compte.
- Sur le Mac, retirer l'entrée locale du trousseau GitHub CLI, encore présente (inactive) au 2026-10-14 :
gh auth logout --hostname github.com --user drop-agent-bot. - Étendre l'installation de la GitHub App aux dépôts actifs : https://github.com/organizations/memolabs-dev/settings/installations , Configure sur
memo-labs-automation, Repository access, Only select repositories, ajouter les dépôts (au minimumuni-protocol, en plus de.githubetcuesheet).
- Ajouter un second dépôt pilote (
cuesheet) à l'installation de la GitHub App. - Configurer l'agent développeur pour obtenir à la demande un jeton d'installation (durée ~1 h), avec accès seulement au dépôt requis. Stocker la clé privée dans un coffre, pas dans un dépôt ni sur chaque runner.
- Ouvrir une PR non critique sous la nouvelle identité et vérifier les permissions, la CI, et l'auteur GitHub
memo-labs-automation[bot]. - Adapter les filtres des workflows auto-merge qui autorisent actuellement
drop-agent-bot; ne pas retirer l'ancien identifiant avant validation. Fait le 2026-10-14 (brancheschore/retire-drop-agent-bot). - Confirmer qu'aucun vieux PAT de
drop-agent-botn'est encore utilisé par des outils externes, cron, pipelines, secrets ou déploiements. Vérifié le 2026-10-14 sur le Mac et le VPS : aucun consommateur. - Étendre l'installation dépôt par dépôt et documenter les permissions réellement utilisées.
- Révoquer l'ancien jeton seulement après validation de tous les consommateurs ; conserver l'ancien compte en lecture si nécessaire pour l'historique. Consommateurs validés ; révocation à faire par le propriétaire (voir Retrait).
Tant que l'ancien jeton reste actif et que les workflows n'ont pas été modifiés, il n'y a pas de basculement à annuler. Après migration, si une application échoue : bloquer l'auto-merge de ses PR, revenir temporairement à l'identité technique précédente uniquement si son jeton est encore légitime et sûr, réparer l'installation/les droits de la nouvelle app, et retester avant nouvelle révocation. Ne jamais rétablir un jeton compromis.
Depuis le 14 octobre 2026, le retour à drop-agent-bot n'est plus une voie de rollback : le compte est bloqué par l'exigence de 2FA sécurisée. Si la GitHub App échoue, réparer l'App ; en attendant, guillaume-flambard reste un auteur de confiance.
- https://docs.github.com/en/apps/creating-github-apps/registering-a-github-app/registering-a-github-app
- https://docs.github.com/en/apps/sharing-github-apps/registering-a-github-app-using-url-parameters
- https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app
- https://github.com/actions/create-github-app-token