From 6ce925f3c9029f261fd411cdb0107ee28b132e61 Mon Sep 17 00:00:00 2001 From: Nicky Leach Date: Thu, 8 Oct 2026 08:17:58 -0700 Subject: [PATCH] Describe the supported task connection flow Document submission and provider connection directly. Exercise strict Runner field validation with a generic unknown field. Verified all 18 focused task runtime and worker contract tests. Co-Authored-By: Paperclip --- doc/plugins/ENVIRONMENT_TASKS.md | 6 ++---- server/src/__tests__/environment-task-runtime.test.ts | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/doc/plugins/ENVIRONMENT_TASKS.md b/doc/plugins/ENVIRONMENT_TASKS.md index 8130357dbee..6a06aa54b11 100644 --- a/doc/plugins/ENVIRONMENT_TASKS.md +++ b/doc/plugins/ENVIRONMENT_TASKS.md @@ -40,10 +40,8 @@ opaque strings; each provider owns its addressing constraints. - `stop`: requests cancellation of the task. An accepted request is not a process termination receipt. Reconcile status before treating execution as stopped. -This contract supports provider ingress only. Submit the task, wait until it is -running, then request `connection` and connect to its WSS endpoint with the -returned headers. `submit` does not accept a callback URL; Runner-initiated -outbound connections are outside this contract. +Submit the task, wait until it is running, then request `connection` and connect +to its WSS endpoint with the returned headers. Submission, completion and stop return `accepted`. Acceptance does not imply readiness or success. Status and connection return distinct typed results. Every diff --git a/server/src/__tests__/environment-task-runtime.test.ts b/server/src/__tests__/environment-task-runtime.test.ts index cd469984178..72bb86287ef 100644 --- a/server/src/__tests__/environment-task-runtime.test.ts +++ b/server/src/__tests__/environment-task-runtime.test.ts @@ -111,7 +111,7 @@ describe("typed environment task admission", () => { }); it("validates operation and result shape without making acceptance mean readiness", () => { expect(environmentTaskOperationSchema.safeParse({ ...submit, surprise: true }).success).toBe(false); - expect(environmentTaskOperationSchema.safeParse({ ...submit, runner: { ...submit.runner, connectUrl: "wss://coordinator.example.test/connect" } }).success).toBe(false); + expect(environmentTaskOperationSchema.safeParse({ ...submit, runner: { ...submit.runner, unknownField: true } }).success).toBe(false); expect(() => parseEnvironmentTaskResult({ kind: "status" }, "attempt-1", { kind: "accepted", taskId: "attempt-1" })).toThrow(); expect(parseEnvironmentTaskResult(submit, "attempt-1", { kind: "accepted", taskId: "attempt-1" }).kind).toBe("accepted"); });