---
suivi: 1547
date: 2026-09-15
sujet: Notifier une mention dans un commentaire de tâche
chantier: taches_suivi / mentions / alertes / teams
type: feature
statut: poussé
hash: 9ecc4a8c
fichiers:
  - app/Services/TacheSuiviService.php
  - tests/Unit/TacheSuiviMention1547SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - docs/suivi/SUIVI_1547_mention_tache_notification.md
---

# SUIVI #1547 — PHASE 2 mention tâche : rattacher, alerter, Teams

## PROMPT ENVOYÉ

Option C du #1544. Mentionner = inviter : rattacher à
tache_suivi_personnes (idempotent), puis alerte existante
(tache_suivi_commentaire_mention_dest_{id}), puis Teams via
TeamsNotificationService dans le POST web PHP-FPM. Pas de job.
Dispatcher et mentions facture intacts. Auto-mention : pas de
rattachement ni notif. Lookup azure_id. Pas de reprise des 6
mentions. Pas de migration. Push HECTAREG main.

## BASE GIT

HEAD = origin/main `c10846d6` (#1546) au départ. Working tree
propre hors hectareenvol.sql. Pas de .vue → pas de rebuild Vite.

## FICHES LUES

- **#1544** — dispatcher no-op ; cloche filtrée par estVisiblePar ;
  6 mentions / 0 alerte. Option C retenue. Teams = webhook Power
  Automate depuis PHP-FPM, jamais CLI.
- **#1237 LEÇON** — auto-mention enregistrée, skip notif par
  destinataire. Conservé ; pas de rattachement non plus (l’auteur
  a déjà accès).
- **#1077 LEÇON** — HTTPS sortant mort en CLI OVH. Impact : appel
  synchrone dans storeCommentaire, pas de job.
- **#1209 LEÇON** — tâche morph dossier : visibilité = ACL dossier,
  y compris pour les assignés. Conservé : on ne contourne pas
  estVisiblePar. Rattachement personnes ne lève pas l’ACL dossier.
- **#1542** — scénario déjà étiqueté « Tâches ». Page alertes
  non retouchée.

## SYNTHÈSE

Rôle du pivot : `tache_suivi_personnes` n’a pas de colonne rôle.
Lien unique = personne associée (`assignee_at`). C’est le
participant / associé de la tâche, le plus neutre disponible.

Lookup : `ensureUserFromGraph` sur `users.azure_id`. Personne
absente de l’ERP → warning, pas de pivot personne, pas de 500.

Alerte : filtre `estVisiblePar` conservé. Après rattachement,
il passe pour les tâches hors dossier. Tâche ancrée dossier
foncier (#1209) : l’ACL dossier peut encore omettre l’alerte.

Teams : `notifierUtilisateur` dans la requête POST, try/catch,
pas de MentionNotificationDispatcher, pas de job.

## DÉPLOIEMENT-TEST

1. `git pull origin main`
2. `php artisan optimize:clear` + `view:clear` + `journal:sync`
3. Mentionner un non-associé → apparaît dans les personnes,
   alerte /alertes, Teams, ligne api_logs service=teams
4. Déjà associé → alerte + Teams, pas de doublon pivot
5. Auto-mention → rien
6. Deux mentions → deux alertes, deux Teams
7. Commentaire sans mention → inchangé
8. Les 6 mentions historiques restent sans alerte

Pas de migration. JAMAIS npm/composer/optimize/config:cache sur OVH.

## LEÇON

Un no-op dispatcher partagé ne se « répare » pas pour un seul
métier : brancher TeamsNotificationService localement. Mentionner
sans accès ne sert à rien : rattacher d’abord, puis laisser
estVisiblePar décider. Sur un dossier foncier, personnes associées
≠ visibilité (#1209).
