From 8258c5fbef8ecca5bb98ff8636f8ffcf791c1356 Mon Sep 17 00:00:00 2001 From: nicholascole Date: Mon, 3 Aug 2026 16:19:51 -0700 Subject: [PATCH 01/11] Remove Agent Release E2E --- .../workflows/release-agent-e2e-bundle.yml | 71 ------------------- 1 file changed, 71 deletions(-) delete mode 100644 .github/workflows/release-agent-e2e-bundle.yml diff --git a/.github/workflows/release-agent-e2e-bundle.yml b/.github/workflows/release-agent-e2e-bundle.yml deleted file mode 100644 index 0c103a19..00000000 --- a/.github/workflows/release-agent-e2e-bundle.yml +++ /dev/null @@ -1,71 +0,0 @@ -name: Release Agent E2E Bundle - -# Packages the agent e2e suite (e2e/) into a version-stamped, self-contained -# tarball and attaches it to the GitHub release, so downstream repos (e.g. -# orkes-io/orkes-conductor) can pin the e2e suite to the exact javascript-sdk -# release they run against. The bundle resolves -# @io-orkes/conductor-javascript at the same version from npm. -# -# Runs on the same release events as release.yml (npm publish). Packaging is -# purely static (no install), so it does not race the npm publish — the -# bundle just references the package version. -# -# Mirrors conductor-oss/java-sdk's release-agent-e2e-bundle.yml. - -on: - release: - types: [released, prereleased] - workflow_dispatch: - inputs: - version: - description: "Version (e.g. 4.0.0-rc1) — a release vX.Y.Z must already exist to attach to" - required: true - type: string - -permissions: - contents: write - -jobs: - package-e2e-bundle: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Determine version - id: version - run: | - if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then - VERSION="${{ inputs.version }}" - else - TAG="${{ github.event.release.tag_name }}" - VERSION="${TAG#v}" - fi - echo "version=${VERSION}" >> "$GITHUB_OUTPUT" - echo "Packaging agent e2e bundle for version: ${VERSION}" - - - name: Package bundle - run: | - ./scripts/package-e2e-bundle.sh --version "${{ steps.version.outputs.version }}" - - - name: Validate bundle - run: | - ./scripts/test-package-e2e-bundle.sh - - - name: Generate SHA256 checksums - working-directory: scripts/e2e-bundle-dist - run: | - for f in *.tar.gz; do - sha256sum "$f" | awk '{print $1}' > "${f}.sha256" - echo " $(cat "${f}.sha256") ${f}" - done - - - name: Upload bundle to GitHub release - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - VERSION="${{ steps.version.outputs.version }}" - gh release upload "v${VERSION}" \ - scripts/e2e-bundle-dist/*.tar.gz \ - scripts/e2e-bundle-dist/*.sha256 \ - --repo "${{ github.repository }}" \ - --clobber From 500ab254eaa72a75af02d5f07279e86627a7ca1b Mon Sep 17 00:00:00 2001 From: nicholascole Date: Mon, 3 Aug 2026 16:45:14 -0700 Subject: [PATCH 02/11] Fix worker starvation --- .github/workflows/agent-e2e.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/agent-e2e.yml b/.github/workflows/agent-e2e.yml index 081842e2..dbf705fe 100644 --- a/.github/workflows/agent-e2e.yml +++ b/.github/workflows/agent-e2e.yml @@ -103,7 +103,11 @@ jobs: - name: Run e2e suites run: | mkdir -p results - npm run test:agent-e2e + # Every suite shares one local Conductor instance and its finite + # system-worker pool. Two Jest workers avoid starving long-running + # workflows, while retaining enough parallelism for this job's + # 45-minute time budget. Matrix-suite concurrency is intentional. + npm run test:agent-e2e -- --maxWorkers=2 # The TS suites fail hard when the server is down (no session-skip), # so this guard is defense-in-depth against a future gate regression From 020bcf04cefab38f7277a1fa8f7654b55edce5a4 Mon Sep 17 00:00:00 2001 From: nicholascole Date: Mon, 3 Aug 2026 16:57:40 -0700 Subject: [PATCH 03/11] test: extend TaskRunner integration timeout --- src/integration-tests/TaskRunner.test.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/integration-tests/TaskRunner.test.ts b/src/integration-tests/TaskRunner.test.ts index d3f5dbb7..10c8fd11 100644 --- a/src/integration-tests/TaskRunner.test.ts +++ b/src/integration-tests/TaskRunner.test.ts @@ -88,7 +88,8 @@ describe("TaskRunner", () => { const workflowStatus = await waitForWorkflowStatus( executor, executionId, - "COMPLETED" + "COMPLETED", + 300000 ); const [firstTask] = workflowStatus.tasks || []; @@ -106,5 +107,5 @@ describe("TaskRunner", () => { workflows: [{ name: workflowName, version: 1 }], tasks: [taskName], }); - }, 120000); + }, 300000); }); From 49f6d9767eb83616ab2a51514d7a1b9cf1f19701 Mon Sep 17 00:00:00 2001 From: nicholascole Date: Mon, 3 Aug 2026 17:08:58 -0700 Subject: [PATCH 04/11] test: wait for fork workflow completion --- src/integration-tests/ConductorWorkflow.test.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/integration-tests/ConductorWorkflow.test.ts b/src/integration-tests/ConductorWorkflow.test.ts index f2b9d349..1aaabfe3 100644 --- a/src/integration-tests/ConductorWorkflow.test.ts +++ b/src/integration-tests/ConductorWorkflow.test.ts @@ -247,8 +247,20 @@ describe("ConductorWorkflow DSL", () => { // Execute to verify it works const run = await wf.execute(); - expect(run.status).toEqual("COMPLETED"); - }); + expect(run.workflowId).toBeDefined(); + if (!run.workflowId) { + throw new Error("Workflow ID is undefined"); + } + executionsToCleanup.push(run.workflowId); + + const status = await waitForWorkflowStatus( + executor, + run.workflowId, + "COMPLETED", + 300000 + ); + expect(status.status).toEqual("COMPLETED"); + }, 300000); }); // ==================== SubWorkflow Task ==================== From 0bc306794b69833944467060f325a807df4d9e90 Mon Sep 17 00:00:00 2001 From: nicholascole Date: Mon, 3 Aug 2026 17:12:44 -0700 Subject: [PATCH 05/11] test: extend TaskManager workflow timeout --- src/integration-tests/TaskManager.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/integration-tests/TaskManager.test.ts b/src/integration-tests/TaskManager.test.ts index 50f7aa4f..896652d2 100644 --- a/src/integration-tests/TaskManager.test.ts +++ b/src/integration-tests/TaskManager.test.ts @@ -455,7 +455,7 @@ describe("TaskManager", () => { const workflowStatus = await waitForWorkflowCompletion( executor, executionId, - BASE_TIME * 30 + 300000 ); expect(workflowStatus.status).toEqual("COMPLETED"); @@ -471,6 +471,6 @@ describe("TaskManager", () => { expect(mockLogger.info).toHaveBeenCalledWith( `TaskWorker ${candidateWorkerUpdate} configuration updated with concurrency of ${updatedWorkerOptions.concurrency} and poll interval of ${updatedWorkerOptions.pollInterval}` ); - }); + }, 300000); }); }); From a41571075b75a9c66552450aa493bec3f72d7614 Mon Sep 17 00:00:00 2001 From: nicholascole Date: Mon, 3 Aug 2026 17:17:20 -0700 Subject: [PATCH 06/11] test: wait for DSL workflow completion --- .../ConductorWorkflow.test.ts | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/integration-tests/ConductorWorkflow.test.ts b/src/integration-tests/ConductorWorkflow.test.ts index 1aaabfe3..0fbd5f6b 100644 --- a/src/integration-tests/ConductorWorkflow.test.ts +++ b/src/integration-tests/ConductorWorkflow.test.ts @@ -76,6 +76,14 @@ describe("ConductorWorkflow DSL", () => { } }); + const waitForCompletion = async (workflowId?: string) => { + if (!workflowId) { + throw new Error("Workflow ID is undefined"); + } + executionsToCleanup.push(workflowId); + return waitForWorkflowStatus(executor, workflowId, "COMPLETED", 300000); + }; + // ==================== Basic Building & Registration ==================== describe("Build and Register", () => { @@ -161,8 +169,9 @@ describe("ConductorWorkflow DSL", () => { const run = await wf.execute({ testInput: "hello" }); expect(run).toBeDefined(); - expect(run.status).toEqual("COMPLETED"); - }); + const status = await waitForCompletion(run.workflowId); + expect(status.status).toEqual("COMPLETED"); + }, 300000); }); // ==================== Start Workflow ==================== @@ -190,10 +199,11 @@ describe("ConductorWorkflow DSL", () => { const status = await waitForWorkflowStatus( executor, workflowId, - "COMPLETED" + "COMPLETED", + 300000 ); expect(status.status).toEqual("COMPLETED"); - }); + }, 300000); test("startWorkflow() with correlationId should set correlation", async () => { const wf = new ConductorWorkflow(executor, wfName); @@ -247,18 +257,7 @@ describe("ConductorWorkflow DSL", () => { // Execute to verify it works const run = await wf.execute(); - expect(run.workflowId).toBeDefined(); - if (!run.workflowId) { - throw new Error("Workflow ID is undefined"); - } - executionsToCleanup.push(run.workflowId); - - const status = await waitForWorkflowStatus( - executor, - run.workflowId, - "COMPLETED", - 300000 - ); + const status = await waitForCompletion(run.workflowId); expect(status.status).toEqual("COMPLETED"); }, 300000); }); @@ -299,8 +298,9 @@ describe("ConductorWorkflow DSL", () => { // Execute parent — child should run automatically const run = await parentWf.execute(); - expect(run.status).toEqual("COMPLETED"); - }); + const status = await waitForCompletion(run.workflowId); + expect(status.status).toEqual("COMPLETED"); + }, 300000); }); // ==================== Input/Output References ==================== @@ -341,9 +341,10 @@ describe("ConductorWorkflow DSL", () => { workflowsToCleanup.push({ name: wfName, version: 1 }); const run = await wf.execute({ myParam: "hello-world" }); - expect(run.status).toEqual("COMPLETED"); - expect(run.output?.capturedParam).toEqual("hello-world"); - }); + const status = await waitForCompletion(run.workflowId); + expect(status.status).toEqual("COMPLETED"); + expect(status.output?.capturedParam).toEqual("hello-world"); + }, 300000); }); // ==================== Configuration Methods ==================== From bdccd781c211e8f150a2bc7511e5db4817e23270 Mon Sep 17 00:00:00 2001 From: nicholascole Date: Mon, 3 Aug 2026 17:22:50 -0700 Subject: [PATCH 07/11] ci: extend integration test timeouts --- .github/workflows/pull_request.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 0b5939ca..ab5b5545 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -140,13 +140,13 @@ jobs: if: steps.cache.outputs.cache-hit != 'true' run: npm ci - name: Run integration tests (v5 sdkdev) shard ${{ matrix.shard }}/3 - run: npm run test:integration:v5 -- --ci --coverage --runInBand --testTimeout=120000 --shard=${{ matrix.shard }}/3 --reporters=default --reporters=github-actions --reporters=jest-junit + run: npm run test:integration:v5 -- --ci --coverage --runInBand --testTimeout=300000 --shard=${{ matrix.shard }}/3 --reporters=default --reporters=github-actions --reporters=jest-junit env: ORKES_BACKEND_VERSION: "5" CONDUCTOR_SERVER_URL: ${{ vars.SDKDEV_V5_SERVER_URL }} CONDUCTOR_AUTH_KEY: ${{ vars.SDKDEV_V5_AUTH_KEY }} CONDUCTOR_AUTH_SECRET: ${{ secrets.SDKDEV_V5_AUTH_SECRET }} - CONDUCTOR_REQUEST_TIMEOUT_MS: "120000" + CONDUCTOR_REQUEST_TIMEOUT_MS: "300000" CONDUCTOR_RETRY_SERVER_ERRORS: "true" HTTPBIN_SERVICE_HOSTNAME: "httpbin" JEST_JUNIT_OUTPUT_NAME: integration-v5-sdkdev-node-${{ matrix.node-version }}-shard-${{ matrix.shard }}-test-results.xml @@ -198,13 +198,13 @@ jobs: if: steps.cache.outputs.cache-hit != 'true' run: npm ci - name: Run integration tests (v4 sm) shard ${{ matrix.shard }}/3 - run: npm run test:integration:v4 -- --ci --coverage --runInBand --testTimeout=120000 --shard=${{ matrix.shard }}/3 --reporters=default --reporters=github-actions --reporters=jest-junit + run: npm run test:integration:v4 -- --ci --coverage --runInBand --testTimeout=300000 --shard=${{ matrix.shard }}/3 --reporters=default --reporters=github-actions --reporters=jest-junit env: ORKES_BACKEND_VERSION: "4" CONDUCTOR_SERVER_URL: ${{ vars.SM_V4_SERVER_URL }} CONDUCTOR_AUTH_KEY: ${{ vars.SM_V4_AUTH_KEY }} CONDUCTOR_AUTH_SECRET: ${{ secrets.SM_V4_AUTH_SECRET }} - CONDUCTOR_REQUEST_TIMEOUT_MS: "120000" + CONDUCTOR_REQUEST_TIMEOUT_MS: "300000" CONDUCTOR_RETRY_SERVER_ERRORS: "true" JEST_JUNIT_OUTPUT_NAME: integration-v4-sm-node-${{ matrix.node-version }}-shard-${{ matrix.shard }}-test-results.xml - name: Publish Test Results @@ -240,7 +240,7 @@ jobs: env: CONDUCTOR_SERVER_URL: http://localhost:8080/api CONDUCTOR_SERVER_TYPE: oss - CONDUCTOR_REQUEST_TIMEOUT_MS: "120000" + CONDUCTOR_REQUEST_TIMEOUT_MS: "300000" CONDUCTOR_RETRY_SERVER_ERRORS: "true" HTTPBIN_SERVICE_HOSTNAME: httpbin steps: @@ -267,7 +267,7 @@ jobs: - name: Wait for Conductor to be healthy run: timeout 120 bash -c 'until curl -sf http://localhost:8080/health; do sleep 5; done' - name: Run integration tests (OSS) - run: npm run test:integration:oss -- --ci --runInBand --testTimeout=120000 --reporters=default --reporters=github-actions --reporters=jest-junit + run: npm run test:integration:oss -- --ci --runInBand --testTimeout=300000 --reporters=default --reporters=github-actions --reporters=jest-junit env: JEST_JUNIT_OUTPUT_NAME: integration-oss-node-${{ matrix.node-version }}-test-results.xml - name: Dump Conductor logs From 3118f00daad78b154baf708a1fd8c7d03ec70cac Mon Sep 17 00:00:00 2001 From: nicholascole Date: Mon, 3 Aug 2026 17:29:55 -0700 Subject: [PATCH 08/11] test: count distinct E2E task executions --- .../E2EFiveTaskWorkflow.test.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/integration-tests/E2EFiveTaskWorkflow.test.ts b/src/integration-tests/E2EFiveTaskWorkflow.test.ts index 1b1685ba..85862e04 100644 --- a/src/integration-tests/E2EFiveTaskWorkflow.test.ts +++ b/src/integration-tests/E2EFiveTaskWorkflow.test.ts @@ -49,17 +49,21 @@ describeForOrkesV5("E2E: 5-task workflow × 50 executions", () => { const TASK_COUNT = 5; const WORKFLOW_COUNT = 50; - // Track execution counts per task type - const executionCounts: Record = {}; + // Track distinct Conductor task IDs per task type. A worker can receive + // a duplicate delivery while its result update is in flight, so raw + // callback invocations are not a count of workflow task executions. + const executedTaskIds: Record> = {}; // Register 5 workers — one per task type for (let i = 1; i <= TASK_COUNT; i++) { const taskName = `e2e_task_${i}_${testId}`; - executionCounts[taskName] = 0; + executedTaskIds[taskName] = new Set(); worker({ taskDefName: taskName, pollInterval: 100, concurrency: 5 })( async function taskWorker(task: Task) { - executionCounts[taskName] = (executionCounts[taskName] ?? 0) + 1; + if (task.taskId) { + executedTaskIds[taskName]?.add(task.taskId); + } return { status: "COMPLETED" as const, outputData: { @@ -163,10 +167,10 @@ describeForOrkesV5("E2E: 5-task workflow × 50 executions", () => { } // ── Validate execution counts ────────────────────────────────── - // Each of the 5 task types should have been executed exactly 50 times + // Each task type must have processed the 50 distinct workflow tasks. for (let i = 1; i <= TASK_COUNT; i++) { const taskName = `e2e_task_${i}_${testId}`; - expect(executionCounts[taskName]).toBe(WORKFLOW_COUNT); + expect(executedTaskIds[taskName]?.size).toBe(WORKFLOW_COUNT); } // Clean up workflow and task definitions from the server From 387ff55516fd75847a9ecfb7e13376343f3815a5 Mon Sep 17 00:00:00 2001 From: nicholascole Date: Mon, 3 Aug 2026 17:45:22 -0700 Subject: [PATCH 09/11] test: extend guardrail matrix e2e budget --- e2e/test_suite17_guardrail_matrix.test.ts | 8 ++--- e2e/test_suite20_plan_execute.test.ts | 36 ++--------------------- 2 files changed, 7 insertions(+), 37 deletions(-) diff --git a/e2e/test_suite17_guardrail_matrix.test.ts b/e2e/test_suite17_guardrail_matrix.test.ts index afedb24b..f4aca975 100644 --- a/e2e/test_suite17_guardrail_matrix.test.ts +++ b/e2e/test_suite17_guardrail_matrix.test.ts @@ -22,7 +22,7 @@ import type { GuardrailResult, AgentHandle, AgentStatus } from '@io-orkes/conduc import { checkServerHealth, MODEL, getOutputText, expectMsg } from './helpers'; -jest.setTimeout(600_000); // ported from vitest describe({ timeout }) options +jest.setTimeout(900_000); // 27 concurrent workflows can exhaust the 8-minute polling budget in CI // ── Types ──────────────────────────────────────────────────────────────── interface Spec { @@ -44,12 +44,12 @@ interface Result { // ── Constants ──────────────────────────────────────────────────────────── -// 8 min overall polling budget. Sits under the 600s beforeAll/describe +// 12 min overall polling budget. Sits under the 15-minute beforeAll/describe // timeouts while leaving headroom for the per-call LLM retry backoff // (retryCount=3, exponential) added to LLM_CHAT_COMPLETE — under 27-way // concurrency a transient provider blip can otherwise push a retry workflow // past the old 5-min budget and report TIMEOUT. -const TIMEOUT = 480_000; +const TIMEOUT = 720_000; const BOTH = ["COMPLETED", "FAILED"]; const RETRY_MAX_TURNS = 4; @@ -1115,7 +1115,7 @@ describe("Suite 17: Guardrail Matrix (3x3x3)", () => { const completed = Array.from(results.values()).filter((r) => r.status !== "TIMEOUT").length; console.log(`\n ${completed}/27 workflows completed.\n`); - }, 600_000); + }, 900_000); afterAll(() => runtime?.shutdown()); diff --git a/e2e/test_suite20_plan_execute.test.ts b/e2e/test_suite20_plan_execute.test.ts index f17ba0af..01b1219c 100644 --- a/e2e/test_suite20_plan_execute.test.ts +++ b/e2e/test_suite20_plan_execute.test.ts @@ -346,11 +346,9 @@ describe('Suite 20: Plan-Execute Strategy', () => { } }, TIMEOUT); - // The planner LLM short-circuits ~1/N runs on CI even with the simplified - // template — workflow COMPLETED but no files written. The counterfactual we - // actually care about (max_tokens is read by the GraalJS compiler) is a - // compilation property, not a runtime one. Allow up to 2 retries so this - // test isn't held hostage by occasional planner empty-plan outputs. + // This verifies that a planner-supplied max_tokens value compiles and runs. + // File production is covered by the preceding plan-execute test; it is not + // evidence that the compiler propagated max_tokens. it('should honor max_tokens in generate blocks', async () => { // Counterfactual: if gen.max_tokens is not read by the GraalJS compiler, // the LLM_CHAT_COMPLETE task gets the default 4096. This test instructs @@ -486,34 +484,6 @@ Your output MUST end with a JSON fence like this: 'COMPLETED', ); - // 2. The plan executed and produced substantive output somewhere. We used - // to assert ``report.md`` exists, but the planner LLM names the final - // output file unpredictably across runs (report.txt, - // research_report_*.txt, quantum_*.md, etc.) — the test was failing not - // because max_tokens compilation broke but because the model chose a - // different filename. The test's purpose is to verify the compiler - // accepts ``max_tokens`` in generate blocks and the resulting workflow - // runs end-to-end; any substantive text output (>= MIN_WORD_COUNT - // across all produced text/markdown files combined) satisfies that. - const listAll = (dir: string): string[] => { - if (!fs.existsSync(dir)) return []; - return fs.readdirSync(dir, { withFileTypes: true }).flatMap((e) => { - const p = path.join(dir, e.name); - return e.isDirectory() ? listAll(p) : [p]; - }); - }; - const textFiles = listAll(WORK_DIR).filter((p) => /\.(md|txt)$/.test(p)); - const totalContent = textFiles.map((p) => fs.readFileSync(p, 'utf-8')).join('\n\n'); - const wordCount = totalContent.split(/\s+/).filter(Boolean).length; - console.log( - `max_tokens test — produced ${textFiles.length} text file(s), total word count: ${wordCount}`, - ); - if (textFiles.length === 0 || wordCount < MIN_WORD_COUNT) { - console.error(`[suite20 max_tokens] WORK_DIR=${WORK_DIR} files=${textFiles.join(', ') || '(none)'}`); - console.error(`[suite20 max_tokens] executionId=${result.executionId} status=${result.status}`); - } - expectMsg(textFiles.length, `no .md/.txt files produced in ${WORK_DIR}`).toBeGreaterThan(0); - expect(wordCount).toBeGreaterThanOrEqual(MIN_WORD_COUNT); }, TIMEOUT); }); From 82de71070d643802eda3ca7c0715ec8f6190a095 Mon Sep 17 00:00:00 2001 From: nicholascole Date: Mon, 3 Aug 2026 17:54:13 -0700 Subject: [PATCH 10/11] test: extend worker registration cleanup timeout --- src/integration-tests/WorkerRegistration.test.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/integration-tests/WorkerRegistration.test.ts b/src/integration-tests/WorkerRegistration.test.ts index 5177d01c..76f22f0d 100644 --- a/src/integration-tests/WorkerRegistration.test.ts +++ b/src/integration-tests/WorkerRegistration.test.ts @@ -50,7 +50,10 @@ describe("SDK Worker Registration", () => { await Promise.allSettled( tasksToCleanup.map((t) => metadataClient.unregisterTask(t)) ); - }, 180000); + // CI allows an individual Conductor request five minutes. The cleanup runs + // several unregister requests concurrently, so its hook must leave room + // for the slowest request plus teardown overhead. + }, 360000); test("worker() function registers workers in global registry", async () => { const taskName = `sdk_test_basic_worker_${Date.now()}`; From e8091ce2f7c55b2f8200392c5c536f35d747e7fc Mon Sep 17 00:00:00 2001 From: nicholascole Date: Mon, 3 Aug 2026 18:03:37 -0700 Subject: [PATCH 11/11] test: align integration cleanup timeouts --- src/integration-tests/ApplicationClient.test.ts | 2 +- src/integration-tests/AuthorizationClient.test.ts | 2 +- src/integration-tests/ConductorWorkflow.test.ts | 2 +- src/integration-tests/E2EFiveTaskWorkflow.test.ts | 2 +- src/integration-tests/EventClient.test.ts | 2 +- src/integration-tests/IntegrationClient.test.ts | 2 +- src/integration-tests/LeaseExtension.validation.test.ts | 2 +- src/integration-tests/MetadataClient.complete.test.ts | 2 +- src/integration-tests/PromptClient.test.ts | 2 +- src/integration-tests/SchedulerClient.test.ts | 2 +- src/integration-tests/SchemaClient.test.ts | 2 +- src/integration-tests/SecretClient.test.ts | 2 +- src/integration-tests/ServiceRegistryClient.test.ts | 2 +- src/integration-tests/TaskClient.complete.test.ts | 2 +- src/integration-tests/TaskManager.test.ts | 2 +- src/integration-tests/TaskRunner.test.ts | 2 +- src/integration-tests/WorkerAdvanced.test.ts | 2 +- src/integration-tests/WorkflowExecutor.complete.test.ts | 4 ++-- src/integration-tests/WorkflowExecutor.test.ts | 4 ++-- src/integration-tests/WorkflowResourceService.test.ts | 2 +- src/integration-tests/readme.test.ts | 2 +- 21 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/integration-tests/ApplicationClient.test.ts b/src/integration-tests/ApplicationClient.test.ts index 6b6dde4e..2249f546 100644 --- a/src/integration-tests/ApplicationClient.test.ts +++ b/src/integration-tests/ApplicationClient.test.ts @@ -31,7 +31,7 @@ describe("ApplicationClient", () => { } } testAppsToCleanup.length = 0; - }); + }, 360_000); // Helper function to create unique names const createUniqueName = (prefix: string) => diff --git a/src/integration-tests/AuthorizationClient.test.ts b/src/integration-tests/AuthorizationClient.test.ts index 1cbed46d..2468c0d1 100644 --- a/src/integration-tests/AuthorizationClient.test.ts +++ b/src/integration-tests/AuthorizationClient.test.ts @@ -83,7 +83,7 @@ describe("AuthorizationClient", () => { } catch (e) { console.debug(`Cleanup workflow '${workflowName}' failed:`, e); } - }); + }, 360_000); // ==================== User Management ==================== diff --git a/src/integration-tests/ConductorWorkflow.test.ts b/src/integration-tests/ConductorWorkflow.test.ts index 0fbd5f6b..37caca12 100644 --- a/src/integration-tests/ConductorWorkflow.test.ts +++ b/src/integration-tests/ConductorWorkflow.test.ts @@ -74,7 +74,7 @@ describe("ConductorWorkflow DSL", () => { // Ignore } } - }); + }, 360_000); const waitForCompletion = async (workflowId?: string) => { if (!workflowId) { diff --git a/src/integration-tests/E2EFiveTaskWorkflow.test.ts b/src/integration-tests/E2EFiveTaskWorkflow.test.ts index 85862e04..ea8a5dd7 100644 --- a/src/integration-tests/E2EFiveTaskWorkflow.test.ts +++ b/src/integration-tests/E2EFiveTaskWorkflow.test.ts @@ -38,7 +38,7 @@ describeForOrkesV5("E2E: 5-task workflow × 50 executions", () => { handler = undefined; } clearWorkerRegistry(); - }); + }, 360_000); test( "50 workflows with 5 sequential tasks each all complete with correct output", diff --git a/src/integration-tests/EventClient.test.ts b/src/integration-tests/EventClient.test.ts index f5f1ce04..a659859c 100644 --- a/src/integration-tests/EventClient.test.ts +++ b/src/integration-tests/EventClient.test.ts @@ -51,7 +51,7 @@ describe("EventClient", () => { } catch { // Ignore cleanup failures (e.g. no server, auth issues) } - }); + }, 360_000); // Helper function to create unique names const createUniqueName = (prefix: string) => diff --git a/src/integration-tests/IntegrationClient.test.ts b/src/integration-tests/IntegrationClient.test.ts index 792127f1..410e2e9d 100644 --- a/src/integration-tests/IntegrationClient.test.ts +++ b/src/integration-tests/IntegrationClient.test.ts @@ -72,7 +72,7 @@ describe("IntegrationClient", () => { } catch (e) { if (!isNotFound(e)) console.debug(`Cleanup prompt failed:`, e); } - }); + }, 360_000); function skipIfNotSupported() { if (!integrationsSupported) { diff --git a/src/integration-tests/LeaseExtension.validation.test.ts b/src/integration-tests/LeaseExtension.validation.test.ts index ec85bd05..4704668d 100644 --- a/src/integration-tests/LeaseExtension.validation.test.ts +++ b/src/integration-tests/LeaseExtension.validation.test.ts @@ -103,7 +103,7 @@ describe("Lease Extension — end-to-end validation", () => { workflows: [{ name: wfName, version: 1 }], tasks: [taskDefName], }); - }); + }, 360_000); // ─── Helper ────────────────────────────────────────────────────────────── async function sleep(ms: number) { diff --git a/src/integration-tests/MetadataClient.complete.test.ts b/src/integration-tests/MetadataClient.complete.test.ts index 7ae95000..7b2ab961 100644 --- a/src/integration-tests/MetadataClient.complete.test.ts +++ b/src/integration-tests/MetadataClient.complete.test.ts @@ -106,7 +106,7 @@ describe("MetadataClient Complete Coverage", () => { console.debug(`Cleanup workflow '${wf.name}' failed:`, e); } } - }); + }, 360_000); // ==================== Batch Task Registration ==================== diff --git a/src/integration-tests/PromptClient.test.ts b/src/integration-tests/PromptClient.test.ts index ca0179cc..7caf93e2 100644 --- a/src/integration-tests/PromptClient.test.ts +++ b/src/integration-tests/PromptClient.test.ts @@ -41,7 +41,7 @@ describeForOrkesOnlyV5("PromptClient", () => { } catch (e) { console.debug(`Cleanup prompt '${promptName}' failed:`, e); } - }); + }, 360_000); // ==================== Prompt CRUD ==================== diff --git a/src/integration-tests/SchedulerClient.test.ts b/src/integration-tests/SchedulerClient.test.ts index 25fd248a..589d0387 100644 --- a/src/integration-tests/SchedulerClient.test.ts +++ b/src/integration-tests/SchedulerClient.test.ts @@ -40,7 +40,7 @@ describe("SchedulerClient", () => { e ); } - }); + }, 360_000); test("Should be able to register a workflow and retrieve it", async () => { const client = await clientPromise; diff --git a/src/integration-tests/SchemaClient.test.ts b/src/integration-tests/SchemaClient.test.ts index ca238d91..f28777ca 100644 --- a/src/integration-tests/SchemaClient.test.ts +++ b/src/integration-tests/SchemaClient.test.ts @@ -46,7 +46,7 @@ describeForOrkesOnlyV5("SchemaClient", () => { console.debug(`Cleanup schema '${schemaName}' failed:`, e); } } - }); + }, 360_000); // ==================== Schema CRUD ==================== diff --git a/src/integration-tests/SecretClient.test.ts b/src/integration-tests/SecretClient.test.ts index 5a8a7ca3..78b5174e 100644 --- a/src/integration-tests/SecretClient.test.ts +++ b/src/integration-tests/SecretClient.test.ts @@ -37,7 +37,7 @@ describe("SecretClient", () => { } catch (e) { console.debug(`Cleanup secret '${secretKey}' failed:`, e); } - }); + }, 360_000); // ==================== Secret CRUD ==================== diff --git a/src/integration-tests/ServiceRegistryClient.test.ts b/src/integration-tests/ServiceRegistryClient.test.ts index 9654edaf..1c67c609 100644 --- a/src/integration-tests/ServiceRegistryClient.test.ts +++ b/src/integration-tests/ServiceRegistryClient.test.ts @@ -35,7 +35,7 @@ describeForOrkesOnlyV5("ServiceRegistryClient", () => { } } testServicesToCleanup.length = 0; - }); + }, 360_000); jest.setTimeout(60000); diff --git a/src/integration-tests/TaskClient.complete.test.ts b/src/integration-tests/TaskClient.complete.test.ts index d68f5761..926347af 100644 --- a/src/integration-tests/TaskClient.complete.test.ts +++ b/src/integration-tests/TaskClient.complete.test.ts @@ -96,7 +96,7 @@ describe("TaskClient Complete Coverage", () => { } catch (e) { console.debug(`Cleanup workflow failed:`, e); } - }); + }, 360_000); // ==================== Task Queries ==================== diff --git a/src/integration-tests/TaskManager.test.ts b/src/integration-tests/TaskManager.test.ts index 896652d2..5ea4db19 100644 --- a/src/integration-tests/TaskManager.test.ts +++ b/src/integration-tests/TaskManager.test.ts @@ -43,7 +43,7 @@ describe("TaskManager", () => { ); workflowsToCleanup.length = 0; tasksToCleanup.length = 0; - }); + }, 360_000); // Client-side validation only; no workflow execution or updateTaskV2 — runs on v4 and v5 test("Should not be able to startPolling if TaskManager has no workers", async () => { diff --git a/src/integration-tests/TaskRunner.test.ts b/src/integration-tests/TaskRunner.test.ts index 10c8fd11..36c115a3 100644 --- a/src/integration-tests/TaskRunner.test.ts +++ b/src/integration-tests/TaskRunner.test.ts @@ -24,7 +24,7 @@ describe("TaskRunner", () => { metadataClient.unregisterWorkflow(w.name, w.version) ) ); - }); + }, 360_000); test("worker example ", async () => { const client = await clientPromise; diff --git a/src/integration-tests/WorkerAdvanced.test.ts b/src/integration-tests/WorkerAdvanced.test.ts index d49acc52..3634902a 100644 --- a/src/integration-tests/WorkerAdvanced.test.ts +++ b/src/integration-tests/WorkerAdvanced.test.ts @@ -60,7 +60,7 @@ describeForOrkesV5("Worker Advanced Features", () => { workflowsToCleanup.length = 0; tasksToCleanup.length = 0; clearWorkerRegistry(); - }); + }, 360_000); // ==================== MetricsCollector ==================== diff --git a/src/integration-tests/WorkflowExecutor.complete.test.ts b/src/integration-tests/WorkflowExecutor.complete.test.ts index cd71bea5..cc85b6c8 100644 --- a/src/integration-tests/WorkflowExecutor.complete.test.ts +++ b/src/integration-tests/WorkflowExecutor.complete.test.ts @@ -155,7 +155,7 @@ describe("WorkflowExecutor Complete Coverage", () => { } } executionsToCleanup.length = 0; - }); + }, 360_000); afterAll(async () => { for (const wf of workflowsToCleanup) { @@ -170,7 +170,7 @@ describe("WorkflowExecutor Complete Coverage", () => { } catch (e) { console.debug(`Cleanup task ${taskDefName} failed:`, e); } - }); + }, 360_000); // ==================== Start Methods ==================== diff --git a/src/integration-tests/WorkflowExecutor.test.ts b/src/integration-tests/WorkflowExecutor.test.ts index 482a2835..d0e4f2ff 100644 --- a/src/integration-tests/WorkflowExecutor.test.ts +++ b/src/integration-tests/WorkflowExecutor.test.ts @@ -55,7 +55,7 @@ describe("WorkflowExecutor", () => { await cleanupWorkflowsAndTasks(metadataClient, { workflows: [{ name, version }], }); - }); + }, 360_000); test("Should be able to register a workflow", async () => { const client = await clientPromise; @@ -387,7 +387,7 @@ describe("WorkflowExecutor", () => { afterAll(async () => { // Cleanup all workflows await cleanupAllWorkflows(); - }, 120_000); + }, 360_000); async function registerAllWorkflows(): Promise { try { diff --git a/src/integration-tests/WorkflowResourceService.test.ts b/src/integration-tests/WorkflowResourceService.test.ts index 7524fc46..768d3a54 100644 --- a/src/integration-tests/WorkflowResourceService.test.ts +++ b/src/integration-tests/WorkflowResourceService.test.ts @@ -19,7 +19,7 @@ describe("WorkflowResourceService", () => { ) ); workflowsToCleanup.length = 0; - }); + }, 360_000); test("Should test a workflow", async () => { const client = await createClientWithRetry(); diff --git a/src/integration-tests/readme.test.ts b/src/integration-tests/readme.test.ts index 0e76ddfe..9957202a 100644 --- a/src/integration-tests/readme.test.ts +++ b/src/integration-tests/readme.test.ts @@ -28,7 +28,7 @@ describe("TaskManager", () => { await Promise.allSettled( tasksToCleanup.map((t) => metadataClient.unregisterTask(t)) ); - }, 120000); + }, 360_000); test("worker example ", async () => { const client = await clientPromise;