---
path: /studio/isis/job-management
surface: studio
domain: isis
auth: signed-in + studio entitlement (NOT AAA-gated)
source: apps/oshun/web/src/app/studio/isis/job-management/page.tsx
status: walked
last_walked:
  '2026-07-01 real-infra Playwright route journey — Studio-boundary hard-block,
  localhost lane bypass, live `/v1/generation/jobs` list/process/retry, filters,
  job detail, loading/empty/error/malformed/unauthorized/anonymous states, route
  map, quick-actions, 44px hit targets, and shared axe gate. Evidence:
  apps/oshun/web/e2e/studio-isis-job-management.spec.ts and
  WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md#256-2026-07-01-studio-isis-job-management-coverage'
---

# Studio · Isis · Job Management

## Purpose

Admin lane console for the generation job queue. It reads the live queue, lets
the operator filter and inspect a job's request / result / error, drain the
queue with a worker tick, and re-queue a failed job. Reads the queue via
`/v1/generation/jobs` and acts via `/v1/generation/jobs/process` and per-job
`/v1/generation/jobs/{jobId}/retry`; admin-scoped, fail-closed
(`provider_not_configured` when creds are absent).

## Entry points

- Sibling quick-action from `/studio/isis/job-submission`
- Studio index (`/studio`)
- Direct URL / bookmark

## Layout regions

`page.tsx` mounts `<ShellLayout active="studio">` (no breadcrumb panel) and
three panels: the workspace, the Route Map, and sibling quick-actions.

- **Header**: shell header
- **Workspace panel** (`data-isis-job-management-workspace`):
  - `<h1>` (`WorkspaceHeading`) "Isis Job Management Workspace"
  - Summary paragraph (`data-isis-job-management-summary`) and per-status counts
    (`data-jobs-status-count`) for queued / running / complete / failed /
    blocked / needs_review
  - Filters: search (`data-jobs-search`), Status (`data-jobs-status-filter`),
    Kind (`data-jobs-kind-filter`)
  - Job list (`data-jobs-list`, `data-jobs-row` with `data-jobs-row-status`);
    empty state `data-jobs-list-empty`
  - Job detail (`data-jobs-detail`, `data-jobs-detail-result` /
    `data-jobs-detail-error`)
  - Process-queue button (`data-jobs-process`) and action result
    (`data-jobs-action-result`, `data-jobs-action-status`)
- **Route Map panel** (`data-isis-job-management-route-map`):
  `<h2>Route Map</h2>` over the route map (5 entries)
- **Sibling quick-actions panel**: `/studio/isis/job-submission`, `/studio`

## States

- [x] **Loading** — `data-jobs-loading`
- [x] **Unauthorized** — 401/403 admin-scope fail-closed;
      `data-jobs-unauthorized` ("Isis workspace scope required to manage the
      generation queue.")
- [x] **Error** — non-OK / malformed; `data-jobs-error`
- [x] **Ready (queue)** — list + filters + detail render
- [x] **Empty** — no jobs match filters; `data-jobs-list-empty`
- [x] **Result** — process/retry result (`data-jobs-action-result`)

## Interactions

### Queue actions

- [x] **Status / Kind filters** (`data-jobs-status-filter`,
      `data-jobs-kind-filter`; "All" + per-value options) and search
      (`data-jobs-search`)
- [x] **Process queue** (`data-jobs-process`) — posts `{ max: 25 }` to
      `/v1/generation/jobs/process` (worker tick)
- [x] **Re-queue this job** (`data-jobs-retry`) — posts to
      `/v1/generation/jobs/{jobId}/retry` for the selected job
- [x] Selecting a row populates the detail panel ("Select a job to inspect its
      request, result, and error.")

### Route Map

- [x] **Route-map articles** ×5

### Sibling quick-actions

- [x] **Open Isis Job Submission workspace** → `/studio/isis/job-submission`
- [x] **Back to Studio workspace index** → `/studio`

## Data & contracts

- **Reads**: `GET /v1/generation/jobs` (live queue)
- **Writes**: `POST /v1/generation/jobs/process`;
  `POST /v1/generation/jobs/{jobId}/retry`
- **Realtime**: none
- **Caching**: client fetch on mount, `cache: 'no-store'`,
  `buildBffAuthHeaders()`
- **Auth/role check**: admin-scoped, fail-closed (401/403); route signed-in +
  studio entitlement (not AAA-gated)
- **Component sources**:
  - `apps/oshun/web/src/components/studio/StudioIsisJobManagementWorkspace.tsx`
  - `apps/oshun/web/src/components/studio/StudioIsisJobManagementRouteMap.ts`

## Cross-references

- Studio overview: [`../../studio-overview.md`](../../studio-overview.md)
- Sibling routes:
  - [`studio-isis-job-submission.md`](./studio-isis-job-submission.md)
  - [`studio-isis-job-envelope.md`](./studio-isis-job-envelope.md)

## Automated coverage

- `apps/oshun/web/e2e/studio-isis-job-management.spec.ts` drives the direct
  hard-block, localhost-only lane bypass, live BFF list/process/retry, filters,
  selected detail, route-map, quick-actions, loading/empty/error/malformed,
  unauthorized, anonymous redirect, 44px hit targets, and shared axe gate.
- `apps/oshun/bff/src/generation/jobs-route.test.ts` covers the generation job
  route contract, including admin gating, status filters, fail-closed
  `provider_not_configured`, release-gate `blocked` / `needs_review` outcomes,
  retry success, retry 409, and unknown-job 404.

## Open questions / known gaps

- [x] No breadcrumb on this route — navigation via sibling quick-actions
- [x] This lane targets the live `/v1/generation/jobs` queue (not an
      `/v1/admin/isis/...` catalog) — fails closed when the provider is not
      configured
- [ ] Route-map sub-paths are declared but not yet implemented as separate pages
- [ ] Manual AT, real touch-device, offline replay, and telemetry-delivery
      passes remain product-hardening items beyond this automated route journey
