La seule chose à lire pour savoir où vous en êtes : chaque ligne porte
son état et renvoie à l'outil qui la réalise. Le journal d'une opération s'affiche
sous l'étape qui tourne, pas en bas de l'écran. Deux actions reviennent deux
fois — c'est normal, ce n'est pas une erreur de la liste.
Ouvrir la session
Déconnecter Claude — jamais pendant qu'une session de
travail est ouverte.
Restaurer le point de départ : le snapshot B (vos
données de la fois précédente), ou le snapshot 0 s'il s'agit du premier import.
Tourner la clé API — après la restauration, toujours :
les jetons vivent dans la base, donc un snapshot ramène ceux de son époque.
Rejouer la structure, puis vérifier ses identifiants —
ce que Claude a ajouté en travaillant sur A n'existe pas dans B.
Configurer l'expéditeurfacultatif
— seulement si vous voulez que les invitations partent automatiquement. À faire
maintenant, pas plus tard : après l'anonymisation il n'y aurait plus d'adresse à
servir.
Travailler
Importer les deux Excel — inspecter, aperçu, puis exécuter.
au premier import seulement
Après l'import : poser les appartenances de
poste sur les dossiers qui viennent de naître, puis contrôler. Sans rejouer la
structure — elle vient du snapshot.
au premier import seulement
Tester à plusieurs : donner les accès, puis vérifier que
chacun voit ce que son rôle autorise.
Mesurer l'application sur le volume réel :
préparer le compte de mesure (le tester, l'armer si besoin), éprouver le garde
anti-fuite, lancer la mesure, télécharger le rapport. C'est la
seule occasion — après la restauration de A, les 700 clients ne sont plus là.
recommandé
Fermer la session
Sortir les retours des testeurs : ce que la bulle 🛟 a
recueilli vit dans la base, donc la restauration de A l'efface. On le sort
maintenant, ou il part avec.
Générer le snapshot B, puis le récupérer sur votre
poste — la commande scp s'affiche à ce moment-là.
Effacer le snapshot B de la VM — après avoir
vérifié qu'il est bien arrivé chez vous. Avant le nettoyage : la purge des résidus
refuse de tourner tant qu'un B est là.
Contrôler puis nettoyer : fichiers réels, résidus en base, traces de
Claude, et le secret d'envoi.
📖 Le détail de chaque étape, et le tuto
scp, sont dans docs/IMPORT-WRIKE.md — à garder ouvert pendant la session,
puisque Claude sera déconnecté.
Les outils
Déconnecter Claude
Avant de manipuler de vraies données, on met Claude hors ligne : ses accès (fichier de
credentials) sont déplacés hors de portée. Tant que Claude est déconnecté, il ne peut plus rien lire sur la VM.
⚠️ Ne faites JAMAIS cette action pendant qu'une session Claude Code est ouverte et en cours de travail.
Filet de secours : en cas de souci, les accès peuvent être restaurés manuellement en SSH.
Changer la clé API OpenProject
Claude est déconnecté, mais la clé API qu'il a pu voir est toujours valide.
On la remplace maintenant, avant que la base contienne de vraies données : ainsi aucune
clé encore utilisable ne subsiste ailleurs que sur cette VM.
Connectez-vous avec un compte administrateur — c'est indispensable : cette clé sert
à créer les comptes et à lire l'organisation. Une clé non-administrateur sera refusée.
Sur la ligne API, cliquez + pour générer une clé. S'il en existe déjà une,
révoquez-la puis générez-en une nouvelle : c'est ce qui rend l'ancienne inutilisable.
Copiez la clé tout de suite — OpenProject ne l'affiche qu'une seule fois.
Collez-la ci-dessous, puis Vérifier avant d'appliquer.
Clé :
La clé n'est jamais écrite dans le journal ci-dessous, ni conservée par la page.
🔄 Appliquer redémarre le service d'authentification : cette page se figera
2 à 3 secondes, c'est normal. Rechargez-la ensuite et cliquez « Vérifier l'état de la rotation ».
En cas de problème, la rotation revient toute seule à l'état précédent — l'ancienne clé est
sauvegardée sur la VM.
Import réel
Déposez les deux exports Wrike : le CRM (clients / paramètres missions) et l'onboarding
collaborateurs. L'aperçu ne touche à rien ; l'exécution crée les clients, les tâches et les comptes.
🔒 À l'import, seules les colonnes utiles de l'onboarding sont lues (Nom, Mail pro, et
Rôle/Poste/Équipe si présents). Toutes les colonnes sensibles sont ignorées (N°SS, mail perso, mots de passe…).
CRM :aucun fichier
Collab :aucun fichier
Si l'aperçu répond « Colonnes requises absentes » — cliquez d'abord
« Inspecter les fichiers » : cette action ne lit que les intitulés de colonnes
(aucun nom de client, aucun e-mail n'est affiché) et vous dit quelle feuille, quelle ligne
d'en-têtes et quels intitulés ont été trouvés. Les en-têtes sont cherchés dans toutes les
feuilles, sur les 15 premières lignes, accents/casse/espaces ignorés.
S'il reste une colonne non reconnue, indiquez-la ci-dessous au format
ColonneAttendue=Intitulé exact du fichier (une par ligne), puis relancez
l'inspection.
⚠️ Ce récapitulatif porte des noms de clients :
même famille que les mots de passe temporaires — à télécharger, à utiliser pour corriger
l'export du CRM, puis à détruire. Il n'est écrit nulle part sur la machine.
Le second contrôle regarde ce que l'import n'a
pas demandé. Un import neuf devrait le rendre vert : s'il trouve des dates de
début, c'est une base écrite avant le correctif du 01/09 — le bouton rouge les retire.
À la fin de l'import réussi, un bouton de téléchargement des
mots de passe temporaires apparaît dans la console (à récupérer, il ne sera plus disponible ensuite).
Vous reprenez un cycle sur une base restaurée ? Les trois boutons ci-dessus ont
besoin des classeurs redéposés : restaurer un snapshot rend la base, pas les
fichiers du cycle précédent — le nettoyage les a effacés, comme demandé. Tant qu'ils
manquent, l'aperçu reste grisé et « Vérifier après import » échoue aussitôt, faute
de retrouver le plan d'import.
À noter : redéposer les mêmes classeurs et lancer l'aperçu sur une base qui
contient déjà l'import est un test utile en soi — il doit annoncer 0 création.
C'est la façon de vérifier qu'un import rejoué ne duplique rien.
Après l'import
Deux ou trois gestes dépendent des clients que l'import vient de
créer : ils ne peuvent donc pas être dans le snapshot de structure. Les oublier ne
produit aucune erreur — il produit quatre refus d'OpenProject qu'on découvre des
jours plus tard, en essayant de réaffecter ou de saisir un temps.
⛔ Ne rejouez PAS la structure ici. Sur une base refabriquée depuis les Excel, elle
vient du snapshot de départ : elle y est déjà. Le rejeu ne sert que sur une base
vivante qu'on ne peut pas refabriquer. C'est cette étape-ci qu'il faut, et elle
finit par le contrôle de structure — sans rien rejouer.
Ce que l'aperçu ne peut pas faire à votre place : le premier archivage des
exercices révolus, et les heures hebdomadaires réelles des temps partiels (sans
elles tout le monde est calculé à 35 h, et la charge est fausse pour eux).
Tester à plusieurs
L'authentification est déjà en production. Donnez leur accès aux collaborateurs, puis
connectez-vous à plusieurs pour vérifier que chacun voit bien ce qu'il doit voir selon son rôle.
Deux façons de donner l'accès — choisissez, ne faites pas les deux
Invitation à usage unique (recommandé, décision du 31/07 « plus aucun mot de passe ne
circule ») : Gestion des utilisateurs → « Inviter en masse… ». Chaque personne
choisit elle-même son mot de passe. ⚠️ Le lien expire en 1 jour, et il invalide
le mot de passe temporaire produit par l'import.
Mots de passe temporaires : le fichier téléchargeable à la fin de l'import. Encore accepté par
l'application, mais il fait circuler des mots de passe — c'est ce que la décision du 31/07
voulait arrêter.
⏱️ Pour que les invitations partent tout seules, configurez l'expéditeur
AVANT d'arriver ici. Il ne dépend que de la déconnexion de Claude, donc il peut se faire
dès l'ouverture de la session. Sans expéditeur, rien n'est bloqué : un fichier de liens est téléchargé et
vous faites le publipostage vous-même.
Chaque retour envoyé par la bulle 🛟 (« Signaler / demander de
l'aide ») devient une tâche du projet support, dans la base — avec son auteur, sa
date, la page d'où il a été écrit et son texte. La restauration du jeu de test les
efface : on les sort AVANT, ou ils partent avec.
⚠️ À jouer avant de restaurer le jeu de test (étape 10), et après
avoir prévenu les testeurs que la campagne se termine. Rien ne le rattrape après.
Ce que le testeur fait — sur n'importe quel écran, la bulle 🛟 en bas à droite →
« Signaler / demander de l'aide ». Il choisit une catégorie (pour une amélioration :
« Demande d'évolution »), écrit deux lignes, valide. La page d'où il écrit et son
compte sont enregistrés tout seuls — c'est tout l'intérêt par rapport à un
fichier : le contexte est capturé sans qu'il ait à le décrire. Le fichier produit est un Markdown rangé par catégorie. Il est
téléchargé par votre navigateur puis effacé de la machine — il porte ce que des
humains ont tapé, donc peut-être des noms de clients réels : gardez-le hors du dépôt.
Pour n'en sortir qu'une catégorie, c'est en ligne de commande :
python3 tools/export_tickets.py --categorie "Demande d'évolution".
Mesurer l'application sur le volume réel
Les sondes ne lisent que des comptes et des durées, jamais une valeur : ni nom de
client, ni nom de personne, ni contenu de champ personnalisé. Le rapport se télécharge —
il n'est écrit nulle part sur la machine, il vit en mémoire du service le temps que
vous cliquiez, et un redémarrage n'en laisse rien.
Ce qu'il faut faire, dans l'ordre
Préparer le compte de mesure, AVANT tout le reste. Saisir un compte de la base
mesurée et son mot de passe, puis « Tester le compte ». S'il n'est pas utilisable
— c'est le cas normal après une restauration de snapshot B — « Armer ce compte »
lui pose le mot de passe de votre choix. Sans ce geste, 17 des 18 sondes
s'interrompent : c'est ce qui s'est produit aux deux premiers cycles réels, et la
mesure y a été perdue les deux fois.
Éprouver le garde ensuite. Le bouton « Éprouver le garde anti-fuite » injecte
une fausse fuite (une raison sociale, un nom, une adresse) et le garde doit refuser de
publier. Un contrôle qui n'a jamais dit « non » ne prouve rien.
Lancer la mesure. Elle peut tourner longtemps — c'est voulu : chaque sonde est
répétée pour distinguer « lent » de « lent la première fois seulement ».
Télécharger le rapport, puis le lire : sa dernière section liste
tous les mots qu'il contient. Si l'un d'eux ressemble à une donnée du cabinet,
le rapport ne doit pas sortir de la machine — dites-le moi.
⚠️ Un rapport sans sa ligne « FIN DU RAPPORT » est INCOMPLET, pas « rien à
signaler » : la campagne a été interrompue et il manque des sondes. Ce qui y figure reste
vrai, mais l'absence d'une sonde ne veut pas dire qu'elle allait bien.
⚠️ Ce compte doit exister dans la base MESURÉE — après un import
réel, c'est donc un compte importé, pas un compte du jeu de test. Il lui faut les droits
RH et administrateur : quatre des sept sondes d'écran ouvrent la vue RH, la
heatmap ou la création de mission. Un compte trop étroit ne fait pas échouer la mesure —
les sondes concernées s'interrompent, et le rapport dit désormais laquelle et pourquoi.
🔴 Après une restauration de snapshot B, aucun compte connu ne marche,
et c'est normal : B part du snapshot de structure (donc aucun compte du jeu de test) et les
mots de passe temporaires de l'import ont été détruits en fin de cycle, comme demandé. Le
magasin ne garde que des empreintes : rien ne s'en relit. Commencez par « Tester le
compte » — il dit en deux secondes si le compte existe, si son mot de passe passe, et ce
que la campagne pourra mesurer. S'il n'est pas utilisable, « Armer ce compte » pose le
mot de passe de votre choix sur un compte existant et lève le changement obligatoire.
Sans ce geste, les 17 sondes de coût s'interrompent — c'est ce qui s'est produit les deux
premières fois.
Restaurer un snapshot étapes 2 et 10
Trois natures : 0 = structure vide, A = jeu fabriqué (ce sur quoi
Claude travaille), B = vos vraies données. La liste se remplit toute seule, y compris
avec un B que vous venez de déposer par scp.
🔑 On restaure, PUIS on tourne la clé. Les jetons d'API vivent DANS la base, donc un
snapshot restaure ceux de son époque : si la clé a été tournée depuis, toute l'application
répond 401 sans que rien ne soit cassé. Enchaînez sur la rotation de clé.
chargement…
Le point de départ est-il nu ?
Le snapshot 0 ne devrait porter que le nécessaire à l'application :
les 5 projets de structure, les 2 comptes techniques, les groupes de rôle et de poste, les
définitions du catalogue et les deux porteurs de réglages. Rien d'autre.
Le manifeste du snapshot ne pouvait pas répondre : sa notion d'« objet hors structure »
met dans le même sac les 84 définitions du catalogue et une absence d'essai. Le contrôle
ci-dessous restaure le snapshot dans une base temporaire (jetée à la fin) et sépare
les deux, objet par objet. Deux causes de résidu, mesurées le 08/09 : la purge préserve « Gestion interne » et
« Support » en entier — définitions comme instances, donc les absences et les
tickets d'essai traversent toutes les remises à zéro ; et cinq équipes de démonstration
étaient créées par un script de structure, donc recréées à chaque rejeu (corrigé le
même jour : plus que sous --demo).
⚠️ Le nettoyage se joue sur une base nue, juste avant de refaire le snapshot 0. Il
épargne toujours le catalogue, les porteurs nommés par le code, les groupes de rôle et de
poste — et il refuse de supprimer une équipe qui a des membres.
Rejouer la structure étape 4
Un champ, un groupe ou une entrée de catalogue ajoutés pendant que Claude
travaillait sur A n'existent pas dans B. Et l'ordre de création détermine les
identifiants que l'application cite en dur : les rejouer dans le désordre donnerait une base
d'apparence correcte et une application subtilement fausse.
À jouer après une restauration comme après une remise à zéro : la purge emporte
le projet « Feuilles de temps » — un contenant pour les feuilles des gens, pas une définition
— alors qu'elle préserve le catalogue de tâches, qui n'en contient aucune. La vérification
nomme ce qui manque, y compris un projet absent.
⛔ Pas besoin de rejouer APRÈS un import (précisé le 08/09/2026) : ce qui dépend des
clients est dans l'étape Après l'import. Le rejeu sert
quand on repart d'une base vivante qu'on ne peut pas refabriquer — pas quand on la
refabrique depuis les Excel, où la structure vient du snapshot de départ. Le bouton
2 · Vérifier, lui, est toujours utile : il ne modifie rien.
⚠️ Juste après un import, ce contrôle est ROUGE — et ce n'est pas la structure
(constat de l'user, 09/09/2026). Son point 7 exige que les groupes de poste soient
membres des dossiers qui viennent de naître : c'est le geste de
Après l'import, le seul, et il n'existe nulle part
avant. Jouez cette étape-là d'abord — elle finit d'ailleurs par ce même contrôle.
Le snapshot B — générer, récupérer, effacer étapes 9 et 12
B ne reste jamais sur la VM. On le génère, on le récupère sur son
poste, on vérifie qu'il est bien arrivé, puis on l'efface d'ici — et c'est seulement à ce
moment-là que le nettoyage peut tourner, puis la reconnexion.
2 · La commande scp s'affiche ci-dessus
dès que B existe. ⚠️ Vérifiez la taille chez vous avant d'effacer : c'est peut-être la
seule copie du travail du cabinet.
Annexe · outils hors déroulé ne servent plus normalement
Rien n'a été supprimé, mais rien ici ne fait partie du déroulé. Trois sujets :
le snapshot de référence, l'anonymisation (reportée, à trancher) et la
remise à zéro, dont la restauration
d'un snapshot fait mieux — elle détruit et recharge la base, là où la remise à zéro préserve
3 projets et 2 comptes, donc leurs journaux d'activité. Gardée comme repli si une
restauration échouait.
Snapshot de référence (0 / A)
Reste sur la VM, dans une zone que la purge préserve —
donc réservé aux bases sans dossier client. Le script refuse si la base en porte, et
renvoie vers le snapshot B.
Remise à zéro de la base (repli)
Aperçu d'abord ; la confirmation apparaît ensuite dans la
console. Elle vide la base, pas le disque : les fichiers et les traces s'effacent
plus bas.
Anonymisation
Masque les noms réels en place et génère le mapping.csv nécessaire à un
futur dé-masquage. Ne fait plus partie du déroulé : pour rendre la base à Claude,
c'est la restauration du snapshot A qui s'en charge — sans mapping à conserver.
⚠️ Deux limites qui ont motivé son retrait. Elle ne touche jamais aux
titres de tâches (certains portaient des fragments de vrais noms clients). Et comme elle écrit
par l'API, chaque modification crée une version dans l'historique d'OpenProject dont
l'instantané précédent garde la valeur réelle : la base masquée n'est donc pas exempte
de réel. Conservée le temps que ce sujet soit tranché.
Dé-masquage — l'inverse, à partir du
mapping.csv d'une anonymisation précédente. Remplacé dans le déroulé par la
restauration du snapshot B, qui ne demande aucun mapping.
aucun fichier
Expéditeur des e-mails …
Permet au planning d'envoyer lui-même les invitations. Facultatif :
sans lui, tout fonctionne déjà — la page de gestion affiche le lien, vous le transmettez
par copie ou par votre propre Outlook.
⏱️ À faire dès l'ouverture de la session si vous comptez l'utiliser.
Elle n'a qu'une exigence : que Claude soit déconnecté. Les invitations se distribuent au moment des
tests à plusieurs. Et le secret doit être supprimé dans Entra
juste avant de reconnecter Claude.
Les valeurs viennent d'une application Entra ID côté Microsoft, avec la permission
applicative Mail.Send. Les trois premiers champs ne sont pas des secrets
(l'identifiant de tenant se découvre depuis le nom de domaine) ; seul le quatrième en est un.
Indispensable : restreindre l'application à la seule boîte
d'envoi par une ApplicationAccessPolicy dans Exchange Online. Sans elle,
Mail.Send vaut sur tout le tenant — l'application pourrait écrire au nom
de n'importe quelle boîte du cabinet.
🔁 Le secret ne vit que pendant que Claude est déconnecté (décision user du 31/07,
plus stricte que la simple rotation) :
· à la déconnexion de Claude — créer le secret dans Entra et le saisir ici ;
l'envoi fonctionne.
· avant de reconnecter Claude — supprimer le secret dans Entra. L'envoi
s'arrête, et aucune copie subsistant sur la VM n'ouvre plus rien.
Conséquence assumée : pas d'envoi automatique tant que Claude est connecté.
Le lien d'invitation reste produit et transmissible à la main.
Envoi de test — à faire immédiatement après
l'enregistrement. Au premier contact ça échoue presque toujours ; la réponse brute de
Microsoft dit pourquoi.
Nettoyer, puis reconnecter Claude étapes 13 et 14
Quatre gestes, dans cet ordre, un bouton chacun : il joue
l'aperçu, et la confirmation n'apparaît qu'ensuite, dans le journal, une fois l'aperçu réussi.
On ne peut donc pas exécuter sans avoir vu ce que ça va faire. ⚠️ Le snapshot B doit être
récupéré puis effacéavant : la purge des résidus
refuse de tourner tant qu'il est sur la machine.
1 · Les fichiers réels de la machine Les classeurs déposés pour l'import et le plan temporaire. Le
contrôle ne fabrique rien : il lit.
2 · Les résidus en base La base archive ce qu'elle supprime (table d'audit), et
garde le contenu effacé dans ses pages jusqu'à un VACUUM FULL. Emporte aussi
trois réservoirs qu'aucun autre bouton ne touche : le secret d'envoi, le
journal systemd — qui nomme les auteurs des écritures privilégiées — et les
copies horodatées du magasin d'auth, dont chacune porte les empreintes ET les
jetons d'API des comptes de son époque. Le magasin vivant, lui, n'est pas touché.
3 · Les segments WAL Ils appartiennent au serveur PostgreSQL, pas à une base : ils
survivent à la restauration en gardant des fragments d'écritures. Le recouvrement
écrit dans une base jetable et prouve au niveau octet qu'il ne reste rien.
4 · Les traces de Claudeen dernier Claude Code écrit sur le disque tout ce qu'il lit. ⚠️ À jouer
après l'avoir déconnecté — sinon l'opération est refusée. Sa mémoire auto est
préservée.
⛔ Un snapshot B est encore sur la VM — il contient de vraies données. Le nettoyage
ci-dessus refusera de tourner, et la reconnexion est bloquée tant qu'il est là.
Aller le récupérer puis l'effacer →
Relancez le contrôle du geste 1 APRÈS les trois
autres — c'est lui qui dit si le nettoyage a tout pris. Joué avant, il rougit à raison :
la restauration vient d'écrire une copie du magasin d'auth, que le geste 2 emporte. Ne
reconnectez qu'une fois ce contrôle vert.