Skip to main content

Module classification_erreurs

Module classification_erreurs 

Source
Expand description

Classification des erreurs applicatives encore portées par une String.

── Le défaut que ce module borne ──────────────────────────────────────────

Dix-huit gestionnaires décident du code HTTP en cherchant des sous-chaînes dans un message d’erreur. Cent vingt-six occurrences au 2026-09-07.

Le relevé des motifs cherchés dit tout :

52 × .contains("not found")
 6 × .contains("introuvable")

Le même concept, en deux langues. Les messages du domaine juridique sont en français ; ceux des couches techniques en anglais. Un gestionnaire qui ne cherche que « not found » renvoie donc 500 sur un « introuvable » — une panne serveur là où l’utilisateur a simplement demandé une ressource qui n’existe pas.

C’est exactement ce qui s’est produit le 2026-09-04 : « Impossible de déterminer l’ACP : une écriture manuelle doit désigner un immeuble » ne correspondait à aucun motif, et une saisie incomplète ressortait en 500. La rustine a consisté à ajouter les deux motifs manquants — au site concerné seulement.

── Ce que ce module fait, et ce qu’il ne fait pas ────────────────────────

Il ne remplace pas la vraie correction, qui est de typer les erreurs (#762, et la migration Result<_, String> → Result<_, AppError> de #555). Un jour où le domaine rendra AppError::NotFound, ce module n’aura plus lieu d’être.

En attendant, il rassemble en un seul endroit le lexique bilingue, pour que la prochaine langue ou le prochain synonyme s’ajoute une fois et profite à tous les gestionnaires — au lieu d’être découvert site par site, à chaque 500 injustifié.

Un lexique dispersé sur cent vingt-six sites ne se corrige jamais entièrement : on corrige celui qui a fait mal.

Functions§

est_interdit
L’erreur dit-elle que l’appelant n’a pas le droit ?
est_introuvable
L’erreur dit-elle qu’une ressource n’existe pas ?
est_motif_acp_manquant
L’erreur est-elle PRÉCISÉMENT le refus « motif obligatoire » d’une réservation on_behalf_of_acp (story #588, INV-5/FR27) ?
est_motif_manquant
L’erreur est-elle PRÉCISÉMENT le refus d’une modération communautaire (SEL/Poll/Notice/SharedObject) tentée sans motif texte ?
est_refus_owner_requis
L’erreur est-elle PRÉCISÉMENT le refus opposé à qui n’a pas de fiche de copropriétaire (skill/shared_object/resource_booking resolve_owner()) ?