Skip to content

OctoGuard : « Faux positif » et « C'était normal » au journal (lot 10) - #953

Merged
Pokled merged 1 commit into
mainfrom
feat/octoguard-faux-positif
Nov 7, 2026
Merged

Pokled merged 1 commit into
mainfrom
feat/octoguard-faux-positif

Conversation

@Pokled

@Pokled Pokled commented Nov 7, 2026

Copy link
Copy Markdown
Owner

Un des éléments de la maquette qui n'étaient prévus dans aucun lot, trouvés au crible du 07/11 (CDC E4h, lot 10, décision D25).

Ce que voit l'équipe

  • Dans le journal, un bouton « Faux positif » sur chaque action d'OctoGuard. Il ouvre un panneau qui dit d'abord ce qui va se passer : l'avertissement ou la sourdine est annulé, la fausse alerte est comptée. L'admin valide ensuite.
  • Un bouton « C'était normal » sur chaque observation (une règle qui regarde sans agir).
  • Le chiffre « Justesse » de la Vue d'ensemble compte les faux positifs et les annulations. Une action à la fois annulée et marquée ne compte qu'une fois.

D25 : un faux positif n'affaiblit jamais une règle en silence

On n'apprend qu'un seul cas sûr : un mot qui contient un motif partiel sans en être un (« contenu » attrapé par « *con* »). Ce mot :

  • est écrit en toutes lettres (« « contenu » ne sera plus jamais attrapé par cette règle ») ;
  • n'est appris que si l'admin coche la case, décochée par défaut ;
  • est recalculé par le serveur, qui ne se fie jamais à ce qu'envoie le navigateur.

Un mot interdit listé tel quel (« con », « connard ») n'est jamais appris, même si l'on force la demande. Les autres règles (liens, majuscules, inondation…) n'apprennent rien : l'écran propose seulement d'ouvrir leurs réglages.

Pour le savoir, le moteur note désormais le mot réel du message et le motif qui l'a attrapé. Avant, il ne notait que le motif.

Durcissements

  • Une seule marque par entrée, même sur deux clics simultanés. C'est la base qui le garantit, avec un index unique partiel (migration 133). Il est limité aux deux actions nouvelles : d'anciens doublons dans le journal ne peuvent pas faire échouer la migration (vérifié).
  • « Annuler » répondait 500 à un identifiant mal formé ; il répond maintenant 400.
  • Le journal et la Vue d'ensemble ne citent plus un nom technique (« octoguard.warn_user ») comme s'il s'agissait d'un message.

Preuves

  • Cœur : 1411 tests, dont 18 nouveaux. Deux sabotages volontaires (retirer la garde du mot interdit, retirer le verrou anti-double-clic) font bien échouer les tests.
  • Frontend : 416 tests, 0 erreur de types, les 5 portes i18n vertes (fr et en).
  • SQL : 11 vérifications dans un vrai PostgreSQL (PGlite) : marque unique, ajout d'exception sans doublon et plafonné à 500, règle d'un autre type jamais modifiée, calcul de « Justesse » sans double compte.
  • Bout en bout, sur un banc jetable (vrai cœur et vrai moteur, aucune donnée de production), 21 vérifications : « contenu » appris puis publié, « con » jamais appris et toujours interdit, un seul compte par marque, « Justesse » juste.
  • Navigateur : 7 vérifications, zéro erreur JS. La case est décochée par défaut, et valider sans cocher n'apprend rien.

…ot 10)

Un des éléments de la maquette oubliés au plan (CDC E4h, lot 10, D25).

- Journal : « Faux positif » sur une action d'OctoGuard. Un panneau dit
  d'abord ce qui va se passer (annulation, fausse alerte comptée), puis
  l'admin valide. « C'était normal » sur une observation.
- D25, règle d'or : un faux positif n'affaiblit JAMAIS une règle en
  silence. On n'apprend qu'un seul cas sûr : un mot qui CONTIENT un motif
  partiel sans en être un (« contenu » attrapé par « *con* »). Il est écrit
  en toutes lettres, case DÉCOCHÉE par défaut, et le serveur recalcule ce
  plan lui-même (jamais sur la foi du navigateur). Un mot interdit listé
  tel quel n'est jamais appris, même en forçant la demande.
- Pour le savoir, le moteur note désormais le mot réel du message et le
  motif qui l'a attrapé (avant : seulement le motif).
- « Justesse » compte les faux positifs ET les annulations, une action
  marquée et annulée ne comptant qu'une fois.
- Une seule marque par entrée, même sur deux clics simultanés : garantie
  par la base (index unique partiel, migration 133), limité aux deux
  actions nouvelles pour que la migration ne puisse pas échouer.
- « Annuler » refusait mal un identifiant mal formé (erreur 500) : 400.
- Le journal et la Vue d'ensemble ne citent plus un nom technique
  (« octoguard.warn_user ») comme s'il s'agissait d'un message.
@Pokled
Pokled merged commit fec92df into main Nov 7, 2026
10 checks passed
@Pokled
Pokled deleted the feat/octoguard-faux-positif branch November 7, 2026 17:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant