contribution/compass
temporalio/temporal

Temporal

101 signals · 152 observation events

Open repository ↗

Temporal service

22.3K stars1.8K forksGoMITcronjob-schedulerdistributed-crondistributed-systemsdurable-executiongolangmicroservice-frameworkmicroservice-orchestrationmicroservices-architecturekeyword: Temporal.iokeyword: Temporal workflow
PROJECT NEWS

Release, roadmap, and discussion

All news →
temporalio/temporal

Temporal

Platform / Networking / Runtime Infrastructure
Latest stable

v1.31.2

v1.31.2
  • What's Changed
  • Bump defaultCliVersion to 1.7.2 for v1.31.1 admin-tools
  • Cherry-pick #9917, "Cover replication streaming endpoint with authorization"
  • Update Alpine to 3.23.5
  • Potential Breaking Change
Original release notes ↗

Publicly indicated next

  • No public prerelease or open milestone found.

Prereleases and milestones indicate public plans; they are not delivery commitments.

Observation trail

  1. changedupdatedAt
  2. changedupdatedAt
  3. changedupdatedAt
  4. changedupdatedAt
  5. changedupdatedAt, labels
  6. discoveredinitial snapshot
  7. discoveredinitial snapshot
  8. changedtitle, text, updatedAt, labels
  9. changedupdatedAt
  10. changedupdatedAt
  11. changedupdatedAt
  12. changedupdatedAt
  13. changedupdatedAt
  14. changedupdatedAt
  15. changedupdatedAt
  16. discoveredinitial snapshot
  17. changedtext, updatedAt
  18. changedtext, updatedAt
  19. changedtext, updatedAt
  20. changedupdatedAt, metrics, state
  21. changedupdatedAt
  22. discoveredinitial snapshot
  23. changedupdatedAt
  24. changedtitle, text, updatedAt
  25. changedtext, updatedAt
  26. changedtext, updatedAt
  27. changedtitle, text, updatedAt
  28. changedtitle, text, updatedAt
  29. changedtitle, text, updatedAt
  30. changedtitle, text, updatedAt
50 shown
issue

config: strict mode for configuration parsing

**Is your feature request related to a problem? Please describe.** My team is working on a new deployment of Temporal and we recently spent an entire day debugging an issue related to a missing key in configuration due to lack of error messaging and validation by the bootstrap code. Example: ``` metrics: hostPort: "127.0.0.1:8125" prefix: "temporal" ``` need

importance 10@danielhochmanopenenhancementup-for-grabsOriginal evidence ↗
issue

Scheduled Actions doesn't clear ContinuedFailure on null success payloads

## Expected Behavior - When a scheduled action succeeds, subsequent scheduled actions should not receive a `ContinuedFailure` failure payload. ## Actual Behavior - If a scheduled action fails, setting `ContinuedFailure`'s payload, and then a subsequent scheduled action succeeds without returning a payload (a `null` payload), `ContinuedFailure` will continue

importance 9@lina-temporalopenbugschedulesOriginal evidence ↗
issue

Schedule "StartAt" not used when calculating intervals?

Today is _June 19th, 2024_. If you create a schedule and specify "every 365 days" the result will be that the first run is on `2024-12-18 00:00:00`. **That's in 6 months**. I've tried passing `StartAt: 2025-06-19` but I get `2025-12-18 00:00:00` as a result. I understand this may be known and as-designed behavior but it struck me as unexpected to ask for a 3

importance 6@nunofgsopenpotential-bugOriginal evidence ↗
issue

[Scheduled Actions] Skipped Action Metric

**Is your feature request related to a problem? Please describe.** We'd like to have a metric for whenever schedules skip a scheduled run for any reason (either by overlap policy, missing the catchup window, or from a buffer overrun). **Describe the solution you'd like** - A new metric is introduced to keep track of skipped scheduled runs. **Describe alterna

importance 6@lina-temporalopenenhancementfeature-requestschedulesOriginal evidence ↗
issue

SignalWithStart hangs forever on an orphaned current-execution pointer

## Expected Behavior `SignalWithStartWorkflowExecution` for a workflow ID makes progress: it either signals the running execution or starts a new run, and returns within the client deadline. I suppose, but haven't checked, that this behavior could occur in other APIs which interacts with current executions in a similar fashion (Continue As New?, Updates?, ..

importance 5@lminaudieropenpotential-bugOriginal evidence ↗
pull request

VLN-1587: remediate claude-code-action-unhardened

> 🏕️ This pull request was created by [camper](https://github.com/temporalio/camper), an automated security campaign tool. ## Finding <table> <tr><td><strong>Rule</strong></td><td><code>claude-code-action-unhardened</code></td></tr> <tr><td><strong>Severity</strong></td><td>MEDIUM</td></tr> <tr><td><strong>Repository</strong></td><td><code>temporalio/tempora

importance 5@picatzopenOriginal evidence ↗
issue

Schedule deadlocks after Workflow ID reuse when previous scheduled action has Workflow Retry chain

## Temporal version - Temporal Server: 1.31.0 - Persistence: PostgreSQL - Visibility: Elasticsearch ## Summary A Schedule's internal scheduler Workflow can become permanently blocked in `refreshWorkflows` when: 1. A Schedule-started Workflow has a Workflow-level Retry Policy. 2. The scheduled execution exhausts retries, producing a multi-run chain ending in

importance 4@tianrendongopenOriginal evidence ↗
issue

Replace LeveledCompactionStrategy (LCS) with Cassandra 5.x default UnifiedCompactionStrategy (UCS) in schema.cql

**Description** The Cassandra schema file [/cassandra/temporal/schema.cql](https://github.com/temporalio/temporal/blob/main/schema/cassandra/temporal/schema.cql) currently configures nearly all tables with LeveledCompactionStrategy (LCS). LCS is not a good general-purpose default — it's optimized for read-heavy workloads with low write amplification toleranc

importance 4@bschoeningopenenhancementOriginal evidence ↗
issue

Request Patch Release - For High & Critical Vulnerabilities in latest images - AWS Inspector Report

# AWS Inspector Vulnerability Scan Report (CRITICAL & HIGH Only) Scan performed on the latest Temporal images using Amazon ECR Enhanced Scanning with AWS Inspector. ## Test Metadata - **Test Date:** August 12, 2026 - **Tested Versions:** | Image | Version | Image Digest | |---|---|---| | `temporalio/ui:latest` | **v2.53.2** | `sha256:f3a23c7133762f9bbdd7b340

importance 4@antigravity-sketchpotential-bugOriginal evidence ↗
issue

Fairsim partial counter configuration resets unspecified defaults

## Expected Behavior The partial counter configuration documented in `tools/fairsim/README.md` should override only the supplied values. For example: ```bash ./fairsim \ -counter-params=<(echo '{"CMS":{"W":100}}') \ -- -tasks=1000 -keys=500 ``` should set the CMS width to `100` while retaining all other values from `counter.DefaultCounterParams`. ## Actual B

importance 4@AminkbiopenOriginal evidence ↗
issue

DeleteWorkerDeploymentVersion fails permanently when a version summary outlives its version workflow

### What are you really trying to do? Keep the number of Worker Deployment Versions per deployment under `matching.maxVersionsInDeployment` by periodically deleting drained versions, so that new versions can always register. ### Describe the bug A Worker Deployment can end up listing a version in `DescribeWorkerDeployment`'s `versionSummaries` **after that v

importance 4@noamyehudaiopenOriginal evidence ↗
issue

A brief `Unavailable` blip resets History queue backoff, causing a sustained retry storm

### Summary When a History cluster is running at its system persistence-QPS limit, the fleet stays stable only because `ResourceExhausted` errors put queue readers/task executables onto their long reschedule backoff, which spreads persistence load out over time. If persistence briefly returns a *different* transient error (`Unavailable`, or context deadline

importance 4@ggbataopenOriginal evidence ↗
issue

Unable to create visibility database schema for MySQL

I’m trying to self-host Temporal v1.29 using Helm. For both default and visibility databases I use MySQL 8.0.45. I get the following error in the manage-schema-visibility-store job: ERROR Unable to update SQL schema. {“error”: “error executing statement: Error 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL

importance 4@ByulentMehmedopenpotential-bugOriginal evidence ↗
pull request

Persist Callback terminal failures

⚠️ This is part of a stacked PR set, to be merged into `chrsmith/wc-add-worker-cb-variant`. This will not go directly into `main`. --- ## What changed? Add a new field to the CHASM Callback component to persist the terminal failure of a CHASM Callback. The [CallbackState](https://github.com/temporalio/temporal/blob/main/chasm/lib/callback/proto/v1/message.pr

importance 4@chrsmithclosedOriginal evidence ↗
pull request

Return test runner orchestration outcomes

Makes test execution return an exit code and error instead of terminating inside the orchestration loop. Final artifact failures, retry-validation failures, execution errors, timeouts, and normal pass/fail outcomes are tested directly while Main remains the process-exit seam. Stack: depends on #11518 and completes the canonical Go test JSON reporting pipelin

importance 2@stephanosopentest-all-dbsrequest-claude-reviewOriginal evidence ↗
pull request

[CHASM] Support WithRequestID on UpdateComponent

## What changed? - `WithRequestID` now applies to `UpdateComponent`, enabling execution-level idempotency guarding via request ID. - When a request ID is passed as part of an `UpdateComponent` call (via API handler), it is persisted upon successful updateFn call. If it is already present, instead, `UpdateComponent` fails with a `FailedPrecondition`. - When a

importance 2@lina-temporalopenreliability-2026Original evidence ↗
pull request

Plan test retries from canonical results

Moves retry selection, argument rewriting, and missing-rerun validation into a focused policy over canonical attempt results. The current runner still owns orchestration, so this PR changes the decision module without switching the reporting pipeline. Stack: depends on #11515. Canonical JUnit rendering follows in #11517.

importance 2@stephanosopenOriginal evidence ↗
pull request

Render JUnit from canonical attempt results

Adds the pure canonical attempt-history renderer, including parent-failure suppression, diagnostics, timeouts, aborts, build errors, retry suffixes, crash reports, exact counters, and numeric durations. Integration coverage verifies the persisted JUnit shape and the downstream sharding consumer. Stack: depends on #11516. The production cutover follows in #11

importance 2@stephanosopenOriginal evidence ↗
pull request

Adopt canonical test reporting pipeline

Switches orchestration to canonical attempt results and JUnit rendering, then removes the legacy JUnit merger and temporary diagnostic adapter in the same PR. Intermediate and final artifacts come from one attempt history, and report writes reject inconsistent counters. Stack: depends on #11517. Explicit orchestration outcomes follow in #11033.

importance 2@stephanosopenOriginal evidence ↗
pull request

Index GitHub Actions runs for flake bisecting

## What changed? - Build one index from parsed test attempts keyed by normalized test name and GitHub Actions run commit. - Reuse that index when selecting and bisecting tests instead of rescanning every parsed attempt for each candidate. - Use `githubActions...` names in the bisect path to distinguish GitHub Actions runs from Temporal workflows. ## Why? A r

importance 2@chaptersixopenOriginal evidence ↗
pull request

Release gRPC resolver registrations on shutdown

## What changed? Tie process-global gRPC resolver registrations to their Fx and test owners. Resolver URLs use monotonic opaque registration IDs, test callers register cleanup directly, and matching test clients close their RPC factories during cluster shutdown. The leak test drops the corresponding host expectation. ## Why? The process-global resolver map r

importance 2@stephanosopenrequest-claude-reviewOriginal evidence ↗
pull request

fix(persistence): skip unnecessary joins in MySQL visibility count queries

## Summary Fixes #10991 — `CountWorkflowExecutions` with `GROUP BY ExecutionStatus` was 8-16x slower than necessary on MySQL because `mysqlQueryConverter.buildCountStmt` unconditionally `LEFT JOIN`s `custom_search_attributes` and `chasm_search_attributes`, even when the query never references a column from either table. ### Root cause `GROUP BY` is only ever

importance 1@SocialprankerOriginal evidence ↗
pull request

VLN-1574: remediate checkout-below-v7

> 🏕️ This pull request was created by [camper](https://github.com/temporalio/camper), an automated security campaign tool. ## Finding <table> <tr><td><strong>Rule</strong></td><td><code>checkout-below-v7</code></td></tr> <tr><td><strong>Severity</strong></td><td>HIGH</td></tr> <tr><td><strong>Repository</strong></td><td><code>temporalio/temporal</code></td><

importance 1@picatzopenOriginal evidence ↗
pull request

Add completion callbacks to SANOs

⚠️ This is part of a stacked PR set, to be merged into `chrsmith/wc-persist-callback-terminal-failures`. This will not go directly into `main`, until the overall feature is code complete. --- ## What changed? The API surface area for the worker callbacks feature adds a new `completion_callbacks` field to SANOs, allowing users to register callbacks to be exec

importance 1@chrsmithclosedOriginal evidence ↗
pull request

Fix approximateSize undercounting on activity start and heartbeat paths

## What changed? Fixed bookkeeping of mutable state approximate size on the two paths that mutate an `ActivityInfo` without adding its bytes to the counter: `AddActivityTaskStartedEvent` (start), and the heartbeat handler, where `RetryLastWorkerIdentity` now moves into `UpdateActivityProgress`. ## Why? Both sites mutate the pointer `GetActivityInfo` returned

importance 1@simvladopenreliability-2026Original evidence ↗
pull request

Improve flaky report presentation

## What changed? - Shows Bayesian commit suspects directly below the overall stats. - Separates synthetic test-runner timeouts from test failures and reports affected artifacts. - Shows final-retry test failures as affected-artifact counts rather than workflow-run rates. ## Why? The synthetic `testrunner.TotalTimeout` event was reported both as a flaky test

importance 1@chaptersixopenOriginal evidence ↗
pull request

Release removed shared cluster test references

## What changed? Clear removed tests from the shared cluster's backing slice. ## Why? `sharedClusterT` shortened `activeTests` without clearing the removed interface slot. The backing array could therefore retain completed tests and their functional test state.

importance 1@stephanosopenOriginal evidence ↗
pull request

fix(batcher): scope deterministic request IDs to the batch job ID

## What changed? Use the `jobID` parameter in the `deterministicRequestID` function to allow multiple batch operations to signal the same workflow. ## Why? Two batch operations that send the same signal to the same workflow/run ID will only send one signal, the second will be de-duped in the signal logic because the request ID was hashed from workflow id / r

importance 1@spkane31closedreliability-2026Original evidence ↗
pull request

Reduce test runner resources

## What changed? Only use 4-core ARM runners instead of 8-core; and increase shard size for test sharding. ## Why? 8-core runners have - at least during peak hours - very long provisioning time (several minutes). By using 4-core we reduce that time, but risk OOM kills as they have less memory. To counter that, we increase the number of test shards so that fe

importance 0@stephanosclosedtest-all-dbsOriginal evidence ↗
pull request

Validator generator [WiP]

## What changed? Opt-in validator that exhaustively validate all protobuf fields in 1 place. ## Why? Adds semantic validation for protobufs as a thin layer before the proto request reaches actual business logic. ## How did you test it? - [ ] built - [ ] run locally and tested manually - [ ] covered by existing tests - [x] added new unit test(s) - [ ] added n

importance 0@stephanosopenOriginal evidence ↗
pull request

Await 2.0

## What changed? _Describe what has changed in this PR._ ## Why? _Tell your future self why have you made these changes._ ## How did you test it? - [ ] built - [ ] run locally and tested manually - [ ] covered by existing tests - [ ] added new unit test(s) - [ ] added new functional test(s) ## Potential risks _Any change is risky. Identify all risks you are

importance 0@stephanosopenOriginal evidence ↗
pull request

Adaptive test timeouts via Await

## What changed? Adds `testcontext.EnsureRemaining` and has `await` use it so long await calls can request additional test-scoped context time while still respecting the test context cap. ## Why? Await calls can need more time than the default test context has left (esp after the environment setup). Extending the test timeout in this way allows for (1) stuck

importance 0@stephanosopenOriginal evidence ↗
pull request

Downscale test runner size, increase shards

## What changed? Only use 4-core ARM runners instead of 8-core; and increase shard size for test sharding. ## Why? 8-core runners have - at least during peak hours - very long provisioning time (several minutes). By using 4-core we reduce that time, but risk OOM kills as they have less memory. To counter that, we increase the number of test shards so that fe

importance 0@stephanosclosedtest-all-dbsOriginal evidence ↗
pull request

Richer await timeout diagnostics

## What changed? Stacks on #10417. Adds clearer timeout diagnostics for await failures and test context cleanup after the core context-extension behavior is in place. The report now includes aligned detail rows, attempt duration summaries, attempt timeout counts, deadline-limit causes, and context extension summaries when available. The await reporting tests

importance 0@stephanosopenOriginal evidence ↗
pull request

Stabilize mixed-brain server rolls

## Summary - roll four mixed-version server instances while OMES workloads run - retain each instance's port allocation across replacements and verify membership convergence - route through a mutable frontend proxy and add proxy lifecycle coverage - temporarily resolve OMES from the exact commit in temporalio/omes#426; replace this with the upstream pseudo-v

importance 0@chaptersixclosedOriginal evidence ↗
pull request

Add data race summary to CI report

## What changed? Add data race summary to CI report ## Why? Notify when CI detects data race issues in main. ## How did you test it? - [X] built - [X] run locally and tested manually - [X] covered by existing tests - [X] added new unit test(s) - [ ] added new functional test(s)

importance 0@awln-temporalopenOriginal evidence ↗
pull request

Extract replication reader-state handling into replicationReaderGroup

> **Part 2 of a 5-PR series** building to replication stream namespace isolation (a restructuring of #10147): read buffer → reader group → lane protocol → isolation manager → sender isolation. > #11263 (read buffer) has merged, so this PR's diff is now standalone against `main`. · **Next in series: #11303** (lane wire protocol + receiver routing). ## What ch

importance 0@robhollandteam/cgs-foundationreliability-2026Original evidence ↗
pull request

Add replication stream lane wire protocol and receiver-side lane routing

> **Part 3 of a 5-PR series** building to replication stream namespace isolation (a restructuring of #10147): read buffer → reader group → lane protocol → isolation manager → sender isolation. > #11302 (reader group) has merged, so this PR's diff is now standalone against `main`. · **Next in series: #11304** (isolation manager). ## What changed? The wire-lev

importance 0@robhollandopenteam/cgs-foundationreliability-2026Original evidence ↗
pull request

Add isolation manager for per-namespace replication lanes

> **Part 4 of a 5-PR series** building to replication stream namespace isolation (a restructuring of #10147): read buffer → reader group → lane protocol → isolation manager → sender isolation. > **Stacked on #11303** (lane wire protocol). This PR targets `main`, so until the earlier PRs in the series merge its diff also includes their commits — review after

importance 0@robhollandopenteam/cgs-foundationOriginal evidence ↗
pull request

Track process-lifetime object leak baselines

## What changed? The `objectleak` package has no support for establishing a baseline; therefore it erroneously reports false positives. ## Why? Ensure `objectleak` report is actionable and insightful.

importance 0@stephanosclosedOriginal evidence ↗
pull request

Preserve logger tags across Skip()

## What changed? `zapLogger.Skip()` now carries the logger's accumulated `tags` into the returned clone, matching the `baseZl` field it already forwarded. Also updated `TestThrottleLogger` to apply a `service` tag *before* the throttled logger wraps it, mirroring what `ThrottledLoggerProvider` does. ## Why? Tags applied before a `Skip()` were silently droppe

importance 0@geraldw-aiopenOriginal evidence ↗
pull request

Recognize the new `commonpb` Worker callback variant

⚠️ This is part of a stacked PR set, to be merged into `feature/worker-callbacks`. This will not go directly into `main`, until the overall feature is code complete. --- ## What changed? The worker callbacks feature introduces a new variant of `commonpb.Callback` to describe callbacks for invoking a Nexus operation on a waiting worker. This PR adds the suppo

importance 0@chrsmithopenOriginal evidence ↗
pull request

Fix constant/error-dependent retry jitter being truncated to a no-op

## What changed? `addJitter` in `common/backoff/retrypolicy.go` never applied jitter. With a 2s base and `WithJitter(0.1)`, every delay came back as exactly 2.000s instead of spread across `[2.0s, 2.2s)`. ```go // before return duration * time.Duration(1+jitterPct*rand.Float64()) // after return time.Duration(float64(duration) * (1 + jitterPct*rand.Float64()

importance 0@geraldw-aiopenOriginal evidence ↗
pull request

Emit handover watermark and shard readiness wide events

## What changed? Adds `NamespaceLifecycle` wide events on the two paths that decide when a namespace handover can complete. Also threads `ShardID` and an `EventLogger` into `HandoverTrackerParams` so the tracker can attribute an event to its shard. **Shard handover tracker** (`service/history/shard/`) — each shard holds its own replication watermark for a na

importance 0@michaely520openteam/cgs-foundationreliability-2026Original evidence ↗
pull request

Improve flaky-test report collection and bisecting

## What changed? - Add a rate-limited GitHub API client for efficiently retrieving workflow, artifact, and commit data. - Aggregate test runs once and reuse the index for report generation and bisect analysis. - Add parallel processing and coverage for API handling, aggregation, parsing, and report/bisect behavior. ## Why? The flaky-test report needs to proc

importance 0@chaptersixclosedOriginal evidence ↗
pull request

Skip unbuildable replication tasks on stream sender instead of blocking

## What changed? Skip unbuildable replication tasks on stream sender instead of blocking the stream. The skip is logged and new metric ReplicationTaskSendSkipped added. ## Why? When the replication stream sender cannot build ("convert") a task, it retries and, once the retry budget is exhausted, returns an error that tears the stream down. On reconnect the s

importance 0@qyc5937openteam/cgs-foundationreliability-2026Original evidence ↗
pull request

Detect incompatible metric schemas in mixed-brain tests

## What changed? - Give the current and previous-release mixed-brain servers separate Prometheus endpoints. - Scrape both endpoints after the OMES workload and fail on inconsistent label sets within either server or incompatible label sets across versions. - Require `task_requests` coverage and narrowly allowlist label additions that already exist between th

importance 0@chaptersixclosedOriginal evidence ↗
pull request

Reorganize CHASM activity codebase

## What changed? - Reorganize `chasm/lib/activity` ## Why? - Improve navigability and codebase comprehensibility ## How did you test it? - [x] covered by existing tests

importance 0@dandavisonopenOriginal evidence ↗
pull request

Enable host level events cache by default

## What changed? Flip the default of `history.enableHostLevelEventsCache` from `false` to `true`, so history shards share a single host-level events cache instead of each allocating a shard-level one. ## Why? We have been using host level history cache for a while. We can now enable it in code by default. ## How did you test it? - [x] built - [x] covered by

importance 0@prathyushpvclosedreliability-2026Original evidence ↗
pull request

Add support for worker-variant callbacks

## What changed? This PR updates the CHASM `Callback` component to support the new `Worker`-variant. Unlike `Nexus` callbacks, which just issue an HTTP `POST` request to deliver a Nexus completion result (and potentially in another namespace), these new `Worker` callbacks are for invoking a Nexus operation within the same namespace. This PR does _not_ enable

importance 0@chrsmithopenOriginal evidence ↗