import type { Meta, StoryObj } from "@storybook/react-vite"; import type { Issue, IssueWatchdogSummary } from "@paperclipai/shared"; import { IssueProperties } from "@/components/IssueProperties"; import { storybookExecutionWorkspaces, storybookIssueDocuments, storybookIssues, } from "../fixtures/paperclipData"; const issueDocumentSummaries = storybookIssueDocuments.map(({ body: _body, ...summary }) => summary); const baseIssue: Issue = { ...storybookIssues[0]!, planDocument: storybookIssueDocuments.find((document) => document.key === "plan") ?? null, documentSummaries: issueDocumentSummaries, currentExecutionWorkspace: storybookExecutionWorkspaces[0]!, watchdog: null, }; function watchdog(overrides: Partial = {}): IssueWatchdogSummary { return { id: "watchdog-1", companyId: baseIssue.companyId, issueId: baseIssue.id, watchdogAgentId: "agent-qa", instructions: "Keep this tree moving. Verify stopped leaves against tests and review state before accepting them.", status: "active", watchdogIssueId: null, lastObservedFingerprint: null, lastReviewedFingerprint: null, lastTriggeredAt: null, lastCompletedAt: null, triggerCount: 0, createdAt: new Date(Date.now() - 60 * 60_000), updatedAt: new Date(Date.now() - 60 * 60_000), ...overrides, }; } const emptyWatchdogIssue: Issue = { ...baseIssue, watchdog: null }; const configuredWatchdogIssue: Issue = { ...baseIssue, watchdog: watchdog() }; const triggeredWatchdogIssue: Issue = { ...baseIssue, watchdog: watchdog({ watchdogIssueId: "issue-watchdog-child", lastTriggeredAt: new Date(Date.now() - 10 * 60_000), triggerCount: 2, }), }; const watchdogChildIssue: Issue = { ...baseIssue, id: "issue-watchdog-child", identifier: "PAP-9001", title: "Watchdog: keep the parent tree moving", originKind: "task_watchdog", originId: baseIssue.id, parentId: baseIssue.id, watchdog: null, }; function WatchdogSurfaceStories() { return (
IssueProperties Watchdog row — empty (Set watchdog)
undefined} inline />
IssueProperties Watchdog row — configured (agent + instructions)
undefined} inline />
IssueProperties Watchdog row — triggered, linked to generated task
undefined} inline />
); } const meta = { title: "Product/Task Watchdog surfaces", component: WatchdogSurfaceStories, parameters: { docs: { description: { component: "Surfaces the IssueProperties Watchdog row in empty / configured / triggered-and-linked variants for UX review of the task-watchdog configuration UI (PAP-11294).", }, }, }, } satisfies Meta; export default meta; type Story = StoryObj; export const WatchdogSurfaces: Story = {};