---
id: CAP-PFM-OPS-007
title: Inspect jobs across Rhythm services
feature: FEAT-PFM-OPS-01
product_area: platform
module: operations
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes: []
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  macroservice-libraries: 54536a441935c6e09fdb7f96f0bec71c52ba4e03
intent_sources: []
purpose: Combine compatible job records from different services into the same operational view.
outcomes:
  - Published services’ jobs participate in shared monitoring.
  - Subjects retain wording supplied by the owning service.
concepts:
  - CON-PFM-OPS-001
actors:
  - ACT-PFM-006
  - ACT-PFM-001
  - ACT-PFM-005
surfaces:
  - api
  - job
preconditions:
  - The publishing service exposes all three compatible views and required columns.
postconditions:
  - Published jobs remain readable and pageable in Platform without Platform changing them.
permissions: []
rules:
  - id: BR-CAP-PFM-OPS-007-01
    proved_by: [ATS-PFM-OPS-007-01, ATS-PFM-OPS-007-08, TST-PFM-OPS-074]
    statement: >-
      Services publish compatible job, step and event views that Platform combines into shared list, count,
      snapshot and pagination results.
    kind: policy
    enforced_at:
      - database
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/jobs/tests/integration/services/snapshots/cross-service-jobs.integration.spec.js#pages
      across the two macroservices, the cursor of one continuing into the other
    origin: none
  - id: BR-CAP-PFM-OPS-007-02
    proved_by: [ATS-PFM-OPS-007-02, TST-PFM-OPS-074]
    statement: Schema discovery excludes a service missing any required view or contract column.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/jobs/tests/integration/services/snapshots/cross-service-jobs.integration.spec.js#does
      not find a schema that holds the same job and publishes no view
    origin: none
  - id: BR-CAP-PFM-OPS-007-03
    proved_by: [ATS-PFM-OPS-007-03, ATS-PFM-OPS-007-07, TST-PFM-OPS-074]
    statement: >-
      Platform reads another service’s jobs without changing them and applies the same caller scope and
      published step-definition rules.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/jobs/tests/integration/services/snapshots/cross-service-jobs.integration.spec.js#applies
      the caller’s scope to it, as to a job of Platform’s own
    origin: none
  - id: BR-CAP-PFM-OPS-007-04
    proved_by: [ATS-PFM-OPS-007-04, TST-PFM-OPS-066]
    statement: >-
      Job subjects use wording published by the owning service, and monthly snapshot subjects include the
      month inside a workspace but omit it across workspaces.
    kind: calculation
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/jobs/tests/e2e/jobs-tenant-runs.e2e.spec.js#names the snapshot run by its
      snapshot alone when the list is read across tenants
    origin: none
  - id: BR-CAP-PFM-OPS-007-05
    proved_by: [ATS-PFM-OPS-007-05, TST-PFM-OPS-078]
    statement: >-
      A shared catalog supplies job labels and application names, with an unknown kind receiving a readable
      fallback based on its identifier and service schema.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/jobs/tests/unit/job-kind-labels.spec.js#humanises an unknown kind and
      attributes it to the application of its schema
    origin: none
  - id: BR-CAP-PFM-OPS-007-06
    proved_by: [ATS-PFM-OPS-007-06, TST-PFM-OPS-076]
    statement: >-
      Registered Platform kinds must be represented in current job views and labeling coverage, with tests
      checking the view definition against its latest migration.
    kind: invariant
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/jobs/tests/unit/cross-job-query.view.spec.js#registers exactly the Platform
      job kinds, so none is invisible to the reconciler
    origin: none
  - id: BR-CAP-PFM-OPS-007-07
    proved_by: []
    statement: >-
      A process caches discovery of publishing services, so newly published views become visible when a fresh
      Platform process discovers them.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: documented
    source: >-
      services-platform:docs/jobs.md#Every macroservice's jobs in one list (the cross-service contract,
      2026-10-12)
    origin: none
scenarios:
  - id: SC-CAP-PFM-OPS-007-01
    given: A service publishes a merge job while Platform publishes another run for the same workspace.
    when: The workspace’s jobs are listed.
    then: Both jobs appear together with the merge subject supplied by its owning service.
    provenance: inferred
    source: >-
      services-platform:modules/jobs/tests/integration/services/snapshots/cross-service-jobs.integration.spec.js#names
      the job in the owning macroservice’s own words, which is its subject
    note: >-
      This illustrative example combines behavior established by the cited test and the capability’s
      implementation evidence; it is not an independently bound end-to-end proof.
edge_cases:
  - id: SC-CAP-PFM-OPS-007-02
    given: A published kind has no entry in the label catalog.
    when: Platform includes it in a job list.
    then: Its readable fallback name and service application are returned.
    provenance: inferred
    source: >-
      services-platform:modules/jobs/tests/unit/job-kind-labels.spec.js#humanises an unknown kind and
      attributes it to the application of its schema
    note: >-
      This illustrative example combines behavior established by the cited test and the capability’s
      implementation evidence; it is not an independently bound end-to-end proof.
constraints:
  - Published views execute with the caller’s database privileges and remain subject to their row policies.
depends_on:
  - CAP-PFM-OPS-001
related:
  - CAP-PFM-OPS-005
  - CAP-PFM-OPS-006
journeys:
  - JNY-PFM-OPS-001
open_questions: []
evidence:
  - >-
    services-platform at ad3f6a6: modules/jobs/db/cross-job-query.view.ts, services/persistence/jobs.ts,
    services/subjects/job-row-subjects.ts, services/kinds/job-kind-labels.ts; cross-service-jobs and
    cross-job-query integration suites; cross-job-query.view and job-kind-labels unit suites; docs/jobs.md §5.
  - >-
    macroservice-libraries at 54536a4: persistence/cross-job-query.view.ts, cross-job-history.views.ts,
    job-view-schemas.ts; cross-job-schemas integration suite.
  - >-
    services-platform at ad3f6a6, tables named by this capability: the views cross_job_query, cross_job_steps
    and cross_job_events (cross-job-query.view.ts).
  - >-
    Examination: proposed acceptance matrices retain candidate test references; incomplete proof is recorded
    by FND-PFM-OPS-028.
controls: [TC-AVL-001, TC-AVL-004, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-006, TC-CHG-001, TC-CHG-002, TC-CHG-003, TC-CHG-004, TC-CHG-005, TC-CHG-006, TC-CHG-007, TC-IAM-001, TC-IAM-006, TC-LOG-002, TC-LOG-003, TC-LOG-005, TC-MON-001, TC-PI-001, TC-PI-002, TC-PI-004, TC-PI-005, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-VEN-001, TC-VEN-002, TC-VEN-003]
exercised_by: [FAS-PFM-OPS-01-01, FAS-PFM-OPS-01-04]
suites: [TST-PFM-OPS-066, TST-PFM-OPS-074, TST-PFM-OPS-076, TST-PFM-OPS-078]
---

# Inspect jobs across Rhythm services

## Purpose

Combine compatible job records from different services into the same operational view.

## How It Works

Each service publishes the same three compatible views of its job records. Platform discovers those views and reads them alongside its own families. Lists and pagination use one order across the discovered services. A job’s owning service supplies its subject and publishes the step definition in history. Platform can therefore present the job without installing its workflow implementation. Caller scope still restricts every read. Incomplete view contracts are excluded from discovery. New publishers become visible when a fresh process refreshes discovery.

## Relationships

The job record supports reconciliation, notices and both monitors; owning modules retain responsibility for the work itself.
