---
id: ADR-CRM-ACT-008
title: Role offers are decided by Platform's role holding at claim time
product_area: crm
module: activities-tasks
revision: 1
status: proposed
design_intent: confirmed
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
decision: >-
  For unqueued role offers, check current role holding through Platform while the task is
  locked and retain the role after claim; queued role offers instead use queue claiming.
constrains:
  - DOM-CRM-ACT-003
  - STATE-CRM-ACT-003
  - SVC-CRM-ACT-tasks
  - WF-CRM-ACT-004
  - WF-CRM-ACT-005
origin: >-
  Andrew 2026-10-18 (role claim), recorded at services-crm
  docs/workstreams/crm-tasks-role-claim.md and docs/migrations/task-management/README.md
  §12 addendum; Platform workflow decision D-09.
alternatives:
  - option: Create a separate task for each role holder.
    why_not: Copies would require coordinated closure of the same underlying work.
  - option: Represent every role with a dedicated queue.
    why_not: >-
      This would multiply queue configuration and require synchronization with role
      membership.
  - option: Validate claimant authority only when offering the work.
    why_not: >-
      Authority may change before a later claim, so that check would not establish current
      eligibility.
consequences:
  - >-
    An ineligible role-only claimant receives a coded forbidden response without changing
    the offer.
  - >-
    Serialized competing claims admit at most one committed holder; lookup or attention
    failures can leave none.
  - >-
    Assigning a different user clears the candidate role, while releasing retained role
    work offers it again.
  - >-
    Offered-work listing independently reads security assignments, preserving its recorded
    boundary and policy-drift finding.
  - >-
    Offer creation checks reference syntax without proving role existence, and role-only
    claiming does not supply resource scope.
supersedes: []
evidence:
  - >-
    services-crm at a8d1364f: modules/tasks/services/persistence/tasks.ts
    (claimOfferedTask, holdsRole, listOfferedTasks, rolesHeldBy,
    candidateRoleAfterAssignment); docs/workstreams/crm-tasks-role-claim.md.
---

# Role offers are decided by Platform's role holding at claim time

## Context

Workflows can offer one task to users who hold a security role without constructing a queue or copying work.

## Decision

The cited role-claim ruling establishes current authority for role-only claims. The local schema also permits queue and role references together; queue claim eligibility then takes precedence. This exception remains an open planning concern.

## Alternatives Considered

The structured alternatives describe concrete competing designs and their tradeoffs. Where the origin records an existing ruling, it remains the authority; an observed implementation does not establish Product’s rejection of every alternative.

## Consequences

The retained role allows release to offer the work again. Console discovery, external authority implementation and assignment policy remain bounded by existing findings.
