---
id: WF-PFM-ELG-012
title: Assign or end a responsibility and keep coverage current
trigger: >-
  A manager creates or ends a personal holding or removes a role default through
  responsibility settings.
product_area: platform
module: eligibility
revision: 1
status: draft
design_intent: confirmed
origin: >-
  Responsibilities and attention architecture D-01 and D-02, approved by Andrew
  2026-10-18 (PLAT-M15 "Decisions"); DEF-RA-0003 (report kept current by the
  writes); PLAT-M23 D3 (notices); record-write standard W5 and DEF-NT-0008
  (idempotent create, one holder once)
implementation_evidence: observed
inference: []
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
implements:
  - CAP-PFM-ELG-013
  - CAP-PFM-ELG-015
moves:
  - STATE-PFM-ELG-005
  - STATE-PFM-ELG-006
  - STATE-PFM-ELG-007
crosses:
  - SVC-PFM-ELG-responsibilities
  - SVC-PFM-ELG-attention
idempotency: >-
  A matching create key replays the same holding; changed input under that key
  is refused. Unkeyed duplicates and stale ending or removal requests are
  rejected.
concurrency: >-
  Uniqueness arbitrates identical creates, and ending or removal locks the row.
  These direct writes refresh affected gaps in their own transaction.
hops:
  - 'n': 1
    actor_or_service: Responsibilities operation (first call of a workspace)
    action: >-
      If the workspace has no holdings, initialize declared role defaults before
      servicing the request.
    anchor: >-
      services-platform:modules/responsibilities/services/reconcile/reconcile-tenant.ts:ensureTenantRoleDefaults
    seam: sync
    on_failure: Initialization failure fails the request and a later request can retry.
    left_inconsistent: >-
      Initialization commits separately and can remain even if the later
      business action is refused.
    observer: The caller sees initialization failures.
    provenance: observed
    source: >-
      services-platform:modules/responsibilities/aws/api/responsibilities.routes.ts:responsibilitiesRoutes
  - 'n': 2
    actor_or_service: Responsibilities persistence (one transaction)
    action: >-
      Validate and mutate the holding, end applicable cover, refresh its gap,
      audit and write applicable assignment or ending notices; self-actions and
      defaults produce no notice.
    anchor: >-
      services-platform:modules/responsibilities/services/persistence/assignments.ts:createAssignment
    seam: sync
    on_failure: Refusal rolls back this business transaction.
    left_inconsistent: 'Its holding, cover, gap, audit and notice effects commit together.'
    observer: The management dialog displays the service error.
    provenance: observed
    source: >-
      services-platform:modules/responsibilities/services/persistence/assignments.ts:endAssignment
  - 'n': 3
    actor_or_service: Responsibilities persistence (after commit)
    action: Nudge Notifications after a notice commits.
    anchor: >-
      services-platform:modules/responsibilities/services/notices/responsibility-notices.ts:nudgeAfterCommit
    seam: queue
    on_failure: A missed nudge leaves delivery to the dispatcher schedule.
    left_inconsistent: The recipient can receive the notice later.
    observer: Notifications observes queued delivery.
    provenance: observed
    source: >-
      services-platform:modules/responsibilities/services/notices/responsibility-notices.ts:noticeAssignmentCreated
  - 'n': 4
    actor_or_service: Uncovered-area attention refresh (after commit)
    action: Refresh uncovered-area attention after the holding commit.
    anchor: >-
      services-platform:modules/attention/services/evaluate/refresh-unassigned-attention.ts:refreshUnassignedAttention
    seam: sync
    on_failure: Log refresh failure while returning the successful write.
    left_inconsistent: Gap attention can lag until a successful computed evaluation.
    observer: The refresh error log shows the failure.
    provenance: observed
    source: >-
      services-platform:modules/attention/services/evaluate/refresh-unassigned-attention.ts:refreshUnassignedAttention
branches:
  - Removed defaults stay removed through registration and reconcile.
  - Future holdings remain ineffective until their start.
waits: []
evidence:
  - >-
    services-platform at ad3f6a6:
    modules/responsibilities/aws/api/responsibilities.routes.ts;
    services/persistence/assignments.ts, delegations.ts; services/notices/;
    services/reconcile/reconcile-tenant.ts;
    modules/attention/services/evaluate/refresh-unassigned-attention.ts;
    docs/responsibilities.md §5, §6, §8.
  - >-
    react-console at baf6dae:
    components/responsibilities/responsibilities-settings.tsx,
    responsibility-dialogs.tsx.
controls: [TC-AVL-001, TC-AVL-002, TC-AVL-003, TC-AVL-004, TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-CHG-001, TC-CHG-002, TC-CHG-003, TC-CHG-004, TC-CHG-005, TC-CHG-006, TC-CHG-007, TC-CRY-001, TC-CRY-002, TC-CRY-003, TC-CRY-004, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-DAT-004, TC-DAT-007, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-IAM-006, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-MON-001, TC-MON-002, TC-MON-003, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---
# Assign or end a responsibility and keep coverage current

## What It Does

A manager creates or ends a personal holding or removes a role default through responsibility settings.

## The Flow

```mermaid
flowchart TD
  H1["Responsibilities operation (first call of a workspace)" ]
  H2["Responsibilities persistence (one transaction)" ]
  H1 --> H2
  H3["Responsibilities persistence (after commit)" ]
  H2 --> H3
  H4["Uncovered-area attention refresh (after commit)" ]
  H3 --> H4
```

If the workspace has no holdings, initialize declared role defaults before servicing the request. Validate and mutate the holding, end applicable cover, refresh its gap, audit and write applicable assignment or ending notices; self-actions and defaults produce no notice. Nudge Notifications after a notice commits. Refresh uncovered-area attention after the holding commit.

## When Something Fails

Initialization failure fails the request and a later request can retry. Initialization commits separately and can remain even if the later business action is refused. Refusal rolls back this business transaction. Its holding, cover, gap, audit and notice effects commit together. A missed nudge leaves delivery to the dispatcher schedule. The recipient can receive the notice later. Log refresh failure while returning the successful write. Gap attention can lag until a successful computed evaluation.

## Open Design Questions

Removed defaults stay removed through registration and reconcile. Future holdings remain ineffective until their start.
