---
id: ATS-PFM-ELG-013
scope: CAP-PFM-ELG-013
product_area: platform
module: eligibility
revision: 3
status: proposed
approved_by: null
approved_at: null
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-PFM-ELG-013-01
    title: Keep accountability outside access checks
    level: unit
    proves:
      - BR-CAP-PFM-ELG-013-01
      - INV-DOM-PFM-ELG-004-01
    preconditions: Authorization source and package files are available.
    steps: 'Scan imports, table references and deliberately planted violations.'
    expected: 'No responsibility dependency exists, and planted imports, reads or calls fail the guard.'
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:tests/unit/responsibilities-not-in-authorization.spec.ts#imports nothing
        of the responsibilities module into the authorizer or the grant slice, and names none of its
        tables
      - TST-PFM-ELG-512
      - >-
        services-platform:tests/unit/responsibilities-not-in-authorization.spec.ts#keeps the shared
        evaluator free of the module and its tables
      - >-
        services-platform:tests/unit/responsibilities-not-in-authorization.spec.ts#refuses a
        statement that reads a responsibility table
    provenance: test
    source: >-
      services-platform:tests/unit/responsibilities-not-in-authorization.spec.ts#imports nothing of
      the responsibilities module into the authorizer or the grant slice, and names none of its
      tables
    category: invariant
    action_evidence:
      provenance: test
      source: >-
        services-platform:tests/unit/responsibilities-not-in-authorization.spec.ts#imports nothing
        of the responsibilities module into the authorizer or the grant slice, and names none of its
        tables
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:tests/unit/responsibilities-not-in-authorization.spec.ts#imports nothing
        of the responsibilities module into the authorizer or the grant slice, and names none of its
        tables
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-013-02
    title: Filter the area catalogue
    level: api
    proves:
      - BR-CAP-PFM-ELG-013-02
    preconditions: A workspace lacks one application licence.
    steps: Read responsibility definitions.
    expected: 'Platform areas remain and unlicensed areas are absent, with readable scope labels.'
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#lists
        Platform’s definitions, which every tenant may use
      - TST-PFM-ELG-492
      - >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#leaves out
        the definitions of an application the tenant may not use
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/definitions.queries.integration.spec.js#labels
        a scope kind with its registered object’s label in the list
      - TST-PFM-ELG-497
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#lists
      Platform’s definitions, which every tenant may use
    category: rule
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#lists
        Platform’s definitions, which every tenant may use
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#lists
        Platform’s definitions, which every tenant may use
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-013-03
    title: Require a manager for assignments
    level: api
    proves:
      - BR-CAP-PFM-ELG-013-03
    preconditions: Reader-only and management callers exist.
    steps: 'Create, end and remove holdings as both.'
    expected: The reader fails and the manager succeeds.
    negative: true
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses a
        caller with read alone, 403
      - TST-PFM-ELG-492
      - >-
        react-console:acceptance/platform-attention/playwright/journeys/responsibilities/RA-ACC-0004.spec.ts#RA-ACC-0004
      - TST-PFM-ELG-379
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses a
      caller with read alone, 403
    category: permission
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses a
        caller with read alone, 403
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses a
        caller with read alone, 403
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-013-04
    title: Validate holder and scope
    level: api
    proves:
      - BR-CAP-PFM-ELG-013-04
      - INV-DOM-PFM-ELG-004-03
    preconditions: An area supports business-unit scope.
    steps: 'Try teams, duplicate subject fields, committee scope, a foreign user and a retired area.'
    expected: Every invalid request names its field and persists nothing.
    negative: true
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses a
        team with 400, naming team_id
      - TST-PFM-ELG-492
      - >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses a
        scope kind the definition is not held at with 400, naming resource_type
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#refuses
        a user of another customer, naming user_id, through the wall
      - TST-PFM-ELG-495
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#refuses
        a retired definition, naming definition_key
      - >-
        services-platform:modules/responsibilities/tests/integration/db/responsibility-assignments.table.integration.spec.js#refuses,
        by the wall, a resource scope of a kind the definition is not held at
      - TST-PFM-ELG-493
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses a
      team with 400, naming team_id
    category: validation
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses a
        team with 400, naming team_id
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses a
        team with 400, naming team_id
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-013-05
    title: Reject identical active holding duplicates
    level: api
    proves:
      - BR-CAP-PFM-ELG-013-05
      - INV-DOM-PFM-ELG-004-02
    preconditions: Pat already holds unit batch posting.
    steps: >-
      Repeat the same holding as a backup with identical validity endpoints, vary its scope, end and
      recreate it, then race two identical creates.
    expected: >-
      The identical duplicate is refused, another scope remains valid, ending permits recreation and
      the identical-create race leaves one holding.
    negative: true
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses a
        second identical active assignment, 409 already_assigned
      - TST-PFM-ELG-492
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#refuses
        the same person as backup where they are primary, one holder once
      - TST-PFM-ELG-495
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#allows
        the same person at a different scope
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#allows
        a new assignment once the first has ended
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#refuses
        the second of two simultaneous creates without a key, and writes one row
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses a
      second identical active assignment, 409 already_assigned
    category: invariant
    limitations:
      - FND-PFM-ELG-043
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses a
        second identical active assignment, 409 already_assigned
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses a
        second identical active assignment, 409 already_assigned
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-013-06
    title: Replay assignment requests
    level: api
    proves:
      - BR-CAP-PFM-ELG-013-06
      - INV-DOM-PFM-ELG-004-04
    preconditions: An idempotency key identifies a creation.
    steps: 'Repeat its body, replay after ending and reuse it with a different body.'
    expected: >-
      Replays return the original without writes and changed bodies fail; the key is absent from
      responses.
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#answers a
        replay of the same Idempotency-Key and body with the first assignment, same id
      - TST-PFM-ELG-492
      - >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses
        the same Idempotency-Key with another body, 422 idempotency_key_reused
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#answers
        the same assignment, as it now stands, to a replay after it has ended, creating nothing
      - TST-PFM-ELG-495
      - >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#does not
        return the idempotency bookkeeping
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#answers a
      replay of the same Idempotency-Key and body with the first assignment, same id
    category: edge
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#answers a
        replay of the same Idempotency-Key and body with the first assignment, same id
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#answers a
        replay of the same Idempotency-Key and body with the first assignment, same id
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-013-07
    title: Delay future holdings
    level: unit
    proves:
      - BR-CAP-PFM-ELG-013-07
    preconditions: A holding starts next week.
    steps: Inspect current holders and try an inverted period.
    expected: It contributes no present holding and the invalid end is identified.
    negative: true
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#allows
        a future-dated assignment, read by nothing until it starts
      - TST-PFM-ELG-495
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.queries.integration.spec.js#leaves
        out an assignment whose window has not opened
      - TST-PFM-ELG-496
      - >-
        services-platform:modules/responsibilities/tests/unit/rules.spec.js#refuses an end that is
        not after the start, naming valid_until
      - TST-PFM-ELG-510
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#allows
      a future-dated assignment, read by nothing until it starts
    category: boundary
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#allows
        a future-dated assignment, read by nothing until it starts
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#allows
        a future-dated assignment, read by nothing until it starts
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-013-08
    title: End direct holdings with cover
    level: api
    proves:
      - BR-CAP-PFM-ELG-013-08
      - INV-DOM-PFM-ELG-004-06
    preconditions: 'Direct, derived and default assignments exist, with cover on the direct holding.'
    steps: End each and retry the direct end with an obsolete version.
    expected: >-
      Direct cover ends atomically, stale input fails and derived/default endings report their
      distinct refusals.
    negative: true
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#ends
        the assignment’s open delegations in the same transaction
      - TST-PFM-ELG-495
      - >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses to
        end a derived assignment, 409 derived_assignment
      - TST-PFM-ELG-492
      - >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses to
        end a role default, 409 role_default_assignment
      - >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses a
        stale version, 409
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#ends
      the assignment’s open delegations in the same transaction
    category: transition
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#ends
        the assignment’s open delegations in the same transaction
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#ends
        the assignment’s open delegations in the same transaction
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-013-09
    title: Respect removed defaults
    level: api
    proves:
      - BR-CAP-PFM-ELG-013-09
      - INV-DOM-PFM-ELG-004-05
    preconditions: An area has a role-default holding.
    steps: 'Remove it, reconcile and register again.'
    expected: The removed history remains and no replacement default is created.
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#removes
        a role default, which stays as history with status removed
      - TST-PFM-ELG-495
      - >-
        services-platform:modules/responsibilities/tests/integration/services/reconcile/reconcile-tenant.integration.spec.js#(a)
        never recreates a default the tenant removed
      - TST-PFM-ELG-502
      - >-
        services-platform:modules/responsibilities/tests/integration/services/reconcile/reconcile-after-registration.integration.spec.js#does
        not give a tenant back a default it removed when the application registers again
      - TST-PFM-ELG-501
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#removes
      a role default, which stays as history with status removed
    category: transition
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#removes
        a role default, which stays as history with status removed
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#removes
        a role default, which stays as history with status removed
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-013-10
    title: Explain personal holding origins
    level: api
    proves:
      - BR-CAP-PFM-ELG-013-11
    preconditions: 'One user has direct, role and delegated holdings.'
    steps: Read My Responsibilities.
    expected: 'Origins, role names and incoming/outgoing cover are presented.'
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#answers
        the caller’s own effective rows with via, and the delegations to and from them
      - TST-PFM-ELG-492
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.queries.integration.spec.js#answers
        a user’s effective rows with via, their delegation from a colleague included
      - TST-PFM-ELG-496
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.queries.integration.spec.js#names
        the role of a role-default row in the effective answer
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#answers the
      caller’s own effective rows with via, and the delegations to and from them
    category: rule
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#answers
        the caller’s own effective rows with via, and the delegations to and from them
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#answers
        the caller’s own effective rows with via, and the delegations to and from them
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-013-11
    title: Resolve scope and fallback
    level: api
    proves:
      - BR-CAP-PFM-ELG-013-12
    preconditions: 'A unit primary, broader holding, backup, delegate and fallback exist.'
    steps: Resolve held and unheld scopes with normal and always coverage.
    expected: >-
      Specific primaries lead, wider coverage follows policy, delegates identify cover and fallback
      supplies unheld areas.
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#answers
        the holders at a scope chain, the unit’s primary first
      - TST-PFM-ELG-492
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.queries.integration.spec.js#leaves
        the tenant-wide holder out when the unit has its own primary and coverage is when_u
      - TST-PFM-ELG-496
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.queries.integration.spec.js#answers
        the delegate of the unit’s primary, covering for them
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.queries.integration.spec.js#answers
        the fallback’s holders, every one covering, when nobody holds the key at any sco
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#answers the
      holders at a scope chain, the unit’s primary first
    category: rule
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#answers
        the holders at a scope chain, the unit’s primary first
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#answers
        the holders at a scope chain, the unit’s primary first
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-013-12
    title: Notify affected people selectively
    level: api
    proves:
      - BR-CAP-PFM-ELG-013-13
    preconditions: A manager can assign a colleague or self.
    steps: 'Assign both and a default, then end the colleague before its notice is read.'
    expected: >-
      The colleague receives creation and ending notices and the unread first notice is withdrawn;
      self-action and defaults create none.
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities-notifications.e2e.spec.js#puts
        the assignment in the person’s inbox and nothing in the administrator’s, who made it
      - TST-PFM-ELG-491
      - >-
        services-platform:modules/responsibilities/tests/integration/services/notices/responsibility-notices.integration.spec.js#publishes
        nothing when the administrator assigns it to themself: they hear nothing for their own acts
      - TST-PFM-ELG-494
      - >-
        services-platform:modules/responsibilities/tests/integration/services/notices/responsibility-notices.integration.spec.js#publishes
        nothing for a role default, which is nobody’s assignment
      - >-
        services-platform:modules/responsibilities/tests/integration/services/notices/responsibility-notices.integration.spec.js#withdraws
        the assigned notice by its supersede key and tells the person it ended
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/e2e/responsibilities-notifications.e2e.spec.js#puts
      the assignment in the person’s inbox and nothing in the administrator’s, who made it
    category: rule
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities-notifications.e2e.spec.js#puts
        the assignment in the person’s inbox and nothing in the administrator’s, who made it
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/e2e/responsibilities-notifications.e2e.spec.js#puts
        the assignment in the person’s inbox and nothing in the administrator’s, who made it
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-013-13
    title: End a holding with its cover
    category: interaction
    level: api
    proves:
      - BR-CAP-PFM-ELG-013-08
      - BR-CAP-PFM-ELG-014-06
    exercises:
      - CAP-PFM-ELG-013
      - CAP-PFM-ELG-014
    preconditions: A direct holding has active cover and an authorized manager has its current version.
    steps: End the holding and read both the cover arrangement and effective holdings.
    expected: >-
      Both ending changes commit together and neither person remains effective through the ended
      holding.
    negative: false
    data_needs: Run-owned records and a controlled clock where timing changes the result.
    bound_to: []
    provenance: proposed
    source: >-
      services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#ends
      the assignment’s open delegations in the same transaction;
      react-console:acceptance/platform-attention/playwright/journeys/responsibilities/RA-ACC-0002.spec.ts#RA-ACC-0002
    action_evidence:
      provenance: proposed
      source: >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#ends
        the assignment’s open delegations in the same transaction;
        react-console:acceptance/platform-attention/playwright/journeys/responsibilities/RA-ACC-0002.spec.ts#RA-ACC-0002
    assertion_evidence:
      provenance: proposed
      source: >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#ends
        the assignment’s open delegations in the same transaction;
        react-console:acceptance/platform-attention/playwright/journeys/responsibilities/RA-ACC-0002.spec.ts#RA-ACC-0002
    binding_scope: This sequence is proposed and has no executable proof binding.
  - id: ATS-PFM-ELG-013-14
    title: Repair a reported gap by assignment
    category: interaction
    level: api
    proves:
      - BR-CAP-PFM-ELG-013-08
      - BR-CAP-PFM-ELG-015-05
    exercises:
      - CAP-PFM-ELG-013
      - CAP-PFM-ELG-015
    preconditions: An always-held area has no primary holding.
    steps: 'Read uncovered areas, create a valid primary holding, then end it and read again.'
    expected: >-
      The area leaves the report when assigned and returns after ending, with each gap change
      committed with the holding.
    negative: false
    data_needs: Run-owned records and a controlled clock where timing changes the result.
    bound_to: []
    provenance: proposed
    source: >-
      services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#ends
      the assignment’s open delegations in the same transaction;
      services-platform:modules/responsibilities/tests/integration/services/persistence/unassigned-responsibilities.integration.spec.js#opens
      the row at once when the only assignment of an area is ended
    action_evidence:
      provenance: proposed
      source: >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#ends
        the assignment’s open delegations in the same transaction;
        services-platform:modules/responsibilities/tests/integration/services/persistence/unassigned-responsibilities.integration.spec.js#opens
        the row at once when the only assignment of an area is ended
    assertion_evidence:
      provenance: proposed
      source: >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#ends
        the assignment’s open delegations in the same transaction;
        services-platform:modules/responsibilities/tests/integration/services/persistence/unassigned-responsibilities.integration.spec.js#opens
        the row at once when the only assignment of an area is ended
    binding_scope: This sequence is proposed and has no executable proof binding.
  - id: ATS-PFM-ELG-013-15
    title: Remove one holder without rewriting the condition
    category: interaction
    level: api
    proves:
      - BR-CAP-PFM-ELG-013-12
      - BR-CAP-PFM-ELG-017-03
    exercises:
      - CAP-PFM-ELG-013
      - CAP-PFM-ELG-017
    preconditions: Two people hold the same attention area and an occurrence addresses that area.
    steps: 'Read both lists, end one holding and read both lists and the occurrence again.'
    expected: Only the ended holder loses visibility and the occurrence remains open for the other person.
    negative: false
    data_needs: Run-owned records and a controlled clock where timing changes the result.
    bound_to:
      - >-
        services-platform:modules/attention/tests/integration/services/read/ending-assignment.integration.spec.js
      - TST-PFM-ELG-397
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.queries.integration.spec.js#answers
      the fallback’s holders, every one covering, when nobody holds the key at any sco;
      services-platform:modules/attention/tests/integration/services/read/ending-assignment.integration.spec.js#removes
      Pat’s item on the next read, without touching the item, and leaves the second holder’s
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.queries.integration.spec.js#answers
        the fallback’s holders, every one covering, when nobody holds the key at any sco;
        services-platform:modules/attention/tests/integration/services/read/ending-assignment.integration.spec.js#removes
        Pat’s item on the next read, without touching the item, and leaves the second holder’s
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.queries.integration.spec.js#answers
        the fallback’s holders, every one covering, when nobody holds the key at any sco;
        services-platform:modules/attention/tests/integration/services/read/ending-assignment.integration.spec.js#removes
        Pat’s item on the next read, without touching the item, and leaves the second holder’s
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - title: Replay competing creates under one key
    category: concurrency
    level: api
    proves:
      - BR-CAP-PFM-ELG-013-06
      - INV-DOM-PFM-ELG-004-04
    preconditions: Two concurrent requests use identical assignment input and the same idempotency key.
    steps: Submit both creates and inspect their returned identities and stored holdings.
    expected: Both requests return one holding identity and the fixture stores one row.
    negative: true
    data_needs: 'Run-owned fixtures, separate caller contexts and a controlled clock where required.'
    bound_to:
      - >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js
      - TST-PFM-ELG-495
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#answers
      one assignment to two simultaneous creates under one key
    id: ATS-PFM-ELG-013-16
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#answers
        one assignment to two simultaneous creates under one key
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#answers
        one assignment to two simultaneous creates under one key
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - title: Expose unequal overlapping periods as a contract discrepancy
    category: edge
    level: api
    proves:
      - INV-DOM-PFM-ELG-004-02
      - BR-CAP-PFM-ELG-013-05
    preconditions: One active direct holding covers a bounded period.
    steps: >-
      Create another holding for the same person, area and scope with different endpoints inside
      that period.
    expected: >-
      The current database permits two rows, exposing the unresolved discrepancy with the broader
      planned overlap guard.
    negative: true
    data_needs: 'Run-owned fixtures, separate caller contexts and a controlled clock where required.'
    bound_to: []
    provenance: proposed
    source: >-
      services-platform:modules/responsibilities/db/responsibility-assignments.table.ts:responsibility_assignments_live_holder_uidx
    id: ATS-PFM-ELG-013-17
    limitations:
      - FND-PFM-ELG-043
    action_evidence:
      provenance: proposed
      source: >-
        services-platform:modules/responsibilities/db/responsibility-assignments.table.ts:responsibility_assignments_live_holder_uidx
    assertion_evidence:
      provenance: proposed
      source: >-
        services-platform:modules/responsibilities/db/responsibility-assignments.table.ts:responsibility_assignments_live_holder_uidx
    binding_scope: This sequence is proposed and has no executable proof binding.
evidence:
  - >-
    services-platform: docs/responsibilities.md;
    docs/milestones/PLAT-M15-home-attention-and-responsibilities.md and plans/PLAT-M15-plan.md;
    docs/proposals/responsibilities-and-attention/16-decisions.md; aws/platform.service.ts
    (RESPONSIBILITIES_PERMISSIONS); modules/responsibilities/aws/api/responsibilities.routes.ts,
    responsibilities.schemas.ts, rules.ts, services/persistence/assignments.ts, definitions.ts,
    services/notices/responsibility-notices.ts, responsibilities-notifications.ts,
    db/responsibility-assignments.table.ts, responsibility-definitions.table.ts,
    responsibility-role-defaults.table.ts; tests/unit/responsibilities-not-in-authorization.spec.ts
    named by the docs; rule-level source and test references
  - >-
    react-console: app/(console)/console/[tenantId]/settings/responsibilities/page.tsx,
    me/responsibilities/page.tsx, components/responsibilities/** (responsibilities-settings.tsx,
    responsibility-dialogs.tsx, my-responsibilities.tsx), lib/responsibilities/**;
    acceptance/platform-attention/journeys/responsibilities/RA-ACC-0001, 0004 and matching browser
    specifications.
related_coverage:
  - capability: CAP-PFM-ELG-014
    scenario: ATS-PFM-ELG-013-13
  - capability: CAP-PFM-ELG-015
    scenario: ATS-PFM-ELG-013-14
  - capability: CAP-PFM-ELG-017
    scenario: ATS-PFM-ELG-013-15
coverage:
  rule: 'gap: FND-PFM-ELG-065'
  transition: 'gap: FND-PFM-ELG-065'
  validation: covered
  permission: 'gap: FND-PFM-ELG-065'
  edge: covered
  failure: 'gap: FND-PFM-ELG-065'
  boundary: covered
  concurrency: 'gap: FND-PFM-ELG-065'
  invariant: 'gap: FND-PFM-ELG-065'
  interaction: covered
invariant_gaps:
  - invariant: INV-DOM-PFM-ELG-004-07
    finding: FND-PFM-ELG-065
    source: 'services-platform:modules/responsibilities/rules.ts:checkDelegationWindow'
  - invariant: INV-DOM-PFM-ELG-004-08
    finding: FND-PFM-ELG-065
    source: >-
      services-platform:modules/responsibilities/services/persistence/assignments.ts:refreshUnassignedFor
  - invariant: INV-DOM-PFM-ELG-004-09
    finding: FND-PFM-ELG-065
    source: >-
      services-platform:db/migrations/20261019011302_responsibilities.sql:platform.sync_derived_responsibilities
transition_coverage:
  - model: STATE-PFM-ELG-005
    from: scheduled
    to: active
    trigger: Current instant reaches validity start
    finding: FND-PFM-ELG-065
    source: 'services-platform:modules/responsibilities/rules.ts:windowIncludes'
  - model: STATE-PFM-ELG-005
    from: active
    to: lapsed
    trigger: Current instant reaches validity end
    finding: FND-PFM-ELG-065
    source: 'services-platform:modules/responsibilities/rules.ts:windowIncludes'
  - model: STATE-PFM-ELG-005
    from: active
    to: ended
    trigger: endResponsibilityAssignment
    source: 'services-platform:modules/responsibilities/services/persistence/assignments.ts:endAssignment'
    scenario: ATS-PFM-ELG-013-08
  - model: STATE-PFM-ELG-005
    from: scheduled
    to: ended
    trigger: endResponsibilityAssignment
    finding: FND-PFM-ELG-065
    source: 'services-platform:modules/responsibilities/services/persistence/assignments.ts:endAssignment'
  - model: STATE-PFM-ELG-005
    from: active
    to: removed
    trigger: removeResponsibilityRoleDefault
    source: >-
      services-platform:modules/responsibilities/services/persistence/assignments.ts:removeRoleDefaultAssignment
    scenario: ATS-PFM-ELG-013-09
  - model: STATE-PFM-ELG-005
    from: active
    to: ended
    trigger: Registration or reconcile retires a default declaration
    finding: FND-PFM-ELG-065
    source: >-
      services-platform:modules/responsibilities/services/persistence/assignments.ts:endRetiredRoleDefaultAssignments
  - model: STATE-PFM-ELG-005
    from: active
    to: ended
    trigger: sync_derived_responsibilities omits an existing holding
    finding: FND-PFM-ELG-065
    source: >-
      services-platform:db/migrations/20261019011302_responsibilities.sql:platform.sync_derived_responsibilities
  - model: STATE-PFM-ELG-006
    from: active
    to: ended
    trigger: endResponsibilityDelegation
    source: 'services-platform:modules/responsibilities/services/persistence/delegations.ts:endDelegation'
    scenario: ATS-PFM-ELG-014-05
  - model: STATE-PFM-ELG-006
    from: active
    to: ended
    trigger: Manual ending of its underlying direct or template holding
    source: >-
      services-platform:modules/responsibilities/services/persistence/delegations.ts:endOpenDelegationsOf
    scenario: ATS-PFM-ELG-013-08
  - model: STATE-PFM-ELG-006
    from: active
    to: expired
    trigger: Current instant reaches cover end
    finding: FND-PFM-ELG-065
    source: 'services-platform:modules/responsibilities/rules.ts:windowIncludes'
permission_coverage:
  - key: platform.responsibilities.read
    finding: FND-PFM-ELG-065
    reason: A capability-level authority scenario does not prove every operation protected by this key.
  - key: platform.responsibilities.manage
    finding: FND-PFM-ELG-065
    reason: A capability-level authority scenario does not prove every operation protected by this key.
coverage_notes:
  meaning: >-
    Covered means a detailed scenario exists; it does not mean the scenario ran or every executable
    assertion conforms.
  gaps: >-
    Unequal overlapping holding periods contradict the planned uniqueness rule. First-use defaults,
    audit rollback, list paging, derived or default endings and timed lapsed coverage need explicit
    proof.
---

# Assign accountability for an area of work: Capability Test Specification

## Coverage

The scenarios check observable outcomes against the cited contracts. The coverage map retains partial proof and unresolved design boundaries as findings.

| Required Rule | Scenarios |
|---|---|
| `BR-CAP-PFM-ELG-013-01` | `ATS-PFM-ELG-013-01` |
| `BR-CAP-PFM-ELG-013-02` | `ATS-PFM-ELG-013-02` |
| `BR-CAP-PFM-ELG-013-03` | `ATS-PFM-ELG-013-03` |
| `BR-CAP-PFM-ELG-013-04` | `ATS-PFM-ELG-013-04` |
| `BR-CAP-PFM-ELG-013-05` | `ATS-PFM-ELG-013-05`, `ATS-PFM-ELG-013-17` |
| `BR-CAP-PFM-ELG-013-06` | `ATS-PFM-ELG-013-06`, `ATS-PFM-ELG-013-16` |
| `BR-CAP-PFM-ELG-013-07` | `ATS-PFM-ELG-013-07` |
| `BR-CAP-PFM-ELG-013-08` | `ATS-PFM-ELG-013-08`, `ATS-PFM-ELG-013-13`, `ATS-PFM-ELG-013-14` |
| `BR-CAP-PFM-ELG-013-09` | `ATS-PFM-ELG-013-09` |
| `BR-CAP-PFM-ELG-013-10` | Gap: `FND-PFM-ELG-065` |
| `BR-CAP-PFM-ELG-013-11` | `ATS-PFM-ELG-013-10` |
| `BR-CAP-PFM-ELG-013-12` | `ATS-PFM-ELG-013-11`, `ATS-PFM-ELG-013-15` |
| `BR-CAP-PFM-ELG-013-13` | `ATS-PFM-ELG-013-12` |
| `BR-CAP-PFM-ELG-013-14` | Gap: `FND-PFM-ELG-065` |

## Interactions With Related Capabilities

End a holding with its cover. End the holding and read both the cover arrangement and effective holdings.

Repair a reported gap by assignment. Read uncovered areas, create a valid primary holding, then end it and read again.

Remove one holder without rewriting the condition. Read both lists, end one holding and read both lists and the occurrence again.
