---
id: JNY-PFM-NOT-006
title: Publish compliance content and inspect protected delivery
feature: FEAT-PFM-NOT-07
product_area: platform
module: notifications
revision: 1
status: draft
product_intent: confirmed
implementation_evidence: observed
supersedes: []
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
actor: ACT-PFM-028
goal: >-
  Send published compliance content, inspect provider outcomes and withhold
  subsequent mail to permanently bounced addresses.
capabilities:
  - CAP-PFM-NOT-016
  - CAP-PFM-NOT-017
  - CAP-PFM-NOT-018
  - CAP-PFM-NOT-019
  - CAP-PFM-NOT-020
screens: []
steps:
  - 'n': 1
    surface: requestCommunication
    action: >-
      CRM submits compliance mail for an organization type without published
      content.
    capability: CAP-PFM-NOT-017
    expected: >-
      The receipt acknowledges submission, while processing records
      configuration blockage and sends no mail.
    provenance: test
    source: >-
      services-platform:modules/communications/tests/integration/lifecycle/contact-role-compliance-communication.integration.spec.js#stores
      configuration_blocked behind the queue, naming the purpose and the record
      that owns no template
  - 'n': 2
    surface: saveOwnedTemplate
    action: >-
      The administrator saves content containing an undeclared variable and then
      fixes it.
    capability: CAP-PFM-NOT-016
    expected: >-
      The invalid save reports content problems; the corrected save publishes
      version one.
    provenance: test
    source: >-
      services-platform:modules/communications/tests/integration/lifecycle/contact-role-compliance-communication.integration.spec.js#publishes
      the corrected content as version 1
  - 'n': 3
    surface: renderPreview
    action: The administrator previews the published notice using sample records.
    capability: CAP-PFM-NOT-016
    expected: Preview matches rendering by the delivery renderer.
    provenance: test
    source: >-
      services-platform:modules/communications/tests/integration/lifecycle/contact-role-compliance-communication.integration.spec.js#previews
      the published version with the purpose’s sample data through the delivery
      renderer
  - 'n': 4
    surface: requestCommunication
    action: >-
      CRM submits to one eligible contact, one suppressed contact and one
      environment-disallowed contact.
    capability: CAP-PFM-NOT-017
    expected: >-
      Processing pins version one, queues one message and withholds the other
      two with their respective reasons.
    provenance: test
    source: >-
      services-platform:modules/communications/tests/integration/lifecycle/contact-role-compliance-communication.integration.spec.js#queues
      the deliverable contact, withholds the suppressed one and the one this
      environment may not e-mail
  - 'n': 5
    surface: platform_communications_send
    action: Dispatch and the sending consumer process the accepted request.
    capability: CAP-PFM-NOT-018
    expected: >-
      The queued message is submitted with provider correlation tags in the
      normal lifecycle.
    provenance: test
    source: >-
      services-platform:modules/communications/tests/integration/lifecycle/contact-role-compliance-communication.integration.spec.js#hands
      the provider exactly one message, the queued contact’s
  - 'n': 6
    surface: platform_communications_feedback
    action: >-
      The provider sends delivery, open and click feedback, including a repeated
      report.
    capability: CAP-PFM-NOT-019
    expected: >-
      New events are recorded once; an image-proxy open does not increase
      likely-human counts.
    provenance: test
    source: >-
      services-platform:modules/communications/tests/integration/lifecycle/contact-role-compliance-communication.integration.spec.js#records
      each new event and recognizes the repeated delivery as a duplicate
  - 'n': 7
    surface: platform_communications_feedback
    action: >-
      A different contact's message bounces permanently, and CRM submits a
      subsequent notice to that address.
    capability: CAP-PFM-NOT-020
    expected: >-
      Bounce protection suppresses the address and withholds the subsequent
      message.
    provenance: test
    source: >-
      services-platform:modules/communications/tests/integration/lifecycle/contact-role-compliance-communication.integration.spec.js#stores
      the next notice to that address suppressed, with the reason, and sends
      nothing
  - 'n': 8
    surface: listCommunicationMessages
    action: Staff inspect workspace communication history.
    capability: CAP-PFM-NOT-019
    expected: >-
      Source-record messages list in descending time order with their separate
      states, excluding other workspaces.
    provenance: test
    source: >-
      services-platform:modules/communications/tests/integration/lifecycle/contact-role-compliance-communication.integration.spec.js#lists
      every message about the organization, newest first, with its own states
alternates:
  - from_step: 4
    condition: CRM supplies values outside the purpose data contract.
    path: Queued acceptance records field-specific invalidity.
    outcome: 'No mail sends, and staff can inspect the validation reason.'
    provenance: test
    source: >-
      services-platform:modules/communications/tests/integration/lifecycle/contact-role-compliance-communication.integration.spec.js#stores
      it invalid where staff can read it, naming the paths
failures:
  - from_step: 5
    condition: The same request is consumed after all its messages have settled.
    path: Processing recognizes the final message states.
    outcome: No completed message is submitted again.
    provenance: test
    source: >-
      services-platform:modules/communications/tests/integration/lifecycle/contact-role-compliance-communication.integration.spec.js#never
      sends again when the run is repeated
rules_in_play:
  - BR-CAP-PFM-NOT-016-01
  - BR-CAP-PFM-NOT-016-06
  - BR-CAP-PFM-NOT-016-09
  - BR-CAP-PFM-NOT-016-12
  - BR-CAP-PFM-NOT-017-03
  - BR-CAP-PFM-NOT-017-05
  - BR-CAP-PFM-NOT-017-06
  - BR-CAP-PFM-NOT-018-02
  - BR-CAP-PFM-NOT-019-02
  - BR-CAP-PFM-NOT-019-03
  - BR-CAP-PFM-NOT-020-01
assertions:
  - id: AS-JNY-PFM-NOT-006-01
    statement: >-
      The Platform-rendered purpose sends no mail until its owning record has
      published a template.
    provenance: test
    source: >-
      services-platform:modules/communications/tests/integration/lifecycle/contact-role-compliance-communication.integration.spec.js#sends
      nothing at all
  - id: AS-JNY-PFM-NOT-006-02
    statement: Reprocessing the completed lifecycle makes no additional provider send.
    provenance: test
    source: >-
      services-platform:modules/communications/tests/integration/lifecycle/contact-role-compliance-communication.integration.spec.js#never
      sends again when the run is repeated
  - id: AS-JNY-PFM-NOT-006-03
    statement: >-
      A permanent bounce withholds the next message to that address before
      provider submission.
    provenance: test
    source: >-
      services-platform:modules/communications/tests/integration/lifecycle/contact-role-compliance-communication.integration.spec.js#stores
      the next notice to that address suppressed, with the reason, and sends
      nothing
e2e_policy: optional
e2e_reason: >-
  The allowed console paths establish no communication interface for this
  lifecycle. The integration suite covers content, queued delivery and feedback;
  owning-module screens require their own browser examination.
evidence:
  - >-
    Pinned evidence inventory 1:
    services-platform:modules/communications/tests/integration/lifecycle/contact-role-compliance-communication.integration.spec.js;
    services-platform:docs/communications/architecture.md
intent_sources:
  - >-
    services-platform:docs/communications/architecture.md#2026-10-09 — Final
    acceptance
---

# Publish compliance content and inspect protected delivery

## Story

Send published compliance content, inspect provider outcomes and withhold subsequent mail to permanently bounced addresses.


The workflow moves from missing content through publication, acceptance, ordinary provider submission and feedback. Withholding is a recorded outcome, and completed-message redelivery differs from recovery of an ambiguous submission.

## Verification Boundary

The structured steps and assertions carry their own provenance and sources. Test references describe inspected assertions at the pinned commits; this examination does not claim a fresh provider or browser execution.
