Ok, allora oggi Moin e io stavamo parlando di questo caso, e lei ha sollevato la possibilità che ci fosse un bug nell’uso della ricorrenza mensile, dato che la lunghezza dei mesi varia? Ovviamente aveva ragione, in un certo senso… ![]()
Comunque, ho fatto un po’ di ricerche ![]()
Non sono riuscito a trovare lo script di automazione per schedule pm with data-explorer results nella cartella core plugins/automation/lib/discourse_automation/scripts, quindi deve essere nascosto da qualche altra parte.
Tuttavia, ho esaminato la logica qui per le ricorrenze (presumibilmente quello script la utilizza) in plugins/automation/lib/discourse_automation/triggers/recurring.rb:
Penso che il codice sottostante per le automazioni mensili ricorrenti stia calcolando il N-esimo giorno della settimana invece della data effettiva del calendario, e che ci sia una discrepanza logica con Calendar day: inserendo BYDAY=#{count}#{byday} nell’RRule, l’automazione forza un allineamento al giorno della settimana, mentre dovrebbe usare BYMONTHDAY invece di BYDAY.
Quindi, se imposti un’automazione per iniziare il 15 aprile (che è il mercoledì 3° di aprile), il sistema interpreta la regola come: esegui il 3° mercoledì di ogni mese.
Quando arriva maggio, il 3° mercoledì è il 20 maggio, il che fa slittare la programmazione di 5 giorni.
Inoltre, se imposti un’automazione il 30 o il 31 di un mese (ad esempio, il “5° martedì”), il sistema cercherà il 5° martedì nel mese successivo. Se quel mese ha solo 4 martedì, l’automazione non troverà una data valida e salterà silenziosamente l’intero mese.
Ho una correzione testata e sto creando una PR se il team vuole dare un’occhiata. Cambia la logica dal N-esimo giorno della settimana alla data esatta del calendario.
Ecco alcuni screenshot dai miei test e debug:
2 istanze, una senza correzione e l’altra con la mia correzione logica
Crea la stessa automazione in entrambe (la versione corretta è a destra):
Guarda le differenze nei banner che dicono “La prossima automazione si attiverà alle:” con uno slittamento di 5 giorni: la versione non corretta slitta al mercoledì 3° (20 maggio), invece del 15 maggio.
Ad esempio, i mesi potrebbero essere completamente saltati se il sistema cercasse il 4° giovedì invece di una data effettiva.
Puoi testare lo stesso risultato anche nella console di Rails
Non corretto:
Con correzione:
PR qui:



