Repository navigation
Studio schedules: align the inventory, detail and dialog with the prototype #2299
Description
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
Toasteris already mounted. - Card shape:
rounded-lgwith nobg-card(prototype); Studio usesrounded-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 ofmax-w-5xl.
Dialog
- Separate date and time inputs (prototype) instead of
datetime-local. - Disable submit with
scheduleFormProblem(prototype). Studio relies on nativerequired, which already covers the same four checks, so this is low value. sm:max-w-lgon 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:
- The timezone, run-limit and retry controls are not in the form. The prototype removes only the UI and keeps the wire fields, so this matches the design. A new cron schedule takes the browser's time zone.
- Mobile run-log cards, and a "Back to scheduled" link.
- Menu items are disabled by eligibility rather than hidden.
- The normalized outcome vocabulary (Completed, Failed, Cancelled, Timed out, Limit reached, Stopped). The prototype's
fireOutcomechecks the error before the stop reason, so a timeout reads "Failed". - A locked trigger and tool profile on edit (Schedules: add atomic reschedule and reactivation semantics #2149, Schedule updates: define safe tool-profile changes #2147), and the Completed status.
- No rename (Studio schedules: stable identity and user-visible rename #2145).
- No Duration column until Scheduler: record an end time on finished fires #2298 lands.
Tracked elsewhere
- The breakpoint guard exemption and the clipped time input: Large batch of tiny follow-up fixes #2303.
- Focus, shortcuts, history refresh and the BFF outcome: fix(studio): refresh schedule history after actions and tidy the detail page #2315, fix(studio): return focus after schedule edits and scope the filter shortcut #2316 and refactor(studio): have the BFF report each schedule fire's outcome #2317 (part of Large batch of tiny follow-up fixes #2303).
- Sonner and tooltips in general: Studio: use shadcn/ui primitives like the prototype and SEP (no custom components) #2201.
Fully or partially written by an AI agent.
Activity
assets: schedules alignment composites for #2299
test(studio): pin the run log's transcript control before it opens a …
feat(studio): open a past fire's transcript in a read-only dialog
docs(studio): say the schedule run log opens transcripts in a dialog
test(studio): pin the schedule inventory and detail before aligning them
feat(studio): align the schedule inventory and detail page with the p…
test(studio): pin the schedule create and edit dialogs before splitti…
feat(studio): split the schedule run time and confirm saves with a toast
test(studio): pin the run log's transcript control before it opens a …
feat(studio): open a past fire's transcript in a read-only dialog
docs(studio): say the schedule run log opens transcripts in a dialog