Então, imagine um post com três menções a grupos diferentes. Ele é editado e uma quarta menção é adicionada.
Ao salvar a edição, podemos usar uma consulta como esta para encontrar a lista atual de menções a grupos para aquele post.
-- [params]
-- text :post_id
select gm.group_id, g.name
from group_mentions gm
join groups g on (gm.group_id = g.id)
where post_id = :post_id
Em seguida, comparando os resultados da consulta com a lista de grupos mencionados no post, podemos encontrar a(s) nova(s) menção(ões).
Isso não parece ser um cálculo muito grande, mas talvez eu esteja ignorando algo óbvio. Isso também parece ser o tipo de coisa que poderia ser feita em uma tarefa em segundo plano.
Quanto ao banner JIT sobre notificar o(s) grupo(s), talvez essa lógica pudesse ser exposta por um endpoint de API (/post/<id>/mentions.json) para obter esses dados de forma assíncrona.