Add connection status and optional Latest Version column to deployments (DT-4174)#3618
Merged
Conversation
Phase 1-2 of DT-4174 (connection status on Deployments/Versions). - Add ProviderValidation/ComputeStatus types + computeStatus on VersionSummaryNew - Add deriveConnectionStatus + formatConnectionCheckTime pure utils with tests - Add ConnectionBadge component (dot + word + tooltip) and i18n keys State is derived client-side from compute_status.provider_validation (error_message + last_check_time): pending / connected / failed. The failure message from the API is rendered directly (no client-side code map). These phases are API-independent and degrade to Pending until the backend (temporalio/api#810, temporalio/temporal#10778) lands. List/details wiring and the configurable Latest Version column are follow-ups.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
|
…174) Phase 3-4 of DT-4174. List page: replace the Latest Version column with a composite Current Version cell (build ID + compute + connection badge); show No Current Version when there is no current version. Latest Version as an optional column is a follow-up. Details page: add a Connection column to the versions table, shown for Current/Ramping/Draining versions and an em dash otherwise. All new UI is behind the serverScaledDeployments capability; the validate-connection flow is unchanged.
Self-managed (non-serverless) deployments have no compute provider, so a connection indicator is meaningless for them. Gate the ConnectionBadge on the compute provider being present: the list Current Version cell shows it alongside the compute badge, and the versions table shows an em dash when there is no compute config. Found via local testing against a self-managed worker deployment.
…174) - List Current Version cell renders the connection dot + word inside the compute pill (Lambda • Connected) instead of as a separate badge, per design - ComputeBadge accepts children so the connection can be composed inside it - Rename the versions-table lifecycle column header to Lifecycle
…lumn (DT-4174) - Shrink the in-pill status dot (size-2 -> size-1.5) and shrink-0 so it stays small and vertically centered next to the label, matching the design - Add showDot prop to ConnectionBadge (default off); the list pill opts in, the details Connection column renders the word only
Move the connection rendering into ComputeBadge via a computeStatus prop so the icon, label, status dot, and status word are direct flex children of one pill (Lambda • Connected), with the tooltip on the pill. ConnectionBadge is now the word-only badge used by the details Connection column.
Showcases the composite pill across providers x Connected/Failed/Pending, compute-only (self-managed), and the details word-only ConnectionBadge.
- Connection colors use design tokens (text-success/text-danger/text-subtle) instead of raw green/red; the in-pill dot uses bg-current so it matches - Add Storybook play() render assertions for each connection scenario (Lambda/Cloud Run x Connected/Failed/Pending, compute-only), runnable via pnpm stories:test
The on-demand Validate Connection API is a dry-run and does not persist to compute_status, so it does not update the connection badge. Remove the implication that it does.
Both ComputeBadge (list pill) and ConnectionBadge (details column) duplicated the state->color map, state->label, and tooltip-text logic. Move them to connection-status.ts (connectionStateColor, connectionStateLabel, connectionTooltip) so there is a single source of truth; the components are now thin presentational shells.
| {#snippet pill()} | ||
| <div | ||
| class="inline-flex min-w-24 items-center justify-center gap-2 border border-subtle px-1" | ||
| > |
Contributor
There was a problem hiding this comment.
⚠️ 'config' is possibly 'undefined'.
| <div | ||
| class="inline-flex min-w-24 items-center justify-center gap-2 border border-subtle px-1" | ||
| > | ||
| <Icon name={config.icon} /> |
Contributor
There was a problem hiding this comment.
⚠️ 'config' is possibly 'undefined'.
connection-tooltip-connected and connection-tooltip-failed-checked were the
same string ('Checked {{ time }}'). Replace both with a single state-neutral
connection-tooltip-checked key used by connectionTooltip for the connected
and failed states.
formatConnectionCheckTime previously returned hardcoded English (date-fns output + a literal 'less than an hour ago'). Replace with translate keys (connection-checked-recently/-hour/-hours) and a manual hour calc, dropping the date-fns dependency from this helper. Output is unchanged for the existing states.
| return translate('deployments.connection-tooltip-pending'); | ||
| } | ||
| const checked = translate('deployments.connection-tooltip-checked', { | ||
| time: formatConnectionCheckTime( |
Contributor
There was a problem hiding this comment.
⚠️ Argument of type 'ITimestamp | undefined' is not assignable to parameter of type 'ValidTime'.
* Add Latest Version optional column to Deployments list (DT-4174) The second half of DT-4174. Latest Version is an opt-in, hidden-by-default column on the Worker Deployments list, toggled via the table's configurable-columns drawer (the same control Workflows/Schedules/Activities use). - Extend the configurable-table-columns store with a DEPLOYMENTS table type: DEFAULT_DEPLOYMENTS_COLUMNS (Deployment, Current Version, Created At) with Latest Version as an available/hidden column, a namespace-scoped persistStore, and availableDeploymentColumns. - Source the deployments list columns from the store, translate labels for the header, and add the footer gear + reused drawer. - The Latest Version cell renders build ID, lifecycle status, and compute provider, with no connection indicator (connection stays on Current Version). Shows 'Same as Current' when the latest version equals the current one, and an em dash when there is no latest version. - Gate the drawer's custom search attributes section off for deployments so it does not show an irrelevant empty section (workflows/schedules/ activities are unaffected). * Tighten deployment list version cells (DT-4174) Match the design for the Current and Latest Version cells on the deployments list: - Remove the min-w-32 on the build-ID container so the compute badge sits next to the build ID instead of leaving a large gap for short IDs. - Drop the copy button from the build-ID cells (not shown in the design); the deployment name keeps its copy button.
Resolve configurable-table-columns.ts conflict by keeping both the new DEPLOYMENTS table type (this branch) and the NEXUS_OPERATIONS table type (main): both table types coexist across TABLE_TYPE, defaults, persisted stores, the derived columns map, available-column helpers, and the default/persisted switch statements.
Drop the compute-badge story to check whether it is the source of the Chromatic UI Tests failure.
laurakwhit
approved these changes
Jul 6, 2026
- formatConnectionCheckTime: guard against NaN diff (invalid dates) and use Math.floor so elapsed hours are not overstated. Add an invalid-date test. - Remove the now-unused 'build-status' i18n key (replaced by 'lifecycle'). - Configurable-columns MOVE reducer: fall back to the table-aware defaultColumns instead of hardcoded DEFAULT_WORKFLOWS_COLUMNS.
temporal-cicd Bot
pushed a commit
that referenced
this pull request
Jul 8, 2026
Auto-generated version bump from 2.51.1 to 2.52.0 Bump type: minor Changes included: - [`9c6fcd54`](9c6fcd5) Add direct SSO redirect and backend logout (#3590) - [`feab0d90`](feab0d9) a11y(4.1.3): Toaster role="log" → per-toast role="status"/"alert" for correct AT announcement semantics (#3560) - [`d7bbfb01`](d7bbfb0) a11y(2.5.8): toast — replace bare close button with IconButton (36×36 px) (#3553) - [`4efd6ab6`](4efd6ab) a11y(3.3.1): Holocene input primitives — add aria-invalid, aria-describedby, and uniform live-region error announcement (#3554) - [`0600b700`](0600b70) Use green only (#3599) - [`94107549`](9410754) Clarify activity pause timeout behavior (#3600) - [`9f88d5a8`](9f88d5a) Bump node version to 22.23.1 or newer to fix issue from previous security release (#3604) - [`ca4104ae`](ca4104a) Update reason copy and inputs (#3588) - [`51db73fa`](51db73f) Update batch operation reason input hint (#3605) - [`836d7c55`](836d7c5) a11y(2.4.3): route navigation — move focus to the main landmark on afterNavigate, not just scroll (#3538) - [`4ee95696`](4ee9569) Improve re-renders for large encoded event histories (#3592) - [`fa5e7aa1`](fa5e7aa) feature/schedules (#3603) - [`0d9467fd`](0d9467f) Default includeHeartbeatDetails and includeLastFailure to true for getActivityExecution and pollActivityExecution (#3521) - [`e5bc514e`](e5bc514) fix schedules: duplicate key (#3612) - [`f1eb489f`](f1eb489) Remove preview badge (#3581) - [`1e5173b4`](1e5173b) Add existing versions to worker create deployment version form (#3601) - [`a8552bae`](a8552ba) fix schedules -e.trim not a function (#3613) - [`0442f847`](0442f84) Fix width of ComputeBadge in VersionTableRow (#3615) - [`ddbeb54f`](ddbeb54) fix(cloud-nav): animate and stabilize side-nav collapse (#3606) - [`3cfc684b`](3cfc684) fix - schedules recent/upcoming runs - sort issue (#3616) - [`92b8875b`](92b8875) Move timestamp out of translate (#3617) - [`901258af`](901258a) Fix SAA and WF consistency (#3614) - [`99593d97`](99593d9) DT-4001 - standalone nexus operations (#3496) - [`f10d1bf1`](f10d1bf) Clamp codeblock to container width (#3621) - [`0a9d93ce`](0a9d93c) Remove unnecessary bottom-0 (#3623) - [`9dabb522`](9dabb52) chore(deps-dev): bump vite from 6.4.2 to 6.4.3 (#3610) - [`5c1854d3`](5c1854d) News Feed (#3596) - [`340da30f`](340da30) a11y(2.1.1): guard global r/R keydown so text inputs can receive the letter (#3589) - [`dd97a9d1`](dd97a9d) fix(markdown-editor): disable chromatic snapshot for preview story (#3631) - [`7db61ab9`](7db61ab) a11y(4.1.2): Table / ProgressBar / Loading primitives — expose aria-busy on data-refresh regions (#3555) - [`d2111ecf`](d2111ec) a11y(4.1.3): Add live-region wrappers for workflow status, event count, filter counts, and Banner (#3561) - [`24eabaec`](24eabae) a11y(2.4.6): guard DrawerContent against empty <h2> when title is omitted (#3595) - [`3552e307`](3552e30) Fix CodeMirror Lezer dependency mismatch (#3632) - [`7ac37199`](7ac3719) Update defaults to match workflow defaults (#3634) - [`c1f02865`](c1f0286) Draft fix for link variant handling (#3620) - [`bbbf2b8c`](bbbf2b8) Add connection status and optional Latest Version column to deployments (DT-4174) (#3618) - [`76f266f4`](76f266f) DurationInput updates (#3633) - [`07da53c5`](07da53c) COM-191 - prefill CloudFormation template params in Launch Stack link (#3619) - [`90946e0b`](90946e0) Schedules - Timeout empty defaults (#3637) - [`97f9ad39`](97f9ad3) fix(cloud-nav): smooth label fade on side-nav collapse/expand (#3628) - [`a399ed35`](a399ed3) Improve Search Attribute deletion messaging (#3629) - [`ad976d94`](ad976d9) Pass through source prop for News Feed Widget (#3638) - [`6ef84fe3`](6ef84fe) Restrict select-all to exclude workflow status (#3639) - [`4c3729f8`](4c3729f) Reduce news feed markdown whitespace (#3642) - [`aa04a9b6`](aa04a9b) feat(nexus-operations): add loading state to standalone nexus operations list page header (#3643) - [`dce2f804`](dce2f80) chore: remove unused generate-holocene-props script (#3644) - [`760bc7bc`](760bc7b) Make megaphone icon bigger (#3645) - [`c047384a`](c047384) refactor(nexus): replace hand-rolled types with @temporalio/proto (#3646)
rossedfort
added a commit
that referenced
this pull request
Jul 8, 2026
Auto-generated version bump from 2.51.1 to 2.52.0 Bump type: minor Changes included: - [`9c6fcd54`](9c6fcd5) Add direct SSO redirect and backend logout (#3590) - [`feab0d90`](feab0d9) a11y(4.1.3): Toaster role="log" → per-toast role="status"/"alert" for correct AT announcement semantics (#3560) - [`d7bbfb01`](d7bbfb0) a11y(2.5.8): toast — replace bare close button with IconButton (36×36 px) (#3553) - [`4efd6ab6`](4efd6ab) a11y(3.3.1): Holocene input primitives — add aria-invalid, aria-describedby, and uniform live-region error announcement (#3554) - [`0600b700`](0600b70) Use green only (#3599) - [`94107549`](9410754) Clarify activity pause timeout behavior (#3600) - [`9f88d5a8`](9f88d5a) Bump node version to 22.23.1 or newer to fix issue from previous security release (#3604) - [`ca4104ae`](ca4104a) Update reason copy and inputs (#3588) - [`51db73fa`](51db73f) Update batch operation reason input hint (#3605) - [`836d7c55`](836d7c5) a11y(2.4.3): route navigation — move focus to the main landmark on afterNavigate, not just scroll (#3538) - [`4ee95696`](4ee9569) Improve re-renders for large encoded event histories (#3592) - [`fa5e7aa1`](fa5e7aa) feature/schedules (#3603) - [`0d9467fd`](0d9467f) Default includeHeartbeatDetails and includeLastFailure to true for getActivityExecution and pollActivityExecution (#3521) - [`e5bc514e`](e5bc514) fix schedules: duplicate key (#3612) - [`f1eb489f`](f1eb489) Remove preview badge (#3581) - [`1e5173b4`](1e5173b) Add existing versions to worker create deployment version form (#3601) - [`a8552bae`](a8552ba) fix schedules -e.trim not a function (#3613) - [`0442f847`](0442f84) Fix width of ComputeBadge in VersionTableRow (#3615) - [`ddbeb54f`](ddbeb54) fix(cloud-nav): animate and stabilize side-nav collapse (#3606) - [`3cfc684b`](3cfc684) fix - schedules recent/upcoming runs - sort issue (#3616) - [`92b8875b`](92b8875) Move timestamp out of translate (#3617) - [`901258af`](901258a) Fix SAA and WF consistency (#3614) - [`99593d97`](99593d9) DT-4001 - standalone nexus operations (#3496) - [`f10d1bf1`](f10d1bf) Clamp codeblock to container width (#3621) - [`0a9d93ce`](0a9d93c) Remove unnecessary bottom-0 (#3623) - [`9dabb522`](9dabb52) chore(deps-dev): bump vite from 6.4.2 to 6.4.3 (#3610) - [`5c1854d3`](5c1854d) News Feed (#3596) - [`340da30f`](340da30) a11y(2.1.1): guard global r/R keydown so text inputs can receive the letter (#3589) - [`dd97a9d1`](dd97a9d) fix(markdown-editor): disable chromatic snapshot for preview story (#3631) - [`7db61ab9`](7db61ab) a11y(4.1.2): Table / ProgressBar / Loading primitives — expose aria-busy on data-refresh regions (#3555) - [`d2111ecf`](d2111ec) a11y(4.1.3): Add live-region wrappers for workflow status, event count, filter counts, and Banner (#3561) - [`24eabaec`](24eabae) a11y(2.4.6): guard DrawerContent against empty <h2> when title is omitted (#3595) - [`3552e307`](3552e30) Fix CodeMirror Lezer dependency mismatch (#3632) - [`7ac37199`](7ac3719) Update defaults to match workflow defaults (#3634) - [`c1f02865`](c1f0286) Draft fix for link variant handling (#3620) - [`bbbf2b8c`](bbbf2b8) Add connection status and optional Latest Version column to deployments (DT-4174) (#3618) - [`76f266f4`](76f266f) DurationInput updates (#3633) - [`07da53c5`](07da53c) COM-191 - prefill CloudFormation template params in Launch Stack link (#3619) - [`90946e0b`](90946e0) Schedules - Timeout empty defaults (#3637) - [`97f9ad39`](97f9ad3) fix(cloud-nav): smooth label fade on side-nav collapse/expand (#3628) - [`a399ed35`](a399ed3) Improve Search Attribute deletion messaging (#3629) - [`ad976d94`](ad976d9) Pass through source prop for News Feed Widget (#3638) - [`6ef84fe3`](6ef84fe) Restrict select-all to exclude workflow status (#3639) - [`4c3729f8`](4c3729f) Reduce news feed markdown whitespace (#3642) - [`aa04a9b6`](aa04a9b) feat(nexus-operations): add loading state to standalone nexus operations list page header (#3643) - [`dce2f804`](dce2f80) chore: remove unused generate-holocene-props script (#3644) - [`760bc7bc`](760bc7b) Make megaphone icon bigger (#3645) - [`c047384a`](c047384) refactor(nexus): replace hand-rolled types with @temporalio/proto (#3646) Co-authored-by: rossedfort <11775628+rossedfort@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Implements DT-4174: surface compute-provider connection status on Worker Deployments, and add an optional Latest Version column to the deployments list.
This PR now contains both halves of the ticket. The Latest Version column (second half) was developed in #3625 and merged into this branch.
Connection status (list + details)
ProviderValidation/ComputeStatus+computeStatus?onVersionSummaryNew, matching the newcompute_status.provider_validationAPI field.deriveConnectionStatusderivespending/connected/failedfromerror_message+last_check_time(last_check_timechecked first; empty and absent messages treated identically). Fully unit-tested.formatConnectionCheckTimeformats freshness through i18n as hours-only ("36 hours ago"), with "less than an hour ago" for sub-hour / future / invalid times.ConnectionBadge: presentational dot + word chip with an informational tooltip. The API failure message is rendered directly (no client-side error-code mapping, per the backend decision). No click action.Latest Version column (list)
DEPLOYMENTStable type with namespace-scoped persistence.Design polish
All new UI is behind the
serverScaledDeploymentscapability; the on-demand validate-connection flow is unchanged.Why
The backend (temporalio/api#810, temporalio/temporal#10778, both merged) adds a periodic connectivity check for serverless worker deployments. This surfaces that signal in the UI so misconfiguration is visible before invocations fail. Per the DT-4174 decision log, the list defaults to the Current version, with Latest available as an optional column.
Testing
pnpm check: 0 errorspnpm lint: cleanpnpm test --run: 2192 passed / 1 skipped (unit tests for the derivation + freshness utils and the deployments column store)Notes