Skip to content

Conversation

@rossedfort
Copy link
Contributor

@rossedfort rossedfort commented Jan 28, 2026

Description & motivation 💭

  • Adds a UI for standalone activities summary, details, etc.

Screenshots (if applicable) 📸

Design Considerations 🎨

Testing 🧪

How was this tested 👻

  • Manual testing
  • E2E tests added
  • Unit tests added

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

Run temporal server from a local build

  1. Ensure you have cloned the temporalio/temporal repo
  2. Run make bins and make start
  3. Running temporal server from a local build does not create the default namespace, run temporal operator namespace create --namespace default
  4. Create some search attributes for the default namespace, run temporal operator search-attribute create --namespace default --name MySearchAttribute --type Keyword

Run the UI against a local build of temporal server

  1. Checkout the standalone-activities branch in the ui repo
  2. cd server/ && make build
  3. cd .. && pnpm dev:local-temporal

Run some sample workflows in the samples-go repo

  1. cd temporal-fixtures/stuck-workflows/
  2. In one terminal window, run go run worker/main.go
  3. In another terminal window, run go run starter/main.go

Start a Standalone Activity

  1. In the UI, go to http://localhost:3000/namespaces/default/activities/start
  2. Generate a random Activity ID or use your own
  3. Fill the Task Queue input with stuck-workflows
  4. Fill the Activity Type input with StuckWorkflowActivity
  5. Fill the Start to Close Timeout field with some long duration, 1 hour for example
  6. Click the "Start Standalone Activity" button
  7. Go to http://localhost:3000/namespaces/default/activities/<activity_id>/details

To test Activities with Payloads + Codec Server

In the samples-go repo:
  1. cd codec-server
  2. In one terminal window, run go run ./codec-server -web=http://localhost:3000 -port=8088
  3. In a second terminal window, run go run worker/main.go
  4. In a third terminal window, run go run starter/main.go
In the UI
  1. Set the Data Encoder URL to http://localhost:8088
  2. Go to http://localhost:3000/namespaces/default/activities/start
  3. Generate a random Activity ID or use your own
  4. Fill the Task Queue input with codecserver
  5. Fill the Activity Type input with Activity
  6. Supply an Input
  7. Supply either a Start to Close Timeout or Schedule to Close Timeout
  8. Expand the "More Options" section, and supply Search Attribute(s), Summary, and Details
  9. Click the "Start Standalone Activity" button
  10. Go to http://localhost:3000/namespaces/default/activities/<activity_id>/details and ensure payloads are being decoded.

Checklists

Draft Checklist

Merge Checklist

Issue(s) closed

Docs

Any docs updates needed?

rossedfort and others added 9 commits January 7, 2026 11:05
* WIP - start standalone activity

* change routes, add duration input, fix imports

* use queryparams for initial form values

* clean up

- update go api module
- clean up api routes
- add placeholder page for activity execution details
- add support for query params to pre-fill form

* add page components

* add integration tests
* standalone activity details

* decode and refactor

* clean up

* clean up

* add page titles

* add default param

* remove pause, update and reset buttons

* fix pnpm lock

* add error state

* increase toast duration
* Add standalone activities UI

* Upgrade to svelte5

* Don't allow onclick on button until we migrate it to Svelte5

* Remove batch functionality

* Fix up some table stuff

* Add filterable/copiable cells

* Add Start Activity Like this One
* add terminate and cancel to activity details page

* update api
* design scrub

* fix i18n

* rename and reorganize

* fix poller
@rossedfort rossedfort requested review from a team and Alex-Tideman as code owners January 28, 2026 17:41
@vercel
Copy link

vercel bot commented Jan 28, 2026

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

Project Deployment Actions Updated (UTC)
holocene Ready Ready Preview, Comment Feb 3, 2026 6:59pm

Request Review

@temporal-cicd
Copy link
Contributor

temporal-cicd bot commented Jan 28, 2026

Warnings
⚠️

📊 Strict Mode: 197 errors in 37 files (16.7% of 1183 total)

src/lib/utilities/route-for.ts (1)
  • L197:4: Type 'string | undefined' is not assignable to type 'string'.
src/lib/utilities/route-for-api.ts (44)
  • L67:48: Element implicitly has an 'any' type because type 'typeof globalThis' has no index signature.
  • L73:50: Element implicitly has an 'any' type because type 'typeof globalThis' has no index signature.
  • L75:4: Type 'string | null' is not assignable to type 'string'.
  • L102: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; }'.
  • L102:38: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Partial'.
  • L104: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; }'.
  • L104:57: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Partial'.
  • L131:40: Argument of type 'Partial | undefined' is not assignable to parameter of type 'Partial'.
  • L138:40: 'parameters' is possibly 'undefined'.
  • L142:93: 'parameters' is possibly 'undefined'.
  • L154:38: 'parameters' is possibly 'undefined'.
  • L154:72: 'parameters' is possibly 'undefined'.
  • L155:38: 'parameters' is possibly 'undefined'.
  • L155:72: 'parameters' is possibly 'undefined'.
  • L155:104: 'parameters' is possibly 'undefined'.
  • L156:38: 'parameters' is possibly 'undefined'.
  • L156:72: 'parameters' is possibly 'undefined'.
  • L156:104: 'parameters' is possibly 'undefined'.
  • L157:37: 'parameters' is possibly 'undefined'.
  • L157:71: 'parameters' is possibly 'undefined'.
  • L162:40: 'parameters' is possibly 'undefined'.
  • L163:36: 'parameters' is possibly 'undefined'.
  • L164:37: 'parameters' is possibly 'undefined'.
  • L165:39: 'parameters' is possibly 'undefined'.
  • L166:37: 'parameters' is possibly 'undefined'.
  • L167:46: 'parameters' is possibly 'undefined'.
  • L168:44: 'parameters' is possibly 'undefined'.
  • L169:39: 'parameters' is possibly 'undefined'.
  • L171:42: 'parameters' is possibly 'undefined'.
  • L172:49: 'parameters' is possibly 'undefined'.
  • L173:41: 'parameters' is possibly 'undefined'.
  • L174:40: 'parameters' is possibly 'undefined'.
  • L174:83: 'parameters' is possibly 'undefined'.
  • L175:48: 'parameters' is possibly 'undefined'.
  • L175:99: 'parameters' is possibly 'undefined'.
  • L176:42: 'parameters' is possibly 'undefined'.
  • L176:77: 'parameters' is possibly 'undefined'.
  • L177:44: 'parameters' is possibly 'undefined'.
  • L178:50: 'parameters' is possibly 'undefined'.
  • L179:49: 'parameters' is possibly 'undefined'.
  • L179:84: 'parameters' is possibly 'undefined'.
  • L180:52: 'parameters' is possibly 'undefined'.
  • L180:87: 'parameters' is possibly 'undefined'.
  • L186:16: This overload signature is not compatible with its implementation signature.
src/lib/stores/filters.ts (2)
  • L99:2: Argument of type 'StartStopNotifier<EventTypeCategory[] | null>' is not assignable to parameter of type 'StartStopNotifier<EventTypeCategory[] | undefined>'.
  • L115:13: Argument of type 'StartStopNotifier<("Scheduled" | "Unspecified" | "Open" | "New" | "Started" | "Initiated" | "Running" | "Completed" | "Fired" | "Signaled" | "Canceled" | "Failed" | "Terminated" | "TimedOut" | "CancelRequested")[] | null>' is not assignable to parameter of type 'StartStopNotifier<("Scheduled" | "Unspecified" | "Open" | "New" | "Started" | "Initiated" | "Running" | "Completed" | "Fired" | "Signaled" | "Canceled" | "Failed" | "Terminated" | "TimedOut" | "CancelRequested")[] | undefined>'.
src/lib/holocene/button.svelte (6)
  • L109:13: Type 'null' is not assignable to type '"activity" | "add-square" | "add" | "apple" | "archives" | "arrow-down" | "arrow-left" | "arrow-up" | "arrow-right" | "ascending" | "astronaut" | "batch-operation" | "book" | ... 129 more ... | "xmark-square"'.
  • L110:13: Type 'null' is not assignable to type '"activity" | "add-square" | "add" | "apple" | "archives" | "arrow-down" | "arrow-left" | "arrow-up" | "arrow-right" | "ascending" | "astronaut" | "batch-operation" | "book" | ... 129 more ... | "xmark-square"'.
  • L112:13: Type 'null' is not assignable to type 'string'.
  • L113:13: Type 'null' is not assignable to type 'string'.
  • L114:13: Type 'null' is not assignable to type 'string'.
  • L102:7: Argument of type '$$Props' is not assignable to parameter of type '{ variant?: "primary" | "secondary" | "destructive" | "ghost" | "table-header" | null | undefined; size?: "xs" | "sm" | "md" | "lg" | null | undefined; disabled?: boolean | undefined; ... 9 more ...; class?: string | undefined; }'.
src/lib/runes/workflow-versions.svelte.ts (5)
  • L71:5: Parameter 'poller' implicitly has an 'any' type.
  • L103:4: Type 'string | null | undefined' is not assignable to type 'string'.
  • L104:4: Type 'string | null | undefined' is not assignable to type 'string'.
  • L105:4: Type 'string | null | undefined' is not assignable to type 'string'.
  • L106:4: Type 'string | null | undefined' is not assignable to type 'string'.
src/lib/runes/workflow-versions.test.ts (10)
  • L84:8: 'workflow.searchAttributes' is possibly 'undefined'.
  • L114:8: 'workflow.searchAttributes' is possibly 'undefined'.
  • L143:8: 'workflow.searchAttributes' is possibly 'undefined'.
  • L170:8: 'workflow.searchAttributes' is possibly 'undefined'.
  • L203:8: 'workflow.searchAttributes' is possibly 'undefined'.
  • L219:8: 'workflow.searchAttributes' is possibly 'undefined'.
  • L238:8: 'workflow.searchAttributes' is possibly 'undefined'.
  • L260:10: 'workflow.searchAttributes' is possibly 'undefined'.
  • L280:8: 'workflow.searchAttributes' is possibly 'undefined'.
  • L303:8: 'workflow.searchAttributes' is possibly 'undefined'.
src/lib/services/activity-batch-service.ts (2)
  • L34:33: Type 'string | undefined' is not assignable to type 'string'.
  • L38:32: Type 'string | undefined' is not assignable to type 'string'.
src/lib/utilities/encode-payload.ts (1)
  • L73:2: Type 'unknown[] | null' is not assignable to type 'IPayload[]'.
src/lib/services/workflow-service.ts (25)
  • L191:6: Type 'ErrorCallback' is not assignable to type '(error: unknown, toasts?: Toaster, errors?: Writable<NetworkError | null>, isBrowser?: boolean) => void'.
  • L253:4: Type 'ErrorCallback' is not assignable to type '(error: unknown, toasts?: Toaster, errors?: Writable<NetworkError | null>, isBrowser?: boolean) => void'.
  • L292:45: Argument of type 'unknown' is not assignable to parameter of type 'WorkflowExecutionAPIResponse | undefined'.
  • L313:4: Type 'string | undefined' is not assignable to type 'string'.
  • L425:28: No overload matches this call.
  • L475:4: Type 'string | undefined' is not assignable to type 'string'.
  • L552:4: Type 'ErrorCallback' is not assignable to type '(error: unknown, toasts?: Toaster, errors?: Writable<NetworkError | null>, isBrowser?: boolean) => void'.
  • L553:10: Argument of type '(response?: WorkflowExecutionAPIResponse) => WorkflowExecution' is not assignable to parameter of type '(value: unknown) => WorkflowExecution | PromiseLike'.
  • L583:21: Type 'null' cannot be used as an index type.
  • L722:8: Type 'ErrorCallback' is not assignable to type '(error: unknown, toasts?: Toaster, errors?: Writable<NetworkError | null>, isBrowser?: boolean) => void'.
  • L741:6: Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
  • L747:8: 'workflow' is possibly 'undefined'.
  • L749:8: 'workflow' is possibly 'undefined'.
  • L757:8: 'workflow' is possibly 'undefined'.
  • L759:8: 'workflow' is possibly 'undefined'.
  • L766:28: Element implicitly has an 'any' type because expression of type '0' can't be used to index type '{}'.
  • L771:8: Element implicitly has an 'any' type because expression of type '0' can't be used to index type '{}'.
  • L773:10: Element implicitly has an 'any' type because expression of type '0' can't be used to index type '{}'.
  • L776:8: Element implicitly has an 'any' type because expression of type '0' can't be used to index type '{}'.
  • L923:20: Argument of type 'WorkflowExecution | undefined' is not assignable to parameter of type 'WorkflowExecution'.
  • L962:28: Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
  • L990:10: Property 'executions' does not exist on type 'WithoutNextPageToken'.
  • L990:41: Argument of type '(token: string) => Promise' is not assignable to parameter of type '(token?: NextPageToken | undefined) => Promise'.
  • L1034:6: Type 'ErrorCallback' is not assignable to type '(error: unknown, toasts?: Toaster, errors?: Writable<NetworkError | null>, isBrowser?: boolean) => void'.
  • L1063:6: Type 'ErrorCallback' is not assignable to type '(error: unknown, toasts?: Toaster, errors?: Writable<NetworkError | null>, isBrowser?: boolean) => void'.
src/lib/services/standalone-activities.ts (4)
  • L54:6: Type 'ErrorCallback' is not assignable to type '(error: unknown, toasts?: Toaster, errors?: Writable<NetworkError | null>, isBrowser?: boolean) => void'.
  • L118:6: Type '{ indexedFields?: ({ [k: string]: temporal.api.common.v1.IPayload; } | null); }' is not assignable to type '{ [k: string]: IPayload; }'.
  • L132:4: Type 'ISearchAttributes | null' is not assignable to type 'ISearchAttributes | undefined'.
  • L146:4: Type '{ backoffCoefficient?: number | undefined; maximumAttempts?: number | undefined; maximumInterval?: string | undefined; initialInterval?: string | undefined; }' is not assignable to type 'RetryPolicy'.
src/lib/stores/configurable-table-columns.ts (1)
  • L221:51: Property 'name' does not exist on type '(INamespaceInfo & { capabilities?: (ICapabilities & { standaloneActivities?: boolean | undefined; }) | undefined; }) | undefined'.
src/lib/utilities/get-activity-status-and-count.ts (2)
  • L43:15: Property 'groupValues' does not exist on type 'never'.
  • L45:35: Property 'count' does not exist on type 'never'.
src/lib/utilities/standalone-activity-poller.svelte.ts (10)
  • L17:10: Property 'runId' has no initializer and is not definitely assigned in the constructor.
  • L18:10: Property 'token' has no initializer and is not definitely assigned in the constructor.
  • L44:19: Argument of type 'unknown' is not assignable to parameter of type 'Error'.
  • L47:18: Argument of type 'ActivityExecution | undefined' is not assignable to parameter of type 'ActivityExecution'.
  • L49:8: 'activityExecution' is possibly 'undefined'.
  • L50:19: 'activityExecution' is possibly 'undefined'.
  • L51:6: Type 'string | undefined' is not assignable to type 'string'.
  • L51:19: 'activityExecution' is possibly 'undefined'.
  • L67:12: Type 'string | undefined' is not assignable to type 'string'.
  • L75:23: Argument of type 'unknown' is not assignable to parameter of type 'Error'.
src/lib/holocene/navigation/navigation-container.svelte (1)
  • L33:3: Argument of type '{ accesskey?: string | undefined | null; autocapitalize?: "characters" | "off" | "on" | "none" | "sentences" | "words" | undefined | null; autofocus?: boolean | undefined | null; ... 432 more ...; xmlns?: string | undefined | null; }' is not assignable to parameter of type 'HTMLProps<"nav", HTMLAttributes>'.
src/lib/components/worker-table.svelte (6)
  • L69:12: Type 'number | null | undefined' is not assignable to type 'string | number'.
  • L69:24: 'workers.versioningInfo' is possibly 'null' or 'undefined'.
  • L75:5: Parameter 'poller' implicitly has an 'any' type.
  • L158:35: 'poller.taskQueueTypes' is possibly 'undefined'.
  • L165:35: 'poller.taskQueueTypes' is possibly 'undefined'.
  • L172:35: 'poller.taskQueueTypes' is possibly 'undefined'.
src/lib/components/workflow/client-actions/signal-confirmation-modal.svelte (2)
  • L67:6: Type 'string | undefined' is not assignable to type 'string'.
  • L95:9: 'signalDefinitions.length' is possibly 'undefined'.
src/lib/components/workflow/client-actions/update-confirmation-modal.svelte (6)
  • L34:6: Variable 'failure' implicitly has type 'any' in some locations where its type cannot be determined.
  • L35:6: Variable 'success' implicitly has type 'any' in some locations where its type cannot be determined.
  • L81:6: Type 'string | undefined' is not assignable to type 'string'.
  • L110:9: 'updateDefinitions.length' is possibly 'undefined'.
  • L158:9: Variable 'failure' implicitly has an 'any' type.
  • L169:9: Variable 'success' implicitly has an 'any' type.
src/lib/holocene/tab-buttons/tab-button.svelte (1)
  • L41:13: Type 'null' is not assignable to type '"activity" | "add-square" | "add" | "apple" | "archives" | "arrow-down" | "arrow-left" | "arrow-up" | "arrow-right" | "ascending" | "astronaut" | "batch-operation" | "book" | ... 129 more ... | "xmark-square"'.
src/lib/components/schedule/schedule-input-payload.svelte (2)
  • L32:13: 'payloads.payloads' is possibly 'null' or 'undefined'.
  • L34:31: 'payloads.payloads' is possibly 'null' or 'undefined'.
src/lib/components/workflow/search-attribute-input/index.svelte (4)
  • L57:13: Type 'string | false | 0 | undefined' is not assignable to type 'string | undefined'.
  • L71:31: Argument of type 'string | null' is not assignable to parameter of type 'string'.
  • L106:9: Type '{ label: string; "data-testid": string; id: string; class: string; value: string | null; }' is not assignable to type '__sveltets_2_PropsWithChildren<$$Props, { 'before-input': { disabled: boolean; }; 'after-input': { disabled: boolean; }; }> | undefined'.
  • L129:29: Argument of type 'string | null' is not assignable to parameter of type 'string'.
src/lib/components/schedule/schedule-form-view.svelte (12)
  • L138:4: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{}'.
  • L148:6: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{}'.
  • L150:6: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{}'.
  • L156:6: Element implicitly has an 'any' type because expression of type '"input"' can't be used to index type '{}'.
  • L162:6: Element implicitly has an 'any' type because expression of type '"input"' can't be used to index type '{}'.
  • L165:6: Element implicitly has an 'any' type because expression of type '"input"' can't be used to index type '{}'.
  • L198:17: Element implicitly has an 'any' type because expression of type '"name"' can't be used to index type '{}'.
  • L210:17: Element implicitly has an 'any' type because expression of type '"workflowType"' can't be used to index type '{}'.
  • L220:17: Element implicitly has an 'any' type because expression of type '"workflowId"' can't be used to index type '{}'.
  • L230:17: Element implicitly has an 'any' type because expression of type '"taskQueue"' can't be used to index type '{}'.
  • L240:10: Type 'IPayloads | null | undefined' is not assignable to type 'IPayloads'.
  • L264:52: Argument of type 'ISchedule | null' is not assignable to parameter of type 'ISchedule | undefined'.
src/lib/components/standalone-activities/cancel-confirmation-modal.svelte (1)
  • L45:6: Type 'string | undefined' is not assignable to type 'string'.
src/lib/components/standalone-activities/terminate-confirmation-modal.svelte (1)
  • L48:6: Type 'string | undefined' is not assignable to type 'string'.
src/lib/components/standalone-activities/activity-actions.svelte (1)
  • L71:14: Type 'string | null | undefined' is not assignable to type 'string | undefined'.
src/lib/components/standalone-activities/activity-counts.svelte (7)
  • L83:8: Type 'string | null' is not assignable to type 'string'.
  • L87:38: Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
  • L88:54: Argument of type 'never[] | { count: string; groupValues: IPayloads; }[] | undefined' is not assignable to parameter of type 'never[] | undefined'.
  • L99:8: Type 'string | null' is not assignable to type 'string'.
  • L103:41: Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
  • L104:57: Argument of type 'never[] | { count: string; groupValues: IPayloads; }[] | undefined' is not assignable to parameter of type 'never[] | undefined'.
  • L152:14: Object is possibly 'undefined'.
src/lib/components/standalone-activities/activity-header.svelte (1)
  • L86:8: Type 'string | null | undefined' is not assignable to type 'string'.
src/lib/components/standalone-activities/saved-views.svelte (1)
  • L154:25: Argument of type 'string | undefined' is not assignable to parameter of type 'string | number | boolean'.
src/lib/components/standalone-activities/activities-summary-filter-bar/dropdown-filter-list.svelte (4)
  • L77:23: '$activeQueryIndex' is possibly 'null'.
  • L78:6: '$activeQueryIndex' is possibly 'null'.
  • L96:10: Type 'number | null' is not assignable to type 'number | undefined'.
  • L103:10: Type 'number | null' is not assignable to type 'number | undefined'.
src/lib/components/standalone-activities/start-standalone-activity-form/form.svelte (4)
  • L137:6: Type 'ClientValidationAdapter<{ namespace: string; identity: string; activityId: string; taskQueue: string; activityType: string; summary?: string | undefined; details?: string | undefined; input?: string | undefined; ... 11 more ...; idConflictPolicy?: string | undefined; }, { ...; }>' is not assignable to type 'ClientValidationAdapter<Partial<{ input: string; messageType: string; scheduleToStartTimeout: string; summary: string; details: string; heartbeatTimeout: string; initialInterval: string; backoffCoefficient: undefined; ... 11 more ...; scheduleToCloseTimeout: string; }>, Record<...>> | ValidatorsOption<...> | undefined'.
  • L142:34: Argument of type '{ searchAttributes: SearchAttributeInput[]; input: string; messageType: string; scheduleToStartTimeout: string; summary: string; details: string; heartbeatTimeout: string; ... 13 more ...; scheduleToCloseTimeout: string; }' is not assignable to parameter of type 'StandaloneActivityFormData'.
  • L352:13: Type 'undefined' is not assignable to type 'string'.
  • L354:13: Type 'undefined' is not assignable to type 'string'.
src/lib/layouts/workflow-header.svelte (14)
  • 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'.
  • L67:4: 'workflow' is possibly 'null'.
  • L68:22: Type 'undefined' cannot be used as an index type.
  • L123:37: Argument of type 'WorkflowExecution | null' is not assignable to parameter of type 'WorkflowExecution'.
  • L124:45: Argument of type 'WorkflowExecution | null' is not assignable to parameter of type 'WorkflowExecution'.
  • L128:13: Type 'boolean | undefined' is not assignable to type 'boolean'.
  • L130:13: Type 'WorkflowExecution | null' is not assignable to type 'WorkflowExecution'.
  • L155:9: Type 'boolean | undefined' is not assignable to type 'boolean'.
  • L157:9: Type 'WorkflowExecution | null' is not assignable to type 'WorkflowExecution'.
  • L165:20: Type 'WorkflowExecution | null' is not assignable to type 'WorkflowExecution'.
  • L211:11: 'workflow' is possibly 'null'.
  • L253:12: 'workflow' is possibly 'null'.
  • L253:12: 'workflow.searchAttributes' is possibly 'undefined'.
src/lib/pages/standalone-activities.svelte (1)
  • L58:4: Type 'string | null' is not assignable to type 'string'.
src/lib/pages/standalone-activity-details.svelte (4)
  • L53:48: Argument of type 'number | undefined' is not assignable to parameter of type 'number | null'.
  • L81:14: Type 'string | undefined' is not assignable to type 'string'.
  • L86:14: Argument of type 'IFailure | undefined' is not assignable to parameter of type 'IFailure'.
  • L106:32: Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
src/lib/pages/standalone-activity-metadata.svelte (3)
  • L14:6: Argument of type 'IPayload | null | undefined' is not assignable to parameter of type 'IPayload | Payload'.
  • L17:6: Argument of type 'IPayload | null | undefined' is not assignable to parameter of type 'IPayload | Payload'.
  • L32:23: Argument of type 'IUserMetadata | undefined' is not assignable to parameter of type 'IUserMetadata'.
src/lib/pages/standalone-activity-workers.svelte (3)
  • L16:41: Type 'string | undefined' is not assignable to type 'string'.
  • L21:35: 'searchAttributes' is possibly 'undefined'.
  • L21:35: No overload matches this call.
src/lib/pages/start-workflow.svelte (3)
  • L139:17: Property 'message' does not exist on type '{}'.
  • L161:20: 'pollers' is possibly 'null' or 'undefined'.
  • L240:20: Argument of type 'string | null' is not assignable to parameter of type 'string'.
src/routes/(app)/+layout.svelte (1)
  • L59:23: Argument of type '(namespace: string) => { namespace: string; onClick: (namespace: string) => void; }' is not assignable to parameter of type '(value: string | null | undefined, index: number, array: (string | null | undefined)[]) => { namespace: string; onClick: (namespace: string) => void; }'.
src/routes/(app)/namespaces/[namespace]/activities/[activityId]/+layout.svelte (1)
  • L47:4: Type 'ActivityExecution | undefined' is not assignable to type 'ActivityExecution'.

Generated by 🚫 dangerJS against a74d650

loading = true;
try {
const { count, groups } = await fetchActivityCountByStatus({
namespace,
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 | null' is not assignable to type 'string'.

query,
}).catch((_e) => {
return { count: '0', groups: [] };
});
Copy link
Contributor

Choose a reason for hiding this comment

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

  • ⚠️ Argument of type 'string | undefined' is not assignable to parameter of type 'string'.

}).catch((_e) => {
return { count: '0', groups: [] };
});
$activityCount.count = parseInt(count);
Copy link
Contributor

Choose a reason for hiding this comment

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

  • ⚠️ Argument of type 'never[] | { count: string; groupValues: IPayloads; }[] | undefined' is not assignable to parameter of type 'never[] | undefined'.

const fetchNewCounts = async () => {
try {
const { count, groups } = await fetchActivityCountByStatus({
namespace,
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 | null' is not assignable to type 'string'.

query,
}).catch((_e) => {
return { count: '0', groups: [] };
});
Copy link
Contributor

Choose a reason for hiding this comment

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

  • ⚠️ Argument of type 'string | undefined' is not assignable to parameter of type 'string'.


this.onUpdate(activityExecution);

if (activityExecution.info.status === 'ACTIVITY_EXECUTION_STATUS_RUNNING') {
Copy link
Contributor

Choose a reason for hiding this comment

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

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

this.onUpdate(activityExecution);

if (activityExecution.info.status === 'ACTIVITY_EXECUTION_STATUS_RUNNING') {
this.runId = activityExecution.runId;
Copy link
Contributor

Choose a reason for hiding this comment

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

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

if (
polledActivityExecution &&
!isEmptyObject(polledActivityExecution)
) {
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'.

if (error instanceof Error && error.name === 'AbortError') {
return;
}

Copy link
Contributor

Choose a reason for hiding this comment

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

  • ⚠️ Argument of type 'unknown' is not assignable to parameter of type 'Error'.

<ErrorComponent {error} />
{:else}
<StandaloneActivityLayout
{poller}
Copy link
Contributor

Choose a reason for hiding this comment

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

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

@laurakwhit laurakwhit self-requested a review January 29, 2026 16:18
disabled={!isRunning}
size="sm"
>
{translate('standalone-activities.request-cancellation')}
Copy link
Collaborator

Choose a reason for hiding this comment

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

After requesting cancellation the button remains enabled and the status doesn't update. Should we refetch to make sure the status gets updated and the button gets disabled ⬇️?

Image

disabled={!isRunning}
data-testid="terminate-button"
>
{translate('standalone-activities.terminate')}
Copy link
Collaborator

Choose a reason for hiding this comment

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

Similar to above, after terminating the status doesn't update and the button is still enabled unless the page is refreshed. We probably want to update it ⬇️

Image

Otherwise there's an error if the user tries to select "terminate" again ⬇️
Image

</script>

<div class="flex shrink flex-wrap items-center justify-start gap-2">
<ActivityDropdownFilterList />
Copy link
Collaborator

@laurakwhit laurakwhit Jan 30, 2026

Choose a reason for hiding this comment

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

Do we want the filter values to show up in the filter bar next to + Filter? Right now it's only in the raw query input

Image

when navigating to the list view from the detail page "Activity Type" filter link 🔗
Image

{#each systemActivityViews as view}
{@render queryButton({
...view,
active: query === view.query,
Copy link
Collaborator

Choose a reason for hiding this comment

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

Is this expected? All activities fall under Failed, but the status in the columns differs from the status count at the top ⬇️

Image

>
<h5>{translate('standalone-activities.form-timeouts-heading')}</h5>

<DurationInput
Copy link
Collaborator

Choose a reason for hiding this comment

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

Looks like these inputs don't account for dark mode 😎

Image Image

{:else if label === 'Close Time'}
<Timestamp dateTime={activity.closeTime} />
{:else if label === 'Execution Duration'}
{#if activity.executionDuration}
Copy link
Collaborator

Choose a reason for hiding this comment

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

Wondering if we should just hide this if they don't have a value (e.g. Close Time and Duration here ⬇️)?

Image

Or maybe add a - similar to in workflow details?
Image

</td>
{/if}

<style lang="postcss">
Copy link
Collaborator

Choose a reason for hiding this comment

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

NIT: Maybe we can avoid adding more postcss if possible 🙏

goto(
routeForStartStandaloneActivity({
namespace,
activityId: activityExecutionInfo.activityId,
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 | null | undefined' is not assignable to type 'string | undefined'.

<DetailListLabel>Activity Type</DetailListLabel>
<DetailListLinkValue
copyable
iconName="filter"
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 | null | undefined' is not assignable to type 'string'.

server/go.mod Outdated
github.com/stretchr/testify v1.10.0
github.com/urfave/cli/v2 v2.3.0
go.temporal.io/api v1.57.0
go.temporal.io/api v1.61.0
Copy link
Collaborator

Choose a reason for hiding this comment

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

Can we bump this to the latest v1.62.0?

const handleCopy = (e: Event) => {
const sharableViewUrl =
new URL(page.url.href) +
'&savedQuery=' +
Copy link
Contributor

@temporal-cicd temporal-cicd bot Feb 3, 2026

Choose a reason for hiding this comment

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

  • ⚠️ Argument of type 'string | undefined' is not assignable to parameter of type 'string | number | boolean'.

<RetryPolicyInput
bind:initialInterval={$form.initialInterval}
bind:backoffCoefficient={$form.backoffCoefficient}
bind:maximumInterval={$form.maximumInterval}
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' is not assignable to type 'string'.


if (index === $activeQueryIndex) {
$activeQueryIndex = null;
$filter = emptyFilter();
Copy link
Contributor

Choose a reason for hiding this comment

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

  • ⚠️ '$activeQueryIndex' is possibly 'null'.

if (index === $activeQueryIndex) {
$activeQueryIndex = null;
$filter = emptyFilter();
} else if (index < $activeQueryIndex) {
Copy link
Contributor

Choose a reason for hiding this comment

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

  • ⚠️ '$activeQueryIndex' is possibly 'null'.

{#if isStatusFilter(activityFilter) && i === firstExecutionStatusIndex}
<StatusDropdownFilterChip
filters={executionStatusFilters}
index={i}
Copy link
Contributor

Choose a reason for hiding this comment

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

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

{:else if !isStatusFilter(activityFilter) && activityFilter.attribute}
<DropdownFilterChip
filter={activityFilter}
index={i}
Copy link
Contributor

Choose a reason for hiding this comment

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

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

let refreshTime = $state(new Date());

const refreshTimeFormatted = $derived(
formatDate(refreshTime, $timeFormat, {
Copy link
Contributor

@andrewzamojc andrewzamojc Feb 3, 2026

Choose a reason for hiding this comment

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

Change request: If you use the $timestamp store, this'll be reactive for 12/24 hour format change to.

}
});

$effect(() => {
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 | null' is not assignable to type 'string'.

Copy link
Contributor

@andrewzamojc andrewzamojc left a comment

Choose a reason for hiding this comment

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

I tried out the branch locally and was able to start/stop a standalone activity and view its details. The decoding steps in the PR worked too. Looking pretty good to me 👍

@rossedfort rossedfort merged commit 023f034 into main Feb 3, 2026
19 checks passed
@rossedfort rossedfort deleted the standalone-activities branch February 3, 2026 20:55
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.

5 participants