import type { ActivityEvent, Agent, Approval, AuthSession, BudgetPolicySummary, Company, CompanySecret, CompanySecretBinding, CompanySecretProviderConfig, DashboardSummary, ExecutionWorkspace, Goal, Issue, IssueDocument, IssueLabel, Project, SecretAccessEvent, SecretProviderConfigDiscoveryPreviewResult, SecretProviderDescriptor, SidebarBadges, WorkspaceRuntimeService, } from "@paperclipai/shared"; import type { RunForIssue } from "@/api/activity"; import type { LiveRunForIssue } from "@/api/heartbeats"; const now = new Date("2026-04-20T12:00:00.000Z"); const recent = (minutesAgo: number) => new Date(now.getTime() - minutesAgo * 60_000); const storybookRepoRoot = "~/paperclip"; const storybookWorkspaceRoot = `${storybookRepoRoot}/.paperclip/workspaces`; const storybookWorktreeRoot = `${storybookRepoRoot}/.paperclip/worktrees`; export const storybookCompanies: Company[] = [ { id: "company-storybook", name: "Paperclip Storybook", description: "Fixture company for isolated UI review.", status: "active", pauseReason: null, pausedAt: null, issuePrefix: "PAP", issueCounter: 1641, budgetMonthlyCents: 250_000, spentMonthlyCents: 67_500, attachmentMaxBytes: 10 * 1024 * 1024, requireBoardApprovalForNewAgents: true, feedbackDataSharingEnabled: true, feedbackDataSharingConsentAt: null, feedbackDataSharingConsentByUserId: null, feedbackDataSharingTermsVersion: null, brandColor: "#0f766e", logoAssetId: null, logoUrl: null, createdAt: new Date("2026-04-01T09:00:00.000Z"), updatedAt: now, }, { id: "company-research", name: "Research Bureau", description: "A second active company for rail and switcher state coverage.", status: "active", pauseReason: null, pausedAt: null, issuePrefix: "RES", issueCounter: 88, budgetMonthlyCents: 180_000, spentMonthlyCents: 39_500, attachmentMaxBytes: 10 * 1024 * 1024, requireBoardApprovalForNewAgents: false, feedbackDataSharingEnabled: false, feedbackDataSharingConsentAt: null, feedbackDataSharingConsentByUserId: null, feedbackDataSharingTermsVersion: null, brandColor: "#4f46e5", logoAssetId: null, logoUrl: null, createdAt: new Date("2026-04-03T09:00:00.000Z"), updatedAt: recent(10), }, { id: "company-paused", name: "Launch Ops", description: "Paused company for inactive switcher treatment.", status: "paused", pauseReason: "manual", pausedAt: recent(240), issuePrefix: "OPS", issueCounter: 204, budgetMonthlyCents: 90_000, spentMonthlyCents: 91_200, attachmentMaxBytes: 10 * 1024 * 1024, requireBoardApprovalForNewAgents: true, feedbackDataSharingEnabled: false, feedbackDataSharingConsentAt: null, feedbackDataSharingConsentByUserId: null, feedbackDataSharingTermsVersion: null, brandColor: "#c2410c", logoAssetId: null, logoUrl: null, createdAt: new Date("2026-04-05T09:00:00.000Z"), updatedAt: recent(240), }, ]; export const storybookAuthSession: AuthSession = { session: { id: "session-storybook", userId: "user-board", }, user: { id: "user-board", name: "Riley Board", email: "riley@paperclip.local", image: null, }, }; export const storybookAgents: Agent[] = [ { id: "agent-codex", companyId: "company-storybook", name: "CodexCoder", urlKey: "codexcoder", role: "engineer", title: "Senior Product Engineer", icon: "code", status: "running", reportsTo: "agent-cto", capabilities: "Ships full-stack Paperclip product tasks, Storybook coverage, and verification.", adapterType: "codex_local", adapterConfig: {}, runtimeConfig: {}, budgetMonthlyCents: 125_000, spentMonthlyCents: 43_200, pauseReason: null, pausedAt: null, permissions: { canCreateAgents: false }, lastHeartbeatAt: recent(3), metadata: null, createdAt: recent(12_000), updatedAt: recent(3), }, { id: "agent-qa", companyId: "company-storybook", name: "QAChecker", urlKey: "qachecker", role: "qa", title: "QA Engineer", icon: "shield", status: "idle", reportsTo: "agent-cto", capabilities: "Validates browser flows, acceptance criteria, and release smoke tests.", adapterType: "claude_local", adapterConfig: {}, runtimeConfig: {}, budgetMonthlyCents: 80_000, spentMonthlyCents: 18_900, pauseReason: null, pausedAt: null, permissions: { canCreateAgents: false }, lastHeartbeatAt: recent(24), metadata: null, createdAt: recent(11_000), updatedAt: recent(24), }, { id: "agent-cto", companyId: "company-storybook", name: "CTO", urlKey: "cto", role: "cto", title: "CTO", icon: "crown", status: "active", reportsTo: null, capabilities: "Reviews architecture, quality gates, and engineering priority tradeoffs.", adapterType: "codex_local", adapterConfig: {}, runtimeConfig: {}, budgetMonthlyCents: 200_000, spentMonthlyCents: 54_000, pauseReason: null, pausedAt: null, permissions: { canCreateAgents: true }, lastHeartbeatAt: recent(41), metadata: null, createdAt: recent(14_000), updatedAt: recent(41), }, ]; export const storybookAgentMap = new Map(storybookAgents.map((agent) => [agent.id, agent])); export const storybookIssueLabels: IssueLabel[] = [ { id: "label-ui", companyId: "company-storybook", name: "UI", color: "#0f766e", createdAt: recent(20_000), updatedAt: recent(20_000), }, { id: "label-docs", companyId: "company-storybook", name: "Design system", color: "#f59e0b", createdAt: recent(20_000), updatedAt: recent(20_000), }, { id: "label-backend", companyId: "company-storybook", name: "API", color: "#2563eb", createdAt: recent(18_000), updatedAt: recent(18_000), }, { id: "label-risk", companyId: "company-storybook", name: "Risk", color: "#dc2626", createdAt: recent(16_000), updatedAt: recent(16_000), }, ]; const storybookIssueLabelMap = new Map(storybookIssueLabels.map((label) => [label.id, label])); function labelsFor(ids: string[]) { return ids.map((id) => storybookIssueLabelMap.get(id)).filter((label): label is IssueLabel => Boolean(label)); } export const storybookGoals: Goal[] = [ { id: "goal-company", companyId: "company-storybook", title: "Build Paperclip", description: "Make Paperclip the control plane operators trust for autonomous AI companies.", level: "company", status: "active", parentId: null, ownerAgentId: "agent-cto", createdAt: recent(30_000), updatedAt: recent(8), }, { id: "goal-board-ux", companyId: "company-storybook", title: "Tighten board operator visibility", description: "Every project, goal, and workspace surface should reveal ownership, progress, and runtime state at a glance.", level: "team", status: "active", parentId: "goal-company", ownerAgentId: "agent-codex", createdAt: recent(19_000), updatedAt: recent(18), }, { id: "goal-agent-runtime", companyId: "company-storybook", title: "Stabilize agent runtime loops", description: "Keep local and isolated workspaces predictable while preserving operator control.", level: "team", status: "planned", parentId: "goal-company", ownerAgentId: "agent-cto", createdAt: recent(17_500), updatedAt: recent(60), }, { id: "goal-storybook", companyId: "company-storybook", title: "Complete Storybook review coverage", description: "Capture dense board UI states in fixture-backed stories before release review.", level: "task", status: "active", parentId: "goal-board-ux", ownerAgentId: "agent-codex", createdAt: recent(9_000), updatedAt: recent(3), }, { id: "goal-budget-safety", companyId: "company-storybook", title: "Enforce spend guardrails", description: "Budget hard stops should be visible before they surprise operators.", level: "agent", status: "achieved", parentId: "goal-agent-runtime", ownerAgentId: "agent-qa", createdAt: recent(12_000), updatedAt: recent(120), }, { id: "goal-archived-import", companyId: "company-storybook", title: "Retire old import wizard", description: "Legacy import wizard work is preserved for audit only.", level: "task", status: "cancelled", parentId: "goal-board-ux", ownerAgentId: null, createdAt: recent(24_000), updatedAt: recent(2_500), }, ]; function createRuntimeService( overrides: Partial = {}, ): WorkspaceRuntimeService { return { id: overrides.id ?? "service-storybook", companyId: overrides.companyId ?? "company-storybook", projectId: overrides.projectId ?? "project-board-ui", projectWorkspaceId: overrides.projectWorkspaceId ?? "workspace-board-ui", executionWorkspaceId: overrides.executionWorkspaceId ?? "execution-workspace-storybook", issueId: overrides.issueId ?? "issue-storybook-1", scopeType: overrides.scopeType ?? "execution_workspace", scopeId: overrides.scopeId ?? "execution-workspace-storybook", serviceName: overrides.serviceName ?? "storybook", status: overrides.status ?? "running", lifecycle: overrides.lifecycle ?? "ephemeral", reuseKey: overrides.reuseKey ?? "storybook", command: overrides.command ?? "pnpm storybook", cwd: overrides.cwd ?? `${storybookRepoRoot}/ui`, port: overrides.port ?? 6006, url: overrides.url ?? "http://localhost:6006", provider: overrides.provider ?? "local_process", providerRef: overrides.providerRef ?? null, ownerAgentId: overrides.ownerAgentId ?? "agent-codex", startedByRunId: overrides.startedByRunId ?? "run-storybook", lastUsedAt: overrides.lastUsedAt ?? recent(4), startedAt: overrides.startedAt ?? recent(16), stoppedAt: overrides.stoppedAt ?? null, stopPolicy: overrides.stopPolicy ?? null, healthStatus: overrides.healthStatus ?? "healthy", configIndex: overrides.configIndex ?? 0, createdAt: overrides.createdAt ?? recent(16), updatedAt: overrides.updatedAt ?? recent(4), }; } const storybookWorkspaceRuntime = { commands: [ { id: "storybook", name: "Storybook", kind: "service", command: "pnpm storybook", cwd: "ui", lifecycle: "shared", }, { id: "typecheck-ui", name: "UI typecheck", kind: "job", command: "pnpm --filter @paperclipai/ui typecheck", cwd: ".", }, ], }; export const storybookProjectWorkspaces: Project["workspaces"] = [ { id: "workspace-board-ui", companyId: "company-storybook", projectId: "project-board-ui", name: "Board UI", sourceType: "local_path" as const, cwd: `${storybookRepoRoot}/ui`, repoUrl: "https://github.com/paperclipai/paperclip", repoRef: "master", defaultRef: "master", visibility: "default" as const, setupCommand: "pnpm install", cleanupCommand: null, remoteProvider: null, remoteWorkspaceRef: null, sharedWorkspaceKey: "board-ui", metadata: null, runtimeConfig: { workspaceRuntime: storybookWorkspaceRuntime, desiredState: "running" as const, serviceStates: { storybook: "running" as const }, }, isPrimary: true, runtimeServices: [createRuntimeService()], createdAt: recent(20_000), updatedAt: recent(4), }, { id: "workspace-docs-remote", companyId: "company-storybook", projectId: "project-board-ui", name: "Docs preview sandbox", sourceType: "remote_managed", cwd: null, repoUrl: "https://github.com/paperclipai/paperclip", repoRef: "preview/docs-workspaces", defaultRef: "master", visibility: "advanced", setupCommand: "pnpm install", cleanupCommand: "pnpm dev:stop", remoteProvider: "vercel_sandbox", remoteWorkspaceRef: "vcsb_storybook_docs_0420", sharedWorkspaceKey: "docs-preview", metadata: { region: "iad1", ttlHours: 8 }, runtimeConfig: { workspaceRuntime: { commands: [ { id: "docs", name: "Docs preview", kind: "service", command: "pnpm docs:dev", cwd: ".", lifecycle: "ephemeral", }, ], }, desiredState: "stopped", serviceStates: { docs: "stopped" }, }, isPrimary: false, runtimeServices: [ createRuntimeService({ id: "service-docs-preview", projectWorkspaceId: "workspace-docs-remote", executionWorkspaceId: null, issueId: "issue-storybook-6", scopeType: "project_workspace", scopeId: "workspace-docs-remote", serviceName: "docs", status: "stopped", lifecycle: "ephemeral", reuseKey: "docs-preview", command: "pnpm docs:dev", cwd: null, port: 4173, url: "https://paperclip-docs-preview.vercel.app", healthStatus: "unknown", lastUsedAt: recent(48), startedAt: recent(72), stoppedAt: recent(46), createdAt: recent(72), updatedAt: recent(46), }), ], createdAt: recent(2_000), updatedAt: recent(46), }, { id: "workspace-release-local", companyId: "company-storybook", projectId: "project-board-ui", name: "Release smoke local checkout", sourceType: "local_path", cwd: `${storybookWorkspaceRoot}/release-smoke`, repoUrl: "https://github.com/paperclipai/paperclip", repoRef: "release/smoke-2026-04-20", defaultRef: "master", visibility: "advanced", setupCommand: "pnpm install", cleanupCommand: "pnpm dev:stop", remoteProvider: null, remoteWorkspaceRef: null, sharedWorkspaceKey: "release-smoke", metadata: null, runtimeConfig: { workspaceRuntime: { commands: [ { id: "release-smoke", name: "Release smoke", kind: "job", command: "pnpm test:release-smoke", cwd: ".", }, ], }, desiredState: "stopped", serviceStates: null, }, isPrimary: false, runtimeServices: [], createdAt: recent(7_200), updatedAt: recent(90), }, ]; export const storybookExecutionWorkspaces: ExecutionWorkspace[] = [ { id: "execution-workspace-storybook", companyId: "company-storybook", projectId: "project-board-ui", projectWorkspaceId: "workspace-board-ui", sourceIssueId: "issue-storybook-1", mode: "isolated_workspace", strategyType: "git_worktree", name: "PAP-1641 storybook worktree", status: "active", cwd: `${storybookWorktreeRoot}/PAP-1641-create-super-detailed-storybooks-for-our-project`, repoUrl: "https://github.com/paperclipai/paperclip", baseRef: "master", branchName: "PAP-1641-create-super-detailed-storybooks-for-our-project", providerType: "git_worktree", providerRef: null, derivedFromExecutionWorkspaceId: null, lastUsedAt: recent(3), openedAt: recent(90), closedAt: null, cleanupEligibleAt: null, cleanupReason: null, config: null, metadata: null, runtimeServices: storybookProjectWorkspaces[0]!.runtimeServices, createdAt: recent(90), updatedAt: recent(3), }, { id: "execution-workspace-cleanup", companyId: "company-storybook", projectId: "project-board-ui", projectWorkspaceId: "workspace-release-local", sourceIssueId: "issue-storybook-8", mode: "isolated_workspace", strategyType: "git_worktree", name: "PAP-1608 release smoke cleanup", status: "cleanup_failed", cwd: `${storybookWorktreeRoot}/PAP-1608-release-smoke-cleanup`, repoUrl: "https://github.com/paperclipai/paperclip", baseRef: "master", branchName: "PAP-1608-release-smoke-cleanup", providerType: "git_worktree", providerRef: null, derivedFromExecutionWorkspaceId: null, lastUsedAt: recent(120), openedAt: recent(260), closedAt: recent(118), cleanupEligibleAt: recent(115), cleanupReason: "release smoke finished but the local worktree still has generated artifacts", config: { provisionCommand: null, teardownCommand: "pnpm dev:stop && rm -rf ui/storybook-static", cleanupCommand: null, workspaceRuntime: storybookWorkspaceRuntime, desiredState: "stopped", serviceStates: { storybook: "stopped" }, }, metadata: { dirtyEntryCount: 3 }, runtimeServices: [ createRuntimeService({ id: "service-cleanup-storybook", projectWorkspaceId: "workspace-release-local", executionWorkspaceId: "execution-workspace-cleanup", issueId: "issue-storybook-8", scopeId: "execution-workspace-cleanup", status: "failed", healthStatus: "unhealthy", url: "http://localhost:6007", port: 6007, lastUsedAt: recent(130), startedAt: recent(210), stoppedAt: recent(125), updatedAt: recent(120), }), ], createdAt: recent(260), updatedAt: recent(120), }, ]; function createProject(overrides: Partial = {}): Project { const id = overrides.id ?? "project-board-ui"; return { id, companyId: "company-storybook", urlKey: "board-ui", goalId: "goal-company", goalIds: ["goal-company", "goal-board-ux"], goals: storybookGoals .filter((goal) => goal.id === "goal-company" || goal.id === "goal-board-ux") .map(({ id, title }) => ({ id, title })), name: "Board UI", description: "Navigation, command, and operator layout polish.", status: "in_progress", leadAgentId: "agent-codex", targetDate: "2026-04-30", color: "#0f766e", env: null, pauseReason: null, pausedAt: null, executionWorkspacePolicy: { enabled: true, defaultMode: "isolated_workspace", allowIssueOverride: true, defaultProjectWorkspaceId: "workspace-board-ui", workspaceStrategy: { type: "git_worktree", baseRef: "master", branchTemplate: "{issueIdentifier}-{slug}", worktreeParentDir: storybookWorktreeRoot, provisionCommand: null, teardownCommand: null, }, workspaceRuntime: null, branchPolicy: null, pullRequestPolicy: null, runtimePolicy: null, cleanupPolicy: null, }, codebase: { workspaceId: "workspace-board-ui", repoUrl: "https://github.com/paperclipai/paperclip", repoRef: "master", defaultRef: "master", repoName: "paperclip", localFolder: storybookRepoRoot, managedFolder: ".paperclip/worktrees/storybook", effectiveLocalFolder: storybookRepoRoot, origin: "local_folder", }, workspaces: storybookProjectWorkspaces, primaryWorkspace: storybookProjectWorkspaces[0]!, archivedAt: null, createdAt: recent(18_000), updatedAt: recent(12), ...overrides, }; } export const storybookProjects: Project[] = [ createProject(), createProject({ id: "project-runtime", urlKey: "agent-runtime", name: "Agent Runtime", description: "Heartbeat, adapters, and execution trace work.", status: "planned", leadAgentId: "agent-cto", color: "#2563eb", updatedAt: recent(60), }), createProject({ id: "project-budget", urlKey: "budget-guardrails", name: "Budget Guardrails", description: "Hard-stop and approval flow review surfaces.", status: "in_progress", leadAgentId: "agent-qa", color: "#f59e0b", pauseReason: "budget", pausedAt: recent(90), updatedAt: recent(90), }), createProject({ id: "project-archived-import", urlKey: "archived-import-wizard", name: "Archived Import Wizard", description: "Preserved for audit after the import workflow moved into company packages.", status: "cancelled", leadAgentId: null, goalId: "goal-archived-import", goalIds: ["goal-archived-import"], goals: [{ id: "goal-archived-import", title: "Retire old import wizard" }], color: "#64748b", workspaces: [], primaryWorkspace: null, codebase: { workspaceId: null, repoUrl: null, repoRef: null, defaultRef: null, repoName: null, localFolder: null, managedFolder: "", effectiveLocalFolder: "Not configured", origin: "local_folder", }, executionWorkspacePolicy: { enabled: false, defaultMode: "shared_workspace", allowIssueOverride: false, defaultProjectWorkspaceId: null, workspaceStrategy: null, workspaceRuntime: null, branchPolicy: null, pullRequestPolicy: null, runtimePolicy: null, cleanupPolicy: null, }, archivedAt: recent(2_400), updatedAt: recent(2_400), }), ]; export function createIssue(overrides: Partial = {}): Issue { return { id: "issue-storybook-1", companyId: "company-storybook", projectId: "project-board-ui", projectWorkspaceId: "workspace-board-ui", goalId: "goal-company", parentId: null, title: "Create super-detailed storybooks for the project", description: "Set up Storybook and move UX review surfaces into stories.", status: "in_progress", priority: "high", assigneeAgentId: "agent-codex", assigneeUserId: null, checkoutRunId: "run-storybook", executionRunId: "run-storybook", executionAgentNameKey: "codexcoder", executionLockedAt: recent(28), createdByAgentId: null, createdByUserId: "user-board", issueNumber: 1641, identifier: "PAP-1641", requestDepth: 0, billingCode: "product", assigneeAdapterOverrides: null, executionWorkspaceId: "execution-workspace-storybook", executionWorkspacePreference: "project", executionWorkspaceSettings: null, startedAt: recent(28), completedAt: null, cancelledAt: null, hiddenAt: null, labelIds: ["label-ui", "label-docs"], labels: labelsFor(["label-ui", "label-docs"]), blockedBy: [], blocks: [], planDocument: null, documentSummaries: [], legacyPlanDocument: null, project: storybookProjects[0]!, goal: null, currentExecutionWorkspace: storybookExecutionWorkspaces[0]!, workProducts: [], mentionedProjects: [], myLastTouchAt: recent(8), lastExternalCommentAt: recent(70), lastActivityAt: recent(3), isUnreadForMe: true, createdAt: recent(90), updatedAt: recent(3), ...overrides, workMode: overrides.workMode ?? "standard", }; } export const storybookIssues: Issue[] = [ createIssue(), createIssue({ id: "issue-storybook-2", title: "Add budget hard-stop incident review", description: "Trace why a hard stop paused the agent and add a board-facing incident summary.", status: "blocked", priority: "critical", assigneeAgentId: "agent-qa", checkoutRunId: null, executionRunId: null, executionLockedAt: null, startedAt: null, identifier: "PAP-1528", issueNumber: 1528, billingCode: "reliability", projectId: "project-budget", projectWorkspaceId: null, labelIds: ["label-risk", "label-backend"], labels: labelsFor(["label-risk", "label-backend"]), blockedBy: [ { id: "issue-storybook-7", identifier: "PAP-1591", title: "Confirm project budget override policy", status: "in_review", priority: "high", assigneeAgentId: null, assigneeUserId: "user-board", }, ], lastActivityAt: recent(18), }), createIssue({ id: "issue-storybook-3", title: "QA invite flow on authenticated private mode", status: "in_review", priority: "medium", assigneeAgentId: null, assigneeUserId: "user-board", checkoutRunId: null, executionRunId: null, executionLockedAt: null, identifier: "PAP-1602", issueNumber: 1602, completedAt: null, lastActivityAt: recent(49), isUnreadForMe: false, }), createIssue({ id: "issue-storybook-4", parentId: "issue-storybook-1", title: "Extract issue row density fixtures", description: "Create fixture-backed rows for unread, selected, nested, and grouped issue management views.", status: "todo", priority: "medium", assigneeAgentId: "agent-codex", checkoutRunId: null, executionRunId: null, executionLockedAt: null, startedAt: null, identifier: "PAP-1668", issueNumber: 1668, labelIds: ["label-ui"], labels: labelsFor(["label-ui"]), lastActivityAt: recent(31), isUnreadForMe: true, }), createIssue({ id: "issue-storybook-5", parentId: "issue-storybook-1", title: "Review document editor empty states", description: "Validate plan and notes documents in issue detail before handing the Storybook preview to QA.", status: "done", priority: "low", assigneeAgentId: "agent-qa", checkoutRunId: null, executionRunId: "run-storybook-qa", executionLockedAt: null, completedAt: recent(22), identifier: "PAP-1669", issueNumber: 1669, labelIds: ["label-docs"], labels: labelsFor(["label-docs"]), lastActivityAt: recent(22), isUnreadForMe: false, }), createIssue({ id: "issue-storybook-6", title: "Publish static Storybook preview", description: "Build the static preview and attach the generated artifact to the parent issue.", status: "todo", priority: "high", assigneeAgentId: null, assigneeUserId: null, checkoutRunId: null, executionRunId: null, executionLockedAt: null, startedAt: null, identifier: "PAP-1670", issueNumber: 1670, labelIds: ["label-ui", "label-risk"], labels: labelsFor(["label-ui", "label-risk"]), lastActivityAt: recent(64), isUnreadForMe: false, }), createIssue({ id: "issue-storybook-7", title: "Confirm project budget override policy", description: "Board review needed before increasing the project budget for long-running browser verification.", status: "in_review", priority: "high", assigneeAgentId: null, assigneeUserId: "user-board", checkoutRunId: null, executionRunId: null, executionLockedAt: null, startedAt: null, identifier: "PAP-1591", issueNumber: 1591, billingCode: "governance", projectId: "project-budget", projectWorkspaceId: null, labelIds: ["label-risk"], labels: labelsFor(["label-risk"]), lastActivityAt: recent(85), isUnreadForMe: false, }), createIssue({ id: "issue-storybook-8", title: "Clean up release smoke worktree", description: "Close the isolated release smoke workspace after static preview review.", status: "blocked", priority: "medium", assigneeAgentId: "agent-codex", checkoutRunId: null, executionRunId: "run-release-smoke-cleanup", executionLockedAt: null, startedAt: recent(260), identifier: "PAP-1608", issueNumber: 1608, projectId: "project-board-ui", projectWorkspaceId: "workspace-release-local", executionWorkspaceId: "execution-workspace-cleanup", labelIds: ["label-ui", "label-risk"], labels: labelsFor(["label-ui", "label-risk"]), lastActivityAt: recent(120), isUnreadForMe: false, }), ]; export const storybookIssueDocuments: IssueDocument[] = [ { id: "document-plan-storybook", companyId: "company-storybook", issueId: "issue-storybook-1", key: "plan", title: "Plan", format: "markdown", body: [ "# Plan", "", "- Add issue-management stories for list, filters, detail, documents, runs, and workspace cards.", "- Use existing product components instead of mock-only approximations.", "- Verify the Storybook build after the fixture expansion.", ].join("\n"), latestRevisionId: "revision-plan-3", latestRevisionNumber: 3, createdByAgentId: "agent-codex", createdByUserId: null, updatedByAgentId: "agent-codex", updatedByUserId: null, lockedAt: null, lockedByAgentId: null, lockedByUserId: null, createdAt: recent(80), updatedAt: recent(8), }, { id: "document-notes-storybook", companyId: "company-storybook", issueId: "issue-storybook-1", key: "notes", title: "Review Notes", format: "markdown", body: [ "# Review Notes", "", "- The issue list needs group headers and dense trailing columns.", "- The filters popover should show selected status, priority, and assignee filters.", "- Workspace copy must expose branch, path, and runtime status.", ].join("\n"), latestRevisionId: "revision-notes-1", latestRevisionNumber: 1, createdByAgentId: null, createdByUserId: "user-board", updatedByAgentId: null, updatedByUserId: "user-board", lockedAt: null, lockedByAgentId: null, lockedByUserId: null, createdAt: recent(55), updatedAt: recent(12), }, ]; export const storybookContinuationHandoff: IssueDocument = { id: "document-continuation-storybook", companyId: "company-storybook", issueId: "issue-storybook-1", key: "continuation_summary", title: "Continuation handoff", format: "markdown", body: [ "Current state: issue-management stories have the fixture surface mapped.", "", "Next action: run the Storybook build, inspect the issue management story, then request QA visual review if the build passes.", "", "Important files: `ui/storybook/stories/issue-management.stories.tsx` and `ui/storybook/fixtures/paperclipData.ts`.", ].join("\n"), latestRevisionId: "revision-continuation-1", latestRevisionNumber: 1, createdByAgentId: "agent-codex", createdByUserId: null, updatedByAgentId: "agent-codex", updatedByUserId: null, lockedAt: null, lockedByAgentId: null, lockedByUserId: null, createdAt: recent(18), updatedAt: recent(5), }; export const storybookIssueRuns: RunForIssue[] = [ { runId: "run-storybook", status: "running", agentId: "agent-codex", adapterType: "codex_local", startedAt: recent(28).toISOString(), finishedAt: null, createdAt: recent(28).toISOString(), invocationSource: "manual", usageJson: { costCents: 142, inputTokens: 38400, outputTokens: 7200 }, resultJson: null, logBytes: 62_400, livenessState: null, livenessReason: null, continuationAttempt: 1, lastUsefulActionAt: recent(3).toISOString(), nextAction: "Finish the issue-management Storybook and verify the static build.", }, { runId: "run-storybook-qa", status: "succeeded", agentId: "agent-qa", adapterType: "claude_local", startedAt: recent(110).toISOString(), finishedAt: recent(94).toISOString(), createdAt: recent(110).toISOString(), invocationSource: "manual", usageJson: { costCents: 38, inputTokens: 12200, outputTokens: 1900 }, resultJson: { stopReason: "completed" }, logBytes: 18_400, livenessState: "advanced", livenessReason: "Verified the document editor empty state and left concrete screenshot notes.", continuationAttempt: 0, lastUsefulActionAt: recent(96).toISOString(), nextAction: "Re-run after final story fixture additions land.", }, { runId: "run-storybook-plan", status: "succeeded", agentId: "agent-codex", adapterType: "codex_local", startedAt: recent(210).toISOString(), finishedAt: recent(196).toISOString(), createdAt: recent(210).toISOString(), invocationSource: "scheduler", usageJson: { costCents: 24, inputTokens: 9100, outputTokens: 1100 }, resultJson: { stopReason: "completed" }, logBytes: 9800, livenessState: "plan_only", livenessReason: "Identified Storybook coverage gaps but did not edit files in that run.", continuationAttempt: 0, lastUsefulActionAt: null, nextAction: "Implement issue-management stories in the next heartbeat.", }, ]; export const storybookApprovals: Approval[] = [ { id: "approval-hire-designer", companyId: "company-storybook", type: "hire_agent", requestedByAgentId: "agent-cto", requestedByUserId: null, status: "pending", payload: { name: "DesignSystemCoder", role: "designer", title: "Design System Engineer", icon: "sparkles", adapterType: "codex_local", capabilities: "Owns component quality, visual regression stories, and design-system consolidation.", desiredSkills: ["frontend-design", "web-design-guidelines"], }, decisionNote: null, decidedByUserId: null, decidedAt: null, createdAt: recent(42), updatedAt: recent(42), }, { id: "approval-budget", companyId: "company-storybook", type: "budget_override_required", requestedByAgentId: "agent-codex", requestedByUserId: null, status: "revision_requested", payload: { scopeName: "Paperclip App", scopeType: "project", windowKind: "calendar_month_utc", metric: "billed_cents", budgetAmount: 120_000, observedAmount: 131_400, guidance: "Raise the project budget only after current release smoke checks are green.", }, decisionNote: "Need a tighter verification list before approving more spend.", decidedByUserId: "user-board", decidedAt: recent(12), createdAt: recent(75), updatedAt: recent(12), }, { id: "approval-board", companyId: "company-storybook", type: "request_board_approval", requestedByAgentId: "agent-cto", requestedByUserId: null, status: "approved", payload: { title: "Publish the Storybook preview for design review", summary: "Build the static Storybook and attach the generated URL to the release issue.", recommendedAction: "Approve publishing the preview for internal board review.", nextActionOnApproval: "Run build-storybook, upload the static artifact, and request QA visual review.", risks: [ "Stories may expose stale fixture copy if not maintained with UI changes.", "Preview screenshots can hide responsive regressions unless mobile viewports are checked.", ], }, decisionNote: "Approved for internal-only review.", decidedByUserId: "user-board", decidedAt: recent(4), createdAt: recent(55), updatedAt: recent(4), }, ]; export const storybookBudgetSummaries: BudgetPolicySummary[] = [ { policyId: "budget-company-ok", companyId: "company-storybook", scopeType: "company", scopeId: "company-storybook", scopeName: "Paperclip Storybook", metric: "billed_cents", windowKind: "calendar_month_utc", amount: 250_000, observedAmount: 67_500, remainingAmount: 182_500, utilizationPercent: 27, warnPercent: 80, hardStopEnabled: true, notifyEnabled: true, isActive: true, status: "ok", paused: false, pauseReason: null, windowStart: new Date("2026-04-01T00:00:00.000Z"), windowEnd: new Date("2026-05-01T00:00:00.000Z"), }, { policyId: "budget-project-warning", companyId: "company-storybook", scopeType: "project", scopeId: "project-board-ui", scopeName: "Paperclip App", metric: "billed_cents", windowKind: "calendar_month_utc", amount: 120_000, observedAmount: 103_100, remainingAmount: 16_900, utilizationPercent: 86, warnPercent: 80, hardStopEnabled: true, notifyEnabled: true, isActive: true, status: "warning", paused: false, pauseReason: null, windowStart: new Date("2026-04-01T00:00:00.000Z"), windowEnd: new Date("2026-05-01T00:00:00.000Z"), }, { policyId: "budget-agent-hard-stop", companyId: "company-storybook", scopeType: "agent", scopeId: "agent-codex", scopeName: "CodexCoder", metric: "billed_cents", windowKind: "calendar_month_utc", amount: 40_000, observedAmount: 43_200, remainingAmount: 0, utilizationPercent: 108, warnPercent: 80, hardStopEnabled: true, notifyEnabled: true, isActive: true, status: "hard_stop", paused: true, pauseReason: "budget", windowStart: new Date("2026-04-01T00:00:00.000Z"), windowEnd: new Date("2026-05-01T00:00:00.000Z"), }, ]; export const storybookActivityEvents: ActivityEvent[] = [ { id: "activity-1", companyId: "company-storybook", actorType: "agent", actorId: "agent-codex", action: "issue.status_changed", entityType: "issue", entityId: "issue-storybook-1", agentId: "agent-codex", runId: "run-storybook", details: { from: "todo", to: "in_progress" }, createdAt: recent(28), }, { id: "activity-2", companyId: "company-storybook", actorType: "user", actorId: "user-board", action: "approval.revision_requested", entityType: "approval", entityId: "approval-budget", agentId: null, runId: null, details: { type: "budget_override_required" }, createdAt: recent(12), }, { id: "activity-3", companyId: "company-storybook", actorType: "system", actorId: "system", action: "budget.hard_stop", entityType: "agent", entityId: "agent-codex", agentId: "agent-codex", runId: null, details: { observedAmount: 43_200, budgetAmount: 40_000 }, createdAt: recent(7), }, ]; export const storybookEntityNameMap = new Map([ ["issue:issue-storybook-1", "PAP-1641"], ["issue:issue-storybook-2", "PAP-1528"], ["issue:issue-storybook-3", "PAP-1602"], ["issue:issue-storybook-4", "PAP-1668"], ["issue:issue-storybook-5", "PAP-1669"], ["issue:issue-storybook-6", "PAP-1670"], ["issue:issue-storybook-7", "PAP-1591"], ["approval:approval-budget", "Budget override"], ["agent:agent-codex", "CodexCoder"], ["agent:agent-qa", "QAChecker"], ["agent:agent-cto", "CTO"], ]); export const storybookEntityTitleMap = new Map([ ["issue:issue-storybook-1", "Create super-detailed storybooks for the project"], ["issue:issue-storybook-2", "Add budget hard-stop incident review"], ["issue:issue-storybook-3", "QA invite flow on authenticated private mode"], ["issue:issue-storybook-4", "Extract issue row density fixtures"], ["issue:issue-storybook-5", "Review document editor empty states"], ["issue:issue-storybook-6", "Publish static Storybook preview"], ["issue:issue-storybook-7", "Confirm project budget override policy"], ]); export const storybookSidebarBadges: SidebarBadges = { inbox: 7, approvals: 2, failedRuns: 1, joinRequests: 1, }; export const storybookDashboardSummary: DashboardSummary = { companyId: "company-storybook", agents: { active: 3, running: 1, paused: 0, error: 0, }, tasks: { open: 12, inProgress: 4, blocked: 1, done: 36, }, costs: { monthSpendCents: 67_500, monthBudgetCents: 250_000, monthUtilizationPercent: 27, }, pendingApprovals: 2, budgets: { activeIncidents: 1, pendingApprovals: 1, pausedAgents: 0, pausedProjects: 1, }, runActivity: [ { date: "2026-04-07", succeeded: 4, failed: 0, other: 1, total: 5 }, { date: "2026-04-08", succeeded: 5, failed: 1, other: 0, total: 6 }, { date: "2026-04-09", succeeded: 3, failed: 0, other: 1, total: 4 }, { date: "2026-04-10", succeeded: 6, failed: 0, other: 0, total: 6 }, { date: "2026-04-11", succeeded: 4, failed: 1, other: 0, total: 5 }, { date: "2026-04-12", succeeded: 2, failed: 0, other: 1, total: 3 }, { date: "2026-04-13", succeeded: 5, failed: 0, other: 1, total: 6 }, { date: "2026-04-14", succeeded: 6, failed: 1, other: 0, total: 7 }, { date: "2026-04-15", succeeded: 4, failed: 0, other: 1, total: 5 }, { date: "2026-04-16", succeeded: 7, failed: 0, other: 0, total: 7 }, { date: "2026-04-17", succeeded: 6, failed: 1, other: 0, total: 7 }, { date: "2026-04-18", succeeded: 3, failed: 0, other: 1, total: 4 }, { date: "2026-04-19", succeeded: 5, failed: 0, other: 1, total: 6 }, { date: "2026-04-20", succeeded: 4, failed: 0, other: 2, total: 6 }, ], }; export const storybookLiveRuns: LiveRunForIssue[] = [ { id: "run-storybook", status: "running", invocationSource: "manual", triggerDetail: "issue_assigned", startedAt: recent(28).toISOString(), finishedAt: null, createdAt: recent(28).toISOString(), agentId: "agent-codex", agentName: "CodexCoder", adapterType: "codex_local", issueId: "issue-storybook-1", livenessState: "advanced", livenessReason: null, continuationAttempt: 0, lastUsefulActionAt: recent(3).toISOString(), nextAction: "Build fixture-backed navigation stories", }, ]; export const storybookSecretProviders: SecretProviderDescriptor[] = [ { id: "local_encrypted", label: "Local encrypted", requiresExternalRef: false }, { id: "aws_secrets_manager", label: "AWS Secrets Manager", requiresExternalRef: false }, { id: "gcp_secret_manager", label: "GCP Secret Manager", requiresExternalRef: false }, { id: "vault", label: "HashiCorp Vault", requiresExternalRef: false }, ]; export const storybookSecretProviderConfigs: CompanySecretProviderConfig[] = [ { id: "provider-config-local", companyId: "company-storybook", provider: "local_encrypted", displayName: "Local encrypted default", status: "ready", isDefault: true, config: { backupReminderAcknowledged: true }, healthStatus: "ready", healthCheckedAt: recent(45), healthMessage: "Local encrypted provider is healthy.", healthDetails: null, disabledAt: null, createdByAgentId: null, createdByUserId: "user-board", createdAt: recent(2_400), updatedAt: recent(45), }, { id: "provider-config-aws-prod", companyId: "company-storybook", provider: "aws_secrets_manager", displayName: "AWS production", status: "warning", isDefault: false, config: { region: "us-east-1", namespace: "prod-use1", secretNamePrefix: "paperclip", kmsKeyId: "alias/paperclip-secrets", ownerTag: "platform", environmentTag: "production", }, healthStatus: "warning", healthCheckedAt: recent(18), healthMessage: "Connected; KMS key rotation policy not yet enforced.", healthDetails: { code: "kms_rotation_policy", message: "Connected; KMS key rotation policy not yet enforced.", guidance: ["Enable automatic key rotation before using this vault for production agents."], }, disabledAt: null, createdByAgentId: null, createdByUserId: "user-board", createdAt: recent(1_800), updatedAt: recent(18), }, ]; export const storybookSecretProviderDiscoveryPreview: SecretProviderConfigDiscoveryPreviewResult = { provider: "aws_secrets_manager", nextToken: null, sampledSecretCount: 6, skippedForeignPaperclipSampleCount: 1, warnings: ["Skipped 1 Paperclip-managed AWS secret from a different deployment namespace."], candidates: [ { provider: "aws_secrets_manager", displayName: "AWS production", config: { region: "us-east-1", namespace: "prod-use1", secretNamePrefix: "paperclip", kmsKeyId: "alias/paperclip-secrets", ownerTag: "platform", environmentTag: "production", }, sampleCount: 5, samples: [ { name: "paperclip/prod-use1/company-storybook/openai_api_key", hasKmsKey: true, tagKeys: ["paperclip:managed-by", "paperclip:environment", "paperclip:provider-owner"], }, ], signals: { namespace: "prod-use1", secretNamePrefix: "paperclip", environmentTag: "production", ownerTag: "platform", kmsKeyId: "alias/paperclip-secrets", hasKmsKey: true, sampleCount: 5, paperclipManagedSampleCount: 5, skippedForeignPaperclipSampleCount: 1, }, warnings: [], }, ], }; export const storybookSecrets: CompanySecret[] = [ { id: "secret-openai", companyId: "company-storybook", key: "openai_api_key", name: "OPENAI_API_KEY", provider: "local_encrypted", status: "active", managedMode: "paperclip_managed", externalRef: null, providerConfigId: null, providerMetadata: null, latestVersion: 3, description: "OpenAI API key shared by all model adapters.", lastResolvedAt: recent(12), lastRotatedAt: new Date("2026-04-15T09:30:00.000Z"), deletedAt: null, createdByAgentId: null, createdByUserId: "user-board", createdAt: new Date("2026-03-01T10:00:00.000Z"), updatedAt: recent(12), }, { id: "secret-aws-prod", companyId: "company-storybook", key: "prod_aws_deploy", name: "PROD_AWS_DEPLOY_KEY", provider: "aws_secrets_manager", status: "active", managedMode: "external_reference", externalRef: "arn:aws:secretsmanager:us-east-1:123456789012:secret:paperclip/prod/aws-deploy-AbCdEf", providerConfigId: null, providerMetadata: null, latestVersion: 2, description: "Deploy key for the prod ECS rollout pipeline.", lastResolvedAt: recent(180), lastRotatedAt: new Date("2026-04-22T14:00:00.000Z"), deletedAt: null, createdByAgentId: null, createdByUserId: "user-board", createdAt: new Date("2026-02-01T10:00:00.000Z"), updatedAt: recent(180), }, { id: "secret-github", companyId: "company-storybook", key: "github_app_pem", name: "GITHUB_APP_PEM", provider: "local_encrypted", status: "disabled", managedMode: "paperclip_managed", externalRef: null, providerConfigId: null, providerMetadata: null, latestVersion: 1, description: "Disabled until GitHub App reinstall is approved.", lastResolvedAt: new Date("2026-03-30T08:11:00.000Z"), lastRotatedAt: null, deletedAt: null, createdByAgentId: null, createdByUserId: "user-board", createdAt: new Date("2026-03-15T10:00:00.000Z"), updatedAt: new Date("2026-04-21T11:30:00.000Z"), }, { id: "secret-stripe-archived", companyId: "company-storybook", key: "stripe_legacy", name: "STRIPE_LEGACY", provider: "vault", status: "archived", managedMode: "external_reference", externalRef: "secret/data/payments/stripe-legacy", providerConfigId: null, providerMetadata: null, latestVersion: 4, description: "Migrated to managed billing service. Kept for backfill jobs.", lastResolvedAt: new Date("2026-02-25T08:11:00.000Z"), lastRotatedAt: new Date("2026-02-20T08:11:00.000Z"), deletedAt: null, createdByAgentId: null, createdByUserId: "user-board", createdAt: new Date("2025-12-01T10:00:00.000Z"), updatedAt: new Date("2026-03-01T11:30:00.000Z"), }, ]; export const storybookSecretBindings: CompanySecretBinding[] = [ { id: "binding-openai-agent", companyId: "company-storybook", secretId: "secret-openai", targetType: "agent", targetId: "agent-codex", configPath: "env.OPENAI_API_KEY", versionSelector: "latest", required: true, label: "Codex agent env", createdAt: new Date("2026-03-02T09:00:00.000Z"), updatedAt: new Date("2026-03-02T09:00:00.000Z"), }, { id: "binding-openai-project", companyId: "company-storybook", secretId: "secret-openai", targetType: "project", targetId: "project-app", configPath: "env.OPENAI_API_KEY", versionSelector: "latest", required: true, label: "Paperclip App project env", createdAt: new Date("2026-03-02T09:00:00.000Z"), updatedAt: new Date("2026-03-02T09:00:00.000Z"), }, { id: "binding-aws-environment", companyId: "company-storybook", secretId: "secret-aws-prod", targetType: "environment", targetId: "env-prod", configPath: "secrets.AWS_DEPLOY", versionSelector: 2, required: true, label: "Prod environment", createdAt: new Date("2026-04-22T14:01:00.000Z"), updatedAt: new Date("2026-04-22T14:01:00.000Z"), }, ]; export const storybookSecretAccessEvents: SecretAccessEvent[] = [ { id: "evt-1", companyId: "company-storybook", secretId: "secret-openai", version: 3, provider: "local_encrypted", actorType: "agent", actorId: "agent-codex", consumerType: "agent", consumerId: "agent-codex", configPath: "env.OPENAI_API_KEY", issueId: "issue-storybook-1", heartbeatRunId: "run-storybook", pluginId: null, outcome: "success", errorCode: null, createdAt: recent(12), }, { id: "evt-2", companyId: "company-storybook", secretId: "secret-openai", version: 3, provider: "local_encrypted", actorType: "system", actorId: null, consumerType: "project", consumerId: "project-app", configPath: "env.OPENAI_API_KEY", issueId: null, heartbeatRunId: null, pluginId: null, outcome: "success", errorCode: null, createdAt: recent(48), }, { id: "evt-3", companyId: "company-storybook", secretId: "secret-openai", version: null, provider: "local_encrypted", actorType: "agent", actorId: "agent-codex", consumerType: "agent", consumerId: "agent-codex", configPath: "env.OPENAI_API_KEY", issueId: "issue-storybook-1", heartbeatRunId: "run-storybook", pluginId: null, outcome: "failure", errorCode: "secret_disabled", createdAt: recent(360), }, ]; export const storybookSecretProviderHealth = { providers: [ { provider: "local_encrypted" as const, status: "ok" as const, message: "Encryption key loaded; permissions OK.", warnings: [] as string[], backupGuidance: ["Backup ~/.paperclip/instances/default/secrets/key separately from the database."], }, { provider: "aws_secrets_manager" as const, status: "warn" as const, message: "Connected; KMS key rotation policy not yet enforced.", warnings: ["Set up automated KMS key rotation for production tenants."], backupGuidance: [], }, { provider: "gcp_secret_manager" as const, status: "ok" as const, message: "Service account reachable.", warnings: [] as string[], backupGuidance: [], }, { provider: "vault" as const, status: "ok" as const, message: "KV v2 mount reachable.", warnings: [] as string[], backupGuidance: [], }, ], };