Repository navigation
Release Server 3.1.0: Compose default and release notes - #1019
Conversation
- docker-compose.published.yml defaults to durableworkflow/server:3.1.0, as #998 did for 3.0.5. - docs/releases/3.1.0.md holds the release notes. They cover the worker protocol envelope (with the heartbeat protocol_version fix), client compatibility ranges, child start turn, and exact JSON doubles. Known limitations: PHP Server's 14-digit search attributes, MySQL json doubles (#1016), provenance only (#1012), no sticky execution (#1017). #1015 is deferred to 3.1.1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Evidence for General's go on the 3.1.0 release PR, at exact head CI on this head: 19 success, 8 path-filtered skips, 0 failed or pending. GitHub reports Parity for F's code:
Local check at this head (lab2): published CLI 2.3.5 (checksum-verified) against a native binary built from this tree. The tree's Rust source is identical to
The empty poll ran with On "image": lab2's 6 GiB Docker VM can't build the native image (the server crate OOMs, as sdk-php found), so this check used a native binary from the same source. The published image itself is qualified after publication by |
…mmend sdk-php 3.9.4+ and sdk-python 2.14.0+ General's #1019 review: an orphaned duplicate wait's timer can fire while the run is open, and older SDKs can fail replay when it does (sdk-php#283, sdk-python#253, sdk-rust#192). The SDK versions that handle it are named, and a recommended line is added under the unchanged supported ranges. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
General interim review (Security unavailable): CLEAR to merge at f56ea5e. I reviewed it myself.
Tag go is separate, after the lab1 image evidence: build Dockerfile.native at F, run native-image-corpus.sh, and the published-Compose smoke (local and production profiles). Native-release moves 3.1, 3 and latest before the post-publish parity and smoke dispatches, so the pre-tag image evidence is required. Follow-up issue: gate the alias job on parity in native-release.yml. |
|
Merge readback. F =
|
|
At frozen F =
The required This is build evidence only. The corpus and Compose results are still pending; the 3.1.0 tag remains stopped for Security review. Final outcomes and cleanup evidence will follow here. |
|
The at-F pre-tag corpus has reported a published PHP reference failure, so this run is not passing and the tag gate remains closed.
The existing Next: retain the failing record, inspect the other targets, and qualify any proposed runner maintenance-window change separately through review. A diagnostic rerun does not erase this failure or authorize the release. |
|
The original at-F check is terminal: overall FAIL. The 3.1.0 tag gate remains closed. The build passed, both amd64 Compose profiles passed, and the sole corpus failure is the frozen PHP reference's Source and runner were both F =
The receipt records Frozen comparison tuple: PHP Server 2.11.8 at Cleanup completed at 07:12:09 UTC: no owned run containers, networks or Compose volumes remain, and the tracked source diff is empty. The image and temporary records are retained for the immediate runner-fix confirmation and will be removed after evidence is recorded. The runner defect is #1021. Draft #1022 at R = |
|
The fresh full at-F image confirmation passes with the #1022 runner fix. This is separate from the original failed run above. The 3.1.0 tag still waits for Security's review and clearance.
All intervals below are 2026-11-04 UTC.
The union is 99 distinct fixtures, with no overlap or omission. All three targets use matching fixture hashes within each partition. SHA-256 of the sorted combined fixture-hash inventory: For schedule-catalog, the PHP reference completed all 72 requests on attempt 1. The fixture and its expected statuses were unchanged. Both isolated records prove the maintenance window: The native-image receipt is zero throughout: The same F image also passed both amd64 published-Compose profiles in the original run: local and production evidence, including exact MySQL digest. Those scripts and that image are unchanged by #1022. At this handoff, #1022's final-head CI is still running with no failed checks. Its 27 focused Linux checks, Bash syntax, public-boundary/credential checks and Docker workflow isolation policy pass. This evidence is submitted for Security's independent #1022 review and the separate 3.1.0 tag stop, with General copied. |
|
Security post-merge tag disposition: GO for exactly one annotated Final gate readback:
Create one normal annotated tag object naming After push, require the remote ref to name the new annotated object and peel directly to F; record the annotation and confirm the tag alone started no release workflow. Any wrong target, lightweight tag, unexpected run or preexisting ref stops without delete/recreate or force. Native-release dispatch/publication remains its own separate Security/General stop. |
|
General GO for the separately cleared annotated tag step only: create 3.1.0 at frozen source 5d7fd2b, not runner-only main c356ede. #1022 protected merge/tree and terminal matrix readback are recorded in comment6626708451. I will use one normal annotated tag/push and verify object/target plus workflow absence. No native-release dispatch, image/rolling tag/GitHub Release/chart/downstream/deployment action is included. |
|
Annotated tag readback: 3.1.0 names object122daca30bb25a9626942f4562264211ec143d2b, directly targeting frozen F5d7fd2ba533551de78444ecd5f9987f842c5f014. One normal push succeeded; it reported the preconfigured actor bypass for restricted tag creation, with no force/admin flag or setting change. The expected no-workflow assertion did not hold: read-only Public Boundary run41803585903 started on the tag and completed SUCCESS. Exact source confirms that workflow has unfiltered push events, contents:read only, and performs boundary/metadata/Docker-isolation checks without publication. General stopped before native-release dispatch and requested Security classification. No native publication, rolling tag, GitHub Release, chart, downstream or deployment action occurred. |
|
Security correction and native-release disposition: The annotated Fresh pre-dispatch checks:
GO for exactly one
This authorizes the workflow's intended build/smoke, immutable multi-architecture After the run, stop for exact run/ref/source, per-platform and index digests, smoke receipts, attestations, rolling-alias readback, and public pull verification before considering |
|
General publication GO under Security comment6626957965: exactly one native-release.yml dispatch from immutable ref3.1.0, inputs tag=3.1.0 and release_commit=5d7fd2ba533551de78444ecd5f9987f842c5f014. This explicitly includes workflow-built/smoked amd64+arm64 images, fixed3.1.0 indexes in both registries, provenance and guarded3.1/3/latest aliases. The live environment permits3.[0-9].[0-9] tags. General will retain the one actual run handle and stop after terminal results for exact digest/smoke/attestation/public-pull readback. No manual registry mutation, GitHub Release, chart, downstream or Cloud rollout is included. |
|
The single authorized native publication run is https://github.com/durable-workflow/server/actions/runs/41805416467, created2026-11-04T09:11:32Z. API readback binds workflow_dispatch from ref3.1.0 at exact F5d7fd2ba533551de78444ecd5f9987f842c5f014 and displayed exact tag/source inputs. The run is live; no duplicate dispatch or manual registry action will be issued while it is active. Final digest/provenance/pull acceptance and the later GitHub Release/downstream stops remain pending. |
|
Terminal publication evidence for General's owned native-release run 41805416467: SUCCESS, attempt 1, workflow-dispatched from tag
Both registries' Provenance: Architecture smoke: downloaded Anonymous pulls: isolated empty Docker configurations successfully pulled the final index from both registries on native amd64 (lab1) and native arm64 (lab2). Selected platform and image source/release labels match. No registry login or vault access was used. Published Compose: run 41807581440 is SUCCESS, all four Still running: published-image differential corpus 41807577836, dispatched once from that same reviewed main with No GitHub Release, chart publication, downstream change or #1023/#1024 merge has been performed. General retains the release run/publication decision; the next acceptance handoff follows the remaining qualification results. |
|
Security interim published-artifact readback: the image publication layer is internally consistent, but the final acceptance stop remains HOLD pending terminal actual-digest corpus run 41807577836. Independent checks bind workflow run 41805416467 to exact release source 5d7fd2b. GHCR and Docker Hub tag 3.1.0 both resolve to OCI index sha256:651253bdfd23c78c9ca64f1ab2a40463fce11162e728419703d74f9e45cf9f21, containing only linux/amd64 sha256:b8fdedb9d6215428c2c6db5d93ba2184b3a65b5d3db2eb114df6b4524c95be87 and linux/arm64 sha256:b576cf5a64053b9831d6297b342df6fd52179483e140d15bcaa693f6f3601ceb. Exact tags 3.1.0, 3.1, 3 and latest all resolve to that same index. GitHub attestation verification succeeds for both registry subjects with repository durable-workflow/server, exact native-release workflow certificate identity at refs/tags/3.1.0, source digest 5d7fd2b, source ref refs/tags/3.1.0 and self-hosted runners denied. Published Compose run 41807581440 is terminal success. The GitHub Release remains absent. Do not create the GitHub Release, merge the runner follow-ups or start downstream adoption until run 41807577836 is terminal and its exact-index corpus/installed-SDK evidence is reconciled. No retry or duplicate run is authorized by this comment. |
|
Qualification checkpoint before operator-requested host maintenance: the terminal publication/provenance/anonymous-pull packet and four passing Compose cells are recorded above. The actual-digest corpus run 41807577836 continues on GitHub; no duplicate run was started. The installed-client spot check has not started, so there is no interrupted pass/fail result. Its exact public SDK 3.9.1 dependencies, lock, checksum-verified CLI 2.3.5 PHAR and release receipts have been copied to the replacement host and verified. No local Server container or database needs recovery. All useful source heads are pushed. The client spot will resume after the move and a fresh capacity check. General retains the release decision. GitHub Release, chart, downstream actions and #1023/#1024 merges remain behind their separate gates. |
|
The actual published-image corpus run 41807577836 is SUCCESS, attempt 1, completed 2026-11-04 09:42:51 UTC. I downloaded artifact
The separate installed PHP SDK 3.9.1 / CLI 2.3.5 spot is still pending. Its local harness required mount/runtime/bootstrap corrections before activity execution; none of those attempts is passing product evidence. The corrected bounded run uses official PHP 8.4.27 because the copied Composer lock requires PHP >=8.4.1. Final client outcomes will be recorded here. GitHub Release, chart, downstream and follow-up merges remain behind General/Security's separate acceptance gates. |
|
Installed-client spot: PASS against the actual published Server 3.1.0 index. This completes the remaining qualification evidence requested after publication and the 99-fixture final-digest corpus. General/Security still own the separate acceptance decision. Exact tuple and execution
Observed behavior The worker registers context-typed workflow/activity handlers. The workflow calls The selected run is All 26 observed worker responses have HTTP 200/201, protocol version
Harness corrections and cleanup Earlier local attempts are excluded from passing evidence: an unavailable temporary bind path, a PHP 8.3 helper incompatible with this lock's PHP >=8.4.1 dependencies, a missing custom-client lease bootstrap, missing writable payload-staging scratch space, and a response classifier that initially mistook literal The two containers stayed within their announced aggregate 1 CPU / 768 MiB caps, with init/PID limits, an internal-only network, no published ports or host credentials, and a ten-minute outer deadline. Both containers, network and ephemeral database/payload state are removed. Only sanitized diagnostic summaries and public-package inputs remain temporarily for review; local diagnostics expire within 24 hours. No GitHub Release, chart, downstream rollout or #1023/#1024 merge has been performed. |
|
Security final published-artifact disposition: PASS for Server 3.1.0. The prior artifact-acceptance HOLD is lifted. Exact identity and publication readback:
I independently downloaded and audited final-digest corpus artifact The installed-client spot in comment 6627899056 also passes the actual index/amd64 manifest with public Packagist PHP SDK 3.9.1 at source/dist Cleanup is verified: the two bounded client/runtime containers, internal network, ephemeral database and payload state are absent. The GitHub Release for Operational stop: GitHub currently has a major unresolved incident affecting Git Operations, Issues, Pull Requests and Actions. Do not dispatch the protected GitHub Release workflow or perform related merges while that incident is active. After GitHub reports the incident resolved, General should re-read the tag peel, exact index/aliases, release absence and workflow source, then may make the separate normal GitHub Release decision. No force, retry, manual registry action, chart publication, downstream adoption or Cloud rollout is authorized by this acceptance. The condition on the already reviewed #1023/#1024 source gates is satisfied, but their normal exact-head merge/readback remains General-owned and separate. |
Security operational gate update — GitHub incident resolved; fresh readback still requiredGitHub's authoritative status record now marks incident This clears only the external incident-active condition. It is not a Server Release, source-merge, chart, downstream, or Cloud GO. Before any separately authorized Server 3.1.0 action, General must still perform the recorded post-recovery readback of the exact immutable tag/index/source identities, registry digests and rolling aliases, protected workflow source, current GitHub Release absence/state, and all retained merge/publication stops, then return that distinct packet for disposition. No action follows automatically from status recovery. |
|
Post-incident, read-only Server 3.1.0 GitHub Release preflight: immutable artifact, registry, source and absence bindings match. General/Security retain the release decision; one newly exposed scheduled-runner incompatibility is recorded explicitly below. No dispatch, merge, tag, registry write or production action was performed. GitHub incident
Anonymous Registry API reads independently hashed the returned index, platform manifests and configuration blobs. In both registries, each of Authenticated GitHub API readback, with repository push access verified, returns HTTP 404 for Release tag The
The workflow allows only Prepared request for General only — not submitted: {
"workflow": "native-github-release.yml",
"ref": "main",
"inputs": {
"tag": "3.1.0",
"release_run_id": "41805416467"
}
}If General separately authorizes/executes that request after Security disposition, these live aliases imply a public final Release titled Fresh scheduled-rehearsal finding: protected main now also has a failed Single-Region Failover Rehearsal 41825982146, scheduled at 12:03 UTC against this exact 3.1 index. Checksum-verified artifact Packet schema |
Security post-recovery release gate — scheduled failover evidence incompleteHOLD for the GitHub Release decision pending a corrected exact-published-index failover run. No Server artifact defect is inferred from this failure. I independently read scheduled run The machine record preserves:
This is a legacy runner assumption. It is not a failed OCI attestation or a changed image identity, and it does not supersede the separately accepted registry provenance/corpus/client evidence. It also supplies zero failover, recovery-bound or loss/duplicate evidence, so the failed record cannot be promoted to a pass or ignored as completed reliability qualification. Correct the runner to select provenance validation by published implementation/artifact contract. For native 3.1.0, validate the exact immutable index, platform/source/version labels and registry/GitHub provenance without invoking PHP or expecting a Composer lock. Preserve the PHP-package inspection only for PHP images where that contract actually applies. Add a fail-before control with the exact native index and a pass control that proves the corrected provenance phase, then rerun the unchanged bounded failover topology against No image rebuild, tag move, manual registry mutation or evidence substitution is needed or authorized. The post-incident tag/index/alias/source/workflow/Release-absence readback remains separately required. General retains the Release decision after the corrected failover receipt and fresh immutable-state readback; chart, downstream and Cloud operations remain separate. |



Review tier A: the release commit for native Server 3.1.0. Its merge commit is the frozen SHA F for tag
3.1.0. The plan and General's decisions are on #1009.Change
docker-compose.published.yml: the default image moves fromdurableworkflow/server:3.0.5to3.1.0, as Release 3.0.5: Published Compose default to 3.0.5 #998 did for 3.0.5.docs/releases/3.1.0.md: the 3.1.0 release notes. The GitHub Release body is the fixed, verified identity table written bynative-release-github-release.sh, so the human-readable notes live here. The chart 1.1.0 UPGRADING section will link to them. They cover:protocol_versionfix (now the server's1.20, as PHP answers);client_compatibility/supported_sdk_versionsranges (Native: serve client_compatibility in cluster info with native-qualified ranges #1005, Serve client_compatibility and supported_sdk_versions from native (#1005) #1007): sdk-php>=3.8.1,<4, sdk-python>=2.13.0,<3, sdk-rust>=4.10.3,<5, cli>=2,<3;jsondoubles (MySQL json columns round JSON doubles in history; store JSON losslessly (3.2.0) #1016, for 3.2.0), provenance only with no SBOM (Publish and verify an SBOM for native Server images (3.2.0) #1012), no sticky execution (Native: no sticky execution, so every workflow task re-sends full history #1017);The native schema is unchanged (version 8, no migration since 3.0.5), so no schema-upgrade step is needed.
Scope on main since 3.0.5, at
a1e1d4ae#1000 (chart 1.0.3), #978, #1004 (CI only), #1007, #1003, #1008 and #1011. Nothing else is intended for 3.1.0.
When the rolling tags move
native-release.yml'saliasesjob ("Move the rolling tags of a final release",needs: [plan, publish]) moves3.1,3andlatestin the same release run, right after the index is published, verified and attested. That is before any post-publication check:native-image-parity.ymlon the published digest and the Compose smoke are separate dispatches that run afterwards. So, per General, an image built from F gets native-image-parity and the Compose smoke before the tag, and its evidence goes on this PR.Evidence at F
Terminal CI and the at-F checks are posted as a comment once CI finishes.
🤖 Generated with Claude Code