---
id: STATE-PFM-NOT-007
title: Workspace wording override
object: DOM-PFM-NOT-003
product_area: platform
module: notifications
revision: 1
status: draft
design_intent: proposed
implementation_evidence: partially-observed
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
states:
- name: draft
  meaning: Edited wording is stored but not used.
- name: active
  meaning: This is the published override for the definition, channel and language.
- name: superseded
  meaning: A later publication replaced this wording.
- name: deactivated
  meaning: Manual withdrawal restores product wording.
transitions:
- from: draft
  to: active
  trigger: An administrator publishes edited wording.
  guard: The expected version must match; channel fields, declared merge fields and all example renders
    must validate.
  side_effects:
  - Replace the prior active override with superseded history.
  - Record before and after values in the security audit.
  who: Association communication administrator (no route exposes it yet)
  provenance: test
  source: services-platform:modules/notifications/tests/integration/services/persistence/template-overrides.integration.spec.js#leaves
    exactly one active version per definition, channel and locale
- from: active
  to: superseded
  trigger: Another override becomes active for the same selection.
  guard: No additional condition is imposed beyond its source state.
  side_effects: []
  who: Association communication administrator
  provenance: observed
  source: services-platform:modules/notifications/services/persistence/template-overrides.ts
- from: active
  to: deactivated
  trigger: An administrator withdraws the active wording.
  guard: The expected version must still match.
  side_effects:
  - Record the change in the security audit.
  who: Association communication administrator
  provenance: observed
  source: services-platform:modules/notifications/services/persistence/template-overrides.ts
invalid:
- from: active
  to: draft
  why: Editing published content requires a separate draft version.
- from: superseded
  to: active
  why: Restoring old wording requires a new publication.
concurrency: Expected-version checks reject stale edits and publications. A unique index permits one active
  override per definition, channel and language. Current notice processing does not consume these overrides.
evidence:
- 'services-platform at ad3f6a65: modules/notifications/services/persistence/template-overrides.ts; db/notification-template-overrides.table.ts;
  orchestration/orchestrate-request.ts (header: workspace settings are a later milestone''s).'
---
# Workspace wording override

## The Lifecycle

```mermaid
stateDiagram-v2
    state "draft" as s0
    state "active" as s1
    state "superseded" as s2
    state "deactivated" as s3
    s0 --> s1
    s1 --> s2
    s1 --> s3
```

## Transitions Explained

Each transition row distinguishes the triggering caller from the condition persistence checks and the effects it writes. Dormant models describe available persistence operations rather than a deployed channel worker.

## What Cannot Happen

Editing published content requires a separate draft version. Restoring old wording requires a new publication.

## Concurrency and Timing

Expected-version checks reject stale edits and publications. A unique index permits one active override per definition, channel and language. Current notice processing does not consume these overrides.
