Skip to content

CAP-PFM-NOT-015Store notification preferences and channel configuration

Markdown

CAP-PFM-NOT-015

Store notification preferences and channel configuration

Markdown
  • DocumentDraft
  • Product intentProposed
  • ImplementationPartially observed

KindCapabilityProduct areaPlatformModuleStaff Notifications and Association CommunicationsRevision1

Read atservices-platform ad3f6a65react-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Stored settings validate category, definition and channel choices.The implemented runtime does not yet consume these future delivery preferences.
Surfaces
consoleapi
Intent sources
services-platform:docs/proposals/notifications/23-decisions.md#D-05services-platform:docs/proposals/notifications/23-decisions.md#D-10

Controls

31 controls apply, from the corpus control catalogue.

TC-AVL-005 TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-DAT-001 TC-DAT-002 TC-DAT-003 TC-DAT-004 TC-IAM-001 TC-IAM-002 TC-IAM-004 TC-IAM-005 TC-LOG-001 TC-LOG-002 TC-LOG-003 TC-LOG-004 TC-LOG-005 TC-PI-001 TC-PI-002 TC-PI-003 TC-PI-005 TC-PRV-001 TC-PRV-002 TC-PRV-004 TC-TEN-001 TC-TEN-002 TC-TEN-003 TC-VEN-001 TC-VEN-002 TC-VEN-003

Business Rules

13 rules, 11 to be proved before approval. A rule's product intent is derived from its origin: 1 confirmed by a product decision, the rest inheriting this capability's proposed.

IdRuleKindEnforced atProvenance
01
Confirmed
Personal preferences store channel switches and digest selection for each category, with optional overrides for individual definitions.
policyservicedocumented
services-platform:docs/proposals/notifications/23-decisions.md#D-05. The preference grain is the category, with per-definition exceptions
02must prove
Proposed
Preferences require known categories or definitions and valid switches; console cannot be disabled, mandatory e-mail cannot be disabled when supported, a nonempty channel-configurable override includes an enabled switch, and per-definition daily digest requires digestibility, while empty overrides and category-level digest selection remain valid.
no proof recorded yet
validationserviceobserved
03must prove
Proposed
Preference and setting writes use optimistic versions; initial creation needs none, while subsequent writes require the version read; omitted or stale versions reject the entire update.
no proof recorded yet
validationservice, databasetest
04must prove
Proposed
Workspace channel defaults enable console and e-mail and disable chat and text; console cannot be disabled, connections apply only to connected channels, and text limits use whole segment counts.
no proof recorded yet
validationservicetest
services-platform:modules/notifications/tests/integration/services/persistence/channel-settings.integration.spec.js#answers the defaults for a tenant that wrote nothing: the console and e-mail on, chat and SMS off
05must prove
Proposed
Workspace definition settings cannot disable mandatory notices, turn them into another requirement or narrow them below e-mail; Allowed channels are supported by the definition and include console.
no proof recorded yet
validationservicetest
06must prove
Proposed
Wording drafts advance numbered versions with one active override per definition, channel and locale; Publication checks field use and rendering limits; deactivation removes the override, while the current pipeline does not apply these overrides.
no proof recorded yet
lifecycleservicetest
07must prove
Proposed
Successful workspace channel, definition-setting and wording changes record actor and before-and-after audit data; Rejected updates produce no audit entry.
no proof recorded yet
policyservicetest
08must prove
Proposed
Quiet-hour storage requires unequal start and end times and distinct weekdays numbered one to seven; Digest delivery time defaults to 08:00 and accepts only valid times of day.
no proof recorded yet
validationservicetest
09must prove
Proposed
A person holds one current identity per chat or text channel, and a phone number identifies one person; Pending identities can become active, unreachable, opted out or revoked; revoked is terminal.
no proof recorded yet
lifecycleservice, databasetest
10must prove
Proposed
Phone challenges retain a code digest, allow one open challenge per number and expire; Five incorrect submissions exhaust a challenge.
no proof recorded yet
validationservicetest
services-platform:modules/notifications/tests/integration/services/persistence/identities.integration.spec.js#spends the challenge after five wrong codes, refusing even the right one
11must prove
Proposed
Text sending reserves segments against the workspace's UTC calendar-month allowance; Atomic reservation admits only sends that fit; zero admits none, and the first ceiling refusal time is retained.
no proof recorded yet
calculationservice, databasetest
12
Proposed
Digest records identify one recipient, category and window; Opening is idempotent, contributions increment the count while open, and settlement happens once.
lifecycleservicetest
services-platform:modules/notifications/tests/integration/services/persistence/digests.integration.spec.js#answers the digest already open for the same person, category and window
13must prove
Proposed
Stored preferences have no user interface or runtime effect yet; All definitions are treated as enabled, and individual delivery remains console-only.
no proof recorded yet
policyserviceobserved

Scenarios

IdGivenWhenThenProvenance
01In a future preference release, Jane wants assignment e-mail and console delivery while suppressing optional job notices.Jane chooses both assignment routes and disables her jobs category.The proposed outcome delivers assignments on those routes and suppresses optional jobs, while mandatory supported routes remain enabled.proposed
services-platform:docs/proposals/notifications/23-decisions.md#D-05. The preference grain is the category, with per-definition exceptions

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.