Pages publiques
La liste des projets publics, la feuille de route de chacun, une colonne entière, le journal des versions, la page d'une fiche, le vote, le suivi, les courriels envoyés par le module Projets et le désabonnement.
Les pages publiques prennent le cadre commun des modules et la marque du site. Voir Pages publiques. Pour des pages dans le design du site, voir Intégrer au site.
Avec FRAZA_MODULE_PROJECTS_PUBLIC_PATH, ces pages ne s'affichent plus : chacune redirige vers la même adresse sous le chemin du site, paramètres compris. /za/projects/principal?etiquette=Facturation mène à /feuille-de-route/principal?etiquette=Facturation. Seule la page de désabonnement reste celle du module : les liens des courriels déjà envoyés y mènent.
Les adresses
Chaque projet vit sous son slug, le projet mis en avant compris :
| Page | Adresse |
|---|---|
| Les projets publics | /za/projects |
| La feuille de route d'un projet | /za/projects/<projet> |
| Une colonne entière | /za/projects/<projet>?colonne=<clé>, et &page=2… |
| Le journal des versions | /za/projects/<projet>/journal, et ?page=2… |
| Une fiche | /za/projects/<projet>/<fiche> |
| Se désabonner des courriels | /za/projects/desabonnement?c=…&t=…, le lien d'un courriel |
Un projet interne ou archivé répond 404 sur toutes ses pages, comme une adresse inconnue. Une adresse plus longue répond 404 aussi. Aucune fiche ne prend le slug journal, ni aucun projet le slug desabonnement.
Les projets : /za/projects
La page « Projets » liste les projets publics et actifs, le projet mis en avant d'abord, puis dans l'ordre de l'admin. Chaque projet montre son nom et le début de sa description, et mène à sa feuille de route. Sans projet public, la page le dit.
La feuille de route : /za/projects/<projet>
Le titre est « Feuille de route · » suivi du nom du projet. Viennent ensuite les colonnes publiques, dans leur ordre : À l'étude, Planifié, En cours, Livré pour un projet créé avec le modèle Feuille de route, ou celles que l'équipe a faites. Seules les fiches publiques y paraissent. Dans une colonne en cours, les plus votées viennent en premier, quel que soit l'ordre que l'équipe a donné aux cartes de son tableau ; une colonne terminée montre les vingt plus récentes, avec leur note de livraison. Une autre colonne en montre 500 au plus.
L'en-tête d'une colonne compte toutes ses fiches publiques. Quand elle en montre moins, Voir tout (42) mène à la colonne entière, avec l'étiquette choisie.
-
Dès qu'il y a deux projets publics, une rangée de liens en haut passe de l'un à l'autre.
-
Les étiquettes servent de filtre :
/za/projects/<projet>?etiquette=Facturation. « Tout » le retire. -
Une carte montre le titre, le début de la description, le bouton de vote, l'étiquette et le nom du jalon.
-
Le bouton de vote dit « moi aussi ». Un second clic retire le vote. Qui peut voter dépend de
FRAZA_MODULE_PROJECTS_VOTE: voir Configuration. Avecuseret sans compte client connecté, il mène à/auth/login, puis revient sur la page. Un compte d'équipe vote comme un visiteur. -
Journal des versions mène au journal du projet, quand un de ses jalons fermés a une fiche publique terminée.
La description du projet sert de description à la page pour les moteurs de recherche.
Avec le module Rétroaction, la page propose aussi « Signaler un bug » et « Proposer une idée ». Voir Avec Rétroaction.
Une colonne entière
/za/projects/<projet>?colonne=<clé> montre toutes les fiches publiques d'une colonne publique, 50 par page, avec Précédentes et Suivantes. Une colonne terminée met les dernières livrées d'abord, une autre les plus votées. etiquette filtre comme sur la feuille de route. Une clé inconnue, ou celle d'une colonne interne, répond 404.
Le journal
/za/projects/<projet>/journal montre les jalons fermés du projet, le plus récemment fermé d'abord, 20 par page. Chacun montre son nom, sa date de fermeture, sa description rendue depuis son Markdown, puis ses fiches terminées, rangées comme dans les notes de version : Nouveautés, Améliorations, Corrections, Autres changements. Chaque fiche mène à sa page, suivie de sa note de livraison.
N'y paraissent que les fiches publiques d'une colonne publique et terminée : une fiche de « Fermé », colonne terminée mais interne, n'y est pas, alors que les notes de version de l'admin la reprennent. Un jalon fermé sans aucune de ces fiches est laissé de côté, et un jalon ouvert n'y est jamais.
Chaque jalon porte une ancre tirée de son nom, #jalon-0-4-0. Flux RSS mène au flux du journal, que la page annonce aussi aux lecteurs de flux (<link rel="alternate" type="application/rss+xml">). Voir API.
Une fiche : /za/projects/<projet>/<fiche>
La colonne, le type, le jalon et l'étiquette, puis le titre, la note de livraison dans une colonne terminée, le vote et Suivre, la description rendue depuis son Markdown, et les mises à jour publiques de l'équipe, la plus récente d'abord. Chaque mise à jour porte le nom de son auteur, ou « L'équipe », sa date, et « modifiée » quand elle a changé plus d'une minute après sa publication. Un lien en bas ramène à la feuille de route.
La page ne montre jamais les responsables, l'échéance, la priorité ni l'historique de la fiche. Une fiche interne, dans une colonne interne ou dans un projet interne ou archivé répond 404. Une fiche fusionnée dans une autre est supprimée : son adresse répond 404.
Suivre une fiche
Suivre inscrit le compte client connecté aux courriels de la fiche sans voter pour elle ; Suivie l'en retire. Suivre et voter sont indépendants : retirer son vote n'arrête pas le suivi, et l'inverse. Sans compte client connecté, le bouton dit « Se connecter pour suivre » et mène à /auth/login, puis revient sur la fiche, quel que soit le réglage du vote. Un compte d'équipe ne suit pas une fiche depuis le site : la route répond 403. Sur un site sans comptes clients, le bouton n'est pas affiché.
Suivre une fiche demande ses courriels : un compte dont l'adresse s'était désabonnée y est réinscrit.
Les courriels
| Courriel | Quand | À qui |
|---|---|---|
| Le courriel d'une colonne, « C'est prévu : … » par exemple | Une fiche que le site montre entre dans une colonne qui prévient. | Les comptes qui ont voté ou qui suivent la fiche, chaque adresse une fois. Dans une colonne terminée, avec la note de livraison. Un bouton « Voir sur la feuille de route ». |
| « Du nouveau : … » | L'équipe publie une mise à jour et coche « Prévenir par courriel ». | Les mêmes. Le message en texte simple, avec un bouton « Voir la fiche ». |
- Chaque personne reçoit le courriel d'une colonne une seule fois par fiche, même si la fiche revient en arrière puis y retourne. Une mise à jour ne part qu'une fois vers chaque adresse.
- Une fiche que le site ne montre pas (interne, dans une colonne interne, dans un projet interne ou archivé) ne déclenche aucun courriel. Déplacer une fiche vers un autre projet n'en déclenche pas non plus.
- L'adresse d'un compte est lue au départ du courriel : une personne qui en a changé reçoit la nouvelle là où elle lit son courrier aujourd'hui.
- Le lien mène à la page de la fiche,
<adresse>/<projet>/<fiche>, sousFRAZA_MODULE_PROJECTS_PUBLIC_PATHquand le site l'a réglée. - Une adresse désabonnée ne reçoit rien, qu'elle vienne d'un vote, d'un suivi ou du module Rétroaction.
Les courriels passent par la file d'envoi du core : une panne du fournisseur les retarde sans les perdre.
Se désabonner
Chaque courriel se termine par une phrase qui dit pourquoi il arrive, suivie du lien Se désabonner de ces courriels, propre à son destinataire, comme le demande la LCAP. Le lien ouvre /za/projects/desabonnement?c=…&t=…, une page qui explique ce qui cesse et propose Se désabonner : l'ouvrir seul ne change rien, pour qu'un antivirus de messagerie ou l'aperçu d'un client qui suit les liens ne désabonne personne. Le bouton fait la demande, puis la page confirme : « Désabonnement enregistré. Cette adresse ne recevra plus ces courriels. »
Le désabonnement vaut pour tous les courriels du module sur ce site, de toutes les fiches et de tous les projets. Il n'expire pas. Il se lève quand le compte de cette adresse suit une fiche.
Ce qui est gardé : l'empreinte SHA-256 de l'adresse, en minuscules et sans espaces autour, et la date. Jamais l'adresse elle-même. L'empreinte n'est pas un secret : qui connaît une adresse peut vérifier si elle s'est désabonnée, mais la liste ne se relit pas en adresses.
Le lien porte cette empreinte (c) et une signature HMAC-SHA256 de celle-ci (t), sous une clé tirée de FRAZA_ENCRYPTION_KEY. Seul un courriel envoyé par le site désabonne une adresse, et le lien ne contient pas l'adresse. Un lien modifié ou forgé affiche « Ce lien de désabonnement n'est pas valide. Utiliser le lien du courriel le plus récent. » Changer FRAZA_ENCRYPTION_KEY invalide les liens des courriels déjà partis, jamais les désabonnements, qui ne dépendent d'aucune clé. Sans FRAZA_ENCRYPTION_KEY, les courriels partent sans le lien, et un avertissement est écrit au journal une fois.
Les courriels ne portent pas les en-têtes List-Unsubscribe et List-Unsubscribe-Post : la file d'envoi du core ne transmet pas d'en-tête propre à un module. La route de désabonnement accepte déjà la requête « un clic » de la RFC 8058, le jour où ces en-têtes pourront partir. Voir API.
Avec le module Rétroaction, les auteurs des rapports liés à la fiche les reçoivent aussi. Voir Avec Rétroaction.