---
id: SCR-PFM-OPS-003
title: Rhythm HQ job page
product_area: platform
module: operations
revision: 1
status: draft
design_intent: confirmed
implementation_evidence: partially-observed
inference: []
origin: 'services-platform:docs/hq/rhythm-hq-plan.md#D12 (approved K8)'
route: '/hq/jobs/{jobKind}/{jobId}'
surface: console
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
purpose: Support staff inspection of one job and the implemented workspace-provisioning retry control.
supports:
  - JNY-PFM-OPS-002
  - CAP-PFM-OPS-006
  - CAP-PFM-OPS-004
  - CAP-PFM-OPS-003
permission: hq.jobs.read (the page itself admits any Rhythm staff member)
entry_from:
  - Rhythm HQ Jobs list
  - Rhythm HQ home recent jobs card
  - Completion of the workspace provisioning wizard
  - The link in a requester notice e-mail
exits_to:
  - Rhythm HQ Jobs list (Back to Jobs)
  - The subject workspace’s Rhythm HQ page
displays:
  - field: 'Progress ring, step number of total, or Queued for a job not started'
    source: 'getJobInHq (status, progress, steps)'
  - field: 'Label, subject linked to its workspace, start time and requester'
    source: 'getJobInHq (kind label, subject, startedAt, requestedBy)'
  - field: Failure panel
    source: 'getJobInHq (failureSummary, failureReference)'
  - field: Step timeline with attempts and per-step times
    source: 'getJobInHq (steps, catalog)'
  - field: 'Event log, loaded further on request'
    source: listJobEventsInHq
  - field: Stalled-work warning with refresh
    source: a staleness flag the backend does not return (never shown for real jobs)
actions:
  - label: Retry Provisioning
    operation_id: retryTenantProvisioning (workspace lifecycle)
    permission: shown under hq.jobs.retry; the operation requires hq.tenants.provision
    confirm: true
  - label: Load more events
    operation_id: listJobEventsInHq
    permission: hq.jobs.read
    confirm: false
  - label: Retry loading
    operation_id: getJobInHq
    permission: hq.jobs.read
    confirm: false
states:
  - loading
  - Job Not Found
  - error with retry
  - active (polled every five seconds)
  - settled
  - retry dialog pending and error
validation:
  - BR-CAP-PFM-OPS-006-06
  - BR-CAP-PFM-OPS-006-07
  - BR-CAP-PFM-OPS-006-08
  - BR-CAP-PFM-OPS-006-09
  - BR-CAP-PFM-OPS-004-08
  - BR-CAP-PFM-OPS-003-07
patterns:
  - PageLayout with Standard width
  - PageHeader
  - AlertDialog confirmation
  - shared job step timeline and event log components
  - LoadingIndicatorPanel and CardError states
  - StaffOnly wrapper
component: 'components/console/hq/job/*; lib/hq/use-hq-ops.ts, job-snapshot.ts'
evidence:
  - >-
    react-console at baf6dae: app/(console)/hq/jobs/[kind]/[id]/page.tsx, components/console/hq/job/*
    (job-detail, job-header, job-retry, job-stale-banner, job-step-timeline, job-event-log,
    job-failure-panel), lib/hq/use-hq-ops.ts, job-snapshot.ts, permissions.ts; e2e/mock/hq-ops.mock.spec.ts.
  - >-
    services-platform at ad3f6a6: modules/jobs/aws/api/jobs.routes.ts;
    modules/tenants/aws/api/tenants.routes.ts:retryTenantProvisioning.
  - >-
    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-005, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-DAT-004, TC-IAM-001, TC-IAM-002, TC-IAM-003, 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-MON-002, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---

# Rhythm HQ Job Page

## What the Screen Is For

The HQ detail page follows one run through execution and final outcome. Workspace provisioning navigates here, and requester messages use this destination.

## What It Shows and Lets People Do

The header presents progress, step position, subject link, start and requester. Pending work appears Queued. Failure includes a safe explanation and diagnostic reference. The shared timeline exposes attempts and timing, and the event log loads further history. Retry Provisioning is offered when a failed kind contains provisioning and its subject names a workspace; the service still decides whether that workspace is eligible.

## States and Errors

Active detail polls every five seconds. A missing run shows Job Not Found, and other read errors offer retry. The retry dialog uses the jobs-retry permission, while the called route requires provisioning authority. The stalled banner depends on a response flag absent from actual backend answers, so that warning has no real-source trigger.

## Patterns It Must Respect

The built page uses Standard PageLayout, PageHeader, the shared timeline and event log, AlertDialog, LoadingIndicatorPanel, CardError and StaffOnly.
