---
id: SCR-PFM-OPS-001
title: Scheduled Jobs
product_area: platform
module: operations
revision: 1
status: draft
design_intent: confirmed
implementation_evidence: observed
inference: []
origin: >-
  services-platform:docs/jobs.md#A tenant's job runs (2026-10-16) (Andrew, 2026-10-16);
  react-console:components/console/nav-config.ts:maintenanceArea (Andrew, 2026-10)
route: '/console/{tenantId}/maintenance/scheduled-jobs'
surface: console
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
purpose: Provide read-only inspection of all compatible service jobs for the selected workspace.
supports:
  - JNY-PFM-OPS-001
  - CAP-PFM-OPS-005
  - CAP-PFM-OPS-007
permission: maintenance.scheduled-jobs.view (console alias of platform.jobs.read)
entry_from:
  - 'Maintenance in the user menu, which opens the Maintenance area’s first screen'
  - The Maintenance area menu
exits_to:
  - Other Maintenance area screens through the area menu
displays:
  - field: Job type and owning application
    source: listJobKindsOfTenant (label and application)
  - field: 'About (subject) and, for a failed run, its failure summary'
    source: 'listJobsOfTenant (subject, failureSummary)'
  - field: Status badge
    source: listJobsOfTenant (status)
  - field: 'Started (relative, exact on hover) and duration'
    source: 'listJobsOfTenant (startedAt, settledAt)'
  - field: 'Started By, or Scheduled for work the system started'
    source: listJobsOfTenant (requestedBy)
  - field: Job type filter with a count per type
    source: listJobKindsOfTenant and countJobsOfTenant per kind
  - field: 'Run panel: status, times, duration, starter, failure panel, step timeline and history'
    source: getJobOfTenant (refreshed while active)
actions:
  - label: Filter by job type or status
    operation_id: listJobsOfTenant
    permission: platform.jobs.read
    confirm: false
  - label: Refresh
    operation_id: listJobsOfTenant
    permission: platform.jobs.read
    confirm: false
  - label: Load more
    operation_id: listJobsOfTenant
    permission: platform.jobs.read
    confirm: false
  - label: Open a run
    operation_id: getJobOfTenant
    permission: platform.jobs.read
    confirm: false
states:
  - loading (skeleton rows)
  - refreshing (dimmed rows with a loading line)
  - 'empty (No Job Runs Found, with a hint when filtered)'
  - error with retry
  - run panel loading and error with retry
  - access denied and no menu link without the permission
validation:
  - BR-CAP-PFM-OPS-005-01
  - BR-CAP-PFM-OPS-005-03
  - BR-CAP-PFM-OPS-005-04
  - BR-CAP-PFM-OPS-005-06
  - BR-CAP-PFM-OPS-005-07
  - BR-CAP-PFM-OPS-005-08
  - BR-CAP-PFM-OPS-005-09
  - BR-CAP-PFM-OPS-005-10
  - BR-CAP-PFM-OPS-007-04
  - BR-CAP-PFM-OPS-007-05
patterns:
  - PageLayout with Standard width
  - PageHeader
  - FilterSelect
  - design-system Table with Badge
  - Sheet (right-hand run panel)
  - LoadMore keyset paging
  - 'TableSkeletonRows, ListEmpty and CardError states'
  - shared job step timeline and event log components
component: components/maintenance/job-runs-screen.tsx; lib/maintenance/use-job-runs.ts
evidence:
  - >-
    react-console at baf6dae: app/(console)/console/[tenantId]/maintenance/**,
    components/configuration/area-route.tsx (maintenanceAreaRoute), components/console/nav-config.ts
    (maintenanceArea), components/maintenance/job-runs-screen.tsx, lib/maintenance/use-job-runs.ts;
    e2e/mock/maintenance-job-runs.mock.spec.ts.
  - 'services-platform at ad3f6a6: modules/jobs/aws/api/jobs.routes.ts.'
  - >-
    codex examination 2026-10-23: checked the pinned source anchors, planning references and enforcement
    boundaries; unresolved limits are recorded in module findings.
controls: [TC-AVL-001, TC-AVL-004, TC-AVL-005, 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-002, TC-IAM-004, TC-IAM-005, TC-IAM-006, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-MON-001, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---

# Scheduled Jobs

## What the Screen Is For

Scheduled Jobs lets an authorized workspace administrator inspect background runs across Rhythm services. Maintenance opens this screen directly. The screen offers inspection rather than execution management.

## What It Shows and Lets People Do

Rows show kind and application, subject, status, start, duration and resolved requester, with automatic work labelled Scheduled. Failed runs include a short explanation. Kind and status filters, per-kind counts, manual refresh and further pages help narrow the list. Opening a row displays a right-hand run panel containing outcome, steps, attempts and history; active detail refreshes every five seconds.

## States and Errors

Initial loading uses skeleton rows, and refresh keeps existing rows dimmed. Empty results show No Job Runs Found, with a filter hint when relevant. List and detail failures provide their own retry actions. Missing jobs-read authority removes navigation and renders Access Denied. The internal workspace wording in the description remains a finding.

## Patterns It Must Respect

The built screen uses Standard PageLayout, PageHeader, FilterSelect, Table, Badge and Sheet. LoadMore uses cursor paging, and shared job timeline and history components provide detail. Existing implementation supplies the component evidence without establishing design approval.
