01must proveProposed | Provider send, delivery, deferral, bounce, complaint, rejection, open and click feedback uses submission tags to find the workspace message; Untagged reports are acknowledged as unrelated; missing tagged messages retry and eventually dead-letter. no proof recorded yet | policy | service | observed services-platform:modules/communications/services/feedback/process-ses-event.ts:rhythm-message |
02must proveProposed | Event identity prevents duplicate recording; Delivery states only advance in precedence, first occurrences retain the earliest instant and counters increase for new reports, making report order immaterial. no proof recorded yet | calculation | service | test |
03must proveProposed | Transactional mail also tracks opens and clicks; Proxy and scanner signals count as events but not likely-human activity; retained click links omit query strings. no proof recorded yet | calculation | service | test |
04Proposed | Dispatch state records Platform's actions separately from delivery state reported by the provider. | invariant | service | test |
05must proveProposed | Message-read permission exposes newest-first workspace messages with request, recipient, source record, dispatch, delivery and purpose filters; source-record filtering considers the latest five hundred requests; pages cap at two hundred; invented cursors and incomplete source filters are rejected. no proof recorded yet | validation | api, service | test |
06Proposed | Detail includes the originating request, rendering version, ordered attempts and up to the oldest two hundred provider events. | policy | service | test |
07must proveProposed | Body access requires sensitive content-read permission; missing stored bodies are reported as unavailable rather than returned as empty content. no proof recorded yet | permission | api, service | test |
08Proposed | Request detail records purpose, classification, outcome, source, pinned version, actor, correlation, key and processing times, plus message counts by both states and blocking reasons; source-record requests list newest first with a fifty-row limit. | policy | api, service | test |
09must proveProposed | The changed-message feed filters by the caller-supplied submitting service and returns oldest changes after a cursor, up to two hundred, without addresses or content; Further changes reappear with updated state; the service filter excludes other service names. no proof recorded yet | policy | service | test |
10must proveProposed | Workspace boundaries apply to requests, messages, content and events; records belonging elsewhere are not found. no proof recorded yet | invariant | service, database | test |
11Proposed | Rendered bodies have no age-based storage expiry; request objects expire after thirty days, and attachment bytes remain in those objects rather than relational records. | policy | service | documented |
12must proveProposed | Copy feedback enters message history, but primary-recipient feedback alone determines delivery state; a copy bounce suppresses that copy address only. no proof recorded yet | calculation | service | test |