arcmates

Plan — Commentaires sur un évènement

Cf. entrée correspondante dans plans/roadmap.md (section Backlog, “Commentaires sur un évènement”).

Objectif

Permettre à n’importe quel mate d’ajouter un commentaire texte libre sur un évènement existant — “qui se souvient de quoi” — en plus du champ description déjà présent (qui reste la description de référence, écrite par le créateur/éditeur de l’évènement ; les commentaires sont un fil de réactions de plusieurs personnes, chronologique, non éditable a posteriori par quelqu’un d’autre que son auteur).

Périmètre

Dans le scope de cette itération :

Hors scope pour cette itération (à revisiter séparément si voulu) :

Modèle de données

Nouvelle table, migration séparée (comme 2026-09-add-person-email-and-write-policies.sql) plutôt qu’une édition rétroactive de schema.sql (cf. CLAUDE.md) : scripts/2026-09-add-comments.sql.

create table comments (
  id uuid primary key default gen_random_uuid(),
  evenement_id uuid not null references events(id) on delete cascade,
  auteur_id uuid references people(id),
  texte text not null,
  cree_le timestamptz default now(),
  modifie_le timestamptz default now()
);

-- Réutilise la fonction set_modifie_le() déjà définie dans schema.sql pour
-- les évènements (générique, pas de raison de la dupliquer).
create trigger comments_set_modifie_le
  before update on comments
  for each row execute function set_modifie_le();

alter table comments enable row level security;
create policy "comments_select_all" on comments for select using (true);
create policy "comments_insert_all" on comments for insert with check (true);
create policy "comments_update_all" on comments for update using (true);
create policy "comments_delete_all" on comments for delete using (true);

Notes :

Notification admin (Edge Function)

Même mécanique que supabase/functions/notify-new-person/ :

Design UI

Découpage technique

scripts/2026-09-add-comments.sql : migration ci-dessus (table + trigger + RLS).

scripts/2026-09-notify-admin-new-comment-trigger.sql + supabase/functions/notify-new-comment/index.ts : notification admin ci-dessus.

storage.js (ajouts, même pattern que les fonctions *Event existantes) :

data.js (fonction pure, à côté de needsIdentitySelection) :

chart.js :

arc-diagram.html : bloc #add-comments-section décrit ci-dessus, entre #add-desc et .add-actions dans #add-panel.

style.css : styles de la liste de commentaires (une ligne par commentaire : avatar+nom+date en en-tête, texte en dessous, boutons Modifier/Supprimer alignés à droite façon discrète), du textarea/bouton “Publier”, réutilisant les tokens couleur déjà définis (pas de nouvelle palette).

tests/data.test.js : cas pour isCommentEditableBy (auteur match, mismatch, auteurId absent).

tests/storage.test.js : cas pour rowToComment/commentToRow (aller-retour, champs optionnels absents) et fromTimestamp, même pattern que les tests rowToEvent/eventToRow/fromISODate existants.

INSTALL.md : nouvelle sous-section (à côté du § 8 existant) pour le setup manuel de notify-new-comment (déploiement + trigger SQL).

Sécurité — résumé

Même modèle de confiance que le reste de l’app aujourd’hui (pas d’auth réelle, cf. roadmap) : n’importe qui ayant le lien peut, via l’API REST Supabase directement (en contournant le front), modifier/supprimer n’importe quel commentaire malgré la restriction UI “auteur seulement” — ce n’est pas un trou de sécurité nouveau introduit par cette feature, juste la continuation du risque déjà documenté dans roadmap.md (“Écriture ouverte sur people”, suppression d’évènement ouverte à tous). À ajouter à la liste roadmap des risques ouverts.

Décisions (validées avec l’utilisateur, 2026-09-12)

# Question posée Réponse Décision retenue
1 Un commentaire peut-il être modifié/supprimé par son auteur ? “supprimer/modifier si c l’auteur du commentaire” Édition + suppression, restreintes à l’auteur côté UI (bouton visible seulement si tu es l’auteur) — pas d’application serveur fiable possible sans auth, cf. “Hors scope”
2 Notification email à l’ajout d’un commentaire ? “notifier l’admin seulement pour commencer” Notification admin uniquement (réutilise notify-new-person), pas de notification à l’auteur de l’évènement/aux personnes taguées pour l’instant

Prêt pour l’implémentation.