Skip to content

Studio schedules: align the inventory, detail and dialog with the prototype #2299

Closed

Description

@kantord

Parent: #2210. Follow-up to #2194 (merged), which shipped the schedule workspace.

Outcome

The schedule inventory, detail page and dialogs match the design prototype where #2194 stopped short. The prototype's latest version is the source of truth (stack/08-tooling, PRs #41–#48), except where following it is not possible. Links below pin Studio at 0d9821c3 and the prototype at f1af0e0.

Transcript dialog (from #1852's acceptance criteria)

#1852 asked for a past fire's transcript to open in a read-only dialog. The prototype does this: the run log opens a standalone TranscriptDialog, which reads GET /api/v1/sessions/{id}/transcript. Studio instead links to chat, which auto-opens the generic inspection dialog on its details view (chat-workspace.tsx#L725).

Following the prototype is possible: the endpoint and its generated client exist, and TranscriptView exists. One adjustment: session-inspection.tsx gates the read on session.capabilities.viewTranscript. The dialog should read the session detail first and keep that gate, which the prototype's version skips.

#2216 proposes rendering scheduled sessions in the chat transcript instead. Its premise that the chat link matches the prototype is wrong; see the comment there.

Inventory and detail

  • Status: a dot with a Title-case label for hover and screen readers, pulsing while live (prototype); Studio shows a badge. Completed has no prototype state, so it needs its own dot.
  • Times: relative next and last run in the table, with the full date in title (prototype).
  • Rows: clicking a row opens the detail page (prototype).
  • Header and copy: drop the subtitle (Studio), use "New scheduled task" / "New" at size="sm" (prototype).
  • Toasts: Sonner toasts on create and update (prototype). The Toaster is already mounted.
  • Card shape: rounded-lg with no bg-card (prototype); Studio uses rounded-xl border bg-card.
  • Empty filter: plain bordered box with a ghost Clear button (prototype).
  • Detail page: a "Run log" heading with a loading spinner (prototype) instead of Run history, and the title size and max-w-4xl (prototype) instead of max-w-5xl.

Dialog

  • Separate date and time inputs (prototype) instead of datetime-local.
  • Disable submit with scheduleFormProblem (prototype). Studio relies on native required, which already covers the same four checks, so this is low value.
  • sm:max-w-lg on the dialog (prototype).

Duration

The prototype has a Duration column. It cannot be followed until the backend records an end time; see #2298. Do not copy the prototype's fallback to deadline.

Deviations from the prototype to keep

#2194 deliberately differs from the prototype in these places, and #1852 closed without listing them:

Tracked elsewhere

Fully or partially written by an AI agent.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions