Journal des versions

Ce qui a changé dans Mail.

← Tous les modules

15 septembre 2026

Un solde pour dépasser, un badge pour agrandir, et des jauges revues à la hausse

MailStatsVeille

  • Les jauges montent, beaucoup.L’audience passe de 18 000 à 60 000 par mois sur le gratuit, de 128 000 à 360 000 sur Solo, de 345 000 à 980 000 sur Équipe. Les e-mails passent de 110 à 1 000, de 2 200 à 15 000, de 7 500 à 50 000. Deux coûts unitaires étaient faux — un événement d’audience et un envoi d’e-mail — et tout le monde payait cette erreur en plafonds trop bas.
  • Un quota atteint n’arrête plus tout.Le solde prend le relais, au tarif unitaire du poste. Un euro achète 50 000 exécutions, 400 000 événements d’audience ou 50 000 e-mails. Le quota mensuel est toujours consommé en premier, et le solde ne se remet jamais à zéro.
  • Le badge donne 10 % de jauge par domaine.Un domaine dont la possession est prouvée et qui affiche le lien « Surveillé par LeTock » relève toutes les jauges de l’équipe de 10 %, au prorata des jours où le lien est en place. Les domaines se cumulent jusqu’à doubler les jauges. Le forfait gratuit y a droit comme les autres.
Ce que ça change pour ton coderupture
  • Rupture. Les quotas de volume ont été multipliés par 1,5, puis rééquilibrés. La règle de marge passe de 60 % à 40 % au pire : on ne laissait consommer que 40 % de ce qui était payé, par prudence, et un plafond jamais atteint ne coûte rien.
  • Nouvelle table `team_solde`, et `consommer()` puise dedans quand le mois est plein. La réponse porte alors `surSolde: true` et `microEurosDebites`. Chaque mouvement est journalisé dans `solde_mouvements`.
  • Nouvelle route `/r/<clé-du-domaine>` : la cible du badge. Elle ne pose aucun cookie et n’enregistre rien — l’attribution passe par la présence du lien sur la page, constatée une fois par jour, pas par qui a cliqué.
  • `limiteDe(teamId, poste)` prend un troisième argument facultatif, l’instant, pour calculer le prorata du badge. Le code existant n’a rien à changer.
  • Le coût d’une alerte passe de 180 à 26 micro-euros, celui d’un événement d’audience de 4 à 1,5, celui d’un envoi de 20 à 12. Le premier était justifié par un prestataire facturé au message, que Tock n’emprunte plus depuis qu’il expédie lui-même.
14 septembre 2026

Auth, le tableau de bord, des quotas qui s’appliquent, et une notice pour les IA

AuthSignauxStatsCronMailUptimeVeilleSEO & LLMErreursIA

  • Les quotas s’appliquent : ce qui était annoncé sur la page Tarifs et ce que le produit laissait faire étaient deux choses différentes — un forfait Équipe à qui l'on promettait cent tâches en obtenait cinq. Chaque forfait a maintenant ses quotas, appliqués au geste près, et un test fait échouer la suite si un forfait cesse d'être rentable quand un abonné le consomme à fond.
  • Ce que tu consommes se voit : huit jauges sur ta page Mon compte, remises à zéro le 1er. Avant, le premier signe qu'un plafond existait était un refus.
  • Une notice pour les assistants de code : toute la plateforme en un fichier, à l'adresse /notice.md — les modules, chaque route, les quotas, les pièges, et ce que Tock ne fait pas. Elle est fabriquée à l'instant où on la demande, donc elle ne peut pas être en retard sur le produit, et elle commence par dire à l'assistant qui la lit d'aller la rechercher à chaque session plutôt que de se fier à une copie.
  • Donne les commandes à ton IA : sur le tableau de bord, tu coches ce que tu autorises — regarder, créer des tâches, envoyer des e-mails — et tu repars avec la clé **et** le texte à coller dans ta conversation : ce qui est permis, ce qui ne l'est pas, et quoi faire d'un refus. Approuver une validation humaine n'est jamais proposé à un agent : une validation qu'il peut s'accorder lui-même n'en est plus une.
  • Auth : Tock devient fournisseur d'identité pour tes applications. Un vrai serveur OpenID Connect — code d'autorisation avec PKCE exigé, rotation des jetons, signature RS256 que tes applications vérifient sans nous appeler, donc notre panne ne devient pas la tienne. Tes utilisateurs se connectent sans mot de passe, sur un écran qui porte ton nom et pas le nôtre. Le flux implicite et le flux par mot de passe sont refusés : ils ont été retirés des recommandations, les proposer serait offrir une porte qu'on sait mauvaise.
  • Tes utilisateurs ne sont pas nos comptes : ils vivent dans une table à part, cloisonnés par projet. Deux tables plutôt qu'un drapeau — un drapeau finit toujours par être oublié dans une clause de filtrage, et ce jour-là l'utilisateur d'un client entre dans le compte d'un autre.
  • Un tableau de bord : ce qui demande attention sur tous tes projets d'un coup d'œil, cumulé ou projet par projet. C'est là que tu arrives en te connectant. Dix requêtes que tu aies un projet ou dix — mesuré, pas supposé.
  • Stats s’explore : cliquer un pays, une source, une page filtre tout l'écran. Treize dimensions, combinables, avec exclusion, et tout dans l'adresse — donc partageable. Les dix répartitions étaient des listes mortes ; ce sont des portes.
  • Stats compte enfin l’argent : la valeur envoyée avec un événement n'était jamais sommée. Revenu par source, par page, par campagne, panier moyen, revenu par visiteur. Des objectifs déclarables avec leur taux de conversion, attribués au premier contact du visiteur — sinon tout revient à l'accès direct.
  • Entonnoirs, parcours, retours : où les gens tombent, par quel chemin ils passent, qui revient. Les retours disent d'abord ce qu'on ne peut pas mesurer : l'empreinte d'un visiteur est jetée chaque nuit, donc personne — nous compris — ne relie une visite de mardi à une visite de mercredi.
  • Signaux : le module qui manquait, et qui est la thèse du produit. Chaque module dépose ce qu'il constate dans un journal commun ; quand deux modules différents constatent quelque chose sur le même domaine à moins de trois jours d'écart, l'écran le dit — « tes ventes ont chuté mardi, ton certificat avait expiré lundi ». Aucun outil isolé ne peut produire cette phrase.
  • Une faille d’authentification, corrigée : sans application GitHub configurée, la session réelle était ignorée et tout visiteur devenait le compte de démonstration. En production, une variable d'environnement oubliée ouvrait la plateforme. Le repli de démonstration ne s'active plus hors développement, et la connexion par e-mail n'est plus court-circuitée.
  • Un double envoi d’e-mails, fermé : la file d'envoi était lue sans être réservée. Deux workers remettaient deux fois le même message au destinataire final — une faute irréversible. La réservation est désormais atomique, et cinq autres veilles qui avaient le même défaut avec elle.
  • La clé API ne passe plus par l’URL : elle entrait dans l'historique du navigateur, dans les journaux du proxy et dans l'en-tête de la navigation suivante. Elle transite par un cookie de deux minutes, effaçable d'un bouton.
  • La validation humaine ne s’approuve plus au clavier : « Approuver » était le premier bouton du formulaire, donc la touche Entrée dans le champ de note approuvait l'action d'un agent. Le défaut clavier est maintenant de ne rien décider.
  • Les mesures sont enfin purgées : deux tables annonçaient en commentaire une purge qui n'existait nulle part — les deux plus alimentées du produit. Et quatorze purges tournaient chaque minute sur un index inutilisable, donc en balayage complet. Une migration d'index, et la rétention promise est tenue.
  • Une seule façon de naviguer dans un module : les sections vivaient tantôt dans la barre de gauche, tantôt en onglets dans la page, sans règle. La barre est le seul endroit où l'on navigue dans un module — et elle dit désormais, module par module, ce qui demande à être regardé.
  • Un seul vocabulaire visuel : quatre classes d'en-tête de page, deux rangées de chiffres, trois sortes de carte, six conventions de bouton et trois collisions de styles — dont une qui faisait perdre leur couleur à tous les messages d'erreur du produit. Tout ça vient d'un même socle de composants.
  • Le thème se choisit : l'échappatoire existait dans la feuille de style depuis le début, et rien ne la posait jamais. Clair, sombre, ou comme le système — sans JavaScript, donc sans scintillement.
  • Se déconnecter : il n'existait aucun moyen de sortir de son compte. Sur un poste partagé, c'était un problème.
Ce que ça change pour ton coderupture
  • Les clés d'API portent des **missions** : ce qu'elles ont le droit de faire, geste par geste, coché sur le tableau de bord. Un appel hors de cette liste répond 403 « mission_non_autorisee ».
  • Rupture. Une route d'écriture qui n'est nommée dans aucune mission tombe dans « divers.ecrire », décoché par défaut : **ce qui est ajouté à l'API après la création d'une clé lui est fermé** tant que personne ne l'ouvre.
  • Rupture. Les quotas des forfaits sont appliqués pour de bon, et non plus par des constantes qui ne connaissaient aucun forfait. Un dépassement mensuel répond 429 « quota_atteint » ; les compteurs repartent le 1er.
  • Rupture. L'intervalle minimum entre deux exécutions d'une tâche passe de 5 à 15 minutes sur le forfait gratuit, et dépend désormais du forfait. Une tâche existante n'est pas touchée ; une modification qui repasse sous l'intervalle est refusée.
  • Nouvelle adresse `/notice.md` : toute la plateforme en un fichier, fabriqué à la demande depuis le code. Et `/notice`, la même chose lisible dans un navigateur.
  • `/llms.txt` annonçait un intervalle minimum de 5 minutes écrit en dur, qui était déjà faux. Les quotas qu’il cite viennent maintenant des forfaits.