Skip to content

ci: test merge queue support#11

Closed
chaptersix wants to merge 28 commits into
mainfrom
codex/merge-queue-ci
Closed

ci: test merge queue support#11
chaptersix wants to merge 28 commits into
mainfrom
codex/merge-queue-ci

Conversation

@chaptersix

Copy link
Copy Markdown
Owner

Fork-local validation of GitHub merge queue support. Adds the merge_group trigger to required CI workflows and ensures Validate Server Version runs for merge-group commits.

jpvotta and others added 28 commits May 29, 2026 11:16
…emporalio#1056)

The `temporal task-queue config set` help text referenced three flags
that don't exist:

- `--fairness-key-weight-set <key>=<weight>`
- `--fairness-key-weight-unset <key>`
- `--fairness-key-weight-unset-all`

The real flags, defined a few lines below in the same YAML block, are:

- `--fairness-key-weight <key>=<weight>` (with `<key>=default` to unset
a single key)
- `--fairness-key-weight-clear-all`

This PR updates the example block and the unset instructions in
`commands.yaml` to match, and regenerates `commands.gen.go`. Verified
locally with `go run ./cmd/temporal task-queue config set --help`.

This bug also surfaces in the auto-generated docs site at
[docs/cli/task-queue.mdx](https://docs.temporal.io/cli/task-queue#set),
which a customer hit in [this Slack
thread](https://temporaltechnologies.slack.com/archives/C0748KDH2DD/p1779899719317389?thread_ts=1779898503.202859&cid=C0748KDH2DD).
The docs PR over in `temporalio/documentation#4625` works around it by
referencing the real flag names directly.

Co-authored-by: Alex Stanfield <13949480+chaptersix@users.noreply.github.com>
…1054)

VLN-1354: pin and bump GitHub Actions to latest versions

Pin all GitHub Actions to full 40-character commit SHAs and bump to
latest versions across all workflows:

- actions/checkout v4.3.1 -> v6.0.2
- actions/setup-go -> v6.4.0
- actions/upload-artifact (already pinned, kept current)
- actions/create-github-app-token v2.2.2 -> v3.1.1 (temporalio#1037)
- actions/github-script v8.0.0 -> v9.0.0 (temporalio#1036)
- docker/setup-qemu-action v3.2.0 -> v4.1.0
- docker/setup-buildx-action v3.10.0 -> v4.1.0 (temporalio#1035)
- docker/login-action v3.5.0 -> v4.2.0
- goreleaser/goreleaser-action v6.4.0 -> v7.2.1 (temporalio#1039)

Resolves open Dependabot PRs temporalio#1035, temporalio#1036, temporalio#1037, temporalio#1038, temporalio#1039.
Left temporalio/public-actions refs unchanged per exception policy.
---------

Co-authored-by: picatz <14850816+picatz@users.noreply.github.com>
Co-authored-by: Alex Stanfield <13949480+chaptersix@users.noreply.github.com>
Bumps [golang.org/x/mod](https://github.com/golang/mod) from 0.35.0 to
0.36.0.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/golang/mod/commit/643da9ba74f1165d8cae1505d453b3de3cf21b7b"><code>643da9b</code></a>
go.mod: update golang.org/x dependencies</li>
<li><a
href="https://github.com/golang/mod/commit/ccc3cdf529d1eee2a832437eb1b85240044d21cb"><code>ccc3cdf</code></a>
zip: include 'but content has correct sum' note in TestVCS</li>
<li><a
href="https://github.com/golang/mod/commit/ab3031803214705d2c9f1102318b083e7086a155"><code>ab30318</code></a>
zip: update zip hashes for new flate compression</li>
<li>See full diff in <a
href="https://github.com/golang/mod/compare/v0.35.0...v0.36.0">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## Related issues

Closes temporalio#1030

## What changed?

Adds `temporal schedule list-matching-times` command implementing the `ListScheduleMatchingTimes` RPC. Allows users to preview when a schedule's spec would match within a given time range (past or future) without taking any actions.

## Checklist

**Stability**
- [x] Breaking changes are marked with 💥 in the PR title and release notes
- [x] Changes to JSON output (`-o json` / `-o jsonl`) are treated as breaking changes

**Design**
- [x] This feature does not depend on Cloud-only APIs or behavior (it works against an OSS server)
- [x] New commands follow `temporal <noun> <verb>` structure (e.g. `temporal workflow start`)
- [x] New flags are named after the API concept, not the implementation mechanism (good: `--search-attribute`, bad: `--index-field`)
- [x] New flags don't duplicate an existing flag that serves the same purpose
- [x] New flags do not have short aliases without strong justification
- [x] Experimental features are marked with `(Experimental feature)` in `commands.yaml`

**Help text** (see style guide at the top of `commands.yaml`)
- [x] All flags shown in help text and examples are implemented and functional
- [x] Summaries use sentence case and have no trailing period
- [x] Long descriptions end with a period and include at least one example invocation
- [x] Examples use long flags (`--namespace`, not `-n`), one flag per line
- [x] Placeholder values use `YourXxx` form (`YourWorkflowId`, `YourNamespace`)

**Behavior**
- [x] Results go to stdout; errors and warnings go to stderr
- [x] Error messages are lowercase with no trailing punctuation

**Tests**
- [x] Added functional test(s) (`SharedServerSuite`)
- [ ] Added unit test(s) (`func TestXxx`) where applicable

## Manual tests

**Setup**
```
temporal server start-dev --headless
temporal schedule create \
    --schedule-id YourScheduleId \
    --interval 1h \
    --workflow-id YourWorkflowId \
    --task-queue YourTaskQueue \
    --workflow-type YourWorkflowType
```

**Happy path**
```
$ temporal schedule list-matching-times \
    --schedule-id YourScheduleId \
    --start-time 2025-01-01T00:00:00Z \
    --end-time 2025-01-01T23:59:59Z
  Time
  2025-01-01T00:00:00Z
  2025-01-01T01:00:00Z
  ...

$ temporal schedule list-matching-times \
    --schedule-id YourScheduleId \
    --start-time 2025-01-01T00:00:00Z \
    --end-time 2025-01-01T23:59:59Z \
    -o json
{"startTime":["2025-01-01T00:00:00Z","2025-01-01T01:00:00Z",...]}
```

**Error case**
```
$ temporal schedule list-matching-times \
    --schedule-id nonexistent-id \
    --start-time 2025-01-01T00:00:00Z \
    --end-time 2025-01-01T23:59:59Z
Error: ...
$ echo $?
1
```

**Composition**
```
$ temporal schedule list-matching-times \
    --schedule-id YourScheduleId \
    --start-time 2025-06-01T00:00:00Z \
    --end-time 2025-06-07T23:59:59Z \
    -o json | jq '.startTime | length'
168
```
- remove time.Sleep() needed before v1.26.2 because of server cache bug
- update test assertions of "2 seconds ago" to "now" since we won't wait

<!--- Note to EXTERNAL Contributors -->
<!-- Thanks for opening a PR! 
If it is a significant code change, please **make sure there is an open
issue** for this.
We work best with you when we have accepted the idea first before you
code. -->

<!--- For ALL Contributors 👇 -->

## What was changed
test `TestTaskQueue_Describe_Simple` at `commands.taskqueue_test.go` was
updated to remove unnecessary `time.Sleep(1 * time.Second) `

## Why?
<!-- Tell your future self why have you made these changes -->
The waiting was a necessary workaround of server cache bug, bug was
fixed on v1.26.2

## Checklist
<!--- add/delete as needed --->

1. Closes
 temporalio#741  

3. How was this tested:
<!--- Please describe how you tested your changes/how we can test them
-->
Running the unit tests

4. Any docs updates needed?
<!--- update README if applicable
      or point out where to update docs.temporal.io -->

Co-authored-by: Alex Stanfield <13949480+chaptersix@users.noreply.github.com>
<!--- For ALL Contributors -->

## What was changed

`temporal server start-dev` now prints a `Persistence:` line at the end
of the startup banner.

In-memory (no `--db-filename`):
```
Persistence:      in-memory (Workflow Executions are lost when the server process exits)
```

File-backed:
```
Persistence:      file (/path/to/dev.sqlite)
```

## Why?
Per temporalio#634, the start-dev banner did not surface what form of persistence
the dev server uses, so users could not tell at a glance whether
Workflow Executions would survive a restart.

## Checklist

1. Closes temporalio#634

2. How was this tested:

Two new tests in `internal/temporalcli/commands.server_test.go` start
the dev server, capture stdout, and assert that the banner contains
`Persistence:` plus the expected backend description. Both pass locally
and fail when the banner change is reverted.

```
$ go test -run TestServer_StartDev_BannerPersistence ./internal/temporalcli/
ok  	github.com/temporalio/cli/internal/temporalcli	10.318s
```

---------

Signed-off-by: Sai Asish Y <say.apm35@gmail.com>
Co-authored-by: Alex Stanfield <13949480+chaptersix@users.noreply.github.com>
…alio#1012)

Closes temporalio#838.

Implements the design @cretz proposed in the issue thread: when `--yes`
bypasses the confirmation prompt, skip the `CountWorkflowExecutions`
request entirely.

## What was changed

-
[internal/temporalcli/commands.workflow.go](internal/temporalcli/commands.workflow.go)
— `SingleWorkflowOrBatchOptions.workflowExecOrBatch`: `CountWorkflow`
only runs in the `!s.Yes` branch.
-
[internal/temporalcli/commands.workflow_reset.go](internal/temporalcli/commands.workflow_reset.go)
— same pattern in `TemporalWorkflowResetCommand`'s batch path.

When `--yes` skips the count, the prompt text changes from `Start batch
against approximately N workflow(s)? y/N` to `Start batch against
workflows matching query "<query>"? y/N`, so the output (which
`promptYes` still prints in the auto-confirm path) stays informative.

The non-`--yes` interactive flow is untouched: it still counts, still
prompts, still prints the same `approximately N workflow(s)` message.

## Why

`workflowExecOrBatch` (terminate / signal / cancel) and the reset
command both unconditionally call `CountWorkflowExecutions` before
starting a batch. The result is only used to fill in the `approximately
N workflow(s)` confirmation. When `--yes` is set, the prompt is skipped
— but the count call still runs, and on clusters where the visibility
API is timing out it fails the entire batch start. The original report
is from a Postgres-backed cluster where the batch query itself works but
the count times out; users can't start batch jobs they otherwise have
permission to run.

## How was this tested

Added `TestWorkflow_Terminate_BatchWorkflow_SkipsCountWhenYes` that:

1. Installs a unary gRPC interceptor that counts
`CountWorkflowExecutionsRequest` and `StartBatchOperationRequest` calls.
2. Starts one workflow, then runs `workflow terminate --query ...
--yes`.
3. Asserts: 0 `CountWorkflow` calls, 1 `StartBatchOperation` call,
prompt text contains `matching query` and not `approximately`.

The interceptor pattern matches the existing
`testTerminateBatchWorkflow` helper.

Ran the new test plus a sample of the existing batch tests locally; they
pass. (`TestWorkflow_Terminate_BatchWorkflowSuccess` flakes locally on
the unrelated `Completed` assertion both with and without my changes —
pre-existing timing issue, not caused by this PR.)

---------

Co-authored-by: Alex Stanfield <13949480+chaptersix@users.noreply.github.com>
## What was changed
- `workflow show` (table and detailed modes, not `-o json`) now displays
the actual operation name instead of the generic
`NexusOperationScheduled`/`NexusOperationCompleted` event type when the
Nexus endpoint is `__temporal_system`.
- `workflow describe` no longer includes pending Nexus operations on the
`__temporal_system` endpoint in the "Pending Nexus Operations" list or
count.

## Why?
System Nexus operations (endpoint `__temporal_system`) are
implementation details of high-level SDK operations like
`SignalWithStartWorkflowExecution`. Surfacing them as
`NexusOperationScheduled`/`NexusOperationCompleted` events is confusing.
By unwrapping the operation name, the history and describe output
reflect what the workflow actually did at a semantic level. Similarly,
pending system operations in describe are noise the user has no
actionable interest in.

## Checklist
<!--- add/delete as needed --->

1. Closes NA

2. How was this tested:
- Unit tests added in `commands.workflow_show_test.go` covering all six
NexusOperation event types, the non-system-endpoint no-op path, and the
missing-scheduled-event (reverse traversal / orphaned completion) path.
- Functional tests added to `commands.workflow_view_test.go` to show
system operations are unwrapped but user defined are not
- Manual validation: ran `temporal workflow show -w <id>` against a live
workflow that executes a `SignalWithStartWorkflowExecution` system nexus
operation and confirmed events 5 and 6 now show as
`SignalWithStartWorkflowExecutionScheduled` and
`SignalWithStartWorkflowExecutionCompleted`.
4. Any docs updates needed? No
…nfig (temporalio#1057)

## Summary
- `dependency-type` is only valid inside `allow`, not `ignore` in
dependabot.yml
- Replaces the invalid `ignore` entry with `allow: [{dependency-type:
direct}]` to achieve the same goal of skipping indirect/transitive
dependency updates
- Adds a CI workflow using `check-jsonschema` to validate
`dependabot.yml` on PRs and pushes to main
- Fixes the Dependabot config validation failure introduced in temporalio#1044

## Test plan
- [ ] Verify the `.github/dependabot.yml` validation check passes on
this PR
- [ ] Verify `check-jsonschema --builtin-schema vendor.dependabot
.github/dependabot.yml` passes locally
Bumps the github-actions group with 2 updates:
[goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action)
and
[actions/create-github-app-token](https://github.com/actions/create-github-app-token).

Updates `goreleaser/goreleaser-action` from 7.2.1 to 7.2.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/goreleaser/goreleaser-action/releases">goreleaser/goreleaser-action's
releases</a>.</em></p>
<blockquote>
<h2>v7.2.2</h2>
<h2>What's Changed</h2>
<ul>
<li>ci(deps): bump the actions group with 3 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/goreleaser/goreleaser-action/pull/560">goreleaser/goreleaser-action#560</a></li>
<li>fix: nightly resolution to select newest published release by <a
href="https://github.com/Copilot"><code>@​Copilot</code></a> in <a
href="https://redirect.github.com/goreleaser/goreleaser-action/pull/562">goreleaser/goreleaser-action#562</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/Copilot"><code>@​Copilot</code></a> made
their first contribution in <a
href="https://redirect.github.com/goreleaser/goreleaser-action/pull/562">goreleaser/goreleaser-action#562</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/goreleaser/goreleaser-action/compare/v7...v7.2.2">https://github.com/goreleaser/goreleaser-action/compare/v7...v7.2.2</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/goreleaser/goreleaser-action/commit/5daf1e915a5f0af01ddbcd89a43b8061ff4f1a89"><code>5daf1e9</code></a>
fix: nightly resolution to select newest published release (<a
href="https://redirect.github.com/goreleaser/goreleaser-action/issues/562">#562</a>)</li>
<li><a
href="https://github.com/goreleaser/goreleaser-action/commit/5cc7ebb73d78b8f1d7b03c568e7df999c2889ccf"><code>5cc7ebb</code></a>
ci: update actions</li>
<li><a
href="https://github.com/goreleaser/goreleaser-action/commit/702f5f91c9334614254ddeabeebaf820d707f0d6"><code>702f5f9</code></a>
ci(deps): bump the actions group with 3 updates (<a
href="https://redirect.github.com/goreleaser/goreleaser-action/issues/560">#560</a>)</li>
<li>See full diff in <a
href="https://github.com/goreleaser/goreleaser-action/compare/1a80836c5c9d9e5755a25cb59ec6f45a3b5f41a8...5daf1e915a5f0af01ddbcd89a43b8061ff4f1a89">compare
view</a></li>
</ul>
</details>
<br />

Updates `actions/create-github-app-token` from 3.1.1 to 3.2.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/create-github-app-token/releases">actions/create-github-app-token's
releases</a>.</em></p>
<blockquote>
<h2>v3.2.0</h2>
<h2><a
href="https://github.com/actions/create-github-app-token/compare/v3.1.1...v3.2.0">3.2.0</a>
(2026-05-12)</h2>
<h3>Features</h3>
<ul>
<li>add support for enterprise-level GitHub Apps (<a
href="https://redirect.github.com/actions/create-github-app-token/issues/263">#263</a>)
(<a
href="https://github.com/actions/create-github-app-token/commit/952a2a7073df6bfa5f49bc469ec895b6ec1acea4">952a2a7</a>)</li>
<li>support full repository names in <code>repositories</code> input (<a
href="https://redirect.github.com/actions/create-github-app-token/issues/372">#372</a>)
(<a
href="https://github.com/actions/create-github-app-token/commit/85eb8dd41472213aed25d1a126460e0069138ab6">85eb8dd</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>deps:</strong> bump <code>@​actions/core</code> from 3.0.0
to 3.0.1 in the production-dependencies group (<a
href="https://redirect.github.com/actions/create-github-app-token/issues/364">#364</a>)
(<a
href="https://github.com/actions/create-github-app-token/commit/43e5c345bfd4d4f3ecea019ad0042001a09dd857">43e5c34</a>)</li>
<li>validate private-key input (<a
href="https://redirect.github.com/actions/create-github-app-token/issues/376">#376</a>)
(<a
href="https://github.com/actions/create-github-app-token/commit/f24bbd89643991c0de27ae823c01791b2c6bafdd">f24bbd8</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/actions/create-github-app-token/blob/main/CHANGELOG.md">actions/create-github-app-token's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2><a
href="https://github.com/actions/create-github-app-token/compare/v3.1.1...v3.2.0">3.2.0</a>
(2026-05-12)</h2>
<h3>Features</h3>
<ul>
<li>add support for enterprise-level GitHub Apps (<a
href="https://redirect.github.com/actions/create-github-app-token/issues/263">#263</a>)
(<a
href="https://github.com/actions/create-github-app-token/commit/952a2a7073df6bfa5f49bc469ec895b6ec1acea4">952a2a7</a>)</li>
<li>support full repository names in <code>repositories</code> input (<a
href="https://redirect.github.com/actions/create-github-app-token/issues/372">#372</a>)
(<a
href="https://github.com/actions/create-github-app-token/commit/85eb8dd41472213aed25d1a126460e0069138ab6">85eb8dd</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>deps:</strong> bump <code>@​actions/core</code> from 3.0.0
to 3.0.1 in the production-dependencies group (<a
href="https://redirect.github.com/actions/create-github-app-token/issues/364">#364</a>)
(<a
href="https://github.com/actions/create-github-app-token/commit/43e5c345bfd4d4f3ecea019ad0042001a09dd857">43e5c34</a>)</li>
<li>validate private-key input (<a
href="https://redirect.github.com/actions/create-github-app-token/issues/376">#376</a>)
(<a
href="https://github.com/actions/create-github-app-token/commit/f24bbd89643991c0de27ae823c01791b2c6bafdd">f24bbd8</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/create-github-app-token/commit/bcd2ba49218906704ab6c1aa796996da409d3eb1"><code>bcd2ba4</code></a>
chore(main): release 3.2.0 (<a
href="https://redirect.github.com/actions/create-github-app-token/issues/370">#370</a>)</li>
<li><a
href="https://github.com/actions/create-github-app-token/commit/f24bbd89643991c0de27ae823c01791b2c6bafdd"><code>f24bbd8</code></a>
fix: validate private-key input (<a
href="https://redirect.github.com/actions/create-github-app-token/issues/376">#376</a>)</li>
<li><a
href="https://github.com/actions/create-github-app-token/commit/363531b6d972a60a00b3f1e6bb139e5e6c764cd9"><code>363531b</code></a>
docs: capitalize Git as a proper noun in README (<a
href="https://redirect.github.com/actions/create-github-app-token/issues/374">#374</a>)</li>
<li><a
href="https://github.com/actions/create-github-app-token/commit/fd2801133e469d2950f2c5af5e591d6b2ad833c8"><code>fd28011</code></a>
docs: update procedure to configure Git (<a
href="https://redirect.github.com/actions/create-github-app-token/issues/287">#287</a>)</li>
<li><a
href="https://github.com/actions/create-github-app-token/commit/85eb8dd41472213aed25d1a126460e0069138ab6"><code>85eb8dd</code></a>
feat: support full repository names in <code>repositories</code> input
(<a
href="https://redirect.github.com/actions/create-github-app-token/issues/372">#372</a>)</li>
<li><a
href="https://github.com/actions/create-github-app-token/commit/c9aabb83728c3bd519212fa657ebc07e1f2a5dec"><code>c9aabb8</code></a>
build(deps-dev): bump yaml from 2.8.3 to 2.8.4 in the
development-dependencie...</li>
<li><a
href="https://github.com/actions/create-github-app-token/commit/e02e816e5591415258a53bf735aff57977dcd5e2"><code>e02e816</code></a>
build(deps-dev): bump undici from 7.24.6 to 8.2.0 (<a
href="https://redirect.github.com/actions/create-github-app-token/issues/366">#366</a>)</li>
<li><a
href="https://github.com/actions/create-github-app-token/commit/8d835bfd37aa48fcb8e709925115857568d98bc4"><code>8d835bf</code></a>
build(deps-dev): bump esbuild from 0.27.4 to 0.28.0 in the
development-depend...</li>
<li><a
href="https://github.com/actions/create-github-app-token/commit/952a2a7073df6bfa5f49bc469ec895b6ec1acea4"><code>952a2a7</code></a>
feat: add support for enterprise-level GitHub Apps (<a
href="https://redirect.github.com/actions/create-github-app-token/issues/263">#263</a>)</li>
<li><a
href="https://github.com/actions/create-github-app-token/commit/43e5c345bfd4d4f3ecea019ad0042001a09dd857"><code>43e5c34</code></a>
fix(deps): bump <code>@​actions/core</code> from 3.0.0 to 3.0.1 in the
production-dependenc...</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/create-github-app-token/compare/1b10c78c7865c340bc4f6099eb2f838309f1e8c3...bcd2ba49218906704ab6c1aa796996da409d3eb1">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## Related issues

<!-- Closes temporalio#123 -->
Closes temporalio#609


## What changed?

<!-- Describe what this PR does at a high level. -->
Prefix generated dev server cluster IDs with `dev-server-` for better
identification. Previously cluster IDs were plain UUIDs with no
indication they came from a dev server.


## Checklist

<!-- Your PR should satisfy all these requirements. However, feel free
to remove items that don't apply to the PR. Consider giving this
checklist to an AI agent before opening your PR. -->

**Stability**
- [x] Breaking changes are marked with 💥 in the PR title and release
notes

**Design**
- [x] This feature does not depend on Cloud-only APIs or behavior (it
works against an OSS server)

**Tests**
- [x] Added functional test(s) — existing tests cover this change


## Manual tests

<!-- Edit the code samples below to provide setup and happy-path and
error-path testing instructions. -->

**Setup**
```
temporal server start-dev --headless
```

**Happy path**
```
$ temporal operator cluster describe
ClusterId  dev-server-<uuid>
```


**Error case**
N/A

Co-authored-by: Alex Stanfield <13949480+chaptersix@users.noreply.github.com>
…#941)

## Related issues

Closes temporalio#673

## What changed?

Auto-generate deprecation warnings from a `deprecated: true` YAML flag
instead of manually writing CAUTION boxes in command descriptions.
Deprecation warnings are also printed to stderr at runtime so users see
them when invoking deprecated commands, without breaking JSON output.

### Before

Deprecation required manually adding a CAUTION box to the description
and `(Deprecated)` to the summary:

```yaml
- name: temporal task-queue get-build-id-reachability
  summary: Show Build ID availability (Deprecated)
  description: |
    ` `` 
    +-----------------------------------------------------------------------------+
    | CAUTION: This command is deprecated and will be removed in a later release. |
    +-----------------------------------------------------------------------------+
    ` ``

    Show if a given Build ID can be used for new, existing, or closed Workflows...
```

No runtime warning was shown when invoking the command.

### After

Set `deprecated: true` and optionally `deprecation-message`. The CAUTION
box, `(Deprecated)` summary suffix, and stderr runtime warning are all
auto-generated:

```yaml
- name: temporal task-queue get-build-id-reachability
  deprecated: true
  description: |
    Show if a given Build ID can be used for new, existing, or closed Workflows...

- name: temporal task-queue versioning
  deprecated: true
  deprecation-message: This API has been deprecated by Worker Deployment.
  description: |
    Provides commands to add, list, remove, or replace...
```

Runtime stderr output:

```
$ temporal task-queue get-build-id-reachability --task-queue foo --build-id bar
warning: this command is deprecated and will be removed in a later release
...
```

JSON output is not affected (warning goes to stderr only):

```
$ temporal task-queue get-build-ids -o json --task-queue foo 2>/dev/null
[{"buildIds":["1.0"],"defaultForSet":"1.0","isDefaultSet":true}]
```

## Checklist

**Stability**
- [x] Breaking changes are marked with 💥 in the PR title and
release notes
- [x] Changes to JSON output (`-o json` / `-o jsonl`) are treated as
breaking changes

**Design**
- [x] This feature does not depend on Cloud-only APIs or behavior (it
works against an OSS server)

**Help text** (see style guide at the top of `commands.yaml`)
- [x] Summaries use sentence case and have no trailing period
- [x] Long descriptions end with a period and include at least one
example invocation

**Behavior**
- [x] Results go to stdout; errors and warnings go to stderr
- [x] Error messages are lowercase with no trailing punctuation

**Tests**
- [x] Added functional test(s) (`SharedServerSuite`)
- [x] Added unit test(s) (`func TestXxx`) where applicable

## Manual tests

**Setup**
```
temporal server start-dev --headless
```

**Happy path -- stderr warning on deprecated command**
```
$ temporal task-queue get-build-ids \
    --task-queue YourTaskQueue
warning: this command is deprecated and will be removed in a later release
...
```

**Happy path -- JSON output not polluted**
```
$ temporal task-queue get-build-ids \
    -o json \
    --task-queue YourTaskQueue 2>/dev/null
[...]
```

**Happy path -- help text shows CAUTION box**
```
$ temporal task-queue get-build-id-reachability --help
+-----------------------------------------------------------------------------+
| CAUTION: This command is deprecated and will be removed in a later release. |
+-----------------------------------------------------------------------------+

Show if a given Build ID can be used for new, existing, or closed Workflows...
```

**Happy path -- custom deprecation message**
```
$ temporal task-queue versioning --help
+-------------------------------------------------------------+
| CAUTION: This API has been deprecated by Worker Deployment. |
+-------------------------------------------------------------+
...
```
## NOTE: REQUIRES OSS SERVER VERSION v1.32.0

## What changed?

Add support for stand alone nexus operations to the CLI.

## Checklist

<!-- Your PR should satisfy all these requirements. However, feel free
to remove items that don't apply to the PR. Consider giving this
checklist to an AI agent before opening your PR. -->

**Stability**
- [ ] Breaking changes are marked with 💥 in the PR title and release
notes
- [ ] Changes to JSON output (`-o json` / `-o jsonl`) are treated as
breaking changes

**Design**
- [x] This feature does not depend on Cloud-only APIs or behavior (it
works against an OSS server)
- [x] New commands follow `temporal <noun> <verb>` structure (e.g.
`temporal workflow start`)
- [x] New flags are named after the API concept, not the implementation
mechanism (good: `--search-attribute`, bad: `--index-field`)
- [x] New flags don't duplicate an existing flag that serves the same
purpose
- [ ] New flags do not have short aliases without strong justification
- [x] Experimental features are marked with `(Experimental)` in
`commands.yaml`

**Help text** (see style guide at the top of `commands.yaml`)
- [x] All flags shown in help text and examples are implemented and
functional
- [x] Summaries use sentence case and have no trailing period
- [x] Long descriptions end with a period and include at least one
example invocation
- [ ] Examples use long flags (`--namespace`, not `-n`), one flag per
line
- [x] Placeholder values use `YourXxx` form (`YourWorkflowId`,
`YourNamespace`)

**Behavior**
- [x] Results go to stdout; errors and warnings go to stderr
- [x] Error messages are lowercase with no trailing punctuation

**Tests**
- [x] Added functional test(s) (`SharedServerSuite`)
- [x] Added unit test(s) (`func TestXxx`) where applicable

## Manual tests

<!-- Edit the code samples below to provide setup and happy-path and
error-path testing instructions. -->

**Setup**
```
  temporal operator nexus endpoint create                                                                                                  
      --name my-endpoint                                                                                                                 
      --target-namespace default
      --target-task-queue my-tq
```

  **Happy path**
```
  $ temporal nexus operation start                                                                                                         
      --endpoint my-endpoint      
      --service my-service                                                                                                                 
      --operation my-op                                                                                                                  
      --operation-id my-op-1
      --input '"hello"'     
  Started Nexus Operation:                                                                                                                 
    Endpoint    my-endpoint
    Service     my-service                                                                                                                 
    Operation   my-op                                                                                                                    
    OperationId my-op-1
    RunId       7e7c8b2a-...-...
    Namespace   default
```
  **Error case**
```
  $ temporal nexus operation start                                                                                                         
      --service my-service                                                                                                                 
      --operation my-op   
      --operation-id my-op-2                                                                                                               
  Error: required flag(s) "endpoint" not set                                                                                             
 ```

  **Composition** — start an operation, then fetch its result, then list/describe:        
```                                                 
  $ temporal nexus operation start
--endpoint my-endpoint
--service my-service
--operation my-op
      --operation-id my-op-3
--input '"world"'
  $ temporal nexus operation result --operation-id my-op-3
Results:
    Status  COMPLETED
Result "got: world"
  $ temporal nexus operation describe --operation-id my-op-3
    OperationId            my-op-3
RunId 7e7c8b2a-...-...
    Endpoint               my-endpoint
Service my-service
Operation my-op
Status Succeeded
    ...
```
Adds implementation of the `UpdateWorkerDeploymentVersionComputeConfig`
gRPC API call with a `temporal worker deployment
update-version-compute-config` CLI command. There is a `--remove` CLI
flag that allows the user to explicitly delete the compute config from a
Worker Deployment Version.

---------

Signed-off-by: Jay Pipes <jay.pipes@temporal.io>
## What changed?

Address some issues found in the Nexus Operation command like:
* Operation ID should be required
* Some missing fields on start

## Checklist

<!-- Your PR should satisfy all these requirements. However, feel free
to remove items that don't apply to the PR. Consider giving this
checklist to an AI agent before opening your PR. -->

**Stability**
- [ ] Breaking changes are marked with 💥 in the PR title and release
notes
- [ ] Changes to JSON output (`-o json` / `-o jsonl`) are treated as
breaking changes

**Design**
- [x] This feature does not depend on Cloud-only APIs or behavior (it
works against an OSS server)
- [x] New commands follow `temporal <noun> <verb>` structure (e.g.
`temporal workflow start`)
- [x] New flags are named after the API concept, not the implementation
mechanism (good: `--search-attribute`, bad: `--index-field`)
- [x] New flags don't duplicate an existing flag that serves the same
purpose
- [x] New flags do not have short aliases without strong justification
- [x] Experimental features are marked with `(Experimental)` in
`commands.yaml`

**Help text** (see style guide at the top of `commands.yaml`)
- [x] All flags shown in help text and examples are implemented and
functional
- [x] Summaries use sentence case and have no trailing period
- [x] Long descriptions end with a period and include at least one
example invocation
- [ ] Examples use long flags (`--namespace`, not `-n`), one flag per
line
- [x] Placeholder values use `YourXxx` form (`YourWorkflowId`,
`YourNamespace`)

**Behavior**
- [x] Results go to stdout; errors and warnings go to stderr
- [ ] Error messages are lowercase with no trailing punctuation

**Tests**
- [x] Added functional test(s) (`SharedServerSuite`)
- [ ] Added unit test(s) (`func TestXxx`) where applicable

## Manual tests

**Setup**
```
  temporal operator nexus endpoint create                                                                                                  
      --name my-endpoint                                                                                                                 
      --target-namespace default
      --target-task-queue my-tq
```

  **Happy path**
```
  $ temporal nexus operation start                                                                                                         
      --endpoint my-endpoint      
      --service my-service                                                                                                                 
      --operation my-op                                                                                                                  
      --operation-id my-op-1
      --input '"hello"'     
  Started Nexus Operation:                                                                                                                 
    Endpoint    my-endpoint
    Service     my-service                                                                                                                 
    Operation   my-op                                                                                                                    
    OperationId my-op-1
    RunId       7e7c8b2a-...-...
    Namespace   default
```
  **Error case**
```
  $ temporal nexus operation start                                                                                                         
      --service my-service                                                                                                                 
      --operation my-op   
      --operation-id my-op-2                                                                                                               
  Error: required flag(s) "endpoint" not set                                                                                             
 ```

  **Composition** — start an operation, then fetch its result, then list/describe:        
```                                                 
  $ temporal nexus operation start
--endpoint my-endpoint
--service my-service
--operation my-op
      --operation-id my-op-3
--input '"world"'
  $ temporal nexus operation result --operation-id my-op-3
Results:
    Status  COMPLETED
Result "got: world"
  $ temporal nexus operation describe --operation-id my-op-3
    OperationId            my-op-3
RunId 7e7c8b2a-...-...
    Endpoint               my-endpoint
Service my-service
Operation my-op
Status Succeeded
    ...
```
Some customers were confused with the ability to create an "empty"
WorkerDeploymentVersion with the `temporal worker deployment
create-version` CLI command. This PR removes the ability to create a WDV
that does not have any compute configuration associated with it.

As we add support for non-Lambda compute providers like Google Cloud
Run, we will update the conditional check in the CLI command
implementation to verify that at least one "set" of compute provider
configuration CLI options has been specified.

Signed-off-by: Jay Pipes <jay.pipes@temporal.io>
Co-authored-by: Alex Stanfield <13949480+chaptersix@users.noreply.github.com>
## Related issues

Closes temporalio#1077

## What changed?

The helper to iterate over `envConfigPropsToFieldNames` has a side
effect if the parent is nil and `failIfParentNotFound=true` it will set
`confProfile.TLS = &envconvfig.ClientConfigTLS{}`. When the `k=="tls"`
check happens, `confProfile.TLS != nil` and it will emit `tls: true`.
Map iteration is non-deterministic and there are 9 `tls.*` keys vs 1
`tls` key so the mutation is more likely to happen before checking the
`tls` key.

## Checklist

**Tests**
- [X] Added unit test

Co-authored-by: Alex Stanfield <13949480+chaptersix@users.noreply.github.com>
)

## Related issues

Closes temporalio#1013

## What changed?

- Added `authority` to `envConfigPropsToFieldNames` map so 
  `client-authority` can be get/set via config commands
- Wired `cfg.ClientAuthority` to `profile.Authority` in `client.go`
- Updated `DefaultConfigFilePath()` call sites for envconfig v1.0.2
  signature change (returns `string` instead of `(string, error)`)
- Bumped `go.temporal.io/sdk/contrib/envconfig` to v1.0.2
- Added `authority` field to config tests

## Checklist

**Stability**

- ✅ No breaking changes
- ✅ Works against OSS server
- ✅ Flag named after API concept (client-authority)
- ✅ No duplicate flags
- ✅ No short aliases
- ✅ Added test coverage in commands.config_test.go

**Design**

- ✅ Works against OSS server
- ✅ Flag named after API concept (client-authority)
- ✅ No duplicate flags
- ✅ No short aliases

**Tests**

- [ ] Added functional test (SharedServerSuite) — config set/get test
needed

## Manual tests

**Setup**
```
temporal server start-dev --headless
```

**Happy path**
```
$ temporal config set --prop authority --value my-authority
$ temporal config get --prop authority
Property   Value
authority   my-authority
```

**Error case**
```
$ temporal config set --prop authority
Error: required flag --value not set
```
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from
1.80.0 to 1.81.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/grpc/grpc-go/releases">google.golang.org/grpc's
releases</a>.</em></p>
<blockquote>
<h2>Release 1.81.1</h2>
<h1>Security</h1>
<ul>
<li>xds/rbac: Fix a potential authorization bypass caused by incorrectly
falling through URI/DNS SANs to Subject Distinguished Name (DN) when
matching the authenticated principal name. With this fix, only the first
non-empty identity source will be used, as per <a
href="https://github.com/grpc/proposal/blob/master/A41-xds-rbac.md">gRFC
A41</a>. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/9111">#9111</a>)
<ul>
<li>Special Thanks: <a
href="https://github.com/al4an444"><code>@​al4an444</code></a></li>
</ul>
</li>
</ul>
<h1>Bug Fixes</h1>
<ul>
<li>otel: Segregate client and server RPC information used for metrics
and traces, to avoid one overwriting the other. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/9081">#9081</a>)</li>
</ul>
<h2>Release 1.81.0</h2>
<h1>Behavior Changes</h1>
<ul>
<li>balancer/rls: Switch gauge metrics to asynchronous emission (once
per collection cycle) to reduce telemetry noise and align with other
gRPC language implementations. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8808">#8808</a>)</li>
</ul>
<h1>Dependencies</h1>
<ul>
<li>Minimum supported Go version is now 1.25. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8969">#8969</a>)</li>
</ul>
<h1>Bug Fixes</h1>
<ul>
<li>xds: Use the leaf cluster's security config for the TLS handshake
instead of the aggregate cluster's config. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8956">#8956</a>)</li>
<li>transport: Send a <code>RST_STREAM</code> when receiving an
<code>END_STREAM</code> when the stream is not already half-closed. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8832">#8832</a>)</li>
<li>xds: Fix ADS resource name validation to prevent a panic. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8970">#8970</a>)</li>
</ul>
<h1>New Features</h1>
<ul>
<li>grpc/stats: Add support for custom labels in per-call metrics (<a
href="https://github.com/grpc/proposal/blob/master/A108-otel-custom-per-call-label.md">gRFC
A108</a>). (<a
href="https://redirect.github.com/grpc/grpc-go/issues/9008">#9008</a>)</li>
<li>xds: Add support for Server Name Indication (SNI) and SAN validation
(<a
href="https://github.com/grpc/proposal/blob/master/A101-SNI-setting-and-SNI-SAN-validation.md">gRFC
A101</a>). Disabled by default. To enable, set
<code>GRPC_EXPERIMENTAL_XDS_SNI=true</code> environment variable. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/9016">#9016</a>)</li>
<li>xds: Add support to control which fields get propagated from ORCA
backend metric reports to LRS load reports (<a
href="https://github.com/grpc/proposal/blob/master/A85-lrs-custom-metrics-changes.md">gRFC
A85</a>). Disabled by default. To enable, set
<code>GRPC_EXPERIMENTAL_XDS_ORCA_LRS_PROPAGATION=true</code>. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/9005">#9005</a>)</li>
<li>xds: Add metrics to track xDS client connectivity and cached
resource state (<a
href="https://github.com/grpc/proposal/blob/master/A78-grpc-metrics-wrr-pf-xds.md">gRFC
A78</a>). (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8807">#8807</a>)</li>
<li>stats/otel: Enhance <code>grpc.subchannel.disconnections</code>
metric by adding disconnection reason to the
<code>grpc.disconnect_error</code> label (<a
href="https://github.com/grpc/proposal/blob/master/A94-subchannel-otel-metrics.md">gRFC
A94</a>). This provides granular insights into why subchannels are
closing. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8973">#8973</a>)</li>
<li>mem: Add <code>mem.Buffer.Slice()</code> API to slice the buffer
like a slice. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8977">#8977</a>)
<ul>
<li>Special Thanks: <a
href="https://github.com/ash2k"><code>@​ash2k</code></a></li>
</ul>
</li>
</ul>
<h1>Performance Improvements</h1>
<ul>
<li>alts: Pool read buffers to lower memory utilization when sockets are
unreadable. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8964">#8964</a>)</li>
<li>transport: Pool HTTP/2 framer read buffers to reduce idle memory
consumption. Currently limited to Linux for ALTS and non-encrypted
transports (TCP, Unix). To disable, set
<code>GRPC_GO_EXPERIMENTAL_HTTP_FRAMER_READ_BUFFER_POOLING=false</code>
and report any issues. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/9032">#9032</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/grpc/grpc-go/commit/caf0772c2bcb8bc15d43eb53448e921f34f0b7e8"><code>caf0772</code></a>
Change version from 1.81.1-dev to 1.81.1 (<a
href="https://redirect.github.com/grpc/grpc-go/issues/9122">#9122</a>)</li>
<li><a
href="https://github.com/grpc/grpc-go/commit/6ccbeebf058ede71e43a5ac28fada2a736573215"><code>6ccbeeb</code></a>
Cherry-pick <a
href="https://redirect.github.com/grpc/grpc-go/issues/9111">#9111</a>
into v1.81.x (<a
href="https://redirect.github.com/grpc/grpc-go/issues/9121">#9121</a>)</li>
<li><a
href="https://github.com/grpc/grpc-go/commit/b33c29e41b438e371c8504de9bdf64a80098cc29"><code>b33c29e</code></a>
Cherry-pick <a
href="https://redirect.github.com/grpc/grpc-go/issues/9081">#9081</a>
into v1.81.x (<a
href="https://redirect.github.com/grpc/grpc-go/issues/9102">#9102</a>)</li>
<li><a
href="https://github.com/grpc/grpc-go/commit/c45fae6d06a5c192b7b96418a2bc26a96b856834"><code>c45fae6</code></a>
Change version to 1.81.1-dev (<a
href="https://redirect.github.com/grpc/grpc-go/issues/9063">#9063</a>)</li>
<li><a
href="https://github.com/grpc/grpc-go/commit/cb18228317ff523e63d931b4058b0329585b7dcd"><code>cb18228</code></a>
Change version to 1.81.0 (<a
href="https://redirect.github.com/grpc/grpc-go/issues/9062">#9062</a>)</li>
<li><a
href="https://github.com/grpc/grpc-go/commit/96748f973e20bbfcafa19a8bdffc85ad5da138d1"><code>96748f9</code></a>
Cherry-pick <a
href="https://redirect.github.com/grpc/grpc-go/issues/9105">#9105</a> to
1.81.x (<a
href="https://redirect.github.com/grpc/grpc-go/issues/9106">#9106</a>)</li>
<li><a
href="https://github.com/grpc/grpc-go/commit/91832222f0144f76527b630ca55cfea6e1aa015a"><code>9183222</code></a>
Cherry pick <a
href="https://redirect.github.com/grpc/grpc-go/issues/9055">#9055</a>,
<a href="https://redirect.github.com/grpc/grpc-go/issues/9032">#9032</a>
to v1.81.x (<a
href="https://redirect.github.com/grpc/grpc-go/issues/9095">#9095</a>)</li>
<li><a
href="https://github.com/grpc/grpc-go/commit/5cba6da4211f3b130238c792937f5921741b616a"><code>5cba6da</code></a>
Revert &quot;deps: update dependencies for all modules (<a
href="https://redirect.github.com/grpc/grpc-go/issues/9065">#9065</a>)&quot;
(<a
href="https://redirect.github.com/grpc/grpc-go/issues/9067">#9067</a>)</li>
<li><a
href="https://github.com/grpc/grpc-go/commit/af8a9364aa7523ab24d214e9ef13e6ad64d5c5f9"><code>af8a936</code></a>
deps: update dependencies for all modules (<a
href="https://redirect.github.com/grpc/grpc-go/issues/9065">#9065</a>)</li>
<li><a
href="https://github.com/grpc/grpc-go/commit/cdc60dfaaadde45e16aa3c28237c0e655a722c1a"><code>cdc60df</code></a>
transport: optimize heap allocations in ready reader and update syscall
conne...</li>
<li>Additional commits viewable in <a
href="https://github.com/grpc/grpc-go/compare/v1.80.0...v1.81.1">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## What changed?

Clarifies `temporal activity pause --help` to state that pausing an
Activity does not stop or extend the Activity's Schedule-To-Close
Timeout.

Regenerated `internal/temporalcli/commands.gen.go` from
`internal/temporalcli/commands.yaml`.

## Why?

The existing help explains that Pause prevents future retries and does
not interrupt some in-flight attempts, but it does not mention that
Schedule-To-Close continues running while paused.

That can surprise operators because "pause" can imply the Activity is
safe from timing out. This adds the timeout caveat and points users to
`temporal activity update-options` before a long pause.

## Testing

```bash
go run ./cmd/gen-commands \
  -input internal/temporalcli/commands.yaml \
  -pkg temporalcli \
  -context "*CommandContext" \
  > internal/temporalcli/commands.gen.go

go run ./cmd/temporal activity pause --help

go test ./cmd/gen-commands
```

Verified the help output includes the Schedule-To-Close warning.
## Related issues

<!-- Closes temporalio#123 -->

## What changed?
- WISOTT
- For more information, you can also view the relevant PR's:
1. Server PR: temporalio/temporal#10763
2. API PR: temporalio/api#808

## Checklist

<!-- Your PR should satisfy all these requirements. However, feel free
to remove items that don't apply to the PR. Consider giving this
checklist to an AI agent before opening your PR. -->

**Stability**
- [ ] Breaking changes are marked with 💥 in the PR title and release
notes
- [ ] Changes to JSON output (`-o json` / `-o jsonl`) are treated as
breaking changes

**Design**
- [ ] This feature does not depend on Cloud-only APIs or behavior (it
works against an OSS server)
- [x] New commands follow `temporal <noun> <verb>` structure (e.g.
`temporal workflow start`)
- [x] New flags are named after the API concept, not the implementation
mechanism (good: `--search-attribute`, bad: `--index-field`)
- [x] New flags don't duplicate an existing flag that serves the same
purpose
- [x] New flags do not have short aliases without strong justification
- [ ] Experimental features are marked with `(Experimental)` in
`commands.yaml`

**Help text** (see style guide at the top of `commands.yaml`)
- [ ] All flags shown in help text and examples are implemented and
functional
- [ ] Summaries use sentence case and have no trailing period
- [ ] Long descriptions end with a period and include at least one
example invocation
- [ ] Examples use long flags (`--namespace`, not `-n`), one flag per
line
- [ ] Placeholder values use `YourXxx` form (`YourWorkflowId`,
`YourNamespace`)

**Behavior**
- [x] Results go to stdout; errors and warnings go to stderr
- [x] Error messages are lowercase with no trailing punctuation

**Tests**
- [x] Added functional test(s) (`SharedServerSuite`)
- [ ] Added unit test(s) (`func TestXxx`) where applicable

## Manual tests

**Setup**

Requires a server that includes temporalio/temporal#10763 and a workflow
whose Task Queue is present in the target Worker Deployment Version.

```bash
temporal server start-dev --headless

temporal workflow start \
    --type YourWorkflowType \
    --task-queue YourTaskQueue \
    --workflow-id YourWorkflowId
```

Use an existing Worker Deployment Version for the target:

```text
Deployment name: YourDeploymentName
Build ID: YourBuildId
```

**Happy path**

```bash
temporal workflow update-options \
    --workflow-id YourWorkflowId \
    --versioning-override-behavior one_time \
    --versioning-override-deployment-name YourDeploymentName \
    --versioning-override-build-id YourBuildId
```

Expected output:

```text
Update workflow options succeeded
```

Verify table output:

```bash
temporal workflow describe \
    --workflow-id YourWorkflowId
```

Expected: `OverrideBehavior` is `OneTime`, with
`OverrideTargetVersionDeploymentName` and `OverrideTargetVersionBuildId`
set.

Verify JSON output:

```bash
temporal workflow describe \
    --workflow-id YourWorkflowId \
    --output json
```

Expected:
`versioningInfo.versioningOverride.oneTime.targetDeploymentVersion`
contains the deployment name and build ID.

**Error case**

```bash
temporal workflow update-options \
    --workflow-id YourWorkflowId \
    --versioning-override-behavior one_time
```

Expected:

```text
Error: missing deployment name and/or build id with 'one_time' behavior
```

```bash
echo $?
```

Expected:

```text
1
```

**Composition**

```bash
temporal workflow update-options \
    --query 'WorkflowId = "YourWorkflowId"' \
    --yes \
    --versioning-override-behavior one_time \
    --versioning-override-deployment-name YourDeploymentName \
    --versioning-override-build-id YourBuildId
```

Expected: a batch update-options job is started. Use `temporal batch
describe` to inspect the batch, then `temporal workflow describe` on an
affected Workflow Execution to verify the one-time override.
## Related issues

<!-- Closes temporalio#123 -->

## What changed?
Bump ui-server to v2.50.1 for News Feed feature

<!-- Describe what this PR does at a high level. -->
## Related issues

Related to #[1104](temporalio#1104)

## What changed?

<!-- Describe what this PR does at a high level. -->
This adds a command-line option that configures the embedded UI server
to disable the news feed feature.

## Checklist

<!-- Your PR should satisfy all these requirements. However, feel free
to remove items that don't apply to the PR. Consider giving this
checklist to an AI agent before opening your PR. -->

## Manual tests

<!-- Edit the code samples below to provide setup and happy-path and
error-path testing instructions. -->

**Setup #1 (default case)**
```
temporal server start-dev
```

**Happy path #1 (default case)**
Open the Web UI and observe that the news fetch feature is enabled, as
it is by default. This is visible by way of a megaphone icon in the top
navigation.



**Setup two (feature disabled)**
```
temporal server start-dev --ui-disable-news-fetch
```

**Happy path two (feature disabled)**
Open the Web UI and observe that the news fetch feature is disabled,
since the environment variable is set to disable it, as described in the
documentation. This is evident by the megaphone icon being omitted from
the top navigation and the Web UI not making a request for the feed.

---------

Co-authored-by: alex.stanfield <13949480+chaptersix@users.noreply.github.com>
…temporalio#1112)

## Summary

This consolidates the excellent groundwork in temporalio#980, temporalio#1076, and temporalio#981 into
a single change, and verifies the result against a real Docusaurus
3.10.1 build. Huge thanks to @lennessyy — the approach here is entirely
built on those PRs; this just stitches them together and irons out a few
interactions between them.

gen-docs now escapes the patterns that break Docusaurus MDX (JSX)
compilation, on **every** path that writes a command description
(including the new split paths):

- bare angle-bracket placeholders in prose (e.g.
`<base64-encoded-cert>`, `<key>`) → `\<...\>`
- single-quoted JSON examples (e.g. `'{"a":"b"}'`, `'Key={"a":"b"}'`) →
braces escaped in body text, backticked in option tables
- custom heading IDs (e.g. `## Heading {#id}`) → `{/* #id */}`, the form
that compiles under Docusaurus 3.10 and still produces the custom anchor

Fenced code blocks and inline code spans are left untouched.

It also adds the `-subdir` flag (subcommands of the named command are
written to a subdirectory, e.g. `-subdir cloud` → `cloud/*.mdx`, with
deeper subcommands nested as headings), and a generic auto-generated
notice.

## What changed relative to the existing PRs

All three PRs were on the right track. The differences here are about
how they interact:

- **temporalio#1076 (MDX escaping):** kept as the core of this change, including
the `{#id}` → `{/* #id */}` heading conversion — which I confirmed is
exactly right for the 3.10 upgrade (see verification below). Escaping is
now also applied to the `-subdir` split output, so cloud docs get the
same treatment. Re-added unit tests for the escaping logic.
- **temporalio#980 (`-subdir`):** kept the split mechanism. Unified the
`encodeJSONExample` regex so it matches both `'{...}'` and `'Key={...}'`
(the standalone-vs-key-value cases the two PRs handled separately).
Intentionally did **not** carry over temporalio#980's index-page generation:
`command-reference/index.mdx` and `cloud/index.mdx` are hand-maintained
on the docs site (custom ordering, the `ReleaseNoteHeader` component),
so gen-docs deliberately does not emit them — generating them would
overwrite that curated content. The companion docs PR restores those
files after each regeneration.
- **temporalio#981 (generic notice):** folded in — the previous notice pointed at
paths that no longer exist and don't hold for cloud-cli inputs.

## Companion PR
temporalio/documentation#4836
## Related issues

<!-- Closes temporalio#123 -->

## What changed?

Bump UI server v2.52.0

## Checklist

<!-- Your PR should satisfy all these requirements. However, feel free
to remove items that don't apply to the PR. Consider giving this
checklist to an AI agent before opening your PR. -->

**Stability**
- [ ] Breaking changes are marked with 💥 in the PR title and release
notes
- [ ] Changes to JSON output (`-o json` / `-o jsonl`) are treated as
breaking changes

**Design**
- [ ] This feature does not depend on Cloud-only APIs or behavior (it
works against an OSS server)
- [ ] New commands follow `temporal <noun> <verb>` structure (e.g.
`temporal workflow start`)
- [ ] New flags are named after the API concept, not the implementation
mechanism (good: `--search-attribute`, bad: `--index-field`)
- [ ] New flags don't duplicate an existing flag that serves the same
purpose
- [ ] New flags do not have short aliases without strong justification
- [ ] Experimental features are marked with `(Experimental)` in
`commands.yaml`

**Help text** (see style guide at the top of `commands.yaml`)
- [ ] All flags shown in help text and examples are implemented and
functional
- [ ] Summaries use sentence case and have no trailing period
- [ ] Long descriptions end with a period and include at least one
example invocation
- [ ] Examples use long flags (`--namespace`, not `-n`), one flag per
line
- [ ] Placeholder values use `YourXxx` form (`YourWorkflowId`,
`YourNamespace`)

**Behavior**
- [ ] Results go to stdout; errors and warnings go to stderr
- [ ] Error messages are lowercase with no trailing punctuation

**Tests**
- [ ] Added functional test(s) (`SharedServerSuite`)
- [ ] Added unit test(s) (`func TestXxx`) where applicable
…n used (temporalio#1116)

## Related issues

CLDDX-141

## What changed?

When delegating to an extension (e.g. `temporal-cloud`, non-zero exit
codes don't make it back to the user, so there's no programmatic way to
know if the command succeeded. This change uses the exit code of the
extension as the exit command for the `temporal` command that wrapped
it.

## Checklist


**Stability**
- [ ] Breaking changes are marked with 💥 in the PR title and release
notes
- [ ] Changes to JSON output (`-o json` / `-o jsonl`) are treated as
breaking changes

**Design**
- [ ] This feature does not depend on Cloud-only APIs or behavior (it
works against an OSS server)
- [ ] New commands follow `temporal <noun> <verb>` structure (e.g.
`temporal workflow start`)
- [ ] New flags are named after the API concept, not the implementation
mechanism (good: `--search-attribute`, bad: `--index-field`)
- [ ] New flags don't duplicate an existing flag that serves the same
purpose
- [ ] New flags do not have short aliases without strong justification
- [ ] Experimental features are marked with `(Experimental)` in
`commands.yaml`

**Help text** (see style guide at the top of `commands.yaml`)
- [ ] All flags shown in help text and examples are implemented and
functional
- [ ] Summaries use sentence case and have no trailing period
- [ ] Long descriptions end with a period and include at least one
example invocation
- [ ] Examples use long flags (`--namespace`, not `-n`), one flag per
line
- [ ] Placeholder values use `YourXxx` form (`YourWorkflowId`,
`YourNamespace`)

**Behavior**
- [ ] Results go to stdout; errors and warnings go to stderr
- [ ] Error messages are lowercase with no trailing punctuation

**Tests**
- [ ] Added functional test(s) (`SharedServerSuite`)
- [ ] Added unit test(s) (`func TestXxx`) where applicable

## Manual tests


**Setup**
Create an executable file named `temporal-exit` somewhere on your PATH
```
#!/bin/bash
exit $1
```

**Happy path**
```
$ temporal exit 0; echo $?
0
```

**Error case**
```
$ temporal exit 1; echo $?
1
```

Co-authored-by: Alex Stanfield <13949480+chaptersix@users.noreply.github.com>
Use the proper name for the SA NexusEndpoint -> Endpoint.

## Related issues

<!-- Closes temporalio#123 -->

## What changed?

Fix the description for list.
 
## Checklist

<!-- Your PR should satisfy all these requirements. However, feel free
to remove items that don't apply to the PR. Consider giving this
checklist to an AI agent before opening your PR. -->

**Stability**
- [ ] Breaking changes are marked with 💥 in the PR title and release
notes
- [ ] Changes to JSON output (`-o json` / `-o jsonl`) are treated as
breaking changes

**Design**
- [ ] This feature does not depend on Cloud-only APIs or behavior (it
works against an OSS server)
- [ ] New commands follow `temporal <noun> <verb>` structure (e.g.
`temporal workflow start`)
- [ ] New flags are named after the API concept, not the implementation
mechanism (good: `--search-attribute`, bad: `--index-field`)
- [ ] New flags don't duplicate an existing flag that serves the same
purpose
- [ ] New flags do not have short aliases without strong justification
- [ ] Experimental features are marked with `(Experimental)` in
`commands.yaml`

**Help text** (see style guide at the top of `commands.yaml`)
- [ ] All flags shown in help text and examples are implemented and
functional
- [ ] Summaries use sentence case and have no trailing period
- [ ] Long descriptions end with a period and include at least one
example invocation
- [ ] Examples use long flags (`--namespace`, not `-n`), one flag per
line
- [ ] Placeholder values use `YourXxx` form (`YourWorkflowId`,
`YourNamespace`)

**Behavior**
- [ ] Results go to stdout; errors and warnings go to stderr
- [ ] Error messages are lowercase with no trailing punctuation

**Tests**
- [ ] Added functional test(s) (`SharedServerSuite`)
- [ ] Added unit test(s) (`func TestXxx`) where applicable

## Manual tests

<!-- Edit the code samples below to provide setup and happy-path and
error-path testing instructions. -->

**Setup**
```
temporal server start-dev --headless
temporal workflow start \
    --type YourWorkflowType \
    --task-queue YourTaskQueue \
    --workflow-id YourWorkflowId
```

**Happy path**
```
$ temporal <command> \
    --flag value
<expected output>
```

**Error case**
```
$ temporal <command> \
    --invalid-combination
Error: <expected error message>
$ echo $?
1
```

**Composition** <!-- How might a user combine this with existing
commands? e.g. using the output of one command as input to another -->
```
$ temporal <command-one> ...
$ temporal <command-two> --flag <value-from-above>
<expected output>
```
@chaptersix

Copy link
Copy Markdown
Owner Author

Recreating after syncing the fork default branch so the test diff is limited to the merge-queue CI changes.

@chaptersix chaptersix closed this Jul 11, 2026
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.