---
id: ATS-PFM-QRY-018
scope: CAP-PFM-QRY-018
product_area: platform
module: queries
revision: 2
status: proposed
approved_by: null
approved_at: null
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  rhythm-v2-docs: 99376625d3e7ac26936413cfc31a88fba6562464
scenarios:
  - id: ATS-PFM-QRY-018-01
    title: Default export authority belongs to Administrators
    level: api
    proves:
      - BR-CAP-PFM-QRY-018-01
    preconditions: Built-in Power User and Administrator contexts are available.
    steps: Exercise the data-export routes under both.
    expected: Power User is refused and Administrator reaches the permitted operations.
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#refuses a Power User every
        data export route
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#serves an Administrator, who
        holds the Data Exporter beside the administrator tier
      - TST-PFM-QRY-187
    provenance: test
    source: >-
      services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#refuses a Power User every
      data export route
    category: permission
  - id: ATS-PFM-QRY-018-02
    title: Export keys are independently required
    level: api
    proves:
      - BR-CAP-PFM-QRY-018-02
    preconditions: Each caller lacks one export key despite holding the others and administrator tier.
    steps: Invoke operations governed by the missing key.
    expected: Every such operation is refused.
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is refused every read route
        when it holds the other three keys and the administrator tier
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is refused every manage
        route when it holds the other three keys and the administrator tier
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is refused every execute
        route when it holds the other three keys and the administrator tier
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is refused the download
        route when it holds the other three keys and the administrator tier
      - TST-PFM-QRY-187
    provenance: test
    source: >-
      services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is refused every read route
      when it holds the other three keys and the administrator tier
    category: permission
  - id: ATS-PFM-QRY-018-03
    title: Eligibility is rechecked for live workspaces
    level: api
    proves:
      - BR-CAP-PFM-QRY-018-03
      - INV-DOM-PFM-QRY-004-10
    preconditions: 'Fixtures include a sandbox, an implementation workspace and a workspace that became nonlive.'
    steps: Create settings and request execution admission.
    expected: Ineligible cases return the workspace-eligibility refusal without writes.
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/data-exports/tests/integration/services/persistence/definitions.integration.spec.js#refuses
        a sandbox as TenantNotEligible, though it is live, because its data is its parent’s
      - >-
        services-platform:modules/data-exports/tests/integration/services/persistence/definitions.integration.spec.js#refuses
        a tenant in implementation as TenantNotEligible, naming its status
      - >-
        services-platform:modules/data-exports/tests/integration/services/executions/admit-execution.integration.spec.js#refuses
        a tenant that stopped being live since its definition was made, creating nothing
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#refuses a sandbox its
        settings with 403 tenant_not_eligible
      - TST-PFM-QRY-197
      - TST-PFM-QRY-193
      - TST-PFM-QRY-187
    provenance: test
    source: >-
      services-platform:modules/data-exports/tests/integration/services/persistence/definitions.integration.spec.js#refuses
      a sandbox as TenantNotEligible, though it is live, because its data is its parent’s
    category: rule
    binding_note: >-
      The cited suites contribute separate assertions. The complete combined example is not a single
      executable journey.
  - id: ATS-PFM-QRY-018-04
    title: Definition storage enforces one bounded configuration
    level: api
    proves:
      - BR-CAP-PFM-QRY-018-04
    preconditions: One workspace already has export settings.
    steps: 'Create another, use invalid retention and recipient bounds, then save at its current version.'
    expected: Invalid definitions fail and the correctly versioned change succeeds.
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/data-exports/tests/integration/services/persistence/definitions.integration.spec.js#refuses
        a second definition for a tenant, leaving one
      - >-
        services-platform:modules/data-exports/tests/integration/services/persistence/definitions.integration.spec.js#refuses
        a retention of no days
      - >-
        services-platform:modules/data-exports/tests/integration/services/persistence/definitions.integration.spec.js#refuses
        a retention beyond thirty days
      - >-
        services-platform:modules/data-exports/tests/integration/services/persistence/definitions.integration.spec.js#refuses
        more than twenty additional recipients
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#changes the definition at
        the version it read
      - TST-PFM-QRY-197
      - TST-PFM-QRY-187
    provenance: test
    source: >-
      services-platform:modules/data-exports/tests/integration/services/persistence/definitions.integration.spec.js#refuses
      a second definition for a tenant, leaving one
    category: boundary
    binding_note: >-
      The cited suites contribute separate assertions. The complete combined example is not a single
      executable journey.
  - id: ATS-PFM-QRY-018-05
    title: Destination changes respect caps and audit
    level: api
    proves:
      - BR-CAP-PFM-QRY-018-05
    preconditions: A definition has five connection destinations.
    steps: 'Add another, duplicate one, use a URL path, enable a disabled destination and remove one.'
    expected: Invalid additions fail; enabling records widening and removal retires its binding.
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/data-exports/tests/integration/services/persistence/destinations.integration.spec.js#refuses
        a sixth destination, leaving five
      - >-
        services-platform:modules/data-exports/tests/integration/services/persistence/destinations.integration.spec.js#refuses
        the same connection twice
      - >-
        services-platform:modules/data-exports/tests/integration/services/persistence/destinations.integration.spec.js#refuses
        a path that is a URL rather than a path inside the connection
      - >-
        services-platform:modules/data-exports/tests/integration/services/persistence/destinations.integration.spec.js#records
        enabling a disabled one as widening, and disabling as not
      - >-
        services-platform:modules/data-exports/tests/integration/services/persistence/destinations.integration.spec.js#removes
        the row and retires its binding
      - TST-PFM-QRY-200
    provenance: test
    source: >-
      services-platform:modules/data-exports/tests/integration/services/persistence/destinations.integration.spec.js#refuses
      a sixth destination, leaving five
    category: boundary
  - id: ATS-PFM-QRY-018-06
    title: Admission records a single queued execution
    level: api
    proves:
      - BR-CAP-PFM-QRY-018-06
      - INV-DOM-PFM-QRY-004-09
    preconditions: Settings can admit execution but another request is queued or settings are suspended.
    steps: 'Admit ordinary work, repeat it, try suspension and admit a staff-triggered execution.'
    expected: >-
      The valid request copies its instant and settings, conflicts or suspension refuse, and staff work is
      marked nonconsuming.
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/data-exports/tests/integration/services/persistence/executions.integration.spec.js#answers
        it queued, at the request’s instant, with the definition’s switches copied and the allowance counted
      - >-
        services-platform:modules/data-exports/tests/integration/services/executions/admit-execution.integration.spec.js#refuses
        while another execution is queued, creating nothing more
      - >-
        services-platform:modules/data-exports/tests/integration/services/executions/admit-execution.integration.spec.js#refuses
        a definition Rhythm suspended, saying why
      - >-
        services-platform:modules/data-exports/tests/integration/services/executions/admit-execution.integration.spec.js#does
        not count a staff run against the allowance
      - TST-PFM-QRY-201
      - TST-PFM-QRY-193
    provenance: test
    source: >-
      services-platform:modules/data-exports/tests/integration/services/persistence/executions.integration.spec.js#answers
      it queued, at the request’s instant, with the definition’s switches copied and the allowance counted
    category: concurrency
    binding_note: >-
      The cited suites contribute separate assertions. The complete combined example is not a single
      executable journey.
  - id: ATS-PFM-QRY-018-07
    title: Execution and security history commit together
    level: api
    proves:
      - BR-CAP-PFM-QRY-018-07
      - INV-DOM-PFM-QRY-004-11
    preconditions: An eligible workspace has export settings.
    steps: Admit a new execution.
    expected: The same transaction records its access-widening execution event.
    negative: false
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/data-exports/tests/integration/services/persistence/executions.integration.spec.js#records
        the data export event: execute, widening, in its own transaction
      - TST-PFM-QRY-201
    provenance: test
    source: >-
      services-platform:modules/data-exports/tests/integration/services/persistence/executions.integration.spec.js#records
      the data export event: execute, widening, in its own transaction
    category: invariant
  - id: ATS-PFM-QRY-018-08
    title: Incomplete package actions state their limits
    level: api
    proves:
      - BR-CAP-PFM-QRY-018-08
    preconditions: An execution is queued without a generated package.
    steps: 'Read its manifest and request cancellation, download, early deletion and delivery retry.'
    expected: The manifest is missing and the unfinished actions return not implemented.
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is answered 404 for the
        manifest of an execution with no package yet
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is answered 409
        not_implemented for a cancellation, until the generation job
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is answered 409
        not_implemented for a download, until the generation job
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is answered 409
        not_implemented for a delivery retry, until delivery
      - TST-PFM-QRY-187
    provenance: test
    source: >-
      services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is answered 404 for the
      manifest of an execution with no package yet
    category: failure
  - id: ATS-PFM-QRY-018-09
    title: Staff and customer export surfaces remain separate
    level: api
    proves:
      - BR-CAP-PFM-QRY-018-09
    preconditions: Staff have platform and HQ export grants and a customer has administrator access.
    steps: Invoke customer-console and HQ operations under each context.
    expected: 'Staff are refused on console routes, HQ staff reads span workspaces and customers cannot use HQ.'
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is refused every console
        route, whatever it holds at platform scope (rule S1)
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is served every HQ route
        with hq.data-exports.read
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#lists every tenant of a
        customer’s executions on the HQ route
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is refused every one,
        holding everything at its customer’s scope
      - TST-PFM-QRY-187
    provenance: test
    source: >-
      services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is refused every console
      route, whatever it holds at platform scope (rule S1)
    category: permission
  - id: ATS-PFM-QRY-018-10
    title: Coverage follows declaration versions
    level: api
    proves:
      - BR-CAP-PFM-QRY-018-10
      - INV-DOM-PFM-QRY-004-13
    preconditions: An application’s export coverage is registered.
    steps: 'Add a subject, change its shape without versioning, remove it and later restore it.'
    expected: 'New coverage advances, conflicts are counted without replacement and retirement can be reversed.'
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/data-exports/tests/integration/services/export-coverage/reconcile-coverage.integration.spec.js#records
        each new dataset with the registry’s next version, and reads it back with its labels and without its
        absent reason and retirement
      - >-
        services-platform:modules/data-exports/tests/integration/services/export-coverage/reconcile-coverage.integration.spec.js#refuses
        a shape changed under an unchanged version, logged at error and counted, leaving the registry as it
        was
      - >-
        services-platform:modules/data-exports/tests/integration/services/export-coverage/reconcile-coverage.integration.spec.js#retires
        a dataset no longer declared and restores it when declared again, the registry’s version moving each
        time
      - TST-PFM-QRY-194
    provenance: test
    source: >-
      services-platform:modules/data-exports/tests/integration/services/export-coverage/reconcile-coverage.integration.spec.js#records
      each new dataset with the registry’s next version, and reads it back with its labels and without its
      absent reason and retirement
    category: transition
  - id: ATS-PFM-QRY-018-11
    title: Foreign executions are concealed
    level: api
    proves:
      - BR-CAP-PFM-QRY-018-11
    preconditions: Another workspace owns the requested execution.
    steps: Read it through the current workspace.
    expected: The response returns 404.
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#answers another tenant’s
        execution 404, as one that does not exist
      - TST-PFM-QRY-187
    provenance: test
    source: >-
      services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#answers another tenant’s
      execution 404, as one that does not exist
    category: permission
  - id: ATS-PFM-QRY-018-12
    title: Recent authentication remains required by product intent
    level: api
    proves:
      - BR-CAP-PFM-QRY-018-12
    preconditions: One administrator signed in twenty minutes ago and another five minutes ago.
    steps: Attempt destination changes and package download.
    expected: >-
      The proposed proof requires renewed authentication for the older session and acceptance for the recent
      one.
    negative: true
    data_needs: Prepare isolated fixtures for the states described here.
    bound_to: []
    provenance: proposed
    source: >-
      services-platform:docs/proposals/tenant-data-export/20-risks-tradeoffs-decisions.md#D-11. Elevated
      authentication for download and destination changes: a recent-authentication check in release 1
    category: permission
  - id: ATS-PFM-QRY-018-13
    title: Allowances remain workspace-specific product intent
    level: api
    proves:
      - BR-CAP-PFM-QRY-018-13
    preconditions: Two workspaces share a customer and one has exhausted its allowance.
    steps: Request exports in both and apply a customer-level override.
    expected: Only the exhausted workspace should fail before override; the override should affect both.
    negative: true
    data_needs: Prepare isolated fixtures for the states described here.
    bound_to: []
    provenance: proposed
    source: >-
      services-platform:docs/proposals/tenant-data-export/20-risks-tradeoffs-decisions.md#D-14. Where the
      allowance attaches (blocks WP-5) — decided: per tenant
    category: rule
  - id: ATS-PFM-QRY-018-14
    title: Admission journey records settings and one request
    level: api
    proves:
      - AS-JNY-PFM-QRY-006-01
      - AS-JNY-PFM-QRY-006-02
    preconditions: An Administrator works in a live eligible workspace.
    steps: 'Save settings, add a destination and request two immediate exports.'
    expected: The first is queued with its security event and the second conflicts while it remains queued.
    negative: false
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#exports now: 202 with the
        execution queued
      - >-
        services-platform:modules/data-exports/tests/integration/services/persistence/executions.integration.spec.js#records
        the data export event: execute, widening, in its own transaction
      - >-
        services-platform:modules/data-exports/tests/integration/services/executions/admit-execution.integration.spec.js#refuses
        while another execution is queued, creating nothing more
      - TST-PFM-QRY-187
      - TST-PFM-QRY-201
      - TST-PFM-QRY-193
    provenance: test
    source: >-
      services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#exports now: 202 with the
      execution queued
    category: interaction
    binding_note: >-
      The cited suites contribute separate assertions. The complete combined example is not a single
      executable journey.
  - id: ATS-PFM-QRY-018-15
    title: A workspace package grant does not reveal a query file
    category: interaction
    level: api
    exercises:
      - CAP-PFM-QRY-014
      - CAP-PFM-QRY-018
    proves:
      - BR-CAP-PFM-QRY-014-07
      - BR-CAP-PFM-QRY-018-08
    preconditions: One user has only workspace-package read and download powers; another owns a completed query file.
    steps: >-
      Request the query-file status and download as the package reader, then request the unfinished workspace
      package action.
    expected: >-
      Package powers confer no access to the other person’s query file; the unfinished package action reports
      its implemented limit.
    negative: false
    data_needs: >-
      Use an isolated workspace with the described source records, access grants and a surviving control
      workspace.
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-platform:modules/queries/tests/integration/services/exports/query-export-routes.integration.spec.js#answers
        404 to a colleague who did not ask for it, even once the file exists
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is answered 409
        not_implemented for a download, until the generation job
  - id: ATS-PFM-QRY-018-16
    title: Workspace cleanup includes search and package resources
    category: interaction
    level: api
    exercises:
      - CAP-PFM-QRY-017
      - CAP-PFM-QRY-018
    proves:
      - BR-CAP-PFM-QRY-017-11
      - BR-CAP-PFM-QRY-018-08
    preconditions: An isolated workspace contains indexed contacts and export settings with a queued request.
    steps: >-
      Request workspace deletion, settle open index work and repeat participant cleanup until its inventory is
      empty.
    expected: >-
      Search documents and workspace export resources disappear without touching a surviving control
      workspace.
    negative: false
    data_needs: >-
      Use an isolated workspace with the described source records, access grants and a surviving control
      workspace.
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-platform:modules/quick-search/tests/integration/services/maintenance/tenant-participant.integration.spec.js#purges
        the tenant once the rebuild has settled, the job’s own three tables included
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is answered 409
        not_implemented for a download, until the generation job
  - id: ATS-PFM-QRY-018-17
    title: Workspace removal clears both kinds of retained history
    category: interaction
    level: api
    exercises:
      - CAP-PFM-QRY-018
      - CAP-PFM-QRY-019
    proves:
      - BR-CAP-PFM-QRY-018-08
      - BR-CAP-PFM-QRY-019-11
    preconditions: An isolated workspace has export settings and queued history plus multiple snapshot versions.
    steps: Run workspace deletion to completion and inspect both inventories.
    expected: Its package foundation records and snapshot history are removed; repeat cleanup reports nothing further.
    negative: false
    data_needs: >-
      Use an isolated workspace with the described source records, access grants and a surviving control
      workspace.
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is answered 409
        not_implemented for a download, until the generation job
      - >-
        services-platform:modules/snapshots/tests/integration/lifecycle/pipeline/snapshot-pipeline.integration.spec.js#removes
        every snapshot row, run and override of the purged tenants, the run's version chain included
evidence:
  - 'Pinned reference: services-platform:docs/proposals/tenant-data-export/20-risks-tradeoffs-decisions.md'
  - 'Pinned reference: services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js'
  - >-
    Pinned reference:
    services-platform:modules/data-exports/tests/integration/services/executions/admit-execution.integration.spec.js
  - >-
    Pinned reference:
    services-platform:modules/data-exports/tests/integration/services/export-coverage/reconcile-coverage.integration.spec.js
  - >-
    Pinned reference:
    services-platform:modules/data-exports/tests/integration/services/persistence/definitions.integration.spec.js
  - >-
    Pinned reference:
    services-platform:modules/data-exports/tests/integration/services/persistence/destinations.integration.spec.js
  - >-
    Pinned reference:
    services-platform:modules/data-exports/tests/integration/services/persistence/executions.integration.spec.js
coverage:
  rule: covered
  transition: 'gap: FND-PFM-QRY-068'
  validation: 'gap: FND-PFM-QRY-068'
  permission: covered
  edge: 'gap: FND-PFM-QRY-068'
  failure: covered
  boundary: covered
  concurrency: covered
  invariant: 'gap: FND-PFM-QRY-068'
  interaction: covered
coverage_findings:
  - FND-PFM-QRY-068
transition_obligations:
  - state: STATE-PFM-QRY-009
    transition: 1
    from: queued
    to: running
    trigger: The mark-running helper is invoked by future orchestration.
    source: 'services-platform:modules/data-exports/services/persistence/executions.ts:markRunning'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-009
    transition: 2
    from: running
    to: succeeded
    trigger: The completion helper records successful execution.
    source: 'services-platform:modules/data-exports/services/persistence/executions.ts:markSucceeded'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-009
    transition: 3
    from: running
    to: failed
    trigger: The failure helper settles running execution.
    source: 'services-platform:modules/data-exports/services/generation/data-export-job-type.ts'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-009
    transition: 4
    from: queued
    to: failed
    trigger: The failure helper settles execution before generation starts.
    source: 'services-platform:modules/data-exports/services/persistence/executions.ts:markFailed'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-009
    transition: 5
    from: queued
    to: cancelled
    trigger: The cancellation helper is called for queued work.
    source: 'services-platform:modules/data-exports/services/persistence/executions.ts:markCancelled'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-009
    transition: 6
    from: running
    to: cancelled
    trigger: The cancellation helper is called for running work.
    source: 'services-platform:modules/data-exports/services/persistence/executions.ts:markCancelled'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-010
    transition: 1
    from: available
    to: expired
    trigger: The expiry helper is called after a due-artifact read.
    source: 'services-platform:modules/data-exports/services/persistence/artifacts.ts (listDueArtifacts)'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-010
    transition: 2
    from: available
    to: deleted
    trigger: The early-deletion helper is called.
    source: 'services-platform:modules/data-exports/services/persistence/artifacts.ts'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-011
    transition: 1
    from: pending
    to: delivering
    trigger: Future processing calls the transfer-start helper.
    source: 'services-platform:modules/data-exports/services/persistence/deliveries.ts'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-011
    transition: 2
    from: failed
    to: delivering
    trigger: Future retry processing calls the transfer-start helper.
    source: 'services-platform:modules/data-exports/services/persistence/deliveries.ts'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-011
    transition: 3
    from: delivering
    to: delivered
    trigger: The accepted-outcome helper is called.
    source: 'services-platform:modules/data-exports/services/persistence/deliveries.ts:markDelivered'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-011
    transition: 4
    from: delivering
    to: failed
    trigger: The failure helper is called.
    source: 'services-platform:modules/data-exports/services/persistence/deliveries.ts'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-011
    transition: 5
    from: pending
    to: withheld
    trigger: Processing marks an unavailable destination withheld.
    source: 'services-platform:modules/data-exports/services/persistence/deliveries.ts'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-011
    transition: 6
    from: pending
    to: expired
    trigger: Package cleanup calls expiry for pending delivery.
    source: 'services-platform:modules/data-exports/services/persistence/deliveries.ts'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-011
    transition: 7
    from: failed
    to: expired
    trigger: Package cleanup calls expiry for failed delivery.
    source: 'services-platform:modules/data-exports/services/persistence/deliveries.ts'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-011
    transition: 8
    from: withheld
    to: expired
    trigger: Package cleanup calls expiry for withheld delivery.
    source: 'services-platform:modules/data-exports/services/persistence/deliveries.ts'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-011
    transition: 9
    from: failed
    to: superseded
    trigger: The supersession helper is called.
    source: 'services-platform:modules/data-exports/services/persistence/deliveries.ts'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-012
    transition: 1
    from: active
    to: active
    trigger: Activation supplies a new schema release for the dataset.
    source: 'services-platform:modules/data-exports/services/export-coverage/reconcile-coverage.ts:planCoverage'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-012
    transition: 2
    from: active
    to: retired
    trigger: An explicit dataset declaration list omits an existing dataset.
    source: 'services-platform:modules/data-exports/services/export-coverage/reconcile-coverage.ts'
    gap: FND-PFM-QRY-068
  - state: STATE-PFM-QRY-012
    transition: 3
    from: retired
    to: active
    trigger: Activation declares a retired dataset again.
    source: 'services-platform:modules/data-exports/services/export-coverage/reconcile-coverage.ts'
    gap: FND-PFM-QRY-068
unproved_rules: []
---

# Request a portable workspace data package: Capability Test Specification

## Coverage

| Rule | Scenario or Finding |
|---|---|
| `BR-CAP-PFM-QRY-018-01` | `ATS-PFM-QRY-018-01` |
| `BR-CAP-PFM-QRY-018-02` | `ATS-PFM-QRY-018-02` |
| `BR-CAP-PFM-QRY-018-03` | `ATS-PFM-QRY-018-03` |
| `BR-CAP-PFM-QRY-018-04` | `ATS-PFM-QRY-018-04` |
| `BR-CAP-PFM-QRY-018-05` | `ATS-PFM-QRY-018-05` |
| `BR-CAP-PFM-QRY-018-06` | `ATS-PFM-QRY-018-06` |
| `BR-CAP-PFM-QRY-018-07` | `ATS-PFM-QRY-018-07` |
| `BR-CAP-PFM-QRY-018-08` | `ATS-PFM-QRY-018-08`, `ATS-PFM-QRY-018-15`, `ATS-PFM-QRY-018-16`, `ATS-PFM-QRY-018-17` |
| `BR-CAP-PFM-QRY-018-09` | `ATS-PFM-QRY-018-09` |
| `BR-CAP-PFM-QRY-018-10` | `ATS-PFM-QRY-018-10` |
| `BR-CAP-PFM-QRY-018-11` | `ATS-PFM-QRY-018-11` |
| `BR-CAP-PFM-QRY-018-12` | `ATS-PFM-QRY-018-12` |
| `BR-CAP-PFM-QRY-018-13` | `ATS-PFM-QRY-018-13` |

## Interactions With Related Capabilities

The combined examples change a source, its audience or its retained state before checking the dependent outcome. Unbound examples remain proposed, and the coverage finding retains design obligations that these examples do not establish.

| Related Capability | Scenario |
|---|---|
| Journey dependency | `ATS-PFM-QRY-018-14` |
| `CAP-PFM-QRY-014` | `ATS-PFM-QRY-018-15` |
| `CAP-PFM-QRY-017` | `ATS-PFM-QRY-018-16` |
| `CAP-PFM-QRY-019` | `ATS-PFM-QRY-018-17` |

## Evidence and Binding Limits

The source revisions pin the inspected assertions. A test binding identifies written assertions, and does not establish a successful run or approval of the expected behavior.
