From fd71b300a97102be4030aca8d2022f183867d702 Mon Sep 17 00:00:00 2001 From: Richard McDaniel <1130888+rmcdaniel@users.noreply.github.com> Date: Sat, 7 Nov 2026 19:45:27 +0000 Subject: [PATCH] Prepare SDK 3.10.0 release source Date the 3.10.0 changelog entry 2026-11-07 and drop the unreleased labels from docs for features that ship in 3.10.0. Exclude tests/ from Composer distribution archives. The tree contains both tests/Fixtures and tests/fixtures, which collide on case-insensitive filesystems (same defect as durable-workflow/workflow#1064). Runtime code, resources/, docs/ and examples/ stay in the archive. Co-Authored-By: Claude Opus 5.5 --- .gitattributes | 1 + CHANGELOG.md | 15 ++++++++++----- docs/portal/build/workflows-activities.md | 2 +- docs/portal/getting-started/client-setup.md | 2 +- docs/portal/operate/metrics.md | 4 ++-- docs/sdk-reference.md | 16 +++++++--------- 6 files changed, 22 insertions(+), 18 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..18e14aad --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +/tests export-ignore diff --git a/CHANGELOG.md b/CHANGELOG.md index 886612cd..bb5b0766 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ project follows [Semantic Versioning](https://semver.org/). ## [Unreleased] -## [3.10.0] - Unreleased +## [3.10.0] - 2026-11-07 ### Upgrade notes @@ -46,11 +46,10 @@ project follows [Semantic Versioning](https://semver.org/). before publishing that task's completion or failure. Public `tick()`, activity scheduling, cancellation, local failures, cooperative mode, custom transports, telemetry and metrics retain synchronous behavior. Opting in - changes when completion errors become visible. These source features still - require published-package/runtime and load qualification under #293; no - throughput improvement or default change is claimed. + changes when completion errors become visible. No throughput improvement or + default change is claimed. -- An unreleased schedule-to-start histogram for workflow/activity dispatch uses +- A schedule-to-start histogram for workflow/activity dispatch uses the runtime's capability-gated `ready_age_ms` claim metadata (shared metrics revision 2, central #233). Valid zero is retained; missing, unsupported or malformed ages are omitted. Existing instruments keep their names and tags. @@ -108,6 +107,12 @@ project follows [Semantic Versioning](https://semver.org/). ### Fixed +- Composer distribution archives no longer include the test tree, avoiding the + `tests/Fixtures` and `tests/fixtures` directory collision when vendor files + are copied to a case-insensitive filesystem. Source checkouts keep the + complete test corpus; runtime code, `resources/`, `docs/` and `examples/` + remain in the archive. + - Static shared, control and worker credentials are validated in their original form before role selection and fallback, including framework configuration and Laravel process handoffs (#307). Invalid UTF-8, leading/trailing Unicode diff --git a/docs/portal/build/workflows-activities.md b/docs/portal/build/workflows-activities.md index 0bb782e3..52d1dd98 100644 --- a/docs/portal/build/workflows-activities.md +++ b/docs/portal/build/workflows-activities.md @@ -520,7 +520,7 @@ heartbeats. Prepared local activities use supervised callback processes. ## Inspect retry budget and the owning workflow -The unreleased `ActivityContext::activityExecutionId` property contains the +The `ActivityContext::activityExecutionId` property contains the logical `activity_execution_id` received with the claim. Ordinary and cooperatively supervised remote callbacks expose that same execution identity across retry attempts, while `activityAttemptId` identifies each attempt. diff --git a/docs/portal/getting-started/client-setup.md b/docs/portal/getting-started/client-setup.md index c7c3d099..9ef93279 100644 --- a/docs/portal/getting-started/client-setup.md +++ b/docs/portal/getting-started/client-setup.md @@ -67,7 +67,7 @@ The workflow ID is the stable instance identity. The run ID identifies one execu ## Read complete lists and histories `listWorkflows()` and `workflowHistory()` each return one bounded page. The -following iterator methods are unreleased: +following iterator methods read every page lazily: ```php foreach ($controlClient->iterateWorkflows(status: 'running', pageSize: 100) as $execution) { diff --git a/docs/portal/operate/metrics.md b/docs/portal/operate/metrics.md index 7a91dc29..16457b47 100644 --- a/docs/portal/operate/metrics.md +++ b/docs/portal/operate/metrics.md @@ -56,7 +56,7 @@ result, a retry decision, a deadline or task authority. | `durable_workflow_worker_poll_duration_seconds` | histogram | `s` | same as above | | `durable_workflow_worker_tasks` | counter | `1` | `task_kind`, `task_queue`, `outcome` | | `durable_workflow_worker_task_duration_seconds` | histogram | `s` | same as above | -| `durable_workflow_worker_task_schedule_to_start_seconds` (unreleased) | histogram | `s` | `task_kind`, `task_queue` | +| `durable_workflow_worker_task_schedule_to_start_seconds` | histogram | `s` | `task_kind`, `task_queue` | Each request, poll or processing observation increments its counter by one and records one nonnegative duration with the same tags. A client observation covers one logical request, @@ -65,7 +65,7 @@ describe this worker process, not durable execution counts, workflow completion or schedule-to-start latency. A missing observation does not mean zero work or a healthy process. -## Schedule-to-start timing (unreleased) +## Schedule-to-start timing The revision-2 dispatch histogram records only workflow and activity tasks that this worker actually dispatches. The runtime must explicitly advertise Boolean diff --git a/docs/sdk-reference.md b/docs/sdk-reference.md index 51d63e4a..17a4fc7b 100644 --- a/docs/sdk-reference.md +++ b/docs/sdk-reference.md @@ -299,7 +299,7 @@ that the visible examples still match those runnable files. ## Activity execution identity -The unreleased `ActivityContext::activityExecutionId` is the nullable logical +`ActivityContext::activityExecutionId` is the nullable logical execution identity supplied by an activity claim. `workflowId` and `runId` identify its owning workflow/run; `activityAttemptId` remains attempt-specific. Use a caller-owned business key when logical identity is unavailable. The SDK @@ -318,7 +318,7 @@ run guard and fail rather than silently targeting a successor. ## Control-plane administration and discovery -`listWorkflows()` and `workflowHistory()` each read one page. The unreleased +`listWorkflows()` and `workflowHistory()` each read one page. The iterator API follows the Server's continuation tokens lazily: ```php @@ -588,14 +588,13 @@ task kind, consecutive attempt, selected delay, and typed server exception. Authentication failures, malformed responses, and generic server errors remain fatal. -## Completion-carried polls (unreleased) +## Completion-carried polls -Unreleased main can request the next task on a task completion when the runtime +SDK 3.10.0 can request the next task on a task completion when the runtime advertises the matching capability: `workflow_task_completion_activity_poll`, `activity_completion_workflow_poll`, or `workflow_task_completion_workflow_poll`. The Worker reserves a free slot for that task kind. Workflow carriers request only workflow tasks; when both carriers are sent, activity dispatch has priority. -These paths still require qualification with the published runtime and SDK. An embedded lease uses the ordinary payload, history and lease-supervision path without sending or recording another poll. A lease reported without its answer @@ -607,7 +606,7 @@ Grant freshness includes the original completion transit and time spent waiting to dispatch. Shutdown finishes a known delivered lease before returning. Runtimes without the capability keep the ordinary polling path. -## Completion pipelining (unreleased, opt-in) +## Completion pipelining (opt-in) `Worker::create($client, $taskQueue, enableCompletionPipelining: true)` allows managed `run()` to overlap a completion response with useful work on one @@ -633,9 +632,8 @@ Opting in changes when a completion refusal becomes visible: useful work on the next leased task may have run before the refusal arrives. Worker registration or authentication refusal prevents that task's publication. An identity-bound lost claim is released as usual; other deferred failures remain errors. Shutdown -settles a known leased task and creates no further prefetch. This source feature -still requires published-package/runtime qualification and realistic load -evidence. No throughput improvement or default change is claimed. +settles a known leased task and creates no further prefetch. No throughput +improvement or default change is claimed. ## Activity runtime lease maintenance