Edições não estão sendo salvas na tabela user_actions

Acabei de perceber que ou não entendo totalmente os casos em que uma notificação de edição é criada, ou este é um problema muito mais generalizado do que eu pensava.

Principais suposições

Se o Usuário A edita algo escrito pelo Usuário B, várias coisas acontecem:

  • Uma nova linha é adicionada à tabela post_revisions.
  • Uma nova linha é adicionada à tabela user_actions com action_type = 11.
  • Ao acessar /u/userB/notifications/edits, o Usuário B poderá ver que uma nova edição foi feita pelo Usuário A (isso depende de user_actions).
  • Ao clicar no ícone de lápis em sua postagem, o Usuário B poderá ver a edição real realizada pelo Usuário A (isso depende de post_revisions).

Teste

Se as suposições acima estiverem corretas, esta consulta deve mostrar todas as linhas da tabela post_revisions para postagens criadas pelo Usuário B (neste caso, id 259) que foram editadas por qualquer usuário (exceto ele mesmo ou o usuário do sistema), juntamente com as linhas correspondentes em user_actions para action_type = 11.

with my_user_posts as (
  select
    p.id,
    p.user_id
  from
    posts p
  where
    p.user_id = 259 -- escolha um id de usuário
)
select
  up.user_id as my_user_id,
  ua.user_id as target_user_id,
  pr.post_id,
  ua.target_post_id,
  pr.user_id as editor_user_id,
  ua.acting_user_id,
  ua.action_type,
  pr.created_at as edit_created_at,
  ua.created_at as action_created_at
from
  post_revisions pr
  inner join my_user_posts up on up.id = pr.post_id
  and up.user_id != pr.user_id -- sem autoedições
  and pr.user_id != -1 -- sem edições do sistema
  left join user_actions ua on ua.target_post_id = pr.post_id
  and ua.action_type = 11 -- apenas ações de EDIÇÃO
order by
  pr.post_id,
  pr.created_at;

Saída esperada

Cada linha deve conter dados tanto de post_revisions quanto de user_actions.

Saída real

Algumas linhas de post_revisions não possuem dados correspondentes em user_actions. Portanto, o usuário pode ver as revisões clicando no lápis em cada postagem, mas não foi notificado sobre várias edições recebidas.

Coisas que tentei

  • Adicionar uma edição adicional a uma postagem antiga sem dados de user_action. Resultado: os dados de user_action também não apareceram.
  • Criar um usuário fictício, copiar o conteúdo pré-edição de uma postagem sem dados de user_action, criar uma postagem com ele e aplicar a mesma edição que foi feita com outro usuário. Resultado: os dados de user_action apareceram corretamente.
  • Repetir os procedimentos acima quando o usuário está ativo ou offline. Resultado: nenhuma mudança.
  • Repetir os procedimentos acima alterando o período de graça para edições. Resultado: nenhuma mudança.

Conclusões

  • O problema não parece ser:

    • específico do usuário. Acontece com praticamente todos os usuários.
    • específico da conexão. O fato de o usuário estar ativo ou offline não altera a saída.
    • específico do tempo. Alterar o período de graça para edições não teve efeito.
  • O problema parece ser:

    • específico da ação. Não observei nenhum problema ao notificar nenhuma das outras ações (LIKE, WAS_LIKED, RESPONSE, REPLY, MENTION ou QUOTE). O único problema é com ações de EDIÇÃO.

    • específico da postagem. Não acontece com todas as postagens, apenas com algumas específicas (parece ser aleatório).

  • Uma possibilidade é que algo esteja acontecendo durante a criação de postagens específicas que impede que as ações de usuário de EDIÇÃO sejam salvas, mas não tenho ideia do que poderia ser isso.

  • Também é possível que isso esteja acontecendo por design e que existam condições específicas nas quais os usuários não são notificados sobre edições, mas não encontrei isso documentado em nenhum lugar.

Próximos passos

  • Se você souber de algum motivo pelo qual as notificações de edição podem não ser acionadas toda vez que há uma edição, por favor, me avise.
  • Se você tiver sua própria instância do Discourse, poderia executar a consulta SQL acima em alguns dos ids de usuário para ver se também observa dados ausentes de user_actions e me relatar?