---
id: ATS-PFM-INT-011
scope: CAP-PFM-INT-011
product_area: platform
module: integrations
revision: 3
status: proposed
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  macroservice-libraries: 54536a441935c6e09fdb7f96f0bec71c52ba4e03
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-PFM-INT-011-01
    title: Integration readers can inspect execution detail
    level: api
    proves:
      - BR-CAP-PFM-INT-011-01
    preconditions: A read-only person can reach a settled payment.
    steps: 'Read its list, detail and attempts.'
    expected: Integration-read authority is sufficient for all responses.
    negative: false
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-481
      - TST-PFM-INT-491
    provenance: test
    source: >-
      services-platform:modules/integrations/tests/e2e-adapters/gateway-dummy.adapters.spec.js#lets the
      tenant read the execution, its attempts and its stored response
    category: permission
    binding_evidence:
      - >-
        services-platform:modules/integrations/tests/e2e-adapters/gateway-dummy.adapters.spec.js#lets the
        tenant read the execution, its attempts and its stored response
      - >-
        services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#every tenant GET route
        is declared with platform.integrations.read and nothing else
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-011-02
    title: Operator mutations refuse read-only callers
    level: api
    proves:
      - BR-CAP-PFM-INT-011-02
    preconditions: A person has integration read alone.
    steps: 'Attempt retry, cancellation and manual settlement.'
    expected: Every mutation denies access and preserves the execution.
    negative: true
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-491
    provenance: test
    source: >-
      services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#is refused every route
      that changes something (403)
    category: permission
    binding_evidence:
      - >-
        services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#is refused every route
        that changes something (403)
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-011-03
    title: Retry retains the exact original business request
    level: api
    proves:
      - BR-CAP-PFM-INT-011-03
    preconditions: One call failed retryably and another was declined.
    steps: 'Retry the first with the original and changed requests, then retry the decline.'
    expected: The unchanged retry queues and audits an attempt; altered request and declined retry are refused.
    negative: true
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-541
    provenance: test
    source: >-
      services-platform:modules/integrations/tests/integration/services/executions/execution-operations.integration.spec.js#refuses
      a request handed back that is not the one recorded
    category: validation
    binding_evidence:
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/execution-operations.integration.spec.js#refuses
        a request handed back that is not the one recorded
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/execution-operations.integration.spec.js#queues
        a new attempt of an execution failed with a retryable class, now, with the same execution id
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/execution-operations.integration.spec.js#refuses
        an execution whose class may not be retried, not_retryable
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/execution-operations.integration.spec.js#audits
        the retry on the execution
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-011-04
    title: Cancellation distinguishes not-started from already-running
    level: api
    proves:
      - BR-CAP-PFM-INT-011-05
    preconditions: 'Prepare accepted unattempted work, running asynchronous work and a settled payment.'
    steps: Request cancellation for every prepared call.
    expected: >-
      The first loses dispatch and releases its key, the second receives a cancellation request and the
      settled call refuses.
    negative: true
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-543
      - TST-PFM-INT-481
    provenance: test
    source: >-
      services-platform:modules/integrations/tests/integration/services/executions/invoke-capability.integration.spec.js#cancels
      an accepted execution before its first attempt, releasing its key and its queued dispatch
    category: transition
    binding_evidence:
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/invoke-capability.integration.spec.js#cancels
        an accepted execution before its first attempt, releasing its key and its queued dispatch
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/invoke-capability.integration.spec.js#lets
        the released key start a new execution after the cancellation
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/invoke-capability.integration.spec.js#asks
        a running async execution to stop, and says the cancellation is the adapter’s to honour
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/invoke-capability.integration.spec.js#refuses
        to cancel a settled sync execution, not_cancellable
      - >-
        services-platform:modules/integrations/tests/e2e-adapters/gateway-dummy.adapters.spec.js#refuses
        to cancel a settled payment, 409
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-011-05
    title: Manual resolution is accountable and final
    level: browser
    proves:
      - BR-CAP-PFM-INT-011-06
      - AS-JNY-PFM-INT-004-02
    preconditions: A payment requires operator attention.
    steps: 'Resolve success with a note, repeat resolution and try resolving an ordinary call.'
    expected: >-
      The first records success, operator history and one completion; the repeats and non-attention case
      refuse.
    negative: true
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-545
      - TST-PFM-INT-542
      - TST-PFM-INT-307
    provenance: test
    source: >-
      services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#lets
      an operator resolve a needs_attention execution by hand, audited, with no call to the provider
    category: transition
    binding_evidence:
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#lets
        an operator resolve a needs_attention execution by hand, audited, with no call to the provider
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#refuses
        to resolve an execution that does not need attention
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/execution-settlement.integration.spec.js#resolve
        of a needs_attention async execution writes the completion with the stored answer
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/execution-settlement.integration.spec.js#a
        second resolve of the same execution is refused and writes no second completion
      - >-
        react-console:acceptance/integrations/playwright/journeys/executions/INT-ACC-0297.spec.ts#INT-ACC-0297
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-011-06
    title: Staff operations span workspaces without granting customer access
    level: api
    proves:
      - BR-CAP-PFM-INT-011-08
    preconditions: Two workspaces contain attention calls and an open circuit.
    steps: 'List as Rhythm staff, reset the circuit and repeat as a customer administrator.'
    expected: >-
      Staff see both workspaces and produce reset history; the customer cannot perform either staff
      operation.
    negative: false
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-541
    provenance: test
    source: >-
      services-platform:modules/integrations/tests/integration/services/executions/execution-operations.integration.spec.js#lists
      every tenant’s executions that need attention, in no tenant
    category: permission
    binding_evidence:
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/execution-operations.integration.spec.js#lists
        every tenant’s executions that need attention, in no tenant
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/execution-operations.integration.spec.js#resets
        an open circuit to closed, found by its id in no tenant
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/execution-operations.integration.spec.js#refuses
        a circuit nobody holds, not found
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-011-07
    level: api
    negative: false
    data_needs: Run-owned records and principals in an isolated workspace.
    bound_to: []
    provenance: proposed
    title: A manual finding settles only once
    category: interaction
    proves:
      - BR-CAP-PFM-INT-010-05
      - BR-CAP-PFM-INT-011-06
    exercises:
      - CAP-PFM-INT-011
      - CAP-PFM-INT-010
    preconditions: An uncertain asynchronous call requires attention.
    steps: Record a successful finding with a note and repeat the request while inspecting completion records.
    expected: 'One outcome and applicable completion are retained, with no provider invocation for the finding.'
    source:
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/execution-settlement.integration.spec.js#is
        written once for two settlements that both read the execution running, the loser moving nothing
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#lets
        an operator resolve a needs_attention execution by hand, audited, with no call to the provider
    workflows:
      - WF-PFM-INT-013
evidence:
  - >-
    Each binding identifies an existing source test at the pinned revision; unbound scenarios remain
    proposed proof obligations.
coverage:
  rule: 'gap: FND-PFM-INT-072'
  transition: covered
  validation: covered
  permission: covered
  edge: 'gap: FND-PFM-INT-072'
  failure: 'gap: FND-PFM-INT-072'
  boundary: 'gap: FND-PFM-INT-072'
  concurrency: 'gap: FND-PFM-INT-072'
  invariant: 'gap: FND-PFM-INT-072'
  interaction: covered
coverage_notes:
  covered: A designed scenario exists; executable coverage and a passing run require separate evidence.
  gaps: >-
    The finding records categories without a designed scenario and remaining permission and rule audit
    obligations.
---
# Inspect calls and resolve operational problems: Capability Test Specification

## Coverage

| Rule | Proved By |
|---|---|
| `BR-CAP-PFM-INT-011-01` | `ATS-PFM-INT-011-01` |
| `BR-CAP-PFM-INT-011-02` | `ATS-PFM-INT-011-02` |
| `BR-CAP-PFM-INT-011-03` | `ATS-PFM-INT-011-03` |
| `BR-CAP-PFM-INT-011-04` | `FND-PFM-INT-072` |
| `BR-CAP-PFM-INT-011-05` | `ATS-PFM-INT-011-04` |
| `BR-CAP-PFM-INT-011-06` | `ATS-PFM-INT-011-05`, `ATS-PFM-INT-011-07` |
| `BR-CAP-PFM-INT-011-08` | `ATS-PFM-INT-011-06` |

## Interactions With Related Capabilities

Operator actions change executions that reconciliation and application consumers also observe. The interaction case checks those shared outcomes together, with the recorded finding and completion tied to the same execution.

The structured scenarios name the capabilities and rules involved. A bound test contributes only the outcomes it asserts; proposed transition matrices and composed interactions still require executable proof.
