Aller au contenu

Avec Rétroaction

Ce qui change dans le module Projets quand le module Rétroaction est installé aussi, avec une seule liste de projets, les rapports liés aux fiches, leurs auteurs prévenus et le formulaire sur la feuille de route.

Projets fonctionne seul. Quand @fraza-pro/module-feedback est installé et activé sur le même site, les deux modules se parlent par le registre @fraza/core/integrations, sans qu'aucun importe l'autre : Rétroaction reprend les projets d'ici et lie ses rapports aux fiches, et Projets lui demande ce qu'il doit savoir de ces rapports. Chaque intégration déclare un numéro de contrat, contract : un module dont le partenaire déclare un autre contrat l'ignore, avec un avertissement unique dans le journal.

Désactiver l'un des deux coupe le lien sans erreur, mais ne l'efface pas : les rapports gardent leur fiche en base. Sans Projets, Rétroaction montre sur la page d'un rapport encore lié un bouton Détacher. Le module revenu, Rétroaction rattrape dans l'heure, par sa tâche feedback-retention, ce qui a changé ici entre-temps : projets créés, modifiés ou supprimés, et fiches supprimées, dont les rapports retournent dans la boîte de réception. Voir Retirer le module Projets.

Le même lien, vu du côté de Rétroaction, est décrit dans Avec le module Projets.

Une seule liste de projets

Les projets se gèrent ici, et seulement ici. Rétroaction garde un projet à elle par projet de Projets, son reflet, pour ce qui lui appartient : les rapports, leurs étiquettes et l'adresse du formulaire. Rien n'est à relier à la main : chaque projet a son reflet, dont les rapports se lient à ses fiches.

IciDans Rétroaction
SlugLe même, sauf s'il y est déjà pris : un suffixe le rend unique.
Nom, visibilité, archivageLes mêmes, repris à chaque changement.
Projet mis en avantLe projet principal de Rétroaction, celui du formulaire sans slug de projet. Il n'y est jamais archivé : il reste ouvert jusqu'à ce qu'un autre projet soit mis en avant ici.

Projets prévient Rétroaction après chaque création, modification, archivage ou restauration d'un projet (onProjectSaved), et après chaque suppression (onProjectDeleted). Quand le changement met un autre projet en avant, Rétroaction est prévenue pour ce projet d'abord : son projet principal le suit avant que l'ancien soit archivé. Un projet supprimé ici emporte son reflet s'il n'a aucun rapport ; sinon, le reflet reste, archivé et détaché, et aucun rapport n'est perdu. Un signal qui échoue est journalisé et ne défait rien ici. Rétroaction relit aussi toute la liste chaque heure, par sa tâche feedback-retention, ce qui rattrape un changement manqué, et une fois juste après l'installation de Projets.

Le tableau

Chaque carte montre le nombre de rapports liés à la fiche : « 3 demandes ». La confirmation d'un déplacement vers une colonne qui prévient rappelle que les auteurs des rapports liés recevront eux aussi un courriel.

La page d'une fiche

Une section Rapports liés s'ajoute aux réglages, entre les votes et l'auteur. Rétroaction la publie côté navigateur, sous le nom ItemReportsSection de son intégration. Elle liste les rapports lus dans la fiche, chacun avec son type et son état, et un lien vers sa page dans Rétroaction › Boîte de réception. Sans rapport, elle dit que la fiche vient de l'équipe. Une personne sans feedback.view ne voit pas la section.

Une fiche créée depuis un rapport

Depuis la page d'un rapport, Lier à une fiche propose une fiche ouverte du projet, ou en crée une nouvelle dans sa colonne par défaut, au nom de la personne connectée. La nouvelle fiche prend le type du rapport :

Type du rapportType de la fiche
BugBug
IdéeIdée
QuestionTâche

Le type range ensuite la fiche dans les notes de version de son jalon. Sa création s'écrit dans l'historique, comme toute autre.

Les courriels

Les auteurs des rapports liés s'ajoutent aux comptes qui ont voté ou qui suivent la fiche, pour le courriel d'une colonne comme pour celui d'une mise à jour. Pour un rapport envoyé depuis un compte client, c'est l'adresse du compte au moment du départ ; sinon, l'adresse donnée dans le formulaire. Chaque adresse ne reçoit qu'un courriel : une personne qui a voté et envoyé deux rapports en reçoit un.

Deux auteurs ne reçoivent rien : celui d'un rapport marqué « Touche à la sécurité », à qui l'équipe répond directement, et celui d'un rapport dont la conservation a déjà effacé les données personnelles. Une adresse désabonnée des courriels de Projets ne reçoit rien non plus, même nommée par Rétroaction : le désabonnement est vérifié par Projets, sur toutes les adresses, au départ de chaque courriel. Chaque courriel porte son lien de désabonnement. Voir Se désabonner.

Un rapport qui touche à la sécurité

Une fiche liée à un rapport marqué « Touche à la sécurité » ne peut pas devenir publique. Cocher Public est refusé avec le message « Cette fiche est liée à un rapport de sécurité : elle reste interne. », et la route répond le code item_refused. Le bug reste hors de la page publique jusqu'à sa correction.

Déplacer ou supprimer

Action dans ProjetsEffet sur les rapports
Déplacer la fiche vers un autre projetLes rapports la suivent, dans le reflet du nouveau projet, et perdent leur étiquette. Si aucun projet de Rétroaction ne reflète le nouveau, les rapports restent où ils sont et quittent la fiche : un rapport lié redevient « Nouveau ».
Fusionner la fiche dans une autreLes rapports suivent la fiche gardée, quand Rétroaction connaît le crochet onItemsMerged. Sinon, ils retournent dans la boîte de réception comme pour une suppression. Voir plus bas.
Supprimer la ficheLes rapports retournent dans la boîte de réception : un rapport lié redevient « Nouveau », un rapport fermé le reste.
Archiver un projetSon reflet est archivé : il garde ses rapports, mais n'a plus de formulaire public. Archiver le projet mis en avant en met un autre en avant, qui devient le projet principal de Rétroaction.
Supprimer un projetSon reflet est supprimé s'il n'a aucun rapport, sinon archivé et détaché.

Fusion

Fusionner une fiche dans une autre du même projet supprime la première. Avant, quand la fiche gardée est publique, Projets demande à Rétroaction checkItemChange(<fiche fusionnée>, { isPublic: true }) : un rapport « Touche à la sécurité » ne doit pas se retrouver lié à une fiche publique. Un refus arrête la fusion, avec le code item_refused.

Après la fusion, Projets appelle onItemsMerged(fromId, intoId) : fromId n'existe plus, et Rétroaction rattache à intoId les rapports qui la nommaient, sans changer leur état. Ce crochet est un ajout facultatif au contrat 1. Une version de Rétroaction qui ne le publie pas reçoit onItemDeleted(fromId) à la place, et ses rapports retournent dans la boîte de réception, d'où ils se lient de nouveau à la main. Voir API.

La conservation des rapports

Rétroaction lit l'état des fiches pour sa conservation : un rapport dont la fiche est dans une colonne Terminée est terminé, et son délai de conservation part du moment où la fiche y est entrée. Le réglage « Terminée » d'une colonne compte donc aussi pour les rapports. Voir Conservation.

La feuille de route publique

Quand le reflet du projet est public et actif, la feuille de route publique propose Signaler un bug et Proposer une idée. Les deux mènent au formulaire de Rétroaction pour ce projet, le type déjà choisi (?type=bug, ?type=idea). La page d'une fiche propose Proposer autre chose, vers le même formulaire. L'introduction de la feuille de route invite aussi à proposer quelque chose.

Le formulaire du projet mis en avant est à <adresse de Rétroaction>/nouveau ; celui d'un autre projet, à <adresse de Rétroaction>/<projet>/nouveau. Un site qui construit ses pages lit cette adresse côté serveur dans form, que rend getPublicProjectLinks({ project }), ou dans le navigateur dans formPath, la réponse de GET /za/api/projects/public/roadmap ou de fetchRoadmap(). null : pas de bouton. Ne jamais recomposer l'adresse à partir du slug du projet : le reflet peut porter un autre slug, quand un projet de Rétroaction avait déjà celui-là.

Une seule adresse pour les deux modules

Une fiche ou un projet de Projets ne prend jamais le slug nouveau, suivi, mes-fiches, desabonnement ni journal. Les deux modules peuvent donc partager une adresse :

FRAZA_MODULE_PROJECTS_PUBLIC_PATH=/feuille-de-route
FRAZA_MODULE_FEEDBACK_PUBLIC_PATH=/feuille-de-route
PageAdresse
Les projets/feuille-de-route
La feuille de route d'un projet/feuille-de-route/<projet>
Une fiche/feuille-de-route/<projet>/<fiche>
Le formulaire du projet mis en avant/feuille-de-route/nouveau
Le formulaire d'un autre projet/feuille-de-route/<projet>/nouveau
Le suivi d'un rapport/feuille-de-route/suivi/<jeton>

Le site sert ces pages lui-même : voir Intégrer au site et, pour Rétroaction, Intégrer au site.

Sur cette page