---
id: ATS-PFM-ELG-017
scope: CAP-PFM-ELG-017
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-017-01
    title: Distinguish baseline from missing signed authority
    level: api
    proves:
      - BR-CAP-PFM-ELG-017-01
    preconditions: >-
      A reviewer lacks role-specific attention grants, a signature lacks use authority and a portal
      caller exists.
    steps: Read personal summary and list as each.
    expected: >-
      The reviewer succeeds through baseline authority; the keyless signature and portal caller
      fail.
    negative: true
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        react-console:acceptance/platform-attention/playwright/journeys/security/RA-ACC-0201.spec.ts#RA-ACC-0201
      - TST-PFM-ELG-381
      - >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#refuses a caller holding
        no attention key on the caller’s own routes, with 403
      - TST-PFM-ELG-388
      - >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#refuses a portal account
        on every route: the portal is held
    provenance: test
    source: >-
      react-console:acceptance/platform-attention/playwright/journeys/security/RA-ACC-0201.spec.ts#RA-ACC-0201
    category: permission
    action_evidence:
      provenance: test
      source: >-
        react-console:acceptance/platform-attention/playwright/journeys/security/RA-ACC-0201.spec.ts#RA-ACC-0201
    assertion_evidence:
      provenance: test
      source: >-
        react-console:acceptance/platform-attention/playwright/journeys/security/RA-ACC-0201.spec.ts#RA-ACC-0201
    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-017-02
    title: Resolve audience matches currently
    level: api
    proves:
      - BR-CAP-PFM-ELG-017-02
    preconditions: 'Items target a scoped responsibility, role and user.'
    steps: >-
      Read as specific and broad holders, backups, delegates, role holders, the direct user and
      outsiders.
    expected: Policy-governed matching selects relevant viewers and excludes the outsider.
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#reaches
        the direct holder at the item’s resource scope, as a responsibility at a resource
      - TST-PFM-ELG-393
      - >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#does
        not reach a tenant-wide holder where somebody holds the narrower scope (coverage
        when_unheld)
      - >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#hides
        a backup while the primary is present (backup_visibility when_primary_absent)
      - >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#reaches
        a role audience’s holders, and not a user without the role
      - >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#reaches
        a user audience’s user alone
    provenance: test
    source: >-
      services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#reaches
      the direct holder at the item’s resource scope, as a responsibility at a resource
    category: rule
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#reaches
        the direct holder at the item’s resource scope, as a responsibility at a resource
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#reaches
        the direct holder at the item’s resource scope, as a responsibility at a resource
    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-017-03
    title: Remove ended holding matches
    level: api
    proves:
      - BR-CAP-PFM-ELG-017-03
    preconditions: Pat and another person see the same item.
    steps: End Pat’s holding and read both views.
    expected: Pat loses the match without item mutation and the other holder retains it.
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        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
      - TST-PFM-ELG-397
      - >-
        react-console:acceptance/platform-attention/playwright/journeys/attention/RA-ACC-0105.spec.ts#RA-ACC-0105
      - TST-PFM-ELG-372
    provenance: test
    source: >-
      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
    category: interaction
    action_evidence:
      provenance: test
      source: >-
        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/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
  - id: ATS-PFM-ELG-017-04
    title: Prefer one explanatory match
    level: api
    proves:
      - BR-CAP-PFM-ELG-017-04
    preconditions: A viewer matches responsibility and role audiences.
    steps: Read the item list and reason ordering.
    expected: >-
      One occurrence appears with the preferred responsibility reason and the declared ordering
      applies.
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#answers
        an item reaching the viewer through two audiences once, with the better reason
      - TST-PFM-ELG-393
      - >-
        services-platform:modules/attention/tests/unit/rules.spec.js#orders a resource
        responsibility, a tenant responsibility, a delegation, covering, a team, a role, an
        escalation, a user
      - TST-PFM-ELG-408
    provenance: test
    source: >-
      services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#answers
      an item reaching the viewer through two audiences once, with the better reason
    category: rule
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#answers
        an item reaching the viewer through two audiences once, with the better reason
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#answers
        an item reaching the viewer through two audiences once, with the better reason
    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-017-05
    title: Preserve rank boundaries
    level: unit
    proves:
      - BR-CAP-PFM-ELG-017-05
    preconditions: Every class and urgency has representative items.
    steps: Apply maximum adjustments and age and evaluate calendar urgency across daylight saving.
    expected: >-
      Required work outranks opportunities and displayed due-soon timing follows local calendar
      days.
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/attention/tests/unit/rules.spec.js#weighs a required item over an
        advisory over an opportunity, all else equal
      - TST-PFM-ELG-408
      - >-
        services-platform:modules/attention/tests/unit/rules.spec.js#never lets an opportunity
        outrank a required item within the declared bounds
      - >-
        services-platform:modules/attention/tests/unit/rules.spec.js#keeps seven calendar days
        across the end of daylight saving time (one of them 25 hours long)
      - >-
        services-platform:modules/attention/tests/integration/services/persistence/items.integration.spec.js#ranks
        the item by the rule rules.ts states, with the definition’s and the tenant’s adjustments
      - TST-PFM-ELG-392
    provenance: test
    source: >-
      services-platform:modules/attention/tests/unit/rules.spec.js#weighs a required item over an
      advisory over an opportunity, all else equal
    category: boundary
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/unit/rules.spec.js#weighs a required item over an
        advisory over an opportunity, all else equal
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/unit/rules.spec.js#weighs a required item over an
        advisory over an opportunity, all else equal
    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-017-06
    title: Page supported list orders
    level: api
    proves:
      - BR-CAP-PFM-ELG-017-06
    preconditions: 'Open, dismissed and snoozed occurrences exist.'
    steps: 'Request every sort with and without snoozes, traverse pages and use an invalid sort.'
    expected: >-
      Dismissed work stays absent, requested snoozes appear, traversal has no gaps or duplicates and
      invalid sorting fails.
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#leaves
        out an item the viewer dismissed
      - TST-PFM-ELG-393
      - >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#leaves
        out an item the viewer snoozed, and shows it when asked for snoozed items
      - >-
        services-platform:modules/attention/tests/integration/services/read/viewer-summary.integration.spec.js#pages
        each sort by its keyset without repeating or dropping an item
      - TST-PFM-ELG-399
      - >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#lists the caller’s items
        by due instant when asked, and refuses a sort it does not have with 400
      - TST-PFM-ELG-388
    provenance: test
    source: >-
      services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#leaves
      out an item the viewer dismissed
    category: boundary
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#leaves
        out an item the viewer dismissed
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#leaves
        out an item the viewer dismissed
    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-017-07
    title: Flag capped summaries accurately
    level: api
    proves:
      - BR-CAP-PFM-ELG-017-07
      - AS-JNY-PFM-ELG-004-02
    preconditions: One kind has 501 items and another exactly 500.
    steps: Read summary and unread totals.
    expected: >-
      Both display 500, only the excess group is capped, unread flags apply and each group includes
      its first three items.
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/attention/tests/integration/services/read/viewer-summary-cap.integration.spec.js#stops
        a group of 501 open items at 500 and says it is capped
      - TST-PFM-ELG-398
      - >-
        services-platform:modules/attention/tests/integration/services/read/viewer-summary-cap.integration.spec.js#leaves
        a group of exactly 500 open items at 500, not capped
      - >-
        services-platform:modules/attention/tests/integration/services/read/viewer-summary-cap.integration.spec.js#caps
        the bell’s unread count at 500 and flags it
      - >-
        services-platform:modules/attention/tests/integration/services/read/viewer-summary.integration.spec.js#answers
        one group per definition with its counts by urgency, snoozed and unread
      - TST-PFM-ELG-399
      - >-
        react-console:acceptance/platform-attention/playwright/journeys/attention/RA-ACC-0106.spec.ts#RA-ACC-0106
      - TST-PFM-ELG-373
    provenance: test
    source: >-
      services-platform:modules/attention/tests/integration/services/read/viewer-summary-cap.integration.spec.js#stops
      a group of 501 open items at 500 and says it is capped
    category: rule
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/read/viewer-summary-cap.integration.spec.js#stops
        a group of 501 open items at 500 and says it is capped
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/read/viewer-summary-cap.integration.spec.js#stops
        a group of 501 open items at 500 and says it is capped
    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-017-08
    title: Render audience and facts readably
    level: unit
    proves:
      - BR-CAP-PFM-ELG-017-09
    preconditions: 'Items contain declared facts, resource scopes and dates.'
    steps: Render the console view.
    expected: >-
      Only declared labelled facts appear, with plural counts and readable times and durations
      instead of internal references.
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#names
        the reason’s scope by words, never by the unit’s id
      - TST-PFM-ELG-393
      - >-
        services-platform:modules/attention/tests/unit/rendering.spec.js#shows a console reader
        every declared fact and nothing undeclared
      - TST-PFM-ELG-406
      - >-
        services-platform:modules/attention/tests/unit/rendering.spec.js#names another record’s
        scope by its registered object, never its id
      - >-
        services-platform:modules/attention/tests/unit/rendering.spec.js#counts several batches in
        the plural
      - >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#tells
        when it was last checked as short local text, with no timestamp
    provenance: test
    source: >-
      services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#names
      the reason’s scope by words, never by the unit’s id
    category: rule
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#names
        the reason’s scope by words, never by the unit’s id
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#names
        the reason’s scope by words, never by the unit’s 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-017-09
    title: Conceal item detail outside its audience
    level: browser
    proves:
      - BR-CAP-PFM-ELG-017-10
      - AS-JNY-PFM-ELG-004-03
    preconditions: An occurrence is addressed to Pat.
    steps: Read it as Pat and an unrelated colleague.
    expected: >-
      Pat receives its cause, match, working action link and change explanation; the colleague
      receives not found.
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        react-console:acceptance/platform-attention/playwright/journeys/attention/RA-ACC-0102.spec.ts#RA-ACC-0102
      - TST-PFM-ELG-369
      - >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#reads one item with its
        explanation
      - TST-PFM-ELG-388
      - >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#answers 404 for an item
        addressed to somebody else
      - >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#answers
        the item rendered, with why it exists, why the viewer and when it changes
      - TST-PFM-ELG-393
    provenance: test
    source: >-
      react-console:acceptance/platform-attention/playwright/journeys/attention/RA-ACC-0102.spec.ts#RA-ACC-0102
    category: permission
    action_evidence:
      provenance: test
      source: >-
        react-console:acceptance/platform-attention/playwright/journeys/attention/RA-ACC-0102.spec.ts#RA-ACC-0102
    assertion_evidence:
      provenance: test
      source: >-
        react-console:acceptance/platform-attention/playwright/journeys/attention/RA-ACC-0102.spec.ts#RA-ACC-0102
    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-017-10
    title: Check action permission
    level: api
    proves:
      - BR-CAP-PFM-ELG-017-11
      - INV-DOM-PFM-ELG-005-06
    preconditions: An action declares a required permission.
    steps: Read as authorized and unauthorized viewers.
    expected: The authorized action is available and the other viewer sees the missing authority.
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#allows an action to a
        reader holding the permission its definition declares, and says what another reader needs
      - TST-PFM-ELG-388
    provenance: test
    source: >-
      services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#allows an action to a
      reader holding the permission its definition declares, and says what another reader needs
    category: permission
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#allows an action to a
        reader holding the permission its definition declares, and says what another reader needs
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#allows an action to a
        reader holding the permission its definition declares, and says what another reader needs
    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-017-11
    title: Protect record attention lookup
    level: api
    proves:
      - BR-CAP-PFM-ELG-017-12
    preconditions: A record has multiple open occurrences.
    steps: Read as permitted and unpermitted callers and submit a malformed record reference.
    expected: >-
      The record reader sees all with personal matches marked, the other sees not found and
      malformed input fails.
    negative: true
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#answers every open item
        about a record to a caller who may read it, marking the caller’s
      - TST-PFM-ELG-388
      - >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#answers 404 to a caller
        who may not read the record
      - >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#refuses a record that is
        not <object_id>:<record_id> with 400
    provenance: test
    source: >-
      services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#answers every open item
      about a record to a caller who may read it, marking the caller’s
    category: permission
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#answers every open item
        about a record to a caller who may read it, marking the caller’s
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#answers every open item
        about a record to a caller who may read it, marking the caller’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
  - id: ATS-PFM-ELG-017-12
    title: Audit colleague inspection
    level: api
    proves:
      - BR-CAP-PFM-ELG-017-13
    preconditions: A caller has read-others authority and a colleague has items.
    steps: Inspect with and without the key and request a nonexistent user.
    expected: 'Authorized inspection is audited, missing authority fails and an absent user is not found.'
    negative: true
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#lists a colleague’s
        items to a holder of read-others, and audits the read
      - TST-PFM-ELG-388
      - >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#refuses it without
        read-others, with 403
      - >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#answers 404 for somebody
        who is not a console user of the tenant
    provenance: test
    source: >-
      services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#lists a colleague’s items
      to a holder of read-others, and audits the read
    category: permission
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#lists a colleague’s
        items to a holder of read-others, and audits the read
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/e2e/attention.e2e.spec.js#lists a colleague’s
        items to a holder of read-others, and audits the read
    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-017-13
    title: Keep workspace and audience isolation
    level: api
    proves:
      - BR-CAP-PFM-ELG-017-14
      - AS-JNY-PFM-ELG-004-04
      - INV-DOM-PFM-ELG-005-10
    preconditions: Items exist in one workspace with unrelated colleagues and another workspace.
    steps: 'Read every view, including a session without a workspace.'
    expected: >-
      Neither unrelated audience nor outside-workspace readers receive the items and the contextless
      read is empty.
    negative: true
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#reads
        nothing of the tenant without a tenant: the policy fails closed
      - TST-PFM-ELG-393
      - >-
        services-platform:modules/attention/tests/integration/db/attention-items.table.integration.spec.js#reads
        none of a tenant’s attention rows for a session in no tenant, while the tenant reads its own
      - TST-PFM-ELG-389
      - >-
        react-console:acceptance/platform-attention/playwright/journeys/security/RA-ACC-0200.spec.ts#RA-ACC-0200
      - TST-PFM-ELG-380
      - >-
        react-console:acceptance/platform-attention/playwright/journeys/security/RA-ACC-0202.spec.ts#RA-ACC-0202
      - TST-PFM-ELG-382
    provenance: test
    source: >-
      services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#reads
      nothing of the tenant without a tenant: the policy fails closed
    category: boundary
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#reads
        nothing of the tenant without a tenant: the policy fails closed
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#reads
        nothing of the tenant without a tenant: the policy fails closed
    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-017-14
    title: Explain why an attention summary is empty
    level: api
    proves:
      - BR-CAP-PFM-ELG-017-08
    preconditions: >-
      One viewer has holdings but no open work, one has no holdings or direct audience, and one has
      every console kind disabled.
    steps: Read each viewer’s attention summary.
    expected: 'The three summaries distinguish all clear, no responsibilities and nothing enabled.'
    negative: false
    data_needs: Existing evidence fixtures provide the described setup.
    bound_to:
      - >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#says
        all_clear to a viewer who holds responsibilities and has nothing open
      - TST-PFM-ELG-393
      - >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#says
        no_responsibilities to a viewer who holds none and is addressed by nothing
      - >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#says
        nothing_enabled where the tenant has disabled every definition on the console
    provenance: test
    source: >-
      services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#says
      no_responsibilities to a viewer who holds none and is addressed by nothing
    category: edge
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#says
        no_responsibilities to a viewer who holds none and is addressed by nothing
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#says
        no_responsibilities to a viewer who holds none and is addressed by nothing
    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-017-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-017
      - CAP-PFM-ELG-013
    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
  - id: ATS-PFM-ELG-017-16
    title: Transfer attention through temporary cover
    category: interaction
    level: browser
    proves:
      - BR-CAP-PFM-ELG-014-06
      - BR-CAP-PFM-ELG-017-02
    exercises:
      - CAP-PFM-ELG-017
      - CAP-PFM-ELG-014
    preconditions: One person holds an area and a colleague holds nothing.
    steps: 'Arrange cover, read the colleague’s attention and Home banner, end cover and repeat the reads.'
    expected: >-
      The colleague receives the item with the covering reason and named end while cover applies,
      then loses both.
    negative: false
    data_needs: Run-owned records and a controlled clock where timing changes the result.
    bound_to:
      - >-
        react-console:acceptance/platform-attention/playwright/journeys/responsibilities/RA-ACC-0002.spec.ts
      - TST-PFM-ELG-377
    provenance: test
    source: >-
      react-console:acceptance/platform-attention/playwright/journeys/responsibilities/RA-ACC-0002.spec.ts#RA-ACC-0002;
      services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#reaches
      a role audience’s holders, and not a user without the role
    action_evidence:
      provenance: test
      source: >-
        react-console:acceptance/platform-attention/playwright/journeys/responsibilities/RA-ACC-0002.spec.ts#RA-ACC-0002;
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#reaches
        a role audience’s holders, and not a user without the role
    assertion_evidence:
      provenance: test
      source: >-
        react-console:acceptance/platform-attention/playwright/journeys/responsibilities/RA-ACC-0002.spec.ts#RA-ACC-0002;
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#reaches
        a role audience’s holders, and not a user without the role
    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-017-17
    title: Remove resolved conditions from every matching list
    category: interaction
    level: api
    proves:
      - BR-CAP-PFM-ELG-016-07
      - BR-CAP-PFM-ELG-017-02
    exercises:
      - CAP-PFM-ELG-017
      - CAP-PFM-ELG-016
    preconditions: An open condition reaches two staff members through different audiences.
    steps: >-
      Read both lists, resolve the condition at source and read both lists and the stored
      occurrence.
    expected: Both lists lose the condition while the stored occurrence retains its closed history.
    negative: false
    data_needs: Run-owned records and a controlled clock where timing changes the result.
    bound_to: []
    provenance: proposed
    source: >-
      services-platform:modules/attention/tests/integration/services/persistence/items.integration.spec.js#resolves
      the open items not confirmed since the instant, in the scope given, and leaves the confirmed;
      services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#reaches
      a role audience’s holders, and not a user without the role
    action_evidence:
      provenance: proposed
      source: >-
        services-platform:modules/attention/tests/integration/services/persistence/items.integration.spec.js#resolves
        the open items not confirmed since the instant, in the scope given, and leaves the
        confirmed;
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#reaches
        a role audience’s holders, and not a user without the role
    assertion_evidence:
      provenance: proposed
      source: >-
        services-platform:modules/attention/tests/integration/services/persistence/items.integration.spec.js#resolves
        the open items not confirmed since the instant, in the scope given, and leaves the
        confirmed;
        services-platform:modules/attention/tests/integration/services/persistence/items.queries.integration.spec.js#reaches
        a role audience’s holders, and not a user without the role
    binding_scope: This sequence is proposed and has no executable proof binding.
  - id: ATS-PFM-ELG-017-18
    title: Update unread totals without clearing the condition
    category: interaction
    level: api
    proves:
      - BR-CAP-PFM-ELG-017-07
      - BR-CAP-PFM-ELG-018-02
    exercises:
      - CAP-PFM-ELG-017
      - CAP-PFM-ELG-018
    preconditions: A required occurrence appears unread to one person.
    steps: 'Acknowledge it, snooze it, end the snooze and inspect the list and summary at each stage.'
    expected: >-
      Acknowledgement removes its unread contribution; snooze hides it temporarily and ending snooze
      restores an acknowledged item.
    negative: false
    data_needs: Run-owned records and a controlled clock where timing changes the result.
    bound_to: []
    provenance: proposed
    source: >-
      services-platform:modules/attention/tests/integration/services/read/viewer-summary-cap.integration.spec.js#stops
      a group of 501 open items at 500 and says it is capped;
      services-platform:modules/attention/tests/integration/services/persistence/states.integration.spec.js#acknowledges
      an item and records attention.acknowledged against its definition
    action_evidence:
      provenance: proposed
      source: >-
        services-platform:modules/attention/tests/integration/services/read/viewer-summary-cap.integration.spec.js#stops
        a group of 501 open items at 500 and says it is capped;
        services-platform:modules/attention/tests/integration/services/persistence/states.integration.spec.js#acknowledges
        an item and records attention.acknowledged against its definition
    assertion_evidence:
      provenance: proposed
      source: >-
        services-platform:modules/attention/tests/integration/services/read/viewer-summary-cap.integration.spec.js#stops
        a group of 501 open items at 500 and says it is capped;
        services-platform:modules/attention/tests/integration/services/persistence/states.integration.spec.js#acknowledges
        an item and records attention.acknowledged against its definition
    binding_scope: This sequence is proposed and has no executable proof binding.
  - id: ATS-PFM-ELG-017-19
    title: Hide presentation without resolving work
    category: interaction
    level: api
    proves:
      - BR-CAP-PFM-ELG-017-06
      - BR-CAP-PFM-ELG-020-07
    exercises:
      - CAP-PFM-ELG-017
      - CAP-PFM-ELG-020
    preconditions: An advisory and a required occurrence reach one person.
    steps: >-
      Hide the advisory in personal preferences, request hidden items explicitly, then disable the
      kind in shared settings.
    expected: >-
      Personal hiding affects only that person, explicit inclusion restores the advisory and shared
      disablement leaves stored occurrences open.
    negative: false
    data_needs: Run-owned records and a controlled clock where timing changes the result.
    bound_to: []
    provenance: proposed
    source: >-
      services-platform:modules/attention/tests/integration/services/read/viewer-summary.integration.spec.js#pages
      each sort by its keyset without repeating or dropping an item;
      services-platform:modules/attention/tests/integration/services/persistence/preferences.integration.spec.js#refuses
      to hide a required definition, naming it, the row unchanged
    action_evidence:
      provenance: proposed
      source: >-
        services-platform:modules/attention/tests/integration/services/read/viewer-summary.integration.spec.js#pages
        each sort by its keyset without repeating or dropping an item;
        services-platform:modules/attention/tests/integration/services/persistence/preferences.integration.spec.js#refuses
        to hide a required definition, naming it, the row unchanged
    assertion_evidence:
      provenance: proposed
      source: >-
        services-platform:modules/attention/tests/integration/services/read/viewer-summary.integration.spec.js#pages
        each sort by its keyset without repeating or dropping an item;
        services-platform:modules/attention/tests/integration/services/persistence/preferences.integration.spec.js#refuses
        to hide a required definition, naming it, the row unchanged
    binding_scope: This sequence is proposed and has no executable proof binding.
evidence:
  - >-
    services-platform: docs/attention.md;
    docs/milestones/PLAT-M15-home-attention-and-responsibilities.md,
    PLAT-M16-attention-follow-up-and-tuning.md, PLAT-M17-attention-on-records-and-events.md,
    PLAT-M18-workspace-defined-attention.md, plans/PLAT-M15-plan.md, plans/PLAT-M16-plan.md;
    docs/proposals/responsibilities-and-attention/16-decisions.md; aws/platform.service.ts
    (ATTENTION_PERMISSIONS); modules/attention/aws/api/attention.routes.ts, attention.schemas.ts,
    attention-api-mapper.ts, rules.ts, services/read/** (attention-for-viewer.ts, render-item.ts,
    action-permissions.ts), services/persistence/items.ts (the viewer statements),
    evaluated-permissions.ts; modules/responsibilities (responsibility_holders,
    effective_responsibilities_of); modules/security/services/persistence/assignments.ts
    (consoleBaselineGrant, named as a dependency); rule-level source and test references
  - >-
    react-console: app/(console)/console/[tenantId]/page.tsx (Home), attention/page.tsx,
    components/attention/** (attention-block.tsx, attention-list-screen.tsx, attention-item-row.tsx,
    attention-parts.tsx), components/console/alerts-popover.tsx (the bell), lib/attention/**,
    lib/api/attention.ts; acceptance/platform-attention/journeys/{attention,security}/*.json and
    matching browser specifications.
related_coverage:
  - capability: CAP-PFM-ELG-013
    scenario: ATS-PFM-ELG-017-15
  - capability: CAP-PFM-ELG-014
    scenario: ATS-PFM-ELG-017-16
  - capability: CAP-PFM-ELG-016
    scenario: ATS-PFM-ELG-017-17
  - capability: CAP-PFM-ELG-018
    scenario: ATS-PFM-ELG-017-18
  - capability: CAP-PFM-ELG-020
    scenario: ATS-PFM-ELG-017-19
coverage:
  rule: covered
  transition: 'gap: FND-PFM-ELG-069'
  validation: 'gap: FND-PFM-ELG-069'
  permission: 'gap: FND-PFM-ELG-069'
  edge: covered
  failure: 'gap: FND-PFM-ELG-069'
  boundary: covered
  concurrency: 'gap: FND-PFM-ELG-069'
  invariant: 'gap: FND-PFM-ELG-069'
  interaction: covered
invariant_gaps:
  - invariant: INV-DOM-PFM-ELG-004-07
    finding: FND-PFM-ELG-069
    source: 'services-platform:modules/responsibilities/rules.ts:checkDelegationWindow'
  - invariant: INV-DOM-PFM-ELG-004-08
    finding: FND-PFM-ELG-069
    source: >-
      services-platform:modules/responsibilities/services/persistence/assignments.ts:refreshUnassignedFor
  - invariant: INV-DOM-PFM-ELG-004-09
    finding: FND-PFM-ELG-069
    source: >-
      services-platform:db/migrations/20261019011302_responsibilities.sql:platform.sync_derived_responsibilities
  - invariant: INV-DOM-PFM-ELG-005-01
    finding: FND-PFM-ELG-069
    source: >-
      services-platform:modules/attention/db/attention-item-keys.table.ts;
      services-platform:modules/attention/services/persistence/items.ts:deleteOrphans
transition_coverage: []
permission_coverage:
  - key: platform.attention.use
    finding: FND-PFM-ELG-069
    reason: A capability-level authority scenario does not prove every operation protected by this key.
  - key: platform.attention.read-others
    finding: FND-PFM-ELG-069
    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: >-
    Attention summary and bell agreement needs an acknowledgement outside the displayed sample. Read
    failures, concurrent audience changes during paging and every permission key require independent
    negative controls.
---

# Deliver relevant attention with a reason: 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-017-01` | `ATS-PFM-ELG-017-01` |
| `BR-CAP-PFM-ELG-017-02` | `ATS-PFM-ELG-017-02`, `ATS-PFM-ELG-017-16`, `ATS-PFM-ELG-017-17` |
| `BR-CAP-PFM-ELG-017-03` | `ATS-PFM-ELG-017-03`, `ATS-PFM-ELG-017-15` |
| `BR-CAP-PFM-ELG-017-04` | `ATS-PFM-ELG-017-04` |
| `BR-CAP-PFM-ELG-017-05` | `ATS-PFM-ELG-017-05` |
| `BR-CAP-PFM-ELG-017-06` | `ATS-PFM-ELG-017-06`, `ATS-PFM-ELG-017-19` |
| `BR-CAP-PFM-ELG-017-07` | `ATS-PFM-ELG-017-07`, `ATS-PFM-ELG-017-18` |
| `BR-CAP-PFM-ELG-017-08` | `ATS-PFM-ELG-017-14` |
| `BR-CAP-PFM-ELG-017-09` | `ATS-PFM-ELG-017-08` |
| `BR-CAP-PFM-ELG-017-10` | `ATS-PFM-ELG-017-09` |
| `BR-CAP-PFM-ELG-017-11` | `ATS-PFM-ELG-017-10` |
| `BR-CAP-PFM-ELG-017-12` | `ATS-PFM-ELG-017-11` |
| `BR-CAP-PFM-ELG-017-13` | `ATS-PFM-ELG-017-12` |
| `BR-CAP-PFM-ELG-017-14` | `ATS-PFM-ELG-017-13` |

## Interactions With Related Capabilities

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

Transfer attention through temporary cover. Arrange cover, read the colleague’s attention and Home banner, end cover and repeat the reads.

Remove resolved conditions from every matching list. Read both lists, resolve the condition at source and read both lists and the stored occurrence.

Update unread totals without clearing the condition. Acknowledge it, snooze it, end the snooze and inspect the list and summary at each stage.

Hide presentation without resolving work. Hide the advisory in personal preferences, request hidden items explicitly, then disable the kind in shared settings.
