La page de confidentialité côté utilisateur(trice) pour Transformer mon rôle. Ce que nous lisons, ce que nous jetons, ce que contient une ligne d'audit, pourquoi un ID de session anonyme est pseudonyme, et comment fonctionnent la sauvegarde et la suppression de compte.
Une seule ligne sans contenu est écrite par session dans la table transform_ingestions. Son but est opérationnel : nous permettre de répondre à "combien de sessions se sont terminées avec succès aujourd'hui, dans quelles juridictions, dans quels locales ?" sans jamais enregistrer une description de poste.
C'est la liste complète. La migration qui crée cette table comporte zéro colonne pouvant contenir du contenu de description de poste. Un test d'intégration énumère une liste de colonnes interdites et casse la CI si une nouvelle colonne ressemble à du contenu de description de poste.
Chaque session de Transformer mon rôle frappe un UUID aléatoire — l'ID de session. L'ID est pseudonyme : il est généré par session, jamais lié à une empreinte, jamais dérivé d'un identifiant et jamais réutilisé entre sessions. Une session fraîche produit un UUID frais.
Lorsque vous vous connectez en cours de session ou sauvegardez le plan, votre user_id est enregistré sur la ligne d'audit et sur tout plan sauvegardé ; avant la connexion, la session est entièrement anonyme. L'ID de session n'est pas en soi identifiant — c'est une poignée interne vers le stockage de session en mémoire.
Zéro persistance. Le texte traverse l'extraction et est jeté immédiatement. Aucun fichier temporaire, aucune entrée de journal, aucune ligne de base ne contient le texte.
Plafond strict de 60 minutes. Les octets passent par un chemin de traitement éphémère en mémoire ; si un repli sur fichier temporaire doit être utilisé, un balayage applique la limite de 60 minutes. Après 60 minutes, les octets sont garantis disparus, indépendamment de l'état du pipeline.
La sauvegarde est réservée aux comptes. L'action de sauvegarde conserve les caractéristiques structurées — l'enveloppe de candidats extraits, la résolution de mise en correspondance, la sortie de synthèse d'écart, le paquet du plan — dans la table saved_transform_plans, indexée par votre identifiant utilisateur. Elle ne conserve pas la description du poste, l'URL, les octets téléversés, le nom de fichier ni aucun autre champ à forme de contenu.
Un raffinement zod défensif rejette toute charge utile qui porte des clés à forme de contenu au moment de l'écriture, quelle que soit la façon dont le point d'appel a été construit. Si un chemin de code futur tentait jamais de glisser un champ 'jdText' ou 'pasteContent' à travers le endpoint de sauvegarde, l'écriture échouerait avec une erreur de contrat de confidentialité.
Si vous activez les notifications de changement pour un plan enregistré, le récapitulatif quotidien est envoyé à l'adresse e-mail de votre compte. L'e-mail liste les titres de vos propres plans enregistrés qui ont changé — il n'est remis qu'à vous, le propriétaire du plan. Nous ne journalisons jamais l'adresse du destinataire ni aucun contenu de plan enregistré ; un envoi qui échoue est consigné uniquement avec l'identifiant de l'abonnement et le type d'erreur. Chaque récapitulatif comporte un lien de désabonnement en un clic, et se désabonner supprime entièrement l'enregistrement de l'abonnement.
Les modes coller-texte et téléversement sont conditionnés par une case explicite de droits. La case affirme que vous détenez les droits de partager le contenu — typiquement parce que vous l'avez écrit, qu'il a été publié pour distribution générale ou que votre employeur l'autorise. Le mode récupération-URL n'est pas conditionné car la récupération se fait sur le web public en respectant robots.txt. La case elle-même n'est pas conservée comme contenu ; seul mode='upload' ou mode='text-paste' est enregistré sur la ligne d'audit.
Les plans sauvegardés et les abonnements de notification de changement se propagent en cascade sur la suppression d'utilisateur(trice) (ON DELETE CASCADE). Si vous supprimez votre compte, chaque ligne référençant votre user_id dans saved_transform_plans et transform_plan_subscriptions est supprimée avec le compte.
Les lignes d'audit se comportent différemment : user_id est nullable avec ON DELETE SET NULL. La ligne opérationnelle est préservée (pour que l'analytique agrégée par juridiction continue de fonctionner), mais son lien avec votre identité tombe — la ligne est anonymisée, pas supprimée. Si vous avez besoin que la ligne d'audit soit supprimée aussi, contactez le support.
Le panneau d'agent curé sur la vue du plan répond à des questions à partir d'un contexte pré-construit uniquement avec les candidats structurés. Le contexte de l'agent ne porte jamais la description, l'URL ni les octets téléversés — cela est vérifié dans les 30 conversations curées d'échantillon livrées avec la surface (10 chacune en EN / pt-BR / FR). Le panneau affiche un indicateur "Cette conversation n'est pas sauvegardée" ; si vous vous connectez et sauvegardez le plan, l'indicateur passe à "Sauvegardé sur votre compte ; la description du poste n'est pas conservée".
Un middleware de journalisation compatible Pino retire tout nom de champ qui ressemble à du contenu (jdText, jdUrl, jdMarkdown, uploadBytes, rawJd, sourceUrl, extractedText, uploadFilename, plus 9 formes nominales supplémentaires ajoutées lors de la revue confidentialité/légale) et masque les chaînes ressemblant à des URL dans les champs de texte libre avant que les journaux ne quittent la requête. C'est opt-in pour la surface Transformer mon rôle — le scrubber ne masque pas les champs d'URL légitimes ailleurs dans la base de code.