Module Feedback avec deux routes anonymes (défi anti-spam, envoi d’une demande) et cinq routes d’administration : vue d’ensemble, liste, détail, modification du statut, suppression. Les modifications passent par des requêtes signées.
FeedbackGuard : défi anti-spam à usage unique (preuve de calcul) et limites par adresse IP, gardées en mémoire seulement (3 demandes / 10 min, 10 / jour).
FeedbackStore : un fichier JSON par demande, rangé par jeu et par mois, écrit de façon atomique. Plafonds : 300 demandes par jour et par jeu, 5 000 par jeu, 100 Mo au total, 500 Mo d’espace disque libre minimum.
RetentionService : purge au démarrage puis chaque jour.
Demandes : supprimées 12 mois après leur clôture, et au plus tard 24 mois après réception.
Journal d’audit : purgé au-delà de 12 mois, ce qui corrige l’écart RGPD relevé.
AuditLog.Purge, nouveaux réglages Feedback et Audit, et limite de débit feedback.
Anonymat : aucune adresse IP n’est enregistrée avec une demande ni dans l’audit de son envoi, et nginx n’écrit pas ces requêtes dans ses journaux.
Ajouts — contrats et client
Contracts/Feedback :
FeedbackForms : les 4 formulaires et leurs champs prédéfinis ;
FeedbackRules : validation commune au launcher et au serveur (caractères invisibles refusés, longueurs bornées) ;
FeedbackProof : le défi anti-spam ;
les objets échangés.
Routes, permissions feedback.read et feedback.manage, codes d’erreur feedback_full et proof_invalid.
Groupes par défaut :
Administrateur : reçoit les deux nouvelles permissions ;
Éditeur : aucune.
LauncherApiClient.SendFeedbackAsync (envoi anonyme) et les méthodes d’administration dans AdminSession.
Ajouts — launcher
Nouveau projet GameLauncher.Modules.Feedback, ajouté à la solution : le formulaire du joueur et les informations techniques.
Bouton Aide dans la barre de titre, absent sans apiUrl.
Fenêtre FeedbackWindow en trois étapes :
choix du type ;
formulaire : étoiles, listes, compteurs de caractères ;
confirmation avec la référence et un bouton pour la copier.
La saisie est conservée si l’envoi échoue, et Échap ne ferme pas la fenêtre pendant la saisie.
Icônes Star, Lightbulb, Bug et MessageQuestion.
Ajouts — menu d’administration
Page « Demandes des joueurs » :
choix du jeu, avec le nombre de nouvelles demandes sur chaque tuile ;
filtres : type, statut (« À traiter » par défaut) et recherche ;
liste et fiche en deux colonnes ;
statut, note interne, suppression confirmée.
Carte « Demandes des joueurs » sur le tableau de bord.
FeedbackRulesTests, FeedbackModuleTests et FeedbackPanelTests ; le projet de tests référence Modules.Feedback.
# **Changelog**
## **Ajouts — serveur**
- Module `Feedback` avec deux routes anonymes (défi anti-spam, envoi d’une demande) et cinq routes d’administration : vue d’ensemble, liste, détail, modification du statut, suppression. Les modifications passent par des requêtes signées.
- `FeedbackGuard` : défi anti-spam à usage unique (preuve de calcul) et limites par adresse IP, gardées en mémoire seulement (3 demandes / 10 min, 10 / jour).
- `FeedbackStore` : un fichier JSON par demande, rangé par jeu et par mois, écrit de façon atomique. Plafonds : 300 demandes par jour et par jeu, 5 000 par jeu, 100 Mo au total, 500 Mo d’espace disque libre minimum.
- `RetentionService` : purge au démarrage puis chaque jour.
- Demandes : supprimées 12 mois après leur clôture, et au plus tard 24 mois après réception.
- Journal d’audit : purgé au-delà de 12 mois, ce qui corrige l’écart RGPD relevé.
- `AuditLog.Purge`, nouveaux réglages `Feedback` et `Audit`, et limite de débit `feedback`.
- Anonymat : aucune adresse IP n’est enregistrée avec une demande ni dans l’audit de son envoi, et nginx n’écrit pas ces requêtes dans ses journaux.
## **Ajouts — contrats et client**
- `Contracts/Feedback` :
- `FeedbackForms` : les 4 formulaires et leurs champs prédéfinis ;
- `FeedbackRules` : validation commune au launcher et au serveur (caractères invisibles refusés, longueurs bornées) ;
- `FeedbackProof` : le défi anti-spam ;
- les objets échangés.
- Routes, permissions `feedback.read` et `feedback.manage`, codes d’erreur `feedback_full` et `proof_invalid`.
- Groupes par défaut :
- Administrateur : reçoit les deux nouvelles permissions ;
- Éditeur : aucune.
- `LauncherApiClient.SendFeedbackAsync` (envoi anonyme) et les méthodes d’administration dans `AdminSession`.
## **Ajouts — launcher**
- Nouveau projet `GameLauncher.Modules.Feedback`, ajouté à la solution : le formulaire du joueur et les informations techniques.
- Bouton Aide dans la barre de titre, absent sans `apiUrl`.
- Fenêtre `FeedbackWindow` en trois étapes :
- choix du type ;
- formulaire : étoiles, listes, compteurs de caractères ;
- confirmation avec la référence et un bouton pour la copier.
- La saisie est conservée si l’envoi échoue, et Échap ne ferme pas la fenêtre pendant la saisie.
- Icônes Star, Lightbulb, Bug et MessageQuestion.
## **Ajouts — menu d’administration**
- Page « Demandes des joueurs » :
- choix du jeu, avec le nombre de nouvelles demandes sur chaque tuile ;
- filtres : type, statut (« À traiter » par défaut) et recherche ;
- liste et fiche en deux colonnes ;
- statut, note interne, suppression confirmée.
- Carte « Demandes des joueurs » sur le tableau de bord.
## **Documentation**
- `LISEZMOI.md` (étape 3 octies, arborescence, surveillance), `nginx-api.conf`, `appsettings.json`.
- `ADMIN-ARCHITECTURE.md` (§ 4, § 7, § 11 quinquies, phase 7d, § 14) et `README.md`.
## **Tests**
- `FeedbackRulesTests`, `FeedbackModuleTests` et `FeedbackPanelTests` ; le projet de tests référence `Modules.Feedback`.
nicolas
added this to the Système de feedback milestone 2026-11-09 15:05:08 +01:00
nicolas
added the Ajout label 2026-11-09 15:05:08 +01:00
nicolas
self-assigned this 2026-11-09 15:05:08 +01:00
nicolas_gitea
was assigned by nicolas2026-11-09 15:05:08 +01:00
nicolas
added this to the Système de feedback project 2026-11-09 15:05:08 +01:00
nicolas
added 11 commits 2026-11-09 15:05:08 +01:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Changelog
Ajouts — serveur
Feedbackavec deux routes anonymes (défi anti-spam, envoi d’une demande) et cinq routes d’administration : vue d’ensemble, liste, détail, modification du statut, suppression. Les modifications passent par des requêtes signées.FeedbackGuard: défi anti-spam à usage unique (preuve de calcul) et limites par adresse IP, gardées en mémoire seulement (3 demandes / 10 min, 10 / jour).FeedbackStore: un fichier JSON par demande, rangé par jeu et par mois, écrit de façon atomique. Plafonds : 300 demandes par jour et par jeu, 5 000 par jeu, 100 Mo au total, 500 Mo d’espace disque libre minimum.RetentionService: purge au démarrage puis chaque jour.AuditLog.Purge, nouveaux réglagesFeedbacketAudit, et limite de débitfeedback.Ajouts — contrats et client
Contracts/Feedback:FeedbackForms: les 4 formulaires et leurs champs prédéfinis ;FeedbackRules: validation commune au launcher et au serveur (caractères invisibles refusés, longueurs bornées) ;FeedbackProof: le défi anti-spam ;feedback.readetfeedback.manage, codes d’erreurfeedback_fulletproof_invalid.LauncherApiClient.SendFeedbackAsync(envoi anonyme) et les méthodes d’administration dansAdminSession.Ajouts — launcher
GameLauncher.Modules.Feedback, ajouté à la solution : le formulaire du joueur et les informations techniques.apiUrl.FeedbackWindowen trois étapes :Ajouts — menu d’administration
Documentation
LISEZMOI.md(étape 3 octies, arborescence, surveillance),nginx-api.conf,appsettings.json.ADMIN-ARCHITECTURE.md(§ 4, § 7, § 11 quinquies, phase 7d, § 14) etREADME.md.Tests
FeedbackRulesTests,FeedbackModuleTestsetFeedbackPanelTests; le projet de tests référenceModules.Feedback.Code ok, je valide