PolicyEngine dispatches domain events to registered handlers (best-effort, fire-and-forget).
Errors are logged (if logger is non-nil) but never propagated — Dispatch() always returns nil.
- Engine:
internal/usecase/policy.go - Handlers:
internal/usecase/policy_handlers.go - Policy definitions:
internal/domain/policy.go - Registration:
internal/usecase/session.go→registerSessionPolicies()
| Policy Name | WHEN [EVENT] | THEN [COMMAND] | Side Effects |
|---|---|---|---|
| WaveAppliedComposeReport | wave.applied | ComposeReport | Log (Debug) + Metrics |
| ReportSentDeliverToPhonewave | report.sent | DeliverViaPhonewave | Log (Debug) + Metrics |
| ScanCompletedGenerateWaves | scan.completed | GenerateWaves | Log (Info) + Desktop Notify + Metrics |
| WaveCompletedNextGen | wave.completed | GenerateNextWaves | Log (Info) + Desktop Notify + Metrics |
| SpecificationSentDeliverToPhonewave | specification.sent | DeliverViaPhonewave | Log (Info) + Desktop Notify + Metrics |
| Event | Payload Type | Fields |
|---|---|---|
| scan.completed | domain.ScanCompletedPayload |
Completeness, Clusters, ShibitoCount |
| wave.applied | (none) | uses event.Type |
| report.sent | (none) | uses event.Type |
| wave.completed | (none) | uses event.Type |
| specification.sent | (none) | uses event.Type |
Best-effort (at-most-once). Handler failures are silently logged. No retry, no dead-letter queue, no error propagation to callers.
WaveAppliedComposeReport and ReportSentDeliverToPhonewave are observation-only placeholders (Debug log + Metrics, no notification).