---
id: ATS-PFM-QRY-017
scope: CAP-PFM-QRY-017
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-017-01
    title: Search administration uses separate powers
    level: api
    proves:
      - BR-CAP-PFM-QRY-017-01
    preconditions: 'Callers have different read, update and rebuild grants and some lack dataset access.'
    steps: 'Exercise configuration listing, changes and rebuilds.'
    expected: Each power reaches its own operation; absent dataset access prevents administration and hides the type.
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses the
        configuration list to a caller holding only the Quick Search lookup
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses a
        write to a caller who may only read the settings
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses a
        rebuild to a caller who may change the field list, which is a different power
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses a
        field-list change to a caller who may only ask for a rebuild
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses the
        whole configuration surface to an administrator who may query no dataset
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#leaves out
        the dataset a caller may not query, rather than refusing the list
      - TST-PFM-QRY-418
    provenance: test
    source: >-
      services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses the
      configuration list to a caller holding only the Quick Search lookup
    category: permission
  - id: ATS-PFM-QRY-017-02
    title: Defaults do not create indexing resources
    level: api
    proves:
      - BR-CAP-PFM-QRY-017-02
      - INV-DOM-PFM-QRY-005-08
    preconditions: The workspace has no stored search configuration.
    steps: Read its configurations.
    expected: Default fields and zero version are returned without provisioning or writes.
    negative: false
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#answers
        version 0, which is the version no tenant ever wrote
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#says the
        index is unprovisioned, with no generation on either side
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#wrote
        nothing: reading what a tenant would get does not provision it
      - TST-PFM-QRY-418
    provenance: test
    source: >-
      services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#answers version
      0, which is the version no tenant ever wrote
    category: rule
  - id: ATS-PFM-QRY-017-03
    title: Invalid field configuration is reported together
    level: api
    proves:
      - BR-CAP-PFM-QRY-017-03
      - INV-DOM-PFM-QRY-005-06
    preconditions: 'Lists contain unknown, forbidden, unsupported and incorrectly ranked fields.'
    steps: Save individual invalid lists and a combined invalid list.
    expected: Refusals locate each problem and the combined refusal reports all without writing.
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses a
        field the dataset does not offer, naming the field
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses a
        field the record type’s owner never indexes, repeating the owner’s reason
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses a
        tier outside the three there are
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses an
        empty field list, which would index nothing at all
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#reports every
        problem of a list in one refusal, so one round trip fixes them all
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#wrote nothing
        while refusing all of that
      - TST-PFM-QRY-418
    provenance: test
    source: >-
      services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses a field
      the dataset does not offer, naming the field
    category: validation
  - id: ATS-PFM-QRY-017-04
    title: Configuration changes atomically record owed work
    level: api
    proves:
      - BR-CAP-PFM-QRY-017-04
      - INV-DOM-PFM-QRY-005-02
    preconditions: A record type already has configuration.
    steps: 'Submit changed, identical and stale-version field lists.'
    expected: >-
      The changed target and rebuild are recorded, the identical list spends no version and the stale request
      conflicts.
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#moves the
        index target to the generation and version the indexer must write
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#committed the
        target beside it, so the configuration and the rebuild it owes are one fact
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#spends no
        version when the same list is sent again, and owes no rebuild
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses the
        version the client read when the configuration has moved on
      - TST-PFM-QRY-418
    provenance: test
    source: >-
      services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#moves the index
      target to the generation and version the indexer must write
    category: concurrency
  - id: ATS-PFM-QRY-017-05
    title: Concurrent rebuild jobs preserve their grain
    level: api
    proves:
      - BR-CAP-PFM-QRY-017-05
      - INV-DOM-PFM-QRY-005-03
    preconditions: One full rebuild is open for a record type.
    steps: Open another full job and a related-record job.
    expected: The duplicate full job is refused while related work can coexist.
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/quick-search/tests/integration/db/quick-search-rebuild-jobs.table.integration.spec.js#refuses
        a second open full rebuild of the same record type
      - >-
        services-platform:modules/quick-search/tests/integration/db/quick-search-rebuild-jobs.table.integration.spec.js#accepts
        a related rebuild beside an open full one, because it moves no generation
      - >-
        services-platform:modules/quick-search/tests/integration/services/persistence/rebuild-jobs.integration.spec.js#answers
        the tenant’s open full rebuild, which is the job a further request coalesces onto
      - TST-PFM-QRY-423
      - TST-PFM-QRY-445
    provenance: test
    source: >-
      services-platform:modules/quick-search/tests/integration/db/quick-search-rebuild-jobs.table.integration.spec.js#refuses
      a second open full rebuild of the same record type
    category: concurrency
    binding_note: >-
      The cited suites contribute separate assertions. The complete combined example is not a single
      executable journey.
  - id: ATS-PFM-QRY-017-06
    title: Deleted projections remove provider documents
    level: api
    proves:
      - BR-CAP-PFM-QRY-017-06
    preconditions: A previously indexed record disappears from its owner.
    steps: Process its change event.
    expected: The provider document is removed without retaining a provider tombstone.
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#removes
        the document of a record the projection no longer finds, leaving no tombstone in the provider
      - TST-PFM-QRY-433
    provenance: test
    source: >-
      services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#removes
      the document of a record the projection no longer finds, leaving no tombstone in the provider
    category: invariant
  - id: ATS-PFM-QRY-017-07
    title: Related contacts refresh after organization changes
    level: api
    proves:
      - BR-CAP-PFM-QRY-017-07
    preconditions: An organization has current and ended affiliates plus linked addresses.
    steps: Rename it and change its linked address.
    expected: Current affiliates and linked contacts refresh while ended affiliations do not.
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#re-indexes
        the contacts of the organization, so each hit shows the name the organization has now
      - >-
        services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#re-indexes
        only the contacts with a current affiliation to that organization, not one whose affiliation ended
      - >-
        services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#re-indexes
        the linked contact, so its hit shows the city the organization’s address has now
      - TST-PFM-QRY-433
    provenance: test
    source: >-
      services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#re-indexes
      the contacts of the organization, so each hit shows the name the organization has now
    category: interaction
  - id: ATS-PFM-QRY-017-08
    title: Provider failure remains workspace-specific
    level: api
    proves:
      - BR-CAP-PFM-QRY-017-08
    preconditions: 'One event batch spans failing, unprovisioned, deleting and healthy workspaces.'
    steps: Process the complete batch.
    expected: Only the failing workspace’s events fail; others settle and healthy documents are written.
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#fails
        every event of the tenant whose write was refused, so CRM redelivers exactly those
      - >-
        services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#writes
        the other tenant’s document, so one tenant’s provider failure stops nothing else
      - >-
        services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#settles
        the unprovisioned tenant’s events, so its queue drains instead of retrying forever
      - >-
        services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#settles
        the events of the tenant being deleted, because its records are on their way out
      - TST-PFM-QRY-433
    provenance: test
    source: >-
      services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#fails
      every event of the tenant whose write was refused, so CRM redelivers exactly those
    category: failure
  - id: ATS-PFM-QRY-017-09
    title: Retired fields remain visible for repair
    level: api
    proves:
      - BR-CAP-PFM-QRY-017-09
    preconditions: A configured indexed custom field is archived.
    steps: 'Read settings and available fields, then attempt to retain it in a save.'
    expected: 'The field is unavailable, degradation and owed rebuilding are visible, and the save fails.'
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#answers the
        archived field in place, as unavailable with the reason a screen shows
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#reports the
        same field as degraded on the index, which is what the archive recorded there
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#targets a
        generation beyond the one in force, which is the rebuild the archive asked for
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses a
        field list that keeps the archived field, by the rule any ineligible field is refused by
      - TST-PFM-QRY-418
    provenance: test
    source: >-
      services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#answers the
      archived field in place, as unavailable with the reason a screen shows
    category: edge
  - id: ATS-PFM-QRY-017-10
    title: Repair and deletion retention honor time bounds
    level: api
    proves:
      - BR-CAP-PFM-QRY-017-10
    preconditions: A target remains unsatisfied and deletion counters straddle their retention boundary.
    steps: Repeat resubmission within and beyond an hour and run counter purge.
    expected: Automatic work respects hourly backoff and only sufficiently old counters are removed.
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        services-platform:modules/quick-search/tests/integration/services/maintenance/resubmit-targets.integration.spec.js#submits
        nothing on a second pass in the same hour
      - >-
        services-platform:modules/quick-search/tests/integration/services/maintenance/resubmit-targets.integration.spec.js#submits
        again once the hour has passed and that rebuild has failed too
      - >-
        services-platform:modules/quick-search/tests/integration/services/maintenance/purge-tombstones.integration.spec.js#removes
        the counter of a record deleted a minute before the cutoff, which is the boundary from the expired
        side
      - >-
        services-platform:modules/quick-search/tests/integration/services/maintenance/purge-tombstones.integration.spec.js#keeps
        a deleted counter a minute newer than the cutoff, and its pre-D-29 tombstone, which is the boundary
        from the other side
      - TST-PFM-QRY-438
      - TST-PFM-QRY-435
    provenance: test
    source: >-
      services-platform:modules/quick-search/tests/integration/services/maintenance/resubmit-targets.integration.spec.js#submits
      nothing on a second pass in the same hour
    category: boundary
    binding_note: >-
      The cited suites contribute separate assertions. The complete combined example is not a single
      executable journey.
  - id: ATS-PFM-QRY-017-11
    title: Purge waits for in-flight rebuilding
    level: api
    proves:
      - BR-CAP-PFM-QRY-017-11
      - INV-DOM-PFM-QRY-005-07
    preconditions: A workspace has an open rebuild job.
    steps: Request its purge and allow the rebuild to settle.
    expected: Purge initially waits and subsequently removes all tracked workspace resources.
    negative: true
    data_needs: Use the existing binding’s controlled fixture data.
    bound_to:
      - >-
        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/quick-search/tests/integration/services/maintenance/tenant-participant.integration.spec.js#counts
        every resource of the purged tenant back to zero, the job tables among them
      - >-
        services-platform:modules/quick-search/tests/integration/services/maintenance/tenant-participant.integration.spec.js#leaves
        the purged tenant nothing in the index
      - TST-PFM-QRY-439
    provenance: test
    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
    category: transition
  - id: ATS-PFM-QRY-017-12
    title: Changed search fields need end-to-end publication proof
    level: browser
    proves:
      - AS-JNY-PFM-QRY-005-01
    preconditions: Contacts initially use default search fields.
    steps: 'Add a custom field, wait for publication and search that field from the dialog.'
    expected: The replacement generation becomes searchable; this complete browser proof is still proposed.
    negative: false
    data_needs: Prepare isolated fixtures for the states described here.
    bound_to: []
    provenance: proposed
    source: FND-PFM-QRY-029
    category: interaction
  - id: ATS-PFM-QRY-017-13
    title: Changing an indexed field changes the later lookup
    category: interaction
    level: browser
    exercises:
      - CAP-PFM-QRY-016
      - CAP-PFM-QRY-017
    proves:
      - BR-CAP-PFM-QRY-016-03
      - BR-CAP-PFM-QRY-017-04
    preconditions: A contact has a custom searchable value absent from the default field list.
    steps: 'Add the field, wait for its rebuild to finish, obtain search access and search for the custom value.'
    expected: >-
      The contact is found through the added field after indexing; provider visibility during rebuilding is
      inspected separately.
    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/e2e/quick-search-access.e2e.spec.js#provisions nothing a
        second time: searching again spends no version
      - >-
        services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#committed the
        target beside it, so the configuration and the rebuild it owes are one fact
  - id: ATS-PFM-QRY-017-14
    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-017-15
    title: Search cleanup and snapshot cleanup respect the same workspace boundary
    category: interaction
    level: api
    exercises:
      - CAP-PFM-QRY-017
      - CAP-PFM-QRY-019
    proves:
      - BR-CAP-PFM-QRY-017-11
      - BR-CAP-PFM-QRY-019-11
    preconditions: Two workspaces have search resources and retained monthly history.
    steps: 'Delete one workspace, wait for its rebuild to settle and run the cleanup participants to completion.'
    expected: The deleted workspace has no indexed documents or retained snapshot versions; the control keeps both.
    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/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
  - id: ATS-PFM-QRY-017-16
    title: A settings release owes exactly one replacement rebuild
    category: transition
    level: unit
    proves:
      - BR-CAP-PFM-QRY-017-12
    preconditions: The active generation meets its target but uses the preceding provider-settings release.
    steps: 'Run repair twice while rebuilding, finish the rebuild and run repair again.'
    expected: >-
      Repair advances the target once and submits one settings-triggered rebuild; after publication it submits
      no further work.
    negative: false
    data_needs: Use the suite’s isolated search scope and controlled rebuild operations.
    bound_to:
      - >-
        services-platform:modules/quick-search/tests/integration/services/maintenance/resubmit-targets.integration.spec.js#moves
        the target one generation forward, because only the target generation may activate and stamp the
        version
      - >-
        services-platform:modules/quick-search/tests/integration/services/maintenance/resubmit-targets.integration.spec.js#asks
        for no second rebuild while that one is open, reporting the open job instead
      - >-
        services-platform:modules/quick-search/tests/integration/services/maintenance/resubmit-targets.integration.spec.js#creates
        no further job once it has converged, so the backfill runs once and not every quarter of an hour
      - TST-PFM-QRY-438
    provenance: test
    source: >-
      services-platform:modules/quick-search/tests/integration/services/maintenance/resubmit-targets.integration.spec.js
evidence:
  - 'Pinned reference: FND-PFM-QRY-029'
  - 'Pinned reference: services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js'
  - >-
    Pinned reference:
    services-platform:modules/quick-search/tests/integration/db/quick-search-rebuild-jobs.table.integration.spec.js
  - >-
    Pinned reference:
    services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js
  - >-
    Pinned reference:
    services-platform:modules/quick-search/tests/integration/services/maintenance/purge-tombstones.integration.spec.js
  - >-
    Pinned reference:
    services-platform:modules/quick-search/tests/integration/services/maintenance/resubmit-targets.integration.spec.js
  - >-
    Pinned reference:
    services-platform:modules/quick-search/tests/integration/services/maintenance/tenant-participant.integration.spec.js
  - >-
    Pinned reference:
    services-platform:modules/quick-search/tests/integration/services/persistence/rebuild-jobs.integration.spec.js
coverage:
  rule: covered
  transition: 'gap: FND-PFM-QRY-067'
  validation: covered
  permission: covered
  edge: covered
  failure: covered
  boundary: covered
  concurrency: covered
  invariant: 'gap: FND-PFM-QRY-067'
  interaction: covered
coverage_findings:
  - FND-PFM-QRY-067
transition_obligations:
  - state: STATE-PFM-QRY-013
    transition: 1
    from: unprovisioned
    to: populating
    trigger: 'Provisioning, access or configuration creates the first scope.'
    source: 'services-platform:modules/quick-search/services/configuration/provision.ts'
    gap: FND-PFM-QRY-067
  - state: STATE-PFM-QRY-013
    transition: 2
    from: populating
    to: ready
    trigger: Initial rebuild completes its activation step.
    source: 'services-platform:modules/quick-search/services/rebuild/quick-search-rebuild-operations.ts'
    gap: FND-PFM-QRY-067
  - state: STATE-PFM-QRY-013
    transition: 3
    from: ready
    to: rebuilding
    trigger: Configuration or repair requires another generation.
    source: 'services-platform:modules/quick-search/services/rebuild/request-rebuild.ts:requestRebuild'
    gap: FND-PFM-QRY-067
  - state: STATE-PFM-QRY-013
    transition: 4
    from: rebuilding
    to: ready
    trigger: The target rebuild completes activation.
    source: 'services-platform:modules/quick-search/services/rebuild/quick-search-rebuild-workflow.ts'
    gap: FND-PFM-QRY-067
  - state: STATE-PFM-QRY-013
    transition: 5
    from: rebuilding
    to: rebuilding
    trigger: A rebuild fails or another target supersedes it.
    source: 'services-platform:modules/quick-search/services/maintenance/resubmit-targets.ts'
    gap: FND-PFM-QRY-067
  - state: STATE-PFM-QRY-013
    transition: 6
    from: ready
    to: removed
    trigger: Workspace purge removes a ready scope.
    source: 'services-platform:modules/quick-search/services/maintenance/tenant-participant.ts'
    gap: FND-PFM-QRY-067
  - state: STATE-PFM-QRY-013
    transition: 7
    from: rebuilding
    to: removed
    trigger: Workspace purge encounters an unfinished rebuild.
    source: 'services-platform:modules/quick-search/services/rebuild/quick-search-rebuild-operations.ts'
    gap: FND-PFM-QRY-067
unproved_rules: []
---

# Maintain the fields and freshness of Quick Search: Capability Test Specification

## Coverage

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

## 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-017-07` |
| Journey dependency | `ATS-PFM-QRY-017-12` |
| `CAP-PFM-QRY-016` | `ATS-PFM-QRY-017-13` |
| `CAP-PFM-QRY-018` | `ATS-PFM-QRY-017-14` |
| `CAP-PFM-QRY-019` | `ATS-PFM-QRY-017-15` |

## 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.
