Completamento progetto — ruolo Activity (DRY+KISS)
Ruolo: Spatie activitylog (audit/storico).
Soluzione riusabile. La timeline cittadino (STORY-400) e l'audit GDPR (#435) si proiettano dall'activitylog — non da colonne date_* sul ticket (read-model BuildTicketTimelineAction). Listener su TicketStatusChanged (F2, base #601) → activity → timeline.
Anti-ridondanza: consolidare gli audit-test duplicati legacy (hub). Niente storico stati reimplementato nel dominio. KISS: una proiezione, una fonte.
Rif: base #601, STORY-400.
Completamento progetto — ruolo Activity (DRY+KISS)
Ruolo: Spatie activitylog (audit/storico).
Soluzione riusabile. La timeline cittadino (STORY-400) e l'audit GDPR (#435) si proiettano dall'activitylog — non da colonne
date_*sul ticket (read-modelBuildTicketTimelineAction). Listener suTicketStatusChanged(F2, base #601) → activity → timeline.Anti-ridondanza: consolidare gli audit-test duplicati legacy (hub). Niente storico stati reimplementato nel dominio. KISS: una proiezione, una fonte.
Rif: base #601, STORY-400.