Skip to content

Conversation

@laurakwhit
Copy link
Collaborator

Description & motivation 💭

  • Adds a Pause button to the Workflow details page
  • Adds an Unpause button to the Workflow details page
  • Shows an alert on the Workflow details page if the Workflow is paused
  • All activities in the Timeline should show as paused if the Workflow is paused

Screenshots (if applicable) 📸

Screenshot 2026-01-23 at 5 19 34 PM Screenshot 2026-01-23 at 5 17 56 PM
Screenshot 2026-01-23 at 5 16 51 PM Screenshot 2026-01-23 at 5 17 13 PM

Design Considerations 🎨

Testing 🧪

How was this tested 👻

  • Manual testing
  • E2E tests added
  • Unit tests added

Steps for others to test: 🚶🏽‍♂️🚶🏽‍♀️

With namespaceInfo> capabilities > workflowPause enabled > go to a Running workflow > select Pause Workflow > enter a reason and confirm

  • Verify there is a success toast
  • Verify the status of the Workflow is updated to Paused
  • Verify there is an alert with the reason the Workflow was paused on the Workflow details page

Select Unpause Workflow > enter a reason and confirm

  • Verify there is a success toast
  • Verify the status of the Workflow is updated
  • Verify there is no longer an alert r.e. Workflow pause on the Workflow details page

Checklists

Draft Checklist

Merge Checklist

Issue(s) closed

DT-3566

Docs

Any docs updates needed?

@vercel
Copy link

vercel bot commented Jan 24, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
holocene Ready Ready Preview, Comment Jan 24, 2026 0:34am

Request Review

!!page.data.namespace.namespaceInfo?.capabilities?.workflowPause,
);
const getResetDescription = ({
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • ⚠️ Binding element 'resetAuthorized' implicitly has an 'any' type.

);
const getResetDescription = ({
resetAuthorized,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • ⚠️ Binding element 'canResetWithPendingChildWorkflows' implicitly has an 'any' type.

const getResetDescription = ({
resetAuthorized,
canResetWithPendingChildWorkflows,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • ⚠️ Binding element 'resetEvents' implicitly has an 'any' type.

id: 'workflow-pause-success-toast',
message: translate('workflows.pause-success'),
});
} catch (err: unknown) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • ⚠️ Type 'string | undefined' is not assignable to type 'string'.

id: 'workflow-unpause-success-toast',
message: translate('workflows.unpause-success'),
});
} catch (err: unknown) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • ⚠️ Type 'string | undefined' is not assignable to type 'string'.

);
const workflowPaused = $derived(workflow?.status === 'Paused');
const resetRunId = $derived(
workflow.workflowExtendedInfo?.resetRunId ||
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • ⚠️ Type 'undefined' cannot be used as an index type.

) {
const formattedReason = formatReason({
action: Action.Pause,
reason,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • ⚠️ Type 'string | undefined' is not assignable to type 'string'.

) {
const formattedReason = formatReason({
action: Action.Unpause,
reason,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • ⚠️ Type 'string | undefined' is not assignable to type 'string'.

'worker-task-reachability': `/namespaces/${parameters?.namespace}/worker-task-reachability`,
'workflow.terminate': `/namespaces/${parameters?.namespace}/workflows/${parameters?.workflowId}/terminate`,
'workflow.cancel': `/namespaces/${parameters.namespace}/workflows/${parameters.workflowId}/cancel`,
'workflow.signal': `/namespaces/${parameters.namespace}/workflows/${parameters.workflowId}/signal/${parameters.signalName}`,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • ⚠️ 'parameters' is possibly 'undefined'.
  • ⚠️ 'parameters' is possibly 'undefined'.
  • ⚠️ 'parameters' is possibly 'undefined'.

'workflow.terminate': `/namespaces/${parameters?.namespace}/workflows/${parameters?.workflowId}/terminate`,
'workflow.cancel': `/namespaces/${parameters.namespace}/workflows/${parameters.workflowId}/cancel`,
'workflow.signal': `/namespaces/${parameters.namespace}/workflows/${parameters.workflowId}/signal/${parameters.signalName}`,
'workflow.update': `/namespaces/${parameters.namespace}/workflows/${parameters.workflowId}/update/${parameters.updateName}`,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • ⚠️ 'parameters' is possibly 'undefined'.
  • ⚠️ 'parameters' is possibly 'undefined'.

@temporal-cicd
Copy link
Contributor

temporal-cicd bot commented Jan 24, 2026

Warnings
⚠️

📊 Strict Mode: 84 errors in 7 files (7.5% of 1127 total)

src/lib/utilities/route-for-api.ts (36)
  • L63:48: Element implicitly has an 'any' type because type 'typeof globalThis' has no index signature.
  • L69:50: Element implicitly has an 'any' type because type 'typeof globalThis' has no index signature.
  • L71:4: Type 'string | null' is not assignable to type 'string'.
  • L98:8: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ namespace: string; workflowId: string; scheduleId: string; queue: string; queryType: string; signalName: string; updateName: string; batchJobId: string; runId: string; activityId: string; endpointId: string; deploymentName: string; version: string; }'.
  • L98:38: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Partial'.
  • L100:8: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ namespace: string; workflowId: string; scheduleId: string; queue: string; queryType: string; signalName: string; updateName: string; batchJobId: string; runId: string; activityId: string; endpointId: string; deploymentName: string; version: string; }'.
  • L100:57: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Partial'.
  • L127:40: Argument of type 'Partial | undefined' is not assignable to parameter of type 'Partial'.
  • L134:40: 'parameters' is possibly 'undefined'.
  • L138:93: 'parameters' is possibly 'undefined'.
  • L150:38: 'parameters' is possibly 'undefined'.
  • L150:72: 'parameters' is possibly 'undefined'.
  • L151:38: 'parameters' is possibly 'undefined'.
  • L151:72: 'parameters' is possibly 'undefined'.
  • L151:104: 'parameters' is possibly 'undefined'.
  • L152:38: 'parameters' is possibly 'undefined'.
  • L152:72: 'parameters' is possibly 'undefined'.
  • L152:104: 'parameters' is possibly 'undefined'.
  • L153:37: 'parameters' is possibly 'undefined'.
  • L153:71: 'parameters' is possibly 'undefined'.
  • L160:40: 'parameters' is possibly 'undefined'.
  • L161:36: 'parameters' is possibly 'undefined'.
  • L162:37: 'parameters' is possibly 'undefined'.
  • L163:39: 'parameters' is possibly 'undefined'.
  • L164:37: 'parameters' is possibly 'undefined'.
  • L165:46: 'parameters' is possibly 'undefined'.
  • L166:44: 'parameters' is possibly 'undefined'.
  • L167:39: 'parameters' is possibly 'undefined'.
  • L169:42: 'parameters' is possibly 'undefined'.
  • L170:49: 'parameters' is possibly 'undefined'.
  • L171:41: 'parameters' is possibly 'undefined'.
  • L172:40: 'parameters' is possibly 'undefined'.
  • L172:83: 'parameters' is possibly 'undefined'.
  • L173:48: 'parameters' is possibly 'undefined'.
  • L173:99: 'parameters' is possibly 'undefined'.
  • L179:16: This overload signature is not compatible with its implementation signature.
src/lib/utilities/workflow-actions.ts (1)
  • L30:12: Variable 'translatedAction' is used before being assigned.
src/lib/services/workflow-service.ts (29)
  • L193:6: Type 'ErrorCallback' is not assignable to type '(error: unknown, toasts?: Toaster, errors?: Writable<NetworkError | null>, isBrowser?: boolean) => void'.
  • L255:4: Type 'ErrorCallback' is not assignable to type '(error: unknown, toasts?: Toaster, errors?: Writable<NetworkError | null>, isBrowser?: boolean) => void'.
  • L294:45: Argument of type 'unknown' is not assignable to parameter of type 'WorkflowExecutionAPIResponse | undefined'.
  • L315:4: Type 'string | undefined' is not assignable to type 'string'.
  • L427:28: No overload matches this call.
  • L477:4: Type 'string | undefined' is not assignable to type 'string'.
  • L561:4: Type 'string | undefined' is not assignable to type 'string'.
  • L602:4: Type 'string | undefined' is not assignable to type 'string'.
  • L643:4: Type 'ErrorCallback' is not assignable to type '(error: unknown, toasts?: Toaster, errors?: Writable<NetworkError | null>, isBrowser?: boolean) => void'.
  • L644:10: Argument of type '(response?: WorkflowExecutionAPIResponse) => WorkflowExecution' is not assignable to parameter of type '(value: unknown) => WorkflowExecution | PromiseLike'.
  • L674:21: Type 'null' cannot be used as an index type.
  • L712:23: Element implicitly has an 'any' type because expression of type '0' can't be used to index type 'IPayloads'.
  • L721:23: Element implicitly has an 'any' type because expression of type '0' can't be used to index type 'IPayloads'.
  • L813:8: Type 'ErrorCallback' is not assignable to type '(error: unknown, toasts?: Toaster, errors?: Writable<NetworkError | null>, isBrowser?: boolean) => void'.
  • L832:6: Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
  • L838:8: 'workflow' is possibly 'undefined'.
  • L840:8: 'workflow' is possibly 'undefined'.
  • L848:8: 'workflow' is possibly 'undefined'.
  • L850:8: 'workflow' is possibly 'undefined'.
  • L857:28: Element implicitly has an 'any' type because expression of type '0' can't be used to index type '{}'.
  • L862:8: Element implicitly has an 'any' type because expression of type '0' can't be used to index type '{}'.
  • L864:10: Element implicitly has an 'any' type because expression of type '0' can't be used to index type '{}'.
  • L867:8: Element implicitly has an 'any' type because expression of type '0' can't be used to index type '{}'.
  • L1014:20: Argument of type 'WorkflowExecution | undefined' is not assignable to parameter of type 'WorkflowExecution'.
  • L1053:28: Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
  • L1081:10: Property 'executions' does not exist on type 'WithoutNextPageToken'.
  • L1081:41: Argument of type '(token: string) => Promise' is not assignable to parameter of type '(token?: NextPageToken | undefined) => Promise'.
  • L1125:6: Type 'ErrorCallback' is not assignable to type '(error: unknown, toasts?: Toaster, errors?: Writable<NetworkError | null>, isBrowser?: boolean) => void'.
  • L1154:6: Type 'ErrorCallback' is not assignable to type '(error: unknown, toasts?: Toaster, errors?: Writable<NetworkError | null>, isBrowser?: boolean) => void'.
src/lib/components/workflow/client-actions/pause-confirmation-modal.svelte (1)
  • L50:6: Type 'string | undefined' is not assignable to type 'string'.
src/lib/components/workflow/client-actions/unpause-confirmation-modal.svelte (1)
  • L50:6: Type 'string | undefined' is not assignable to type 'string'.
src/lib/components/workflow-actions.svelte (3)
  • L96:4: Binding element 'resetAuthorized' implicitly has an 'any' type.
  • L97:4: Binding element 'canResetWithPendingChildWorkflows' implicitly has an 'any' type.
  • L98:4: Binding element 'resetEvents' implicitly has an 'any' type.
src/lib/layouts/workflow-header.svelte (13)
  • L61:52: Argument of type 'string | null | undefined' is not assignable to parameter of type 'string'.
  • L64:23: Argument of type 'WorkflowStatus | undefined' is not assignable to parameter of type 'WorkflowStatus'.
  • L68:4: 'workflow' is possibly 'null'.
  • L69:22: Type 'undefined' cannot be used as an index type.
  • L124:37: Argument of type 'WorkflowExecution | null' is not assignable to parameter of type 'WorkflowExecution'.
  • L125:45: Argument of type 'WorkflowExecution | null' is not assignable to parameter of type 'WorkflowExecution'.
  • L129:13: Type 'boolean | undefined' is not assignable to type 'boolean'.
  • L131:13: Type 'WorkflowExecution | null' is not assignable to type 'WorkflowExecution'.
  • L156:9: Type 'boolean | undefined' is not assignable to type 'boolean'.
  • L158:9: Type 'WorkflowExecution | null' is not assignable to type 'WorkflowExecution'.
  • L166:20: Type 'WorkflowExecution | null' is not assignable to type 'WorkflowExecution'.
  • L236:11: 'workflow' is possibly 'null'.
  • L277:42: Argument of type 'WorkflowExecution | null' is not assignable to parameter of type 'WorkflowExecution'.

Generated by 🚫 dangerJS against 3d21385

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants