Context. surface studio · domain isis · route /studio/isis/job-submission · auth signed-in + studio entitlement (NOT AAA-gated) · source apps/oshun/web/src/app/studio/isis/job-submission/page.tsx
Last walked. 2026-05-29 automated runtime walk (Playwright headless) — render, /v1 data (2xx), console/page-errors, expected content, screenshot verified; live screen-reader, touch, offline, and telemetry-delivery checks pending a manual AT pass. Evidence: WALKTHROUGH/results/runtime-sweep-2026-05-29.md; body re-derived 2026-06-03 from current source (lane-console architecture); 2026-07-01 addendum: studio-isis-job-submission.spec.ts proved the direct route remains hard-blocked by the Studio Isis boundary, then drove the localhost-only lane-bypass route against the real local BFF, including the real generation-type/priority catalog, valid envelope build, pending submit disablement, client JSON rejection, live BFF 400 and 422 validation errors, loading/error/malformed/unauthorized/anonymous states, route-map articles, sibling quick-actions, and 44px automated hit-target checks for form controls and quick-actions.
Purpose#
Admin lane console that wires the real @isis/job-envelope builder via
/v1/admin/isis/job-submission: it lists the valid generation types +
priorities and builds/validates a candidate job envelope through the real
createIsisJobEnvelope (strict zod). All reads and writes flow through
/v1/admin/isis/job-submission; it is admin-scoped and fails closed.
Entry points#
- Sibling quick-action from
/studio/isis/audio-generation - 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-submission-workspace):<h1>(WorkspaceHeading) "Isis Job Submission Workspace"- Summary paragraph (
data-isis-job-submission-summary) - "Build a job envelope" form (
data-job-build-form)
- Route Map panel (
data-isis-job-submission-route-map):<h2>Route Map</h2>overSTUDIO_ISIS_JOB_SUBMISSION_ROUTE_MAP(5 entries) - Sibling quick-actions panel:
/studio/isis/audio-generation,/studio
States#
- Loading —
data-job-loading - Unauthorized — 401/403 admin-scope fail-closed;
data-job-unauthorized - Error — non-OK or malformed catalog;
data-job-error - Ready (form) — catalog present; type + priority selects populated; input JSON textarea renders
- Result — after a build POST, a valid envelope renders in
data-job-envelope(data-job-envelope-id"jobId: …",data-job-envelope-priority"priority: …"); validation failures list indata-job-issues(eachdata-job-issue=<path>); build errors indata-job-build-error(e.g. "Input must be valid JSON.")
Interactions#
Build a job envelope (data-job-build-form)#
- Generation type (
data-job-field-type,<select>from the catalog's generation types) - Priority (
data-job-field-priority,<select>from the catalog's priorities) - Input (JSON) (
data-job-field-input,<textarea>) - Build envelope (
data-job-build-submit, submit; "Building…" while in flight) —POST /v1/admin/isis/job-submission/build
Route Map#
- Route-map articles ×5
Sibling quick-actions#
- Open Isis Audio Generation workspace →
/studio/isis/audio-generation - Back to Studio workspace index →
/studio
Data & contracts#
- Reads:
GET /v1/admin/isis/job-submission(valid generation types + priorities) - Writes:
POST /v1/admin/isis/job-submission/build(build + validate viacreateIsisJobEnvelope; returns the envelope or zod validation issues) - Realtime: none
- Caching: client fetch on mount,
cache: 'no-store',buildBffAuthHeaders() - Auth/role check: admin-scoped, fail-closed (401/403); route gated on signed-in + studio entitlement
- Component sources:
apps/oshun/web/src/components/studio/StudioIsisJobSubmissionWorkspace.tsxapps/oshun/web/src/components/studio/StudioIsisJobSubmissionRouteMap.ts
E2E coverage#
apps/oshun/web/e2e/studio-isis-job-submission.spec.ts— proves direct/studio/isis/job-submissionis still hard-blocked by the Studio Isis boundary, then drives the localhost-only?__oshunStudioIsisLaneE2E=1lane bypass in the real Next shell with browser requests forwarded to the real local BFF. Covered paths:- Admin lane-bypass navigation loads the real
@isis/job-envelopegeneration-type catalog (18 modes), priorities (low,normal,high,urgent), build form defaults, route-map articles, sibling quick-actions, bearer-authenticated catalog requests, and 44px form/link targets. - A valid
music-generationbuild posts to/v1/admin/isis/job-submission/build, disables the submit while pending, and renders the live BFF envelope (jobId, priority, idempotency key) without validation or build errors. - Client-only malformed JSON rejects before any build POST; a valid JSON array
reaches the live BFF and renders
invalid_payloadwithout fabricating an envelope. - A stale catalog option drives the live BFF strict enum validation path and
renders
data-job-issues/data-job-issue="type"without fabricating an envelope. - Loading, 503 catalog error, malformed catalog, non-admin unauthorized, anonymous redirect-before-render, route-map articles, quick-action hrefs, and the shared axe pass are asserted.
- Admin lane-bypass navigation loads the real
Cross-references#
- Studio overview:
../../studio-overview.md - Sibling routes:
Open questions / known gaps#
- No breadcrumb on this route — navigation is via sibling quick-actions
- This builds and validates an envelope but does not enqueue it; confirm the
relationship to
/studio/isis/job-managementand the live queue - Route-map sub-paths are declared but not yet implemented as separate pages
- Live screen-reader, touch-device, offline/PWA-cache, and telemetry-delivery passes still need a manual or dedicated-device run; automated coverage includes Playwright role/locator checks, explicit 44px hit-target measurements, and the suite-wide axe pass.