From 30a0e493edbd0a2dd4059c7a67f095401fddbea4 Mon Sep 17 00:00:00 2001 From: Dawid Aksamski Date: Thu, 10 Sep 2026 16:18:28 +0200 Subject: [PATCH 1/2] test(temporal): record cross-version replay histories for every runner path Adds the fail-policy, incomplete-branch and cancel-mid-run scenarios next to parallel-wave, recorded from the harness rather than the UI so the inputs carry no secrets. The committed files replay through Worker.runReplayHistories, so one broken history no longer hides the rest, and UPDATE_REPLAY_HISTORIES now takes a scenario name so adding one does not re-baseline the others. --- packages/temporal/test/error-boundary.test.ts | 2 +- packages/temporal/test/fixtures/graph.ts | 54 - .../temporal/test/fixtures/recording-store.ts | 22 + .../test/fixtures/replay-scenarios.ts | 177 ++ packages/temporal/test/replay/README.md | 59 +- .../replay/histories/v0-cancel-mid-run.json | 1185 ++++++++++++ .../test/replay/histories/v0-fail-policy.json | 1695 +++++++++++++++++ .../histories/v0-incomplete-branch.json | 1499 +++++++++++++++ packages/temporal/test/replay/replay.test.ts | 190 +- 9 files changed, 4728 insertions(+), 155 deletions(-) delete mode 100644 packages/temporal/test/fixtures/graph.ts create mode 100644 packages/temporal/test/fixtures/recording-store.ts create mode 100644 packages/temporal/test/fixtures/replay-scenarios.ts create mode 100644 packages/temporal/test/replay/histories/v0-cancel-mid-run.json create mode 100644 packages/temporal/test/replay/histories/v0-fail-policy.json create mode 100644 packages/temporal/test/replay/histories/v0-incomplete-branch.json diff --git a/packages/temporal/test/error-boundary.test.ts b/packages/temporal/test/error-boundary.test.ts index f5fe58024..6b9fca681 100644 --- a/packages/temporal/test/error-boundary.test.ts +++ b/packages/temporal/test/error-boundary.test.ts @@ -19,7 +19,7 @@ import { type WorkflowExecutionInput, executionWorkflowId, } from '../src/index'; -import { type RecordingStore, createRecordingStore } from './fixtures/graph'; +import { type RecordingStore, createRecordingStore } from './fixtures/recording-store'; type BoundaryNode = (BaseNode & { type: 'test/step' }) | (BaseNode & { type: 'test/fail' }); diff --git a/packages/temporal/test/fixtures/graph.ts b/packages/temporal/test/fixtures/graph.ts deleted file mode 100644 index fd73b1755..000000000 --- a/packages/temporal/test/fixtures/graph.ts +++ /dev/null @@ -1,54 +0,0 @@ -// The fan-out/fan-in shape exercises parallel-wave replay; keep the fixture deterministic. -import type { BaseNode, ExecutionStore, NodeExecutorRegistry, WorkflowDefinition } from '../../src/index'; - -export type ReplayTestNode = BaseNode & { type: 'test/step' }; - -export const REPLAY_TEST_WORKFLOW_ID = 'replay-test-workflow'; - -// start ─┬─▶ left ──┬─▶ join -// └─▶ right ─┘ -// -// Waves: [start] → [left, right] → [join]. -export const REPLAY_TEST_GRAPH: WorkflowDefinition = { - workflowId: REPLAY_TEST_WORKFLOW_ID, - nodes: [ - { id: 'start', type: 'test/step', role: 'start', config: { label: 'start' } }, - { id: 'left', type: 'test/step', config: { label: 'left' } }, - { id: 'right', type: 'test/step', config: { label: 'right' } }, - { id: 'join', type: 'test/step', config: { label: 'join' } }, - ], - edges: [ - { id: 'e-start-left', sourceNodeId: 'start', targetNodeId: 'left' }, - { id: 'e-start-right', sourceNodeId: 'start', targetNodeId: 'right' }, - { id: 'e-left-join', sourceNodeId: 'left', targetNodeId: 'join' }, - { id: 'e-right-join', sourceNodeId: 'right', targetNodeId: 'join' }, - ], -}; - -export const replayTestExecutors: NodeExecutorRegistry = { - 'test/step': (node, context) => { - const upstream = Object.keys(context.nodeOutputs).sort(); - return { output: { visited: node.id, after: upstream } }; - }, -}; - -export type RecordingStore = ExecutionStore & { - events: { sequence: number; type: string; nodeId?: string; payload?: unknown }[]; - statuses: { status: string; errorMessage?: string }[]; -}; - -export function createRecordingStore(): RecordingStore { - const events: RecordingStore['events'] = []; - const statuses: RecordingStore['statuses'] = []; - - return { - events, - statuses, - async emitExecutionEvent(_executionId, sequence, type, payload, nodeId) { - events.push({ sequence, type, nodeId, payload }); - }, - async updateExecutionStatus(_executionId, status, errorMessage) { - statuses.push({ status, errorMessage }); - }, - }; -} diff --git a/packages/temporal/test/fixtures/recording-store.ts b/packages/temporal/test/fixtures/recording-store.ts new file mode 100644 index 000000000..31c349ecd --- /dev/null +++ b/packages/temporal/test/fixtures/recording-store.ts @@ -0,0 +1,22 @@ +import type { ExecutionStore } from '../../src/index'; + +export type RecordingStore = ExecutionStore & { + events: { sequence: number; type: string; nodeId?: string; payload?: unknown }[]; + statuses: { status: string; errorMessage?: string }[]; +}; + +export function createRecordingStore(): RecordingStore { + const events: RecordingStore['events'] = []; + const statuses: RecordingStore['statuses'] = []; + + return { + events, + statuses, + async emitExecutionEvent(_executionId, sequence, type, payload, nodeId) { + events.push({ sequence, type, nodeId, payload }); + }, + async updateExecutionStatus(_executionId, status, errorMessage) { + statuses.push({ status, errorMessage }); + }, + }; +} diff --git a/packages/temporal/test/fixtures/replay-scenarios.ts b/packages/temporal/test/fixtures/replay-scenarios.ts new file mode 100644 index 000000000..a60ba1ba8 --- /dev/null +++ b/packages/temporal/test/fixtures/replay-scenarios.ts @@ -0,0 +1,177 @@ +// One scenario per path through the sandbox code; each gets its own committed history +// under ../replay/histories/. ../replay/README.md says what each protects. +import type { WorkflowHandle } from '@temporalio/client'; + +import { + type BaseNode, + type NodeExecutorRegistry, + PermanentNodeExecutionError, + type WorkflowDefinition, +} from '../../src/index'; + +export type ReplayScenarioNode = + | (BaseNode & { type: 'test/step' }) + | (BaseNode & { type: 'test/fail' }) + | (BaseNode & { type: 'test/route' }) + | (BaseNode & { type: 'test/block' }); + +type ActivityCounts = { executeNode: number; emitEvent: number; updateStatus: number }; + +type WorkflowCloseAttributes = + | 'workflowExecutionCompletedEventAttributes' + | 'workflowExecutionFailedEventAttributes' + | 'workflowExecutionCanceledEventAttributes'; + +export type ReplayScenario = { + name: string; + graph: WorkflowDefinition; + terminalEvent: string; + terminalStatus: string; + closeAttributes: WorkflowCloseAttributes; + expectedActivities: ActivityCounts; + // Executors and the driver are built together, per run, so a scenario can share + // run-local state between them (the blocked node the cancel scenario releases). + stage(): { + executors: NodeExecutorRegistry; + drive(handle: WorkflowHandle): Promise; + }; +}; + +const UNWIRED_PORT = 'no'; + +const executors: NodeExecutorRegistry = { + 'test/step': (node, context) => ({ output: { visited: node.id, after: Object.keys(context.nodeOutputs).sort() } }), + 'test/fail': () => { + throw new PermanentNodeExecutionError('replay_fixture_failure', 'fails on purpose'); + }, + 'test/route': () => ({ output: null, nextPort: UNWIRED_PORT }), + 'test/block': () => { + throw new Error('test/block is staged by the cancel-mid-run scenario only'); + }, +}; + +async function settle(handle: WorkflowHandle): Promise { + try { + await handle.result(); + } catch { + // How a run ended is asserted from the store and the history, not from the result. + } +} + +export const REPLAY_SCENARIOS: ReplayScenario[] = [ + { + // start ─┬─▶ left ──┬─▶ join The fan-out is the point: it is the only shape that + // └─▶ right ─┘ puts two commands in one workflow task. + name: 'parallel-wave', + graph: { + workflowId: 'replay-test-workflow', + nodes: [ + { id: 'start', type: 'test/step', role: 'start', config: { label: 'start' } }, + { id: 'left', type: 'test/step', config: { label: 'left' } }, + { id: 'right', type: 'test/step', config: { label: 'right' } }, + { id: 'join', type: 'test/step', config: { label: 'join' } }, + ], + edges: [ + { id: 'e-start-left', sourceNodeId: 'start', targetNodeId: 'left' }, + { id: 'e-start-right', sourceNodeId: 'start', targetNodeId: 'right' }, + { id: 'e-left-join', sourceNodeId: 'left', targetNodeId: 'join' }, + { id: 'e-right-join', sourceNodeId: 'right', targetNodeId: 'join' }, + ], + }, + terminalEvent: 'execution_completed', + terminalStatus: 'completed', + closeAttributes: 'workflowExecutionCompletedEventAttributes', + expectedActivities: { executeNode: 4, emitEvent: 10, updateStatus: 1 }, + stage: () => ({ executors, drive: settle }), + }, + { + // start ─┬─▶ fail ────┬─▶ join fail throws under the default policy: the wave + // └─▶ sibling ─┘ still finishes, join is never reached, no skips. + name: 'fail-policy', + graph: { + workflowId: 'replay-fail-policy', + nodes: [ + { id: 'start', type: 'test/step', role: 'start', config: {} }, + { id: 'fail', type: 'test/fail', config: {} }, + { id: 'sibling', type: 'test/step', config: {} }, + { id: 'join', type: 'test/step', config: {} }, + ], + edges: [ + { id: 'e-start-fail', sourceNodeId: 'start', targetNodeId: 'fail' }, + { id: 'e-start-sibling', sourceNodeId: 'start', targetNodeId: 'sibling' }, + { id: 'e-fail-join', sourceNodeId: 'fail', targetNodeId: 'join' }, + { id: 'e-sibling-join', sourceNodeId: 'sibling', targetNodeId: 'join' }, + ], + }, + terminalEvent: 'execution_failed', + terminalStatus: 'failed', + closeAttributes: 'workflowExecutionFailedEventAttributes', + expectedActivities: { executeNode: 3, emitEvent: 8, updateStatus: 1 }, + stage: () => ({ executors, drive: settle }), + }, + { + // start ─▶ route ─[yes]─▶ taken route names the 'no' port, which has no edge: + // taken is skipped and the run closes incomplete. + name: 'incomplete-branch', + graph: { + workflowId: 'replay-incomplete-branch', + nodes: [ + { id: 'start', type: 'test/step', role: 'start', config: {} }, + { id: 'route', type: 'test/route', config: {} }, + { id: 'taken', type: 'test/step', config: {} }, + ], + edges: [ + { id: 'e-start-route', sourceNodeId: 'start', targetNodeId: 'route' }, + { id: 'e-route-taken', sourceNodeId: 'route', targetNodeId: 'taken', sourceHandle: 'yes' }, + ], + }, + terminalEvent: 'execution_incomplete', + terminalStatus: 'incomplete', + closeAttributes: 'workflowExecutionCompletedEventAttributes', + expectedActivities: { executeNode: 2, emitEvent: 7, updateStatus: 1 }, + stage: () => ({ executors, drive: settle }), + }, + { + // start ─▶ block block parks until released; the driver cancels the run while it + // is in flight, then lets it finish so the worker can drain. + name: 'cancel-mid-run', + graph: { + workflowId: 'replay-cancel-mid-run', + nodes: [ + { id: 'start', type: 'test/step', role: 'start', config: {} }, + { id: 'block', type: 'test/block', config: {} }, + ], + edges: [{ id: 'e-start-block', sourceNodeId: 'start', targetNodeId: 'block' }], + }, + terminalEvent: 'execution_cancelled', + terminalStatus: 'cancelled', + closeAttributes: 'workflowExecutionCanceledEventAttributes', + expectedActivities: { executeNode: 2, emitEvent: 5, updateStatus: 1 }, + stage: () => { + let reached!: () => void; + let release!: () => void; + const blockReached = new Promise((resolve) => (reached = resolve)); + const released = new Promise((resolve) => (release = resolve)); + + return { + executors: { + ...executors, + 'test/block': async () => { + reached(); + await released; + return { output: null }; + }, + }, + drive: async (handle) => { + await blockReached; + await handle.cancel(); + await settle(handle); + // Released only now, so the cancel is recorded with the activity still open. The + // late completion then meets a closed run; Temporal core logs that as a single + // "Activity not found on completion" warning, which is expected here. + release(); + }, + }; + }, + }, +]; diff --git a/packages/temporal/test/replay/README.md b/packages/temporal/test/replay/README.md index 14fcac91a..968437291 100644 --- a/packages/temporal/test/replay/README.md +++ b/packages/temporal/test/replay/README.md @@ -6,60 +6,79 @@ A workflow can wait for days, so this is the guard that lets the package be edit between releases at all. `replay.test.ts` is the harness. It starts a real Temporal (an in-memory dev server via -`@temporalio/testing`), runs a graph, and then does three separate things with what came -back: +`@temporalio/testing`), runs every scenario in `../fixtures/replay-scenarios.ts`, and then +does three separate things with what came back: -1. **Counts the scheduled activities per type.** One `executeNode` per node, one +1. **Counts the scheduled activities per type.** One `executeNode` per node that ran, one `emitEvent` per emitted event, one `updateStatus` for the terminal write. An extra activity anywhere in `runGraph` moves one of those numbers. 2. **Replays the history it just recorded.** Same code, same history — proves the run is reproducible under Temporal's own replayer, not only under the re-execution harness in `execution-core`. -3. **Replays a committed history from `histories/`.** The cross-version guard. This is +3. **Replays every committed history in `histories/`.** The cross-version guard. This is the one that fails when today's code would issue commands a run recorded on older code - never made. + never made. It goes through `Worker.runReplayHistories`, so one broken history reports + alongside the others instead of hiding them. It also insists that every scenario has a + recording and every recording belongs to a scenario; the version prefix is free. Only (3) survives a change to the runner, which is why (3) is the one that matters at review time. (2) passes even on a broken change, because the history it checks was recorded by the same broken code. -## The graph the harness runs +## The scenarios -`start → (left, right) → join`, defined in `../fixtures/graph.ts`. The fan-out is the -point: it is the only shape that puts two commands in a single workflow task, which is -where the runner's `Promise.all` becomes visible to Temporal. A straight line replays -green while leaving that path untested. +One file per path through the sandbox code. A change that leaves one path alone can still +move the commands on another, so all four replay on every run. + +| File | Graph | Path it protects | +| --------------------------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `v0-parallel-wave.json` | `start → (left, right) → join` | The happy path. A fan-out is the only shape that puts two commands in a single workflow task, where the runner's `Promise.all` becomes visible to Temporal. | +| `v0-fail-policy.json` | `start → (fail, sibling) → join` | A node failing under the default `fail` policy: the wave still finishes, the join is never reached, `execution_failed` closes the run and the Workflow Execution fails. | +| `v0-incomplete-branch.json` | `start → route ─[yes]→ taken` | `route` names a port with no edge: `taken` is skipped as `branch_not_taken`, the run closes `incomplete` and the Workflow Execution completes. | +| `v0-cancel-mid-run.json` | `start → block` | A cancel while `block` is in flight: the non-cancellable cleanup emits `execution_cancelled` and the Workflow Execution closes as Canceled. | + +The cancel scenario parks its executor until the driver has cancelled the run, so the +recording always catches the activity open. The late completion then meets a closed run, +which Temporal core logs as one "Activity not found on completion" warning. Expected. ## Recording a history -From the harness, which is what the committed files come from: +From the harness, which is what the committed files come from. Name the scenario so the +others keep guarding what they recorded: ```bash -UPDATE_REPLAY_HISTORIES=1 pnpm --filter @workflowbuilder/temporal test +UPDATE_REPLAY_HISTORIES= pnpm --filter @workflowbuilder/temporal test ``` -Or from a real run against a local stack, which is worth doing for a scenario the harness -cannot stage. `historyToJSON` writes the same shape, so the two are interchangeable: +`UPDATE_REPLAY_HISTORIES=1` re-records every scenario; see rule 3 before reaching for it. +Adding a scenario means adding an entry to `../fixtures/replay-scenarios.ts`, recording +it by name, and describing it in the table above. The harness fails until the file exists. + +Or from a real run against a local stack, for a scenario the harness cannot stage. +`historyToJSON` writes the same shape, so the two are interchangeable. Read the output +before committing it: the first event carries the whole `WorkflowExecutionInput`, +including the `variables` and `global` bags, which is where the backend injects secrets. +The harness recordings carry only empty bags and a synthetic graph. ```bash temporal workflow show --workflow-id execution- --output json > histories/-.json ``` -Scenarios still worth adding, one file each: a cancellation mid-run, and a node failure -that goes through the error policy. - ## Rules once files live here 1. A failing replay means today's code would issue commands the recorded run never made. What to do about it depends on whether the package has shipped; see the next section. 2. Do not edit or delete a history while runs recorded by that version may still exist. New behaviour gets a new file next to the old ones. -3. Regenerating a file resets what it guards. `UPDATE_REPLAY_HISTORIES=1` rewrites the +3. Regenerating a file resets what it guards. `UPDATE_REPLAY_HISTORIES` rewrites the history from current code, so the cross-version check silently becomes a self-check. - Reach for it when adding a scenario, not to make a red test green. + Record by scenario name when adding one; `=1` is for a deliberate re-baseline of all + four, never for making a red test green. `v0-` names the pre-release baseline: the package has not published a version yet, so -these are histories from the code as it stood before the first release. +these are histories from the code as it stood before the first release. At that release, +record the same scenarios as `-.json` next to these. The `v0-` files +can then go, since no run outside this repo was ever recorded by pre-release code. ## What a red cross-version test means diff --git a/packages/temporal/test/replay/histories/v0-cancel-mid-run.json b/packages/temporal/test/replay/histories/v0-cancel-mid-run.json new file mode 100644 index 000000000..18351ed21 --- /dev/null +++ b/packages/temporal/test/replay/histories/v0-cancel-mid-run.json @@ -0,0 +1,1185 @@ +{ + "events": [ + { + "eventId": "1", + "eventTime": "2026-09-10T12:42:23.523714Z", + "eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_STARTED", + "taskId": "1049198", + "workflowExecutionStartedEventAttributes": { + "workflowType": { + "name": "runWorkflow" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJ3b3JrZmxvd0lkIjoicmVwbGF5LWNhbmNlbC1taWQtcnVuIiwiZXhlY3V0aW9uSWQiOiJyZXBsYXktY2FuY2VsLW1pZC1ydW4iLCJkZWZpbml0aW9uIjp7IndvcmtmbG93SWQiOiJyZXBsYXktY2FuY2VsLW1pZC1ydW4iLCJub2RlcyI6W3siaWQiOiJzdGFydCIsInR5cGUiOiJ0ZXN0L3N0ZXAiLCJyb2xlIjoic3RhcnQiLCJjb25maWciOnt9fSx7ImlkIjoiYmxvY2siLCJ0eXBlIjoidGVzdC9ibG9jayIsImNvbmZpZyI6e319XSwiZWRnZXMiOlt7ImlkIjoiZS1zdGFydC1ibG9jayIsInNvdXJjZU5vZGVJZCI6InN0YXJ0IiwidGFyZ2V0Tm9kZUlkIjoiYmxvY2sifV19LCJ0cmlnZ2VyUGF5bG9hZCI6e30sInZhcmlhYmxlcyI6e30sImdsb2JhbCI6e319" + } + ] + }, + "workflowTaskTimeout": "10s", + "originalExecutionRunId": "01a08b57-35a3-7ae1-9eda-c2c29ca14119", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "firstExecutionRunId": "01a08b57-35a3-7ae1-9eda-c2c29ca14119", + "attempt": 1, + "firstWorkflowTaskBackoff": "0s", + "header": {}, + "workflowId": "execution-replay-cancel-mid-run" + } + }, + { + "eventId": "2", + "eventTime": "2026-09-10T12:42:23.523765Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049199", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "3", + "eventTime": "2026-09-10T12:42:23.525448Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049204", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "2", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "07b47ef4-830f-4d8c-a1c7-8ffce86edd86", + "historySizeBytes": "666", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "4", + "eventTime": "2026-09-10T12:42:23.561179Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049208", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "2", + "startedEventId": "3", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": { + "coreUsedFlags": [ + 1, + 2, + 3 + ], + "sdkName": "temporal-typescript", + "sdkVersion": "1.23.0" + }, + "meteringMetadata": {} + } + }, + { + "eventId": "5", + "eventTime": "2026-09-10T12:42:23.561221Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049209", + "activityTaskScheduledEventAttributes": { + "activityId": "1", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1jYW5jZWwtbWlkLXJ1biI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "MQ==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "ImV4ZWN1dGlvbl9zdGFydGVkIg==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJ3b3JrZmxvd0lkIjoicmVwbGF5LWNhbmNlbC1taWQtcnVuIn0=" + }, + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "4", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "6", + "eventTime": "2026-09-10T12:42:23.563614Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049215", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "5", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "cc2fa736-7b33-4776-9cf6-a91d850aeec5", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "7", + "eventTime": "2026-09-10T12:42:23.567291Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049216", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "5", + "startedEventId": "6", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "8", + "eventTime": "2026-09-10T12:42:23.567303Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049217", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-965635c589ac4badb4f4d83a20f3121f", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "9", + "eventTime": "2026-09-10T12:42:23.568827Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049221", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "8", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "31a48054-e043-4c52-ad1f-b98387bd324b", + "historySizeBytes": "1763", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "10", + "eventTime": "2026-09-10T12:42:23.576389Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049225", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "8", + "startedEventId": "9", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "11", + "eventTime": "2026-09-10T12:42:23.576435Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049226", + "activityTaskScheduledEventAttributes": { + "activityId": "2", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1jYW5jZWwtbWlkLXJ1biI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Mg==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Im5vZGVfc3RhcnRlZCI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJjb25maWciOnt9LCJ2aXNpYmxlTm9kZUlkcyI6W119" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InN0YXJ0Ig==" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "10", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "12", + "eventTime": "2026-09-10T12:42:23.578529Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049231", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "11", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "ebc68290-0257-4116-8d44-7df3da47bbf3", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "13", + "eventTime": "2026-09-10T12:42:23.581221Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049232", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "11", + "startedEventId": "12", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "14", + "eventTime": "2026-09-10T12:42:23.581231Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049233", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-965635c589ac4badb4f4d83a20f3121f", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "15", + "eventTime": "2026-09-10T12:42:23.629846Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049237", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "14", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "d3489565-035a-482b-9431-c3ead5f5041d", + "historySizeBytes": "2824", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "16", + "eventTime": "2026-09-10T12:42:23.634135Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049241", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "14", + "startedEventId": "15", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "17", + "eventTime": "2026-09-10T12:42:23.634172Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049242", + "activityTaskScheduledEventAttributes": { + "activityId": "3", + "activityType": { + "name": "executeNode" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJpZCI6InN0YXJ0IiwidHlwZSI6InRlc3Qvc3RlcCIsInJvbGUiOiJzdGFydCIsImNvbmZpZyI6e319" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJ3b3JrZmxvd0lkIjoicmVwbGF5LWNhbmNlbC1taWQtcnVuIiwiZXhlY3V0aW9uSWQiOiJyZXBsYXktY2FuY2VsLW1pZC1ydW4iLCJ0cmlnZ2VyUGF5bG9hZCI6e30sIm5vZGVPdXRwdXRzIjp7fSwidmFyaWFibGVzIjp7fSwiZ2xvYmFsIjp7fX0=" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "600s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "16", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 2 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "18", + "eventTime": "2026-09-10T12:42:23.679553Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049247", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "17", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "2cf76403-ed36-4a9a-a3c8-aa6af292f1f8", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "19", + "eventTime": "2026-09-10T12:42:23.682243Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049248", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJvdXRwdXQiOnsidmlzaXRlZCI6InN0YXJ0IiwiYWZ0ZXIiOltdfX0=" + } + ] + }, + "scheduledEventId": "17", + "startedEventId": "18", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "20", + "eventTime": "2026-09-10T12:42:23.682249Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049249", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-965635c589ac4badb4f4d83a20f3121f", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "21", + "eventTime": "2026-09-10T12:42:23.729600Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049253", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "20", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "e8656fa4-034f-4b17-b06f-e79e5fd399c1", + "historySizeBytes": "3971", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "22", + "eventTime": "2026-09-10T12:42:23.734359Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049257", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "20", + "startedEventId": "21", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "23", + "eventTime": "2026-09-10T12:42:23.734396Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049258", + "activityTaskScheduledEventAttributes": { + "activityId": "4", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1jYW5jZWwtbWlkLXJ1biI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Mw==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Im5vZGVfY29tcGxldGVkIg==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJvdXRwdXQiOnsidmlzaXRlZCI6InN0YXJ0IiwiYWZ0ZXIiOltdfX0=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InN0YXJ0Ig==" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "22", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "24", + "eventTime": "2026-09-10T12:42:23.779360Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049263", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "23", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "7131aae3-8c35-445d-8049-770762b4664d", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "25", + "eventTime": "2026-09-10T12:42:23.781474Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049264", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "23", + "startedEventId": "24", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "26", + "eventTime": "2026-09-10T12:42:23.781481Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049265", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-965635c589ac4badb4f4d83a20f3121f", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "27", + "eventTime": "2026-09-10T12:42:23.829589Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049269", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "26", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "51aebabd-8486-4d50-aa26-bc373d20273d", + "historySizeBytes": "5042", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "28", + "eventTime": "2026-09-10T12:42:23.834146Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049273", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "26", + "startedEventId": "27", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "29", + "eventTime": "2026-09-10T12:42:23.834178Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049274", + "activityTaskScheduledEventAttributes": { + "activityId": "5", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1jYW5jZWwtbWlkLXJ1biI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "NA==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Im5vZGVfc3RhcnRlZCI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJjb25maWciOnt9LCJ2aXNpYmxlTm9kZUlkcyI6WyJzdGFydCJdfQ==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "ImJsb2NrIg==" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "28", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "30", + "eventTime": "2026-09-10T12:42:23.879676Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049279", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "29", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "0d1d6c9f-a01f-4f36-80e0-f404bd840895", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "31", + "eventTime": "2026-09-10T12:42:23.882109Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049280", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "29", + "startedEventId": "30", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "32", + "eventTime": "2026-09-10T12:42:23.882116Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049281", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-965635c589ac4badb4f4d83a20f3121f", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "33", + "eventTime": "2026-09-10T12:42:23.929842Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049285", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "32", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "45d23aa1-6fec-4fa5-8c1e-e8fab62dc6e3", + "historySizeBytes": "6110", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "34", + "eventTime": "2026-09-10T12:42:23.935664Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049289", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "32", + "startedEventId": "33", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "35", + "eventTime": "2026-09-10T12:42:23.935700Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049290", + "activityTaskScheduledEventAttributes": { + "activityId": "6", + "activityType": { + "name": "executeNode" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJpZCI6ImJsb2NrIiwidHlwZSI6InRlc3QvYmxvY2siLCJjb25maWciOnt9fQ==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJ3b3JrZmxvd0lkIjoicmVwbGF5LWNhbmNlbC1taWQtcnVuIiwiZXhlY3V0aW9uSWQiOiJyZXBsYXktY2FuY2VsLW1pZC1ydW4iLCJ0cmlnZ2VyUGF5bG9hZCI6e30sIm5vZGVPdXRwdXRzIjp7InN0YXJ0Ijp7InZpc2l0ZWQiOiJzdGFydCIsImFmdGVyIjpbXX19LCJ2YXJpYWJsZXMiOnt9LCJnbG9iYWwiOnt9fQ==" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "600s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "34", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 2 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "36", + "eventTime": "2026-09-10T12:42:23.983863Z", + "eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_CANCEL_REQUESTED", + "taskId": "1049295", + "workflowExecutionCancelRequestedEventAttributes": { + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "37", + "eventTime": "2026-09-10T12:42:23.983866Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049296", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-965635c589ac4badb4f4d83a20f3121f", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "38", + "eventTime": "2026-09-10T12:42:24.028958Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049300", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "37", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "b5fa6755-daa4-453c-a489-70e4c9950c61", + "historySizeBytes": "7012", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "39", + "eventTime": "2026-09-10T12:42:24.040008Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049304", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "37", + "startedEventId": "38", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "40", + "eventTime": "2026-09-10T12:42:24.040043Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_CANCEL_REQUESTED", + "taskId": "1049305", + "activityTaskCancelRequestedEventAttributes": { + "scheduledEventId": "35", + "workflowTaskCompletedEventId": "39" + } + }, + { + "eventId": "41", + "eventTime": "2026-09-10T12:42:24.040061Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049306", + "activityTaskScheduledEventAttributes": { + "activityId": "8", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1jYW5jZWwtbWlkLXJ1biI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Ng==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "ImV4ZWN1dGlvbl9jYW5jZWxsZWQi" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJyZWFzb24iOiJ1c2VyX3JlcXVlc3QifQ==" + }, + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "39", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "42", + "eventTime": "2026-09-10T12:42:24.079809Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049311", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "41", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "df78203b-1bc5-4ace-add9-00df015ad904", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "43", + "eventTime": "2026-09-10T12:42:24.082090Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049312", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "41", + "startedEventId": "42", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "44", + "eventTime": "2026-09-10T12:42:24.082097Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049313", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-965635c589ac4badb4f4d83a20f3121f", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "45", + "eventTime": "2026-09-10T12:42:24.129681Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049317", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "44", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "d9363093-568d-4f2d-a690-f492e4e500a4", + "historySizeBytes": "8088", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "46", + "eventTime": "2026-09-10T12:42:24.134326Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049321", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "44", + "startedEventId": "45", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "47", + "eventTime": "2026-09-10T12:42:24.134357Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049322", + "activityTaskScheduledEventAttributes": { + "activityId": "9", + "activityType": { + "name": "updateStatus" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1jYW5jZWwtbWlkLXJ1biI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "ImNhbmNlbGxlZCI=" + }, + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "46", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "48", + "eventTime": "2026-09-10T12:42:24.179327Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049327", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "47", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "c85e9e86-cf55-400c-bc4e-f8ec166d0579", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "49", + "eventTime": "2026-09-10T12:42:24.181751Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049328", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "47", + "startedEventId": "48", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "50", + "eventTime": "2026-09-10T12:42:24.181758Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049329", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-965635c589ac4badb4f4d83a20f3121f", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "51", + "eventTime": "2026-09-10T12:42:24.229660Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049333", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "50", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "f7e58bae-e169-4076-b608-fe8279480eba", + "historySizeBytes": "9044", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "52", + "eventTime": "2026-09-10T12:42:24.234643Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049337", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "50", + "startedEventId": "51", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "53", + "eventTime": "2026-09-10T12:42:24.234684Z", + "eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_CANCELED", + "taskId": "1049338", + "workflowExecutionCanceledEventAttributes": { + "workflowTaskCompletedEventId": "52" + } + } + ] +} diff --git a/packages/temporal/test/replay/histories/v0-fail-policy.json b/packages/temporal/test/replay/histories/v0-fail-policy.json new file mode 100644 index 000000000..b3c034846 --- /dev/null +++ b/packages/temporal/test/replay/histories/v0-fail-policy.json @@ -0,0 +1,1695 @@ +{ + "events": [ + { + "eventId": "1", + "eventTime": "2026-09-10T12:42:21.357086Z", + "eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_STARTED", + "taskId": "1048830", + "workflowExecutionStartedEventAttributes": { + "workflowType": { + "name": "runWorkflow" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJ3b3JrZmxvd0lkIjoicmVwbGF5LWZhaWwtcG9saWN5IiwiZXhlY3V0aW9uSWQiOiJyZXBsYXktZmFpbC1wb2xpY3kiLCJkZWZpbml0aW9uIjp7IndvcmtmbG93SWQiOiJyZXBsYXktZmFpbC1wb2xpY3kiLCJub2RlcyI6W3siaWQiOiJzdGFydCIsInR5cGUiOiJ0ZXN0L3N0ZXAiLCJyb2xlIjoic3RhcnQiLCJjb25maWciOnt9fSx7ImlkIjoiZmFpbCIsInR5cGUiOiJ0ZXN0L2ZhaWwiLCJjb25maWciOnt9fSx7ImlkIjoic2libGluZyIsInR5cGUiOiJ0ZXN0L3N0ZXAiLCJjb25maWciOnt9fSx7ImlkIjoiam9pbiIsInR5cGUiOiJ0ZXN0L3N0ZXAiLCJjb25maWciOnt9fV0sImVkZ2VzIjpbeyJpZCI6ImUtc3RhcnQtZmFpbCIsInNvdXJjZU5vZGVJZCI6InN0YXJ0IiwidGFyZ2V0Tm9kZUlkIjoiZmFpbCJ9LHsiaWQiOiJlLXN0YXJ0LXNpYmxpbmciLCJzb3VyY2VOb2RlSWQiOiJzdGFydCIsInRhcmdldE5vZGVJZCI6InNpYmxpbmcifSx7ImlkIjoiZS1mYWlsLWpvaW4iLCJzb3VyY2VOb2RlSWQiOiJmYWlsIiwidGFyZ2V0Tm9kZUlkIjoiam9pbiJ9LHsiaWQiOiJlLXNpYmxpbmctam9pbiIsInNvdXJjZU5vZGVJZCI6InNpYmxpbmciLCJ0YXJnZXROb2RlSWQiOiJqb2luIn1dfSwidHJpZ2dlclBheWxvYWQiOnt9LCJ2YXJpYWJsZXMiOnt9LCJnbG9iYWwiOnt9fQ==" + } + ] + }, + "workflowTaskTimeout": "10s", + "originalExecutionRunId": "01a08b57-2d2d-714f-8119-af644b290345", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "firstExecutionRunId": "01a08b57-2d2d-714f-8119-af644b290345", + "attempt": 1, + "firstWorkflowTaskBackoff": "0s", + "header": {}, + "workflowId": "execution-replay-fail-policy" + } + }, + { + "eventId": "2", + "eventTime": "2026-09-10T12:42:21.357125Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1048831", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "3", + "eventTime": "2026-09-10T12:42:21.358540Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1048836", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "2", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "60fb00bf-cbcb-4a9e-b790-65fd45c69ccf", + "historySizeBytes": "952", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "4", + "eventTime": "2026-09-10T12:42:21.389745Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1048840", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "2", + "startedEventId": "3", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": { + "coreUsedFlags": [ + 1, + 2, + 3 + ], + "sdkName": "temporal-typescript", + "sdkVersion": "1.23.0" + }, + "meteringMetadata": {} + } + }, + { + "eventId": "5", + "eventTime": "2026-09-10T12:42:21.389781Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1048841", + "activityTaskScheduledEventAttributes": { + "activityId": "1", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1mYWlsLXBvbGljeSI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "MQ==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "ImV4ZWN1dGlvbl9zdGFydGVkIg==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJ3b3JrZmxvd0lkIjoicmVwbGF5LWZhaWwtcG9saWN5In0=" + }, + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "4", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "6", + "eventTime": "2026-09-10T12:42:21.390840Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1048847", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "5", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "66cad097-8c9b-4d5c-a398-6bc90ee6e94f", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "7", + "eventTime": "2026-09-10T12:42:21.393396Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1048848", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "5", + "startedEventId": "6", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "8", + "eventTime": "2026-09-10T12:42:21.393402Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1048849", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-cc5f5b1fde744e90a16e34b5ba959190", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "9", + "eventTime": "2026-09-10T12:42:21.394170Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1048853", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "8", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "7349ae3f-164d-42e6-acbf-0ef536d4b350", + "historySizeBytes": "2043", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "10", + "eventTime": "2026-09-10T12:42:21.398923Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1048857", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "8", + "startedEventId": "9", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "11", + "eventTime": "2026-09-10T12:42:21.398952Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1048858", + "activityTaskScheduledEventAttributes": { + "activityId": "2", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1mYWlsLXBvbGljeSI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Mg==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Im5vZGVfc3RhcnRlZCI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJjb25maWciOnt9LCJ2aXNpYmxlTm9kZUlkcyI6W119" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InN0YXJ0Ig==" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "10", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "12", + "eventTime": "2026-09-10T12:42:21.399811Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1048863", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "11", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "ddcd736b-61b0-40a9-91ab-268b5c8a2675", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "13", + "eventTime": "2026-09-10T12:42:21.401712Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1048864", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "11", + "startedEventId": "12", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "14", + "eventTime": "2026-09-10T12:42:21.401720Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1048865", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-cc5f5b1fde744e90a16e34b5ba959190", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "15", + "eventTime": "2026-09-10T12:42:21.429409Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1048869", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "14", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "11b3337b-cf15-4df5-a7e1-34eafe04162d", + "historySizeBytes": "3101", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "16", + "eventTime": "2026-09-10T12:42:21.433203Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1048873", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "14", + "startedEventId": "15", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "17", + "eventTime": "2026-09-10T12:42:21.433234Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1048874", + "activityTaskScheduledEventAttributes": { + "activityId": "3", + "activityType": { + "name": "executeNode" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJpZCI6InN0YXJ0IiwidHlwZSI6InRlc3Qvc3RlcCIsInJvbGUiOiJzdGFydCIsImNvbmZpZyI6e319" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJ3b3JrZmxvd0lkIjoicmVwbGF5LWZhaWwtcG9saWN5IiwiZXhlY3V0aW9uSWQiOiJyZXBsYXktZmFpbC1wb2xpY3kiLCJ0cmlnZ2VyUGF5bG9hZCI6e30sIm5vZGVPdXRwdXRzIjp7fSwidmFyaWFibGVzIjp7fSwiZ2xvYmFsIjp7fX0=" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "600s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "16", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 2 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "18", + "eventTime": "2026-09-10T12:42:21.479497Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1048879", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "17", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "8a285e46-6a8b-4a59-8c8d-54e02069e4bf", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "19", + "eventTime": "2026-09-10T12:42:21.481915Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1048880", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJvdXRwdXQiOnsidmlzaXRlZCI6InN0YXJ0IiwiYWZ0ZXIiOltdfX0=" + } + ] + }, + "scheduledEventId": "17", + "startedEventId": "18", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "20", + "eventTime": "2026-09-10T12:42:21.481921Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1048881", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-cc5f5b1fde744e90a16e34b5ba959190", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "21", + "eventTime": "2026-09-10T12:42:21.529836Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1048885", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "20", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "fe57748a-3a94-4eae-8adf-0796cd02e6a8", + "historySizeBytes": "4242", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "22", + "eventTime": "2026-09-10T12:42:21.535264Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1048889", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "20", + "startedEventId": "21", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "23", + "eventTime": "2026-09-10T12:42:21.535305Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1048890", + "activityTaskScheduledEventAttributes": { + "activityId": "4", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1mYWlsLXBvbGljeSI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Mw==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Im5vZGVfY29tcGxldGVkIg==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJvdXRwdXQiOnsidmlzaXRlZCI6InN0YXJ0IiwiYWZ0ZXIiOltdfX0=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InN0YXJ0Ig==" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "22", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "24", + "eventTime": "2026-09-10T12:42:21.579945Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1048895", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "23", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "f978c22a-aa5b-4a7d-9012-62cd2fb8574a", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "25", + "eventTime": "2026-09-10T12:42:21.583239Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1048896", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "23", + "startedEventId": "24", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "26", + "eventTime": "2026-09-10T12:42:21.583247Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1048897", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-cc5f5b1fde744e90a16e34b5ba959190", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "27", + "eventTime": "2026-09-10T12:42:21.629967Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1048901", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "26", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "3c106029-86c9-4625-9219-2c6266195ebc", + "historySizeBytes": "5310", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "28", + "eventTime": "2026-09-10T12:42:21.637241Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1048905", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "26", + "startedEventId": "27", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "29", + "eventTime": "2026-09-10T12:42:21.637288Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1048906", + "activityTaskScheduledEventAttributes": { + "activityId": "5", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1mYWlsLXBvbGljeSI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "NA==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Im5vZGVfc3RhcnRlZCI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJjb25maWciOnt9LCJ2aXNpYmxlTm9kZUlkcyI6WyJzdGFydCJdfQ==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "ImZhaWwi" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "28", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "30", + "eventTime": "2026-09-10T12:42:21.679865Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1048911", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "29", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "0a9493c1-f2d1-4b04-9e5f-6209c1fc7f5f", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "31", + "eventTime": "2026-09-10T12:42:21.683102Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1048912", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "29", + "startedEventId": "30", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "32", + "eventTime": "2026-09-10T12:42:21.683111Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1048913", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-cc5f5b1fde744e90a16e34b5ba959190", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "33", + "eventTime": "2026-09-10T12:42:21.729778Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1048917", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "32", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "952611f5-473c-445e-82b7-8577005b3906", + "historySizeBytes": "6374", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "34", + "eventTime": "2026-09-10T12:42:21.735914Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1048921", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "32", + "startedEventId": "33", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "35", + "eventTime": "2026-09-10T12:42:21.735957Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1048922", + "activityTaskScheduledEventAttributes": { + "activityId": "6", + "activityType": { + "name": "executeNode" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJpZCI6ImZhaWwiLCJ0eXBlIjoidGVzdC9mYWlsIiwiY29uZmlnIjp7fX0=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJ3b3JrZmxvd0lkIjoicmVwbGF5LWZhaWwtcG9saWN5IiwiZXhlY3V0aW9uSWQiOiJyZXBsYXktZmFpbC1wb2xpY3kiLCJ0cmlnZ2VyUGF5bG9hZCI6e30sIm5vZGVPdXRwdXRzIjp7InN0YXJ0Ijp7InZpc2l0ZWQiOiJzdGFydCIsImFmdGVyIjpbXX19LCJ2YXJpYWJsZXMiOnt9LCJnbG9iYWwiOnt9fQ==" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "600s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "34", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 2 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "36", + "eventTime": "2026-09-10T12:42:21.735987Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1048923", + "activityTaskScheduledEventAttributes": { + "activityId": "7", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1mYWlsLXBvbGljeSI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "NQ==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Im5vZGVfc3RhcnRlZCI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJjb25maWciOnt9LCJ2aXNpYmxlTm9kZUlkcyI6WyJzdGFydCJdfQ==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InNpYmxpbmci" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "34", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "37", + "eventTime": "2026-09-10T12:42:21.779970Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1048930", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "36", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "6630c2f8-5104-4c2c-8394-fa7ddea43437", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "38", + "eventTime": "2026-09-10T12:42:21.783687Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1048931", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "36", + "startedEventId": "37", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "39", + "eventTime": "2026-09-10T12:42:21.783695Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1048932", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-cc5f5b1fde744e90a16e34b5ba959190", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "40", + "eventTime": "2026-09-10T12:42:21.780527Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1048937", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "35", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "dc7f80a8-f03f-4850-84ff-47b6f5a234a4", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "41", + "eventTime": "2026-09-10T12:42:21.789130Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_FAILED", + "taskId": "1048938", + "activityTaskFailedEventAttributes": { + "failure": { + "message": "fails on purpose", + "source": "TypeScriptSDK", + "stackTrace": "ApplicationFailure: fails on purpose\n at ApplicationFailure.create (/Users/dawidaksamski/Projects/workflowbuilder/node_modules/.pnpm/@temporalio+common@1.23.0/node_modules/@temporalio/common/lib/failure.js:184:16)\n at mapExecutorError (/Users/dawidaksamski/Projects/workflowbuilder/packages/temporal/src/activities.ts:22:51)\n at executeNode (/Users/dawidaksamski/Projects/workflowbuilder/packages/temporal/src/activities.ts:38:15)", + "cause": { + "message": "fails on purpose", + "source": "TypeScriptSDK", + "stackTrace": "PermanentNodeExecutionError: fails on purpose\n at test/fail (/Users/dawidaksamski/Projects/workflowbuilder/packages/temporal/test/fixtures/replay-scenarios.ts:10:11)\n at executeNode (/Users/dawidaksamski/Projects/workflowbuilder/packages/temporal/src/activities.ts:36:22)" + }, + "applicationFailureInfo": { + "type": "PermanentNodeExecutionError", + "nonRetryable": true, + "details": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJ3Yk5vZGVFcnJvciI6MSwiY2xhc3NpZmljYXRpb24iOiJwZXJtYW5lbnQiLCJjb2RlIjoicmVwbGF5X2ZpeHR1cmVfZmFpbHVyZSIsImF0dGVtcHQiOjF9" + } + ] + } + } + }, + "scheduledEventId": "35", + "startedEventId": "40", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "retryState": "RETRY_STATE_NON_RETRYABLE_FAILURE" + } + }, + { + "eventId": "42", + "eventTime": "2026-09-10T12:42:21.828716Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1048940", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "39", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "5390f22e-8d58-437b-b7f5-f46c33ad3ead", + "historySizeBytes": "9023", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "43", + "eventTime": "2026-09-10T12:42:21.838772Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1048944", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "39", + "startedEventId": "42", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "44", + "eventTime": "2026-09-10T12:42:21.838806Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1048945", + "activityTaskScheduledEventAttributes": { + "activityId": "8", + "activityType": { + "name": "executeNode" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJpZCI6InNpYmxpbmciLCJ0eXBlIjoidGVzdC9zdGVwIiwiY29uZmlnIjp7fX0=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJ3b3JrZmxvd0lkIjoicmVwbGF5LWZhaWwtcG9saWN5IiwiZXhlY3V0aW9uSWQiOiJyZXBsYXktZmFpbC1wb2xpY3kiLCJ0cmlnZ2VyUGF5bG9hZCI6e30sIm5vZGVPdXRwdXRzIjp7InN0YXJ0Ijp7InZpc2l0ZWQiOiJzdGFydCIsImFmdGVyIjpbXX19LCJ2YXJpYWJsZXMiOnt9LCJnbG9iYWwiOnt9fQ==" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "600s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "43", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 2 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "45", + "eventTime": "2026-09-10T12:42:21.838827Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1048946", + "activityTaskScheduledEventAttributes": { + "activityId": "9", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1mYWlsLXBvbGljeSI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Ng==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Im5vZGVfZmFpbGVkIg==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJlcnJvciI6eyJtZXNzYWdlIjoiZmFpbHMgb24gcHVycG9zZSIsImNvZGUiOiJyZXBsYXlfZml4dHVyZV9mYWlsdXJlIiwiYXR0ZW1wdCI6MX19" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "ImZhaWwi" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "43", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "46", + "eventTime": "2026-09-10T12:42:21.879746Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1048953", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "45", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "1be6cab6-7c08-4935-bd46-754e78ce0f61", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "47", + "eventTime": "2026-09-10T12:42:21.882591Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1048954", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "45", + "startedEventId": "46", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "48", + "eventTime": "2026-09-10T12:42:21.882599Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1048955", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-cc5f5b1fde744e90a16e34b5ba959190", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "49", + "eventTime": "2026-09-10T12:42:21.880180Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1048960", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "44", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "a124f785-dca3-44f2-9ad2-e5d20bbb6b9b", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "50", + "eventTime": "2026-09-10T12:42:21.883322Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1048961", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJvdXRwdXQiOnsidmlzaXRlZCI6InNpYmxpbmciLCJhZnRlciI6WyJzdGFydCJdfX0=" + } + ] + }, + "scheduledEventId": "44", + "startedEventId": "49", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "51", + "eventTime": "2026-09-10T12:42:21.929756Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1048963", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "48", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "ecf2bf3a-3c69-4e7a-a1c4-40fb4f4f4639", + "historySizeBytes": "10844", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "52", + "eventTime": "2026-09-10T12:42:21.935636Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1048967", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "48", + "startedEventId": "51", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "53", + "eventTime": "2026-09-10T12:42:21.935676Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1048968", + "activityTaskScheduledEventAttributes": { + "activityId": "10", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1mYWlsLXBvbGljeSI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Nw==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Im5vZGVfY29tcGxldGVkIg==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJvdXRwdXQiOnsidmlzaXRlZCI6InNpYmxpbmciLCJhZnRlciI6WyJzdGFydCJdfX0=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InNpYmxpbmci" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "52", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "54", + "eventTime": "2026-09-10T12:42:21.979872Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1048973", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "53", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "79f1ed1a-4b6e-4030-9135-6f9f2a07e9d8", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "55", + "eventTime": "2026-09-10T12:42:21.982421Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1048974", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "53", + "startedEventId": "54", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "56", + "eventTime": "2026-09-10T12:42:21.982428Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1048975", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-cc5f5b1fde744e90a16e34b5ba959190", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "57", + "eventTime": "2026-09-10T12:42:22.029049Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1048979", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "56", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "bd4b60b8-1a6c-456e-8880-5a4b62c5d245", + "historySizeBytes": "11924", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "58", + "eventTime": "2026-09-10T12:42:22.035184Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1048983", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "56", + "startedEventId": "57", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "59", + "eventTime": "2026-09-10T12:42:22.035233Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1048984", + "activityTaskScheduledEventAttributes": { + "activityId": "11", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1mYWlsLXBvbGljeSI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "OA==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "ImV4ZWN1dGlvbl9mYWlsZWQi" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJlcnJvciI6eyJtZXNzYWdlIjoiZmFpbHMgb24gcHVycG9zZSIsImNvZGUiOiJyZXBsYXlfZml4dHVyZV9mYWlsdXJlIn19" + }, + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "58", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "60", + "eventTime": "2026-09-10T12:42:22.079666Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1048989", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "59", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "bc529f8b-fdd8-46e2-b556-550d152064c6", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "61", + "eventTime": "2026-09-10T12:42:22.083016Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1048990", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "59", + "startedEventId": "60", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "62", + "eventTime": "2026-09-10T12:42:22.083024Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1048991", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-cc5f5b1fde744e90a16e34b5ba959190", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "63", + "eventTime": "2026-09-10T12:42:22.129632Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1048995", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "62", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "42cea16f-82fe-4ff5-b972-5bfddefc8735", + "historySizeBytes": "13012", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "64", + "eventTime": "2026-09-10T12:42:22.133297Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1048999", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "62", + "startedEventId": "63", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "65", + "eventTime": "2026-09-10T12:42:22.133327Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049000", + "activityTaskScheduledEventAttributes": { + "activityId": "12", + "activityType": { + "name": "updateStatus" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1mYWlsLXBvbGljeSI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "ImZhaWxlZCI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "ImZhaWxzIG9uIHB1cnBvc2Ui" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "64", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "66", + "eventTime": "2026-09-10T12:42:22.179647Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049005", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "65", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "27d97265-87ba-404a-bc3c-c48978d6c34e", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "67", + "eventTime": "2026-09-10T12:42:22.182123Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049006", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "65", + "startedEventId": "66", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "68", + "eventTime": "2026-09-10T12:42:22.182128Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049007", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-cc5f5b1fde744e90a16e34b5ba959190", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "69", + "eventTime": "2026-09-10T12:42:22.229731Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049011", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "68", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "15a79f60-41d0-44ff-a689-ce653d5bf26e", + "historySizeBytes": "13983", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "70", + "eventTime": "2026-09-10T12:42:22.235388Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049015", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "68", + "startedEventId": "69", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "71", + "eventTime": "2026-09-10T12:42:22.235445Z", + "eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_FAILED", + "taskId": "1049016", + "workflowExecutionFailedEventAttributes": { + "failure": { + "message": "fails on purpose", + "source": "TypeScriptSDK", + "stackTrace": "ApplicationFailure: fails on purpose\n at Function.nonRetryable (/Users/dawidaksamski/Projects/workflowbuilder/node_modules/.pnpm/@temporalio+common@1.23.0/node_modules/@temporalio/common/src/failure.ts:253:11)\n at nonRetryable (/Users/dawidaksamski/Projects/workflowbuilder/packages/temporal/src/workflow/run-workflow.ts:86:29)", + "applicationFailureInfo": { + "type": "replay_fixture_failure", + "nonRetryable": true + } + }, + "retryState": "RETRY_STATE_RETRY_POLICY_NOT_SET", + "workflowTaskCompletedEventId": "70" + } + } + ] +} diff --git a/packages/temporal/test/replay/histories/v0-incomplete-branch.json b/packages/temporal/test/replay/histories/v0-incomplete-branch.json new file mode 100644 index 000000000..47116cc55 --- /dev/null +++ b/packages/temporal/test/replay/histories/v0-incomplete-branch.json @@ -0,0 +1,1499 @@ +{ + "events": [ + { + "eventId": "1", + "eventTime": "2026-09-10T12:42:22.436530Z", + "eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_STARTED", + "taskId": "1049021", + "workflowExecutionStartedEventAttributes": { + "workflowType": { + "name": "runWorkflow" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJ3b3JrZmxvd0lkIjoicmVwbGF5LWluY29tcGxldGUtYnJhbmNoIiwiZXhlY3V0aW9uSWQiOiJyZXBsYXktaW5jb21wbGV0ZS1icmFuY2giLCJkZWZpbml0aW9uIjp7IndvcmtmbG93SWQiOiJyZXBsYXktaW5jb21wbGV0ZS1icmFuY2giLCJub2RlcyI6W3siaWQiOiJzdGFydCIsInR5cGUiOiJ0ZXN0L3N0ZXAiLCJyb2xlIjoic3RhcnQiLCJjb25maWciOnt9fSx7ImlkIjoicm91dGUiLCJ0eXBlIjoidGVzdC9yb3V0ZSIsImNvbmZpZyI6e319LHsiaWQiOiJ0YWtlbiIsInR5cGUiOiJ0ZXN0L3N0ZXAiLCJjb25maWciOnt9fV0sImVkZ2VzIjpbeyJpZCI6ImUtc3RhcnQtcm91dGUiLCJzb3VyY2VOb2RlSWQiOiJzdGFydCIsInRhcmdldE5vZGVJZCI6InJvdXRlIn0seyJpZCI6ImUtcm91dGUtdGFrZW4iLCJzb3VyY2VOb2RlSWQiOiJyb3V0ZSIsInRhcmdldE5vZGVJZCI6InRha2VuIiwic291cmNlSGFuZGxlIjoieWVzIn1dfSwidHJpZ2dlclBheWxvYWQiOnt9LCJ2YXJpYWJsZXMiOnt9LCJnbG9iYWwiOnt9fQ==" + } + ] + }, + "workflowTaskTimeout": "10s", + "originalExecutionRunId": "01a08b57-3164-7812-9826-7d309375c502", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "firstExecutionRunId": "01a08b57-3164-7812-9826-7d309375c502", + "attempt": 1, + "firstWorkflowTaskBackoff": "0s", + "header": {}, + "workflowId": "execution-replay-incomplete-branch" + } + }, + { + "eventId": "2", + "eventTime": "2026-09-10T12:42:22.436635Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049022", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "3", + "eventTime": "2026-09-10T12:42:22.437871Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049027", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "2", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "505fb39b-33aa-4222-9009-f52d5cfd6874", + "historySizeBytes": "814", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "4", + "eventTime": "2026-09-10T12:42:22.468634Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049031", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "2", + "startedEventId": "3", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": { + "coreUsedFlags": [ + 2, + 1, + 3 + ], + "sdkName": "temporal-typescript", + "sdkVersion": "1.23.0" + }, + "meteringMetadata": {} + } + }, + { + "eventId": "5", + "eventTime": "2026-09-10T12:42:22.468669Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049032", + "activityTaskScheduledEventAttributes": { + "activityId": "1", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1pbmNvbXBsZXRlLWJyYW5jaCI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "MQ==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "ImV4ZWN1dGlvbl9zdGFydGVkIg==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJ3b3JrZmxvd0lkIjoicmVwbGF5LWluY29tcGxldGUtYnJhbmNoIn0=" + }, + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "4", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "6", + "eventTime": "2026-09-10T12:42:22.469881Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049038", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "5", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "87670301-4f2b-4cb0-9545-5aea20d409b4", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "7", + "eventTime": "2026-09-10T12:42:22.472951Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049039", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "5", + "startedEventId": "6", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "8", + "eventTime": "2026-09-10T12:42:22.472956Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049040", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-ae4956b78b6f46aa94cfdbc9ba4b0433", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "9", + "eventTime": "2026-09-10T12:42:22.473934Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049044", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "8", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "436ce245-3c8b-427e-aab1-98711c154af1", + "historySizeBytes": "1917", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "10", + "eventTime": "2026-09-10T12:42:22.480492Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049048", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "8", + "startedEventId": "9", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "11", + "eventTime": "2026-09-10T12:42:22.480526Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049049", + "activityTaskScheduledEventAttributes": { + "activityId": "2", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1pbmNvbXBsZXRlLWJyYW5jaCI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Mg==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Im5vZGVfc3RhcnRlZCI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJjb25maWciOnt9LCJ2aXNpYmxlTm9kZUlkcyI6W119" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InN0YXJ0Ig==" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "10", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "12", + "eventTime": "2026-09-10T12:42:22.481515Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049054", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "11", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "5be83a0b-b412-40cd-944c-98eb51e9c105", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "13", + "eventTime": "2026-09-10T12:42:22.484455Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049055", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "11", + "startedEventId": "12", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "14", + "eventTime": "2026-09-10T12:42:22.484462Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049056", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-ae4956b78b6f46aa94cfdbc9ba4b0433", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "15", + "eventTime": "2026-09-10T12:42:22.529321Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049060", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "14", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "e6221f88-51c8-4705-8141-2661266ef2c4", + "historySizeBytes": "2981", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "16", + "eventTime": "2026-09-10T12:42:22.533936Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049064", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "14", + "startedEventId": "15", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "17", + "eventTime": "2026-09-10T12:42:22.533966Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049065", + "activityTaskScheduledEventAttributes": { + "activityId": "3", + "activityType": { + "name": "executeNode" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJpZCI6InN0YXJ0IiwidHlwZSI6InRlc3Qvc3RlcCIsInJvbGUiOiJzdGFydCIsImNvbmZpZyI6e319" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJ3b3JrZmxvd0lkIjoicmVwbGF5LWluY29tcGxldGUtYnJhbmNoIiwiZXhlY3V0aW9uSWQiOiJyZXBsYXktaW5jb21wbGV0ZS1icmFuY2giLCJ0cmlnZ2VyUGF5bG9hZCI6e30sIm5vZGVPdXRwdXRzIjp7fSwidmFyaWFibGVzIjp7fSwiZ2xvYmFsIjp7fX0=" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "600s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "16", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 2 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "18", + "eventTime": "2026-09-10T12:42:22.578652Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049070", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "17", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "18588167-ba3a-470f-b130-c13582a23f01", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "19", + "eventTime": "2026-09-10T12:42:22.581501Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049071", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJvdXRwdXQiOnsidmlzaXRlZCI6InN0YXJ0IiwiYWZ0ZXIiOltdfX0=" + } + ] + }, + "scheduledEventId": "17", + "startedEventId": "18", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "20", + "eventTime": "2026-09-10T12:42:22.581507Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049072", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-ae4956b78b6f46aa94cfdbc9ba4b0433", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "21", + "eventTime": "2026-09-10T12:42:22.629695Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049076", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "20", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "ce7e21ad-b12d-46ff-bab5-ff360f0265a6", + "historySizeBytes": "4134", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "22", + "eventTime": "2026-09-10T12:42:22.633693Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049080", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "20", + "startedEventId": "21", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "23", + "eventTime": "2026-09-10T12:42:22.633728Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049081", + "activityTaskScheduledEventAttributes": { + "activityId": "4", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1pbmNvbXBsZXRlLWJyYW5jaCI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Mw==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Im5vZGVfY29tcGxldGVkIg==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJvdXRwdXQiOnsidmlzaXRlZCI6InN0YXJ0IiwiYWZ0ZXIiOltdfX0=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InN0YXJ0Ig==" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "22", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "24", + "eventTime": "2026-09-10T12:42:22.679574Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049086", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "23", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "70b52b9b-dc7f-4da5-bca9-c74341ce024c", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "25", + "eventTime": "2026-09-10T12:42:22.681653Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049087", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "23", + "startedEventId": "24", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "26", + "eventTime": "2026-09-10T12:42:22.681659Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049088", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-ae4956b78b6f46aa94cfdbc9ba4b0433", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "27", + "eventTime": "2026-09-10T12:42:22.730135Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049092", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "26", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "a954f1c5-207d-4da2-b879-9e34f1e1a22c", + "historySizeBytes": "5208", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "28", + "eventTime": "2026-09-10T12:42:22.739392Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049096", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "26", + "startedEventId": "27", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "29", + "eventTime": "2026-09-10T12:42:22.739460Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049097", + "activityTaskScheduledEventAttributes": { + "activityId": "5", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1pbmNvbXBsZXRlLWJyYW5jaCI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "NA==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Im5vZGVfc3RhcnRlZCI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJjb25maWciOnt9LCJ2aXNpYmxlTm9kZUlkcyI6WyJzdGFydCJdfQ==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJvdXRlIg==" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "28", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "30", + "eventTime": "2026-09-10T12:42:22.779650Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049102", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "29", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "81e8add5-52d7-4f63-8ab2-d77c4481a146", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "31", + "eventTime": "2026-09-10T12:42:22.781763Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049103", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "29", + "startedEventId": "30", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "32", + "eventTime": "2026-09-10T12:42:22.781772Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049104", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-ae4956b78b6f46aa94cfdbc9ba4b0433", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "33", + "eventTime": "2026-09-10T12:42:22.829163Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049108", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "32", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "5a6f7ba4-6d96-447f-b093-002b3d5f4b2e", + "historySizeBytes": "6279", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "34", + "eventTime": "2026-09-10T12:42:22.833719Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049112", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "32", + "startedEventId": "33", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "35", + "eventTime": "2026-09-10T12:42:22.833785Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049113", + "activityTaskScheduledEventAttributes": { + "activityId": "6", + "activityType": { + "name": "executeNode" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJpZCI6InJvdXRlIiwidHlwZSI6InRlc3Qvcm91dGUiLCJjb25maWciOnt9fQ==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJ3b3JrZmxvd0lkIjoicmVwbGF5LWluY29tcGxldGUtYnJhbmNoIiwiZXhlY3V0aW9uSWQiOiJyZXBsYXktaW5jb21wbGV0ZS1icmFuY2giLCJ0cmlnZ2VyUGF5bG9hZCI6e30sIm5vZGVPdXRwdXRzIjp7InN0YXJ0Ijp7InZpc2l0ZWQiOiJzdGFydCIsImFmdGVyIjpbXX19LCJ2YXJpYWJsZXMiOnt9LCJnbG9iYWwiOnt9fQ==" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "600s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "34", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 2 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "36", + "eventTime": "2026-09-10T12:42:22.879728Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049118", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "35", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "2554cca8-bd02-4c15-a068-a5555674a393", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "37", + "eventTime": "2026-09-10T12:42:22.883439Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049119", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJvdXRwdXQiOm51bGwsIm5leHRQb3J0Ijoibm8ifQ==" + } + ] + }, + "scheduledEventId": "35", + "startedEventId": "36", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "38", + "eventTime": "2026-09-10T12:42:22.883447Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049120", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-ae4956b78b6f46aa94cfdbc9ba4b0433", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "39", + "eventTime": "2026-09-10T12:42:22.929756Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049124", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "38", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "429e5683-ecdf-4275-b842-e84c33f08e86", + "historySizeBytes": "7445", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "40", + "eventTime": "2026-09-10T12:42:22.934415Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049128", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "38", + "startedEventId": "39", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "41", + "eventTime": "2026-09-10T12:42:22.934448Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049129", + "activityTaskScheduledEventAttributes": { + "activityId": "7", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1pbmNvbXBsZXRlLWJyYW5jaCI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "NQ==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Im5vZGVfY29tcGxldGVkIg==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJvdXRwdXQiOm51bGx9" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJvdXRlIg==" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "40", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "42", + "eventTime": "2026-09-10T12:42:22.979586Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049134", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "41", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "26cbd7d1-1c71-4651-9181-c22d110455b4", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "43", + "eventTime": "2026-09-10T12:42:22.982018Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049135", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "41", + "startedEventId": "42", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "44", + "eventTime": "2026-09-10T12:42:22.982024Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049136", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-ae4956b78b6f46aa94cfdbc9ba4b0433", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "45", + "eventTime": "2026-09-10T12:42:23.030221Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049140", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "44", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "b2abfbfa-fcf1-4280-a197-8f2249aa97a6", + "historySizeBytes": "8493", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "46", + "eventTime": "2026-09-10T12:42:23.036801Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049144", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "44", + "startedEventId": "45", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "47", + "eventTime": "2026-09-10T12:42:23.036841Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049145", + "activityTaskScheduledEventAttributes": { + "activityId": "8", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1pbmNvbXBsZXRlLWJyYW5jaCI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Ng==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Im5vZGVfc2tpcHBlZCI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJyZWFzb24iOiJicmFuY2hfbm90X3Rha2VuIn0=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InRha2VuIg==" + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "46", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "48", + "eventTime": "2026-09-10T12:42:23.078895Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049150", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "47", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "abcbc370-a227-43bb-a0a0-d6132bb39b4f", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "49", + "eventTime": "2026-09-10T12:42:23.081920Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049151", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "47", + "startedEventId": "48", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "50", + "eventTime": "2026-09-10T12:42:23.081927Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049152", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-ae4956b78b6f46aa94cfdbc9ba4b0433", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "51", + "eventTime": "2026-09-10T12:42:23.129559Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049156", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "50", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "ad93743c-6a22-4326-96a7-b5ec905f21dd", + "historySizeBytes": "9547", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "52", + "eventTime": "2026-09-10T12:42:23.137928Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049160", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "50", + "startedEventId": "51", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "53", + "eventTime": "2026-09-10T12:42:23.137968Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049161", + "activityTaskScheduledEventAttributes": { + "activityId": "9", + "activityType": { + "name": "emitEvent" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1pbmNvbXBsZXRlLWJyYW5jaCI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "Nw==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "ImV4ZWN1dGlvbl9pbmNvbXBsZXRlIg==" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "eyJkZWFkRW5kcyI6W3sibm9kZUlkIjoicm91dGUiLCJwb3J0Ijoibm8ifV19" + }, + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "52", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "54", + "eventTime": "2026-09-10T12:42:23.179716Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049166", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "53", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "8fd8f06f-612f-406d-9532-1d0bbc8302c9", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "55", + "eventTime": "2026-09-10T12:42:23.182567Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049167", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "53", + "startedEventId": "54", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "56", + "eventTime": "2026-09-10T12:42:23.182574Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049168", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-ae4956b78b6f46aa94cfdbc9ba4b0433", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "57", + "eventTime": "2026-09-10T12:42:23.229789Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049172", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "56", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "9b58d95e-f4cf-479b-985c-91d31aa7c842", + "historySizeBytes": "10617", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "58", + "eventTime": "2026-09-10T12:42:23.234081Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049176", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "56", + "startedEventId": "57", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "59", + "eventTime": "2026-09-10T12:42:23.234117Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_SCHEDULED", + "taskId": "1049177", + "activityTaskScheduledEventAttributes": { + "activityId": "10", + "activityType": { + "name": "updateStatus" + }, + "taskQueue": { + "name": "replay-test", + "kind": "TASK_QUEUE_KIND_NORMAL" + }, + "header": {}, + "input": { + "payloads": [ + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "InJlcGxheS1pbmNvbXBsZXRlLWJyYW5jaCI=" + }, + { + "metadata": { + "encoding": "anNvbi9wbGFpbg==" + }, + "data": "ImluY29tcGxldGUi" + }, + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduleToCloseTimeout": "0s", + "scheduleToStartTimeout": "0s", + "startToCloseTimeout": "30s", + "heartbeatTimeout": "0s", + "workflowTaskCompletedEventId": "58", + "retryPolicy": { + "initialInterval": "1s", + "backoffCoefficient": 2, + "maximumInterval": "100s", + "maximumAttempts": 5 + }, + "useWorkflowBuildId": true + } + }, + { + "eventId": "60", + "eventTime": "2026-09-10T12:42:23.279010Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_STARTED", + "taskId": "1049182", + "activityTaskStartedEventAttributes": { + "scheduledEventId": "59", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "6edb22f1-c071-4eab-9ed7-d03fdaa55a3d", + "attempt": 1, + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "61", + "eventTime": "2026-09-10T12:42:23.281448Z", + "eventType": "EVENT_TYPE_ACTIVITY_TASK_COMPLETED", + "taskId": "1049183", + "activityTaskCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "scheduledEventId": "59", + "startedEventId": "60", + "identity": "6515@SC-FVFJ3DZVQ6LR.local" + } + }, + { + "eventId": "62", + "eventTime": "2026-09-10T12:42:23.281454Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_SCHEDULED", + "taskId": "1049184", + "workflowTaskScheduledEventAttributes": { + "taskQueue": { + "name": "6515@SC-FVFJ3DZVQ6LR.local-ae4956b78b6f46aa94cfdbc9ba4b0433", + "kind": "TASK_QUEUE_KIND_STICKY", + "normalName": "replay-test" + }, + "startToCloseTimeout": "10s", + "attempt": 1 + } + }, + { + "eventId": "63", + "eventTime": "2026-09-10T12:42:23.329669Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_STARTED", + "taskId": "1049188", + "workflowTaskStartedEventAttributes": { + "scheduledEventId": "62", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "requestId": "03511e6e-2d99-4fa6-8d72-ec29b82af402", + "historySizeBytes": "11581", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + } + } + }, + { + "eventId": "64", + "eventTime": "2026-09-10T12:42:23.333857Z", + "eventType": "EVENT_TYPE_WORKFLOW_TASK_COMPLETED", + "taskId": "1049192", + "workflowTaskCompletedEventAttributes": { + "scheduledEventId": "62", + "startedEventId": "63", + "identity": "6515@SC-FVFJ3DZVQ6LR.local", + "workerVersion": { + "buildId": "@temporalio/worker@1.23.0+58bbd4f4801c26020cf5010ce32c8cac954ee2ea7c86f0c3cf9ea2220f3362f2" + }, + "sdkMetadata": {}, + "meteringMetadata": {} + } + }, + { + "eventId": "65", + "eventTime": "2026-09-10T12:42:23.333885Z", + "eventType": "EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED", + "taskId": "1049193", + "workflowExecutionCompletedEventAttributes": { + "result": { + "payloads": [ + { + "metadata": { + "encoding": "YmluYXJ5L251bGw=" + } + } + ] + }, + "workflowTaskCompletedEventId": "64" + } + } + ] +} diff --git a/packages/temporal/test/replay/replay.test.ts b/packages/temporal/test/replay/replay.test.ts index 5e6cf6ec3..48ceea788 100644 --- a/packages/temporal/test/replay/replay.test.ts +++ b/packages/temporal/test/replay/replay.test.ts @@ -4,7 +4,7 @@ import { type History, historyToJSON } from '@temporalio/common/lib/proto-utils'; import { TestWorkflowEnvironment } from '@temporalio/testing'; import { Worker, bundleWorkflowCode } from '@temporalio/worker'; -import { readFile, writeFile } from 'node:fs/promises'; +import { readFile, readdir, writeFile } from 'node:fs/promises'; import { fileURLToPath } from 'node:url'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; @@ -14,30 +14,35 @@ import { type WorkflowExecutionInput, executionWorkflowId, } from '../../src/index'; -import { - REPLAY_TEST_GRAPH, - REPLAY_TEST_WORKFLOW_ID, - type RecordingStore, - type ReplayTestNode, - createRecordingStore, - replayTestExecutors, -} from '../fixtures/graph'; - -const EXECUTION_ID = 'replay-test-execution'; +import { type RecordingStore, createRecordingStore } from '../fixtures/recording-store'; +import { REPLAY_SCENARIOS, type ReplayScenario, type ReplayScenarioNode } from '../fixtures/replay-scenarios'; + const TASK_QUEUE = 'replay-test'; -// Regeneration replaces the cross-version baseline; follow ./README.md before enabling it. -// UPDATE_REPLAY_HISTORIES=1 pnpm --filter @workflowbuilder/temporal test -const COMMITTED_HISTORY = new URL('histories/v0-parallel-wave.json', import.meta.url); +const HISTORIES_DIR = new URL('histories/', import.meta.url); + +// Recording replaces a cross-version baseline; follow ./README.md before enabling it. +// UPDATE_REPLAY_HISTORIES=[,] pnpm --filter @workflowbuilder/temporal test +// UPDATE_REPLAY_HISTORIES=1 re-records every scenario +const requested = process.env.UPDATE_REPLAY_HISTORIES; +const requestedScenarios = requested === undefined || requested === '1' ? [] : requested.split(','); +const unknownScenarios = requestedScenarios.filter((name) => !REPLAY_SCENARIOS.some((s) => s.name === name)); +if (unknownScenarios.length > 0) { + throw new Error(`UPDATE_REPLAY_HISTORIES names no scenario: ${unknownScenarios.join(', ')}`); +} + +function shouldRecord(scenario: ReplayScenario): boolean { + return requested === '1' || requestedScenarios.includes(scenario.name); +} + +// `v0-` names the pre-release baseline; ./README.md says what happens to it at the first release. +function historyFile(scenario: ReplayScenario): URL { + return new URL(`v0-${scenario.name}.json`, HISTORIES_DIR); +} -const NODE_COUNT = REPLAY_TEST_GRAPH.nodes.length; -const EVENTS_PER_NODE = 2; -const EXECUTION_BRACKET_EVENTS = 2; -const EXPECTED_ACTIVITY_COUNTS = { - executeNode: NODE_COUNT, - emitEvent: EXECUTION_BRACKET_EVENTS + NODE_COUNT * EVENTS_PER_NODE, - updateStatus: 1, -}; +function scenarioOf(file: string): ReplayScenario | undefined { + return REPLAY_SCENARIOS.find((scenario) => file.endsWith(`-${scenario.name}.json`)); +} function countScheduledActivities(history: History): Record { const counts: Record = {}; @@ -55,80 +60,105 @@ function countScheduledActivities(history: History): Record { describe('replay', () => { let env: TestWorkflowEnvironment; let workflowBundle: { code: string }; - let history: History; - let store: RecordingStore; beforeAll(async () => { [workflowBundle, env] = await Promise.all([ bundleWorkflowCode({ workflowsPath: fileURLToPath(new URL('../fixtures/workflows.ts', import.meta.url)) }), TestWorkflowEnvironment.createLocal(), ]); - - store = createRecordingStore(); - - const plugin = new WorkflowBuilderPlugin({ - store, - executors: replayTestExecutors, - taskQueue: TASK_QUEUE, - }); - - const worker = await Worker.create({ - connection: env.nativeConnection, - namespace: env.namespace, - taskQueue: plugin.taskQueue, - workflowBundle, - plugins: [plugin], - }); - - const input: WorkflowExecutionInput = { - workflowId: REPLAY_TEST_WORKFLOW_ID, - executionId: EXECUTION_ID, - definition: REPLAY_TEST_GRAPH, - triggerPayload: {}, - variables: {}, - global: {}, - }; - - const workflowId = executionWorkflowId(EXECUTION_ID); - - await worker.runUntil( - env.client.workflow.execute(RUN_WORKFLOW_NAME, { taskQueue: plugin.taskQueue, workflowId, args: [input] }), - ); - - history = await env.client.workflow.getHandle(workflowId).fetchHistory(); - - if (process.env.UPDATE_REPLAY_HISTORIES) { - await writeFile(COMMITTED_HISTORY, `${historyToJSON(history)}\n`); - } }, 300_000); afterAll(async () => { await env?.teardown(); }); - it('runs the graph to completion through the plugin', () => { - expect(store.statuses).toEqual([{ status: 'completed', errorMessage: undefined }]); - expect(store.events.at(0)?.type).toBe('execution_started'); - expect(store.events.at(-1)?.type).toBe('execution_completed'); + describe.each(REPLAY_SCENARIOS)('$name', (scenario) => { + let history: History; + let store: RecordingStore; + + beforeAll(async () => { + store = createRecordingStore(); + const { executors, drive } = scenario.stage(); + + const plugin = new WorkflowBuilderPlugin({ store, executors, taskQueue: TASK_QUEUE }); + const worker = await Worker.create({ + connection: env.nativeConnection, + namespace: env.namespace, + taskQueue: plugin.taskQueue, + workflowBundle, + plugins: [plugin], + }); + + const executionId = `replay-${scenario.name}`; + const input: WorkflowExecutionInput = { + workflowId: scenario.graph.workflowId, + executionId, + definition: scenario.graph, + triggerPayload: {}, + variables: {}, + global: {}, + }; + + const workflowId = executionWorkflowId(executionId); + + await worker.runUntil(async () => { + const handle = await env.client.workflow.start(RUN_WORKFLOW_NAME, { + taskQueue: plugin.taskQueue, + workflowId, + args: [input], + }); + await drive(handle); + }); + + history = await env.client.workflow.getHandle(workflowId).fetchHistory(); + + if (shouldRecord(scenario)) { + await writeFile(historyFile(scenario), `${historyToJSON(history)}\n`); + } + }, 120_000); + + it(`ends with ${scenario.terminalEvent} and status ${scenario.terminalStatus}`, () => { + expect(store.events.at(0)?.type).toBe('execution_started'); + expect(store.events.at(-1)?.type).toBe(scenario.terminalEvent); + expect(store.statuses).toEqual([expect.objectContaining({ status: scenario.terminalStatus })]); + }); - for (const node of REPLAY_TEST_GRAPH.nodes) { - const forNode = store.events.filter((event) => event.nodeId === node.id); - expect(forNode.map((event) => event.type)).toEqual(['node_started', 'node_completed']); - } - }); + it(`closes the Workflow Execution through ${scenario.closeAttributes}`, () => { + expect(history.events?.at(-1)?.[scenario.closeAttributes]).toBeTruthy(); + }); - it('schedules one activity per node and one per emitted event', () => { - expect(countScheduledActivities(history)).toEqual(EXPECTED_ACTIVITY_COUNTS); - }); + it('schedules one activity per node run, one per emitted event, one status write', () => { + expect(countScheduledActivities(history)).toEqual(scenario.expectedActivities); + }); - it('replays the history it just recorded', async () => { - await expect(Worker.runReplayHistory({ workflowBundle }, history)).resolves.toBeUndefined(); + it('replays the history it just recorded', async () => { + await expect(Worker.runReplayHistory({ workflowBundle }, history)).resolves.toBeUndefined(); + }); }); - it('replays a history recorded before the current code', async () => { - // Replays a pre-current-code history to protect in-flight executions across deploys. - const recorded: unknown = JSON.parse(await readFile(COMMITTED_HISTORY, 'utf8')); + it('replays every history recorded before the current code', async () => { + // Every scenario needs a recording and every recording needs a scenario. The version + // prefix is free, since older versions keep their files next to newer ones. + const entries = await readdir(HISTORIES_DIR); + const files = entries.filter((file) => file.endsWith('.json')).sort(); + expect(files.filter((file) => scenarioOf(file) === undefined)).toEqual([]); + expect(REPLAY_SCENARIOS.filter((scenario) => !files.some((file) => scenarioOf(file) === scenario))).toEqual([]); + + const histories = await Promise.all( + files.map(async (file) => ({ + workflowId: file, + history: JSON.parse(await readFile(new URL(file, HISTORIES_DIR), 'utf8')) as unknown, + })), + ); + + // The plural form, so one broken history cannot hide the rest. + const failures: string[] = []; + for await (const result of Worker.runReplayHistories({ workflowBundle }, histories)) { + if (result.error) { + failures.push(`${result.workflowId}: ${result.error.message}`); + } + } - await expect(Worker.runReplayHistory({ workflowBundle }, recorded)).resolves.toBeUndefined(); - }, 60_000); + expect(failures).toEqual([]); + }, 120_000); }); From b032d188bea521df597597df63344e5623c70eac Mon Sep 17 00:00:00 2001 From: Dawid Aksamski Date: Tue, 15 Sep 2026 15:09:14 +0200 Subject: [PATCH 2/2] test(temporal): assert per-node events and make the history prefix an input The replay harness hardcoded the v0- prefix while the README promised - recordings at the first release, so following it would have overwritten the baseline. REPLAY_HISTORY_VERSION now sets the prefix. Restores the per-node event shape and the terminal error message, which the scenario table had reduced to first/last event and status: the activity count alone cannot tell node_failed from node_skipped. Also trims scenario lists, guards against nested scenario names claiming each other's files, and narrows settle() to WorkflowFailedError. --- .../test/fixtures/replay-scenarios.ts | 34 +++++++++++++-- packages/temporal/test/replay/README.md | 26 ++++++++---- packages/temporal/test/replay/replay.test.ts | 41 +++++++++++++++++-- 3 files changed, 87 insertions(+), 14 deletions(-) diff --git a/packages/temporal/test/fixtures/replay-scenarios.ts b/packages/temporal/test/fixtures/replay-scenarios.ts index a60ba1ba8..beb311c9f 100644 --- a/packages/temporal/test/fixtures/replay-scenarios.ts +++ b/packages/temporal/test/fixtures/replay-scenarios.ts @@ -1,6 +1,6 @@ // One scenario per path through the sandbox code; each gets its own committed history // under ../replay/histories/. ../replay/README.md says what each protects. -import type { WorkflowHandle } from '@temporalio/client'; +import { WorkflowFailedError, type WorkflowHandle } from '@temporalio/client'; import { type BaseNode, @@ -27,8 +27,12 @@ export type ReplayScenario = { graph: WorkflowDefinition; terminalEvent: string; terminalStatus: string; + terminalErrorMessage?: string; closeAttributes: WorkflowCloseAttributes; expectedActivities: ActivityCounts; + // Keyed by node id, so the assertion does not depend on the order siblings finish in. + // Every node in the graph needs an entry; one that never ran gets an empty list. + nodeEvents: Record; // Executors and the driver are built together, per run, so a scenario can share // run-local state between them (the blocked node the cancel scenario releases). stage(): { @@ -50,11 +54,14 @@ const executors: NodeExecutorRegistry = { }, }; +// How a run ended is asserted from the store and the history, not from the result — but +// only the run's own failure is swallowed, so a client or connection fault surfaces here +// instead of as a puzzling assertion later. A cancelled run also arrives as this class. async function settle(handle: WorkflowHandle): Promise { try { await handle.result(); - } catch { - // How a run ended is asserted from the store and the history, not from the result. + } catch (error) { + if (!(error instanceof WorkflowFailedError)) throw error; } } @@ -82,6 +89,12 @@ export const REPLAY_SCENARIOS: ReplayScenario[] = [ terminalStatus: 'completed', closeAttributes: 'workflowExecutionCompletedEventAttributes', expectedActivities: { executeNode: 4, emitEvent: 10, updateStatus: 1 }, + nodeEvents: { + start: ['node_started', 'node_completed'], + left: ['node_started', 'node_completed'], + right: ['node_started', 'node_completed'], + join: ['node_started', 'node_completed'], + }, stage: () => ({ executors, drive: settle }), }, { @@ -105,8 +118,16 @@ export const REPLAY_SCENARIOS: ReplayScenario[] = [ }, terminalEvent: 'execution_failed', terminalStatus: 'failed', + terminalErrorMessage: 'fails on purpose', closeAttributes: 'workflowExecutionFailedEventAttributes', expectedActivities: { executeNode: 3, emitEvent: 8, updateStatus: 1 }, + // join is never reached under the fail policy, so it owes no event at all. + nodeEvents: { + start: ['node_started', 'node_completed'], + fail: ['node_started', 'node_failed'], + sibling: ['node_started', 'node_completed'], + join: [], + }, stage: () => ({ executors, drive: settle }), }, { @@ -129,6 +150,11 @@ export const REPLAY_SCENARIOS: ReplayScenario[] = [ terminalStatus: 'incomplete', closeAttributes: 'workflowExecutionCompletedEventAttributes', expectedActivities: { executeNode: 2, emitEvent: 7, updateStatus: 1 }, + nodeEvents: { + start: ['node_started', 'node_completed'], + route: ['node_started', 'node_completed'], + taken: ['node_skipped'], + }, stage: () => ({ executors, drive: settle }), }, { @@ -147,6 +173,8 @@ export const REPLAY_SCENARIOS: ReplayScenario[] = [ terminalStatus: 'cancelled', closeAttributes: 'workflowExecutionCanceledEventAttributes', expectedActivities: { executeNode: 2, emitEvent: 5, updateStatus: 1 }, + // block is cancelled in flight, so it starts and never completes. + nodeEvents: { start: ['node_started', 'node_completed'], block: ['node_started'] }, stage: () => { let reached!: () => void; let release!: () => void; diff --git a/packages/temporal/test/replay/README.md b/packages/temporal/test/replay/README.md index 968437291..b204f4426 100644 --- a/packages/temporal/test/replay/README.md +++ b/packages/temporal/test/replay/README.md @@ -28,7 +28,7 @@ recorded by the same broken code. ## The scenarios One file per path through the sandbox code. A change that leaves one path alone can still -move the commands on another, so all four replay on every run. +move the commands on another, so every scenario replays on every run. | File | Graph | Path it protects | | --------------------------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -39,7 +39,9 @@ move the commands on another, so all four replay on every run. The cancel scenario parks its executor until the driver has cancelled the run, so the recording always catches the activity open. The late completion then meets a closed run, -which Temporal core logs as one "Activity not found on completion" warning. Expected. +which Temporal core logs as one "Activity not found on completion" warning. A green run +also logs "Activity failed" and "Workflow failed" from the fail-policy scenario, which +fails a node on purpose. All three are expected; nothing is wrong with a run that has them. ## Recording a history @@ -47,12 +49,14 @@ From the harness, which is what the committed files come from. Name the scenario others keep guarding what they recorded: ```bash -UPDATE_REPLAY_HISTORIES= pnpm --filter @workflowbuilder/temporal test +UPDATE_REPLAY_HISTORIES=[,] pnpm --filter @workflowbuilder/temporal test ``` `UPDATE_REPLAY_HISTORIES=1` re-records every scenario; see rule 3 before reaching for it. Adding a scenario means adding an entry to `../fixtures/replay-scenarios.ts`, recording it by name, and describing it in the table above. The harness fails until the file exists. +Recordings land under the `v0-` prefix unless `REPLAY_HISTORY_VERSION` says otherwise; +the last section covers when to set it. Or from a real run against a local stack, for a scenario the harness cannot stage. `historyToJSON` writes the same shape, so the two are interchangeable. Read the output @@ -72,13 +76,21 @@ temporal workflow show --workflow-id execution- --output json > histories/-.json` next to these. The `v0-` files -can then go, since no run outside this repo was ever recorded by pre-release code. +record every scenario again under the released version: + +```bash +REPLAY_HISTORY_VERSION=1.0.0 UPDATE_REPLAY_HISTORIES=1 pnpm --filter @workflowbuilder/temporal test +``` + +That writes `1.0.0-.json` next to the `v0-` files and leaves them untouched, so +check the new set replays before deleting the old one. The `v0-` files can go, since no +run outside this repo was ever recorded by pre-release code. Every release after that adds +its own set the same way, and rule 2 keeps the earlier ones where they are. ## What a red cross-version test means diff --git a/packages/temporal/test/replay/replay.test.ts b/packages/temporal/test/replay/replay.test.ts index 48ceea788..bc4c8e966 100644 --- a/packages/temporal/test/replay/replay.test.ts +++ b/packages/temporal/test/replay/replay.test.ts @@ -25,7 +25,13 @@ const HISTORIES_DIR = new URL('histories/', import.meta.url); // UPDATE_REPLAY_HISTORIES=[,] pnpm --filter @workflowbuilder/temporal test // UPDATE_REPLAY_HISTORIES=1 re-records every scenario const requested = process.env.UPDATE_REPLAY_HISTORIES; -const requestedScenarios = requested === undefined || requested === '1' ? [] : requested.split(','); +const requestedScenarios = + requested === undefined || requested === '1' + ? [] + : requested + .split(',') + .map((name) => name.trim()) + .filter(Boolean); const unknownScenarios = requestedScenarios.filter((name) => !REPLAY_SCENARIOS.some((s) => s.name === name)); if (unknownScenarios.length > 0) { throw new Error(`UPDATE_REPLAY_HISTORIES names no scenario: ${unknownScenarios.join(', ')}`); @@ -35,9 +41,13 @@ function shouldRecord(scenario: ReplayScenario): boolean { return requested === '1' || requestedScenarios.includes(scenario.name); } -// `v0-` names the pre-release baseline; ./README.md says what happens to it at the first release. +// The prefix files a recording under the version that recorded it, so older versions keep +// their histories next to newer ones. `v0` is the pre-release baseline; ./README.md says +// when to record under a released version instead. +const RECORD_PREFIX = process.env.REPLAY_HISTORY_VERSION ?? 'v0'; + function historyFile(scenario: ReplayScenario): URL { - return new URL(`v0-${scenario.name}.json`, HISTORIES_DIR); + return new URL(`${RECORD_PREFIX}-${scenario.name}.json`, HISTORIES_DIR); } function scenarioOf(file: string): ReplayScenario | undefined { @@ -120,7 +130,23 @@ describe('replay', () => { it(`ends with ${scenario.terminalEvent} and status ${scenario.terminalStatus}`, () => { expect(store.events.at(0)?.type).toBe('execution_started'); expect(store.events.at(-1)?.type).toBe(scenario.terminalEvent); - expect(store.statuses).toEqual([expect.objectContaining({ status: scenario.terminalStatus })]); + expect(store.statuses).toEqual([ + { status: scenario.terminalStatus, errorMessage: scenario.terminalErrorMessage }, + ]); + }); + + it('emits the events each node owes', () => { + // Seeded from the graph, so a node that emitted nothing is asserted as [] rather than + // passing by being absent, and grouping keeps the check off sibling completion order. + const byNode: Record = Object.fromEntries(scenario.graph.nodes.map((node) => [node.id, []])); + + for (const event of store.events) { + if (event.nodeId !== undefined) { + byNode[event.nodeId]?.push(event.type); + } + } + + expect(byNode).toEqual(scenario.nodeEvents); }); it(`closes the Workflow Execution through ${scenario.closeAttributes}`, () => { @@ -137,6 +163,13 @@ describe('replay', () => { }); it('replays every history recorded before the current code', async () => { + // `scenarioOf` matches on suffix, so a name ending in `-` would let the + // shorter scenario claim the longer one's file and blame the wrong scenario on failure. + const nested = REPLAY_SCENARIOS.filter((scenario) => + REPLAY_SCENARIOS.some((other) => other !== scenario && scenario.name.endsWith(`-${other.name}`)), + ); + expect(nested.map((scenario) => scenario.name)).toEqual([]); + // Every scenario needs a recording and every recording needs a scenario. The version // prefix is free, since older versions keep their files next to newer ones. const entries = await readdir(HISTORIES_DIR);