Aller au contenu
Candidater

Journal des modifications

Les évolutions de Cohez.io, de la plus récente à la plus ancienne.

173 versions publiées.

Versions 11 à 20 sur 173

0.25.9.0 — 2026-09-29

Ajouts

  • Aide en ligne : rubrique Inscriptions et parcours « Par où commencer » (#331, 2026-09-29). Six guides pour les dirigeants : saisons et cours, campagne et formulaire public, rubriques, propositions et tarifs, suivi des inscriptions, export CSV, ajout, retrait et échange de cours. L'accueil de l'aide guide la mise en route d'une saison dans l'ordre (saison, cours, campagne, formulaire, ouverture). Les libellés cités sont ceux des écrans ; un test vérifie que le guide du formulaire public reprend les titres exacts des pages « Les inscriptions sont clôturées », « Ce lien d'inscription a expiré » et « Page introuvable ». Les chemins des guides sont figés par des tests.

Corrections

  • Code en ligne sans accents graves dans l'aide (2026-09-29). Le plugin typographique de Tailwind entourait chaque <code> d'accents graves visibles (noms de fichier, colonnes du CSV). Neutralisé dans vitrine.css pour les pages d'aide.

0.25.8.0 — 2026-09-28

Ajouts

  • Aide en ligne publique sur cohez.io/aide (#329, 2026-09-28). Pages d'aide écrites en Markdown dans resources/help/ (front matter : titre, description, ordre, date de mise à jour), rendues dans le gabarit du site vitrine avec navigation par rubrique, fil d'Ariane et ancres sur les titres. Pages indexables, listées dans le sitemap avec leur date de mise à jour ; fermées sur les sous-domaines des associations et de l'admin. Première page : « Identification des adhérents sur le formulaire » (rubrique Adhérents). Des tests bloquent une page au front matter invalide, un lien ou une ancre cassés, une image sans texte alternatif.

0.25.7.2 — 2026-09-28

Corrections

  • Pages de la vitrine fermées sur le sous-domaine admin (2026-09-28). admin.cohez.io/tarifs, les pages légales, /merci, le formulaire de contact partenaire et /sitemap.xml répondaient 200 : le middleware platform.only ne rejetait que les sous-domaines d'association, et l'admin ne résout aucun tenant. Ils répondent désormais 404, comme sous un sous-domaine d'association.
  • Sitemap limité aux pages indexables (2026-09-28). Les conditions générales et la politique de confidentialité, en noindex, figuraient dans le sitemap, ce que la Search Console signale en erreur. Le sitemap ne liste plus que / et /tarifs, plus /mentions-legales dès que le SIRET est renseigné (la page quitte alors le noindex). Le test qui devait l'empêcher, resté en skip depuis la suppression du sitemap statique, interroge désormais la route.

0.25.7.1 — 2026-09-28

Corrections

  • robots.txt et sitemap.xml enfin servis par l'application (#327, 2026-09-28). Les fichiers statiques public/robots.txt et public/sitemap.xml, servis directement par Apache, masquaient le contrôleur SEO ajouté le 2026-09-24 : le sitemap de cohez.io ne listait que 3 pages (manquaient les conditions générales et la politique de confidentialité), et les sous-domaines des associations recevaient le robots.txt de la vitrine. Fichiers supprimés, test garde-fou s'ils réapparaissent. robots.txt reprend les blocages de l'ancien fichier (pages applicatives de la vitrine, dossiers /build/, /vendor/, /storage/ sur tous les hôtes). Sous-domaines des associations et admin : Allow: / au lieu de Disallow: /, pour que les moteurs lisent l'en-tête X-Robots-Tag: noindex, nofollow (inchangé), seule garde contre leur indexation — un Disallow les empêcherait de le voir.

0.25.7.0 — 2026-09-28

Ajouts

  • Page de remerciement /merci après une candidature d'association pilote (#326, 2026-09-28). Une candidature acceptée redirige (303) vers https://cohez.io/merci au lieu de revenir sur l'accueil : Matomo peut enfin compter les envois, via un objectif « visite de l'URL exacte /merci ». La page n'est servie qu'avec le marqueur de session posé par l'envoi : visite directe, rechargement ou robot sont renvoyés vers l'accueil côté serveur, avant tout chargement du tracker. Même layout que la vitrine (tracker inclus), noindex, absente du sitemap, prochaines étapes et lien de retour. Le leurre anti-robot reçoit la même 303 vers /merci, sans marqueur. Traitement de la candidature (validation, enregistrement, notification) et retour au formulaire en cas d'erreur inchangés.

Retraits

  • Message de succès du formulaire de l'accueil (#326, 2026-09-28), remplacé par la page /merci, avec sa classe .v-form-status.

0.25.6.1 — 2026-09-28

Corrections

  • Dédoublonnage des personnes sans e-mail par identité civile (#324, 2026-09-28). Une inscription publique ou une ligne d'import sans e-mail, mais avec nom et date de naissance, rattache désormais l'adhérent à la fiche existante de même prénom, nom et date (casse et espaces ignorés) au lieu de créer un doublon ; la fiche portant déjà un Member est préférée, son e-mail n'est jamais modifié. Sans nom ou sans date, une nouvelle fiche est créée comme avant ; la date doit être identique (une fiche sans date n'est pas rattachée). Le garde-fou d'adhésion active et le préflight d'import suivent la même règle : une ligne sans e-mail rattachable n'est plus bloquante (« réutilisée ») ; sans nom ou sans date, elle reste bloquante. Les doublons déjà en base ne sont ni fusionnés ni corrigés.
  • Repli civil borné : consentements jamais appliqués, contact principal jamais rétrogradé (#324, 2026-09-28). Sur ce repli civil sans e-mail, la mise à jour d'une fiche retrouvée n'applique plus l'opt-in des consentements RGPD (import et funnel public) ; dans le funnel public, le contact principal (LegalGuardian) déjà déclaré pour un mineur n'est plus rétrogradé par une soumission qui le retrouve sans e-mail — un nouveau responsable ne devient principal que si le mineur n'en a encore aucun. Le chemin e-mail garde son comportement actuel (opt-in des consentements, rétrogradation de l'ancien contact principal).

0.25.6.0 — 2026-09-28

Ajouts

  • Page d'erreur applicative en français sur les espaces association (#318, 2026-09-26). Les 403, 404, 410 (et les 500 hors mode debug) des sous-domaines tenant affichent une page Inertia du Design System (errors/HttpError) au lieu de la page Laravel en anglais : titre et message par statut, bouton « Retour au tableau de bord » réservé aux utilisateurs connectés. Le 410 reste générique (« Ce lien ou ce document n'est plus disponible ») car il couvre aussi les liens publics expirés du funnel. Seul le code de statut est transmis à la page : ni message d'exception, ni chemin, ni trace. La vitrine, l'admin Filament et les réponses JSON gardent leur comportement d'origine ; si le rendu échoue, l'erreur est journalisée et la réponse d'origine est renvoyée.

Modifications

  • Contraste AA des couleurs de statut success et warning, dans toute l'application (#318, 2026-09-26). Blanc sur #27AE60 ou #C68C00 plafonnait à 2,9:1 ; les tokens passent à #1F7A3E et #8A6100 en clair (≥ 5:1 sous texte blanc et sur le fond de page), avec un texte foncé sur les badges en sombre. Tous les badges, pastilles et textes de statut changent de teinte (Dashboard, paniers, inscriptions, réunions, toasts).
  • Accessibilité de l'onglet Santé et de la page Archives santé (#318, 2026-09-26). Formats, taille maximale et plage de dates acceptés affichés sous le champ de dépôt, dérivés des règles serveur ; champ fichier vidé après un dépôt réussi ; boutons « Déposer » / « Enregistrer » actifs, validation à la soumission, erreurs annoncées (role="alert") et focus sur le premier champ en erreur ; erreur de saison reliée au sélecteur. Archives : titres de tableaux (<caption>), aide du motif reliée au champ, état de téléchargement. Icônes décoratives masquées aux lecteurs d'écran, noms accessibles distincts d'une saison à l'autre, mention « nouvel onglet », cibles tactiles de 44 px sur mobile.
  • Composants de formulaire (#318, 2026-09-26). Input, Textarea et Select ne posent aria-describedby que si l'aide ou l'erreur visée existe ; Select accepte une aide et une erreur reliées, et aligne sa valeur à gauche partout.

Corrections / Sécurité

  • Les pièces santé sont téléchargées avec leur vrai type de fichier (#318, 2026-09-26). StreamMemberDocument ne posait pas de Content-Type : la pièce partait en text/html. Elle est maintenant servie en PDF, JPEG ou PNG selon son extension (liste blanche, repli application/octet-stream), avec X-Content-Type-Options: nosniff. Formats acceptés, attribut accept, aide affichée et type servi viennent d'une source unique, HealthDocumentRules.
  • Page d'erreur applicative : correctifs de revue (#318, 2026-09-26). L'admin sur admin.{domaine} garde sa page d'origine même si ADMIN_DOMAIN diffère ; une réponse d'erreur déjà en JSON n'est jamais remplacée par la page HTML ; tous les appels fetch JSON du front (funnel public, groupes, utilisateurs, représentants légaux, réunion live) envoient Accept: application/json, pour recevoir le message d'erreur du serveur plutôt qu'une page ; un visiteur sans session (URL inexistante) se voit proposer « Retour à l'accueil ». Une fiche introuvable (404 levé à la résolution du modèle de la route, par exemple /members/{id} inconnu) garde l'utilisateur connecté et le nom de l'association : les middlewares Inertia passent désormais avant SubstituteBindings.
  • Onglet Santé et Archives : erreurs mieux rattachées (#318, 2026-09-26). L'erreur sur le représentant légal d'une attestation est affichée et reliée à son champ, et une erreur sans champ dédié est annoncée au niveau du formulaire. Dans les Archives, une pièce déjà supprimée (410), une erreur réseau ou un refus serveur s'affichent dans le dialogue sans marquer le motif invalide ; l'erreur « motif trop court » s'efface à la saisie.
  • Stack Docker de dev : healthcheck nginx limité à /health exact (#322, 2026-09-28). location /health était un préfixe et interceptait /health-archives, qui répondait healthy au lieu d'afficher la page Archives santé en local. Aucun effet sur Clever Cloud.

0.25.5.3 — 2026-09-27

Corrections

  • Dédoublonnage des personnes : une date de naissance absente d'un côté ne crée plus de doublon (#321, 2026-09-27). À e-mail et prénom égaux (casse et espaces ignorés), PersonIdentityMatcher::whereDedupKey() traite une date de naissance absente — sur la fiche ou dans la saisie — comme compatible : le funnel d'inscription publique et l'import HelloAsso retrouvent une fiche créée sans date (back-office, import) au lieu d'en créer une seconde, et complètent sa date sans jamais écraser une date existante. Deux dates renseignées et distinctes restent deux personnes (fratries, jumeaux). Une fiche sans date qui n'est que payeur ou responsable légal (sans adhésion) n'est pas rapprochée d'une saisie datée, pour ne pas rattacher un enfant homonyme à la fiche de son parent. Quand plusieurs fiches correspondent, celle qui porte déjà un Member est retenue, puis celle dont la date est exactement celle saisie (preferringMemberThenExactBirthdate()). Un nouveau Member créé sur une fiche datée retrouvée sans date saisie tire son statut mineur de la date de la fiche. Le contrôle de doublon d'inscription, le garde-fou d'adhésion active et le préflight d'import (« Réutilisée » au lieu de « Ambiguë », message dédié pour la fiche payeur / responsable légal) suivent la même règle. L'import résout les adhérents d'un panier avant son payeur et ses représentants : un adhérent qui paie pour lui-même retrouve sa fiche sans date au lieu d'en créer une seconde ; le préflight bloque une fiche sans date ni adhésion dont l'identité est payeur ou représentant d'une autre commande du fichier (issue dépendante de l'ordre des commandes), et son message d'ambiguïté cite de préférence la fiche datée. Le garde-fou d'adhésion active et le contrôle « déjà inscrit » ignorent une fiche sans date quand une fiche à la date saisie porte déjà une adhésion : une fille datée n'est plus bloquée par l'inscription de sa mère homonyme sans date sur l'e-mail familial. Les doublons déjà en base ne sont ni fusionnés ni corrigés.

0.25.5.2 — 2026-09-26

Corrections

  • Unicité de l'e-mail adhérent en back-office insensible à la casse et aux espaces stockés (#320, 2026-09-26). EloquentMemberRepository::emailExistsInTenant (et findByEmail) compare désormais LOWER(TRIM(persons.email)) : un e-mail enregistré avec des majuscules ou des espaces (import HelloAsso, données historiques) n'échappe plus au contrôle d'unicité à la création ou à la modification d'un adhérent.

0.25.5.1 — 2026-09-26

Corrections

  • Dédoublonnage des personnes insensible à la casse et aux espaces de l'e-mail et du prénom (#319, 2026-09-26). Le funnel d'inscription publique et l'import HelloAsso reconnaissent désormais une personne déjà en base même si son e-mail ou son prénom diffère par la casse ou par des espaces, via PersonIdentityMatcher (LOWER(TRIM())) : dédoublonnage PersonDeduplicationService, contrôle de doublon d'inscription, garde-fou d'adhésion active, payeur et responsable légal (funnel et ImportPayerResolver), préflight d'import. Quand plusieurs fiches correspondent, la fiche qui porte déjà un Member (ou un Payeur) est retenue, puis la plus ancienne ; le contrôle de doublon et le garde-fou d'adhésion examinent toutes les fiches. Les doublons déjà en base ne sont ni fusionnés ni corrigés.