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
pull request

Close SQLite databases with their owners

## What changed? Properly close SQLite connection and database. ## Why SQLite previously retained one shared connection pool per DSN for the entire process. Each SQL factory now owns an initial reference while its stores borrow additional references. Closing the final factory releases the connection pool without losing an in-memory database when shorter-live

importance 0@stephanosclosedOriginal evidence ↗
pull request

Record what a replication task carried on the sent lifecycle event

A `sent` event records that a task went out, not *what it carried* — and that can't be recovered afterwards. `LastUpdateVersionedTransition` stamps are overwritten by later transitions, and the replication progress cache that supplies the lower bound of both the state diff and the event range is in-memory and per `(run, target)`. Seven sent-only fields: - `t

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

Schedule v2 replay fidelity

## 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@davidporter-id-auopenOriginal evidence ↗
pull request

NEXUS-504: Refactor Nexus frontend interceptors

## What changed? Refactoring Nexus frontend interceptors ## Why? https://temporalio.atlassian.net/browse/NEXUS-504 ## 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) ## Potential risks - [ ] Medium risk of regression, will be covered through

importance 0@mavemuriopenOriginal evidence ↗
pull request

Add isolated functional test clusters

## Summary - give every testcore.NewEnv test a fresh cluster and tear it down with the test - bound concurrently live clusters to GOMAXPROCS by default, configurable with TEMPORAL_TEST_LIVE_CLUSTERS - preseed the primary and external namespaces for each cluster before server startup - preserve bounded legacy suite-owned cluster paths and suite-level worker-s

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

Jwt audience env config

## What changed? Added TEMPORAL_JWT_AUDIENCE to the embedded and Docker configuration templates, mapping the environment variable to global.authorization.audience. ## Why? JWT audience validation needs to be configurable in environment-based deployments, consistent with the existing JWT authorization settings. ## How did you test it? - [x] built - [ ] run lo

importance 0@wtg-peternguyenclosedOriginal evidence ↗
pull request

Reduce functional test scheduler worker counts

## What changed? Reduced worker counts in tests. ## Why? <img width="1506" height="728" alt="Screenshot 2026-08-11 at 8 46 47 AM" src="https://github.com/user-attachments/assets/3c8a21e0-b0bd-435e-8bc1-b40504e2ba35" />

importance 0@stephanosclosedtest-all-dbsreliability-2026Original evidence ↗
pull request

replication: emit source_task_id and source_cluster on passive-side lifecycle events

## What Emits `source_cluster`, `source_shard`, and `source_task_id` on the `executing` and `applied` phases of the `replication_lifecycle` wide event, not just `sent`. ## Why `source_task_id` was already on the wire (`ReplicationTask.source_task_id`, populated at every `raw_task_converter.go` conversion site) and already stored on the task as `ExecutableTas

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

Extract shared JUnit XML handling

## What changed? Extract generic JUnit XML file reading and writing into `tools/common/junit`. ## Why? Centralizing format-level JUnit handling.

importance 0@stephanosclosedrequest-claude-reviewOriginal evidence ↗
pull request

Skip worker commands task queues in missing TQ check

## What Skip worker commands task queues (`temporal-sys/worker-commands/...`) when checking for missing task queues during version promotion (SetCurrent / SetRamping). ## Why An SDK bug caused version attributes to be set on worker commands queues, registering them in a deployment version. These queues are ephemeral and don't support versioning, so `IsVersio

importance 0@rkannan82openOriginal evidence ↗
pull request

Cleanup/consolidate completionHandler test infra

## What changed? When trying to clean up some PRs for worker callbacks, I noticed some unnecessary duplication and cruft in our testcases for completion handlers. Essentially it's this: <img width="567" height="216" alt="image" src="https://github.com/user-attachments/assets/c64b759c-c5be-4fc3-a346-92cf77e1f6db" /> Rather than having N places where we constr

importance 0@chrsmithclosedOriginal evidence ↗
pull request

Reuse one persistence factory during server initialization

## What changed? Reuse a single persistence factory during server initialization. ## Why? Server initialization previously constructed and closed a separate persistence factory for each bootstrap operation. This also helps with https://github.com/temporalio/temporal/pull/11458 as this change ensures there's uninterrupted ownership of the sqlite database.

importance 0@stephanosclosedOriginal evidence ↗
pull request

Separate test diagnostics and timeout parsing

Separates diagnostic parsing and timeout parsing into focused files without changing behavior. Existing comments and tests move with their implementations so the later canonical conversion is a semantic diff instead of a delete-and-add rewrite. Stack: depends on #11512. The canonical result model follows in #11514.

importance 0@stephanosopenOriginal evidence ↗
pull request

Scope test diagnostics to canonical results

Converts test output analysis to package-aware canonical diagnostics and failure evidence. The existing runner reaches the new implementation through a temporary compatibility adapter, so there is still one parser implementation while the production cutover remains isolated. Stack: depends on #11514. The Go test JSON recorder follows in #11515.

importance 0@stephanosopenOriginal evidence ↗
pull request

Stuartwells/gradual connect shedding tasks

## What changed? Adding support for a gradual connection period for globalized namespaces. This determines the start, step, and duration for ramp-up, during which a diminishing percentage of replication traffic will be shed (to be filled in via manual force-replicate at the end). ## Why? There are currently issues with clusters becoming overloaded during lar

importance 0@stuart-wellsopenOriginal evidence ↗
pull request

fix(activity): close standalone activity as TIMED_OUT instead of FAILED on worker-reported schedule timeout

## What changed? A worker reporting a schedule-to-start/close timeout via RespondActivityTaskFailed[ById] now closes a standalone (CHASM) activity as TIMED_OUT instead of FAILED, mirroring the timer-queue path and the workflow-activity behavior. The reported failure's Cause, if present, is preserved on the timeout outcome, otherwise prior attempt's failure i

importance 0@ks-temporalopenOriginal evidence ↗
pull request

move admin batch jobs to sys ns

## What changed? - updated batch administration operations to run in the system namespace while continuing to use per-namespace task queues and workers. - allow batch activities running in the system namespace operating on other target namespaces - add ns to jobID and print all previous changes in tdbg prompts ## Why? to run refresh tasks in passive clusters

importance 0@feiyang3catopenOriginal evidence ↗
pull request

Enable Claude reviews for OSS Matching

## Summary - Enable automated Claude PR reviews for members of `temporalio/oss-matching`. ## Impact Members of the OSS Matching team will receive automated Claude reviews after the workflow's existing organization membership, repository permission, and label checks pass. ## Validation - `git diff --check` - Confirmed the branch contains a single workflow-onl

importance 0@Shivs11openOriginal evidence ↗
pull request

Eliminate expected object leak suppressions

## What changed? - unregister process-global gRPC resolver and OpenTelemetry logger state during lifecycle shutdown - close the test matching client RPC factory and clear removed test references - let object checks wait for asynchronous shutdown cleanup while avoiding tiny-allocation false positives - remove every `WithExpected` entry from `objectLeakOpts` #

importance 0@stephanosclosedOriginal evidence ↗
pull request

Track process-lifetime object leak baselines

## What changed? Add process-lifetime baselines to `objectleak`, ignore tiny pointer-free allocations that the runtime cannot track individually, and allow asynchronous cleanup the full settle timeout. ## Why? Make object leak reports actionable by distinguishing process-lifetime objects from leaks and avoiding runtime-induced false positives. Replaces #1131

importance 0@stephanosopenOriginal evidence ↗
pull request

Reuse one persistence factory during server initialization

## What changed? Reuse a single persistence factory during server initialization and expose it to the root Fx graph as `BootstrapPersistenceFactory`. The named interface encodes the startup-only lifecycle without tags, bridges, or adapters. The factory is closed exactly once after startup, on failed construction, or during `Stop` when the server was never st

importance 0@stephanosopenOriginal evidence ↗
pull request

Close SQLite databases with their owners

## What changed? Properly close SQLite connections and databases. ## Why? SQLite previously retained one shared connection pool per DSN for the entire process. Each SQL factory now owns an initial reference while its stores borrow additional references. Closing the final factory releases the connection pool without losing an in-memory database when shorter-l

importance 0@stephanosopenOriginal evidence ↗
pull request

Eliminate expected object leak suppressions

## What changed? - Unregister process-global gRPC resolver and OpenTelemetry logger state during lifecycle shutdown. - Close the test matching client RPC factory and clear removed test references. - Remove every `WithExpected` entry from `objectLeakOpts`. ## Why? The leak test was suppressing the cluster graph instead of enforcing that cluster-owned objects

importance 0@stephanosclosedOriginal evidence ↗
pull request

run admin batch in temporal-system

## What changed? 1. updated batch administration operations to run in the system namespace while continuing to use per-namespace task queues and workers. 2. allow batch activities running in the system namespace operating on other target namespaces 3. add ns to jobID and print all previous changes in tdbg prompts ## Why? to run refresh tasks in passive clust

importance 0@feiyang3catopenOriginal evidence ↗
pull request

Reduce worker deployment log spam

Remove temporary worker deployment workflow logs to reduce log spam. Checks: `go test -tags test_dep ./service/worker/workerdeployment`; `make lint-code`. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Logging-only deletion with no control-flow or state changes in the deployment workflow. > > **Overview** > Removes temporary **Info**-level debug logg

importance 0@carlydfclosedOriginal evidence ↗
pull request

Preserve UTF-8 in test summaries

Test summary details are truncated to byte budgets before being written to Markdown and JSON. Ensure the retained head and tail start at UTF-8 rune boundaries so multibyte failure output remains valid after truncation. The regression test uses multibyte input whose previous tail boundary split a rune.

importance 0@stephanosopenOriginal evidence ↗
pull request

Use generic JUnit documents at runner boundaries

Moves testrunner report inputs, outputs, and summaries onto the shared JUnit document types. The existing reporting behavior remains unchanged behind that seam. Stack: depends on #11513. Parser separation follows in #11487.

importance 0@stephanosopenOriginal evidence ↗
pull request

Harden shared JUnit report IO

Strengthens shared JUnit reads and writes. Reads reject trailing XML and include the source path in errors. Writes validate counters and atomically replace the destination so interrupted writes cannot corrupt an existing report. This is the bottom of the testrunner reporting stack.

importance 0@stephanosopenOriginal evidence ↗
pull request

Define canonical Go test attempt results

Defines the package-aware canonical attempt model and its queries for failed leaves, incomplete executions, package aborts, runtime failures, process failures, and retry safety. Tests construct results directly and pin these invariants before production uses the model. Stack: depends on #11487. Scoped canonical diagnostics follow in #11488.

importance 0@stephanosopenOriginal evidence ↗
pull request

Record canonical Go test attempt results

Runs Go tests directly with JSON output and records package-aware canonical attempt results. The recorder owns event attribution, build failures, diagnostics, timeouts, console output, process state, and coverage-path handling, with focused unit and subprocess tests. Stack: depends on #11488. Retry policy follows in #11516.

importance 0@stephanosopenOriginal evidence ↗
pull request

Populate CallbackInfo.outcome

⚠️ 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`. This was originally sent out as https://github.com/temporalio/temporal/pull/11413, which also persisted the terminal failure of CHASM Callback components. This new version does not do that, and instead just includes the various r

importance 0@chrsmithopenOriginal evidence ↗
pull request

Add flaky test report input artifact

## What changed? - Add a fan-in job to the test workflow after unit, integration, and functional tests. - Download the current attempt's per-job JUnit artifacts and upload them as one `flaky-report-input--<run-id>--<run-attempt>` artifact. - Include the fan-in job in the aggregate test status. This PR only produces the rollup artifact; it does not change the

importance 0@chaptersixclosedOriginal evidence ↗
pull request

Use Go client for flaky report GitHub API calls

## What changed? - Replace the `gh api` subprocesses used by `flakereport` with a shared Go HTTP client. - Rate-limit GitHub API requests to 10 RPS by default; allow an explicit `--rps` override. - Stream artifact downloads to temporary files while preserving the existing 60-second download deadline and artifact worker pool. ## Why? The report performs a Git

importance 0@chaptersixopenOriginal evidence ↗
pull request

Fix sticky queue stats zeroed out

## What Skip the versioning attribution logic when computing stats for sticky queues. Otherwise, we end up with 0 value for add and dispatch rates. This breaks poller autoscaling for sticky queues: 0/0 = NaN, and NaN > threshold is always false, so no +1 scaling signals are ever emitted. Background DescribeTaskQueue returns stats like add_rate and dispatch_r

importance 0@rkannan82openOriginal evidence ↗
pull request

JWT audience env config

## What changed? Added TEMPORAL_JWT_AUDIENCE to the embedded and Docker configuration templates, mapping the environment variable to global.authorization.audience. ## Why? JWT audience validation needs to be configurable in environment-based deployments, consistent with the existing JWT authorization settings. ## How did you test it? - [x] built - [ ] run lo

importance 0@wtg-peternguyenopenOriginal evidence ↗
pull request

Fix Schedule V2 BUFFER_ONE with a deferred start

## Summary - include an existing deferred BUFFER_ONE start in overlap resolution - prevent a later occurrence from becoming a second buffered start - add a focused regression test with one running, one deferred, and one new occurrence ## Production replay evidence The representative V1 history changed from 5,355 V1 actions versus 4,961 CHASM actions to 5,355

importance 0@davidporter-id-auopenOriginal evidence ↗
pull request

Add Schedule V1 to V2 replay and detect coalesced updates

## Summary - add the offline Schedule V1 history to CHASM replay harness and production sampling tools - associate captured V1 starts with their workflow-task completion - detect an update signal delivered after workflow-task scheduling but before workflow-task start - classify input differences at this boundary as inconclusive rather than a significant V2 d

importance 0@davidporter-id-auclosedOriginal evidence ↗
pull request

Reproduce migrated zero catchup compatibility gap

## Summary - characterize V1 resolution of an explicit zero catchup window to the 10-second minimum - prove migration currently preserves the explicit zero value - pair these tests with existing CHASM coverage where zero resolves to the one-year default ## Finding This is a genuine migration compatibility difference. In the representative history, all 15 CHA

importance 0@davidporter-id-auopenOriginal evidence ↗
pull request

Update Selected API list.

## What changed? Added more state-effecting API calls to the forwarding list. ## Why? The intent is for passive to always forward those APIs it cannot handle locally. ## How did you test it? - [x] built - [ ] run locally and tested manually - [x] covered by existing tests - [ ] added new unit test(s) - [ ] added new functional test(s) <!-- CURSOR_SUMMARY -->

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

Validate fairsim inputs and preserve counter defaults

## What changed? - Decode partial counter parameter JSON over `counter.DefaultCounterParams`. - Return a validation error when `-partitions` is zero or negative. - Add regression tests for partial counter overrides and invalid partition counts. ## Why? The README documents partial overrides such as `{"CMS":{"W":100}}`, but the simulator decoded them into a z

importance 0@AminkbiopenOriginal evidence ↗
pull request

Clamp matching read partition count

## What changed? Clamp the dynamic-config fallback for matching read partition count to at least one, and cover zero and negative configured values with unit tests. ## Why? Before a matching client has cached server-provided partition counts, `PickReadPartition` falls back to `matching.numTaskqueueReadPartitions`. A non-positive configured value reaches `mat

importance 0@AminkbiopenOriginal evidence ↗
pull request

Attribute queue reader stuck attempts to a slice

## What changed? - count reader stuck attempts per slice and per owning reader instead of per wall clock second (`SetReaderWatermark` -> `SetSliceReadWatermark`) - report each stuck window once, and only when the alert was actually queued - track read progress for every reader rather than only the default one, and stop creating readers at `MaxReaderCount` -

importance 0@prathyushpvopenOriginal evidence ↗
pull request

Enforce zero expected object leaks

## What changed? Remove the final `FunctionalTestBase.testCluster.testBase*` expectation. `objectLeakOpts` now contains only the protobuf traversal prune and no expected leaks. ## Why? The preceding stack releases shared-test and process-global references. Together with the persistence ownership fixes in #11506 and #11507, functional test clusters become ful

importance 0@stephanosclosedOriginal evidence ↗