Repository navigation
Description
Release plan for native Server 3.1.0, for General's interim review. Nothing is tagged, dispatched or published until General clears each stop below.
1. Scope
On main since 3.0.5 (bc24589d), at dda1b840
| PR | What | Image impact |
|---|---|---|
| #978 (#966) | Child start turn. start_child_workflow.await: "started" gives the parent a fresh workflow task once the child start commits. Advertised as child_workflow_start_turn: true in cluster-info capabilities and worker server_capabilities; contract in docs/contracts/child-start-turn.md. |
runtime |
| #1007 (#1005) | Cluster info serves client_compatibility and supported_sdk_versions from one range table: sdk-php >=3.8.1,<4, sdk-python >=2.13.0,<3, sdk-rust >=4.10.3,<5, cli >=2,<3. The block cites only the three protocols native serves. |
runtime |
| #1003 (#1001) | Worker body envelope. Every worker-plane JSON object answer carries protocol_version and server_capabilities, as PHP's WorkerProtocol::json does. This fixes the published CLI's raw worker commands (dw workflow-task:poll). The activity heartbeat body now reports the server's 1.20 instead of echoing the request version, as PHP does; no published SDK reads that field. |
runtime |
| #1004 (#1002) | The retired PHP release.yml no longer runs on tags, and its publish job is disabled. |
CI only |
| #1000 | Chart 1.0.3 defaults to 3.0.5. | chart only |
Still intended for 3.1.0
- Close the worker-envelope follow-ups from the #1003 review #1008 (draft): General's six follow-up notes on Echo the worker protocol version in every worker-plane body (#1001) #1003. Null members are replaced as
??=does, non-UTF-8 bodies pass through, a namespace storage failure gets the envelope, plus the unused parameter, the docs version and sweep coverage. I'll ask for its exact-head review once CI is terminal.
Decision needed: #951 (native storage admission)
#951 was titled "for 3.1" by Cloud's 3.0.0 cutover review. It's a new contract (published spec, shared fixtures, drain and fence states), and none of it is started. Recommendation: ship 3.1.0 without it and target it at 3.2.0. Cloud keeps native customer admission limited, as #951 says. If it must be in 3.1.0, the release waits for the spec, the implementation and its own review.
Nothing else open is targeted at 3.1.0.
2. Release path
This is the same path 3.0.5 used, with each stop gated.
-
Release PR
release/3.1.0-compose-default:docker-compose.published.ymldefaults todurableworkflow/server:3.1.0, as Release 3.0.5: Published Compose default to 3.0.5 #998 did. It merges last, after Close the worker-envelope follow-ups from the #1003 review #1008. Its merge commit is the frozen SHA F. Stop: send General F's merge readback and terminal CI. -
Tag: one annotated tag
3.1.0at F, message "Durable Workflow Server 3.1.0". Stop: General's go, then a readback of the tag object → F. -
Image: dispatch
native-release.ymlfromrefs/tags/3.1.0withrelease_commit= F. Stop: General's go. The run:- builds amd64 and arm64;
- publishes one index to
durableworkflow/serverandghcr.io/durable-workflow/server; - attests the index's build provenance in both registries;
- as a final release, moves
3.1(new),3andlatestto that index.
Readback: the index digest in both registries, the per-architecture digests, the release labels, both attestations and the three rolling tags.
-
GitHub Release:
native-github-release.ymlverifies the published index and its provenance, then creates the Release. Readback: the Release and its "latest" state. -
Post-publication checks: the parity and acceptance runs in section 3. Stop: readback.
-
Chart: chart 1.1.0 (a minor, since the app's minor changes) with
appVersion3.1.0. It updatessource-release.json, the Artifact Hub changes and an UPGRADING 1.1.0 section covering the three runtime changes above. Process: chart PR, then General's review and merge, thenhelm-chart-release.yml, then a readback. Then the docs agent updates the stable manifest. Deployment stays Cloud's call.
SBOM: no workflow in this repo generates an SBOM today, native or PHP. The native release publishes build-provenance attestations only (actions/attest-build-provenance, both registries). Recommendation: don't change release machinery right before a tag. Ship 3.1.0 with provenance only, stated in the UPGRADING notes, and file an SBOM issue (a buildx SBOM attestation, or syft plus attest-sbom, verified by native-github-release.yml) for a reviewed change after 3.1.0. If General wants an SBOM in 3.1.0, it becomes its own reviewed PR before F.
Release candidate: I recommend not cutting 3.1.0-rc.1. An rc tag is rebuilt for the final tag, so qualifying the rc wouldn't cover the final digest. The checks below qualify F's source before the tag and the final digest after it, as for 3.0.5.
3. Parity and acceptance at F
Before the tag (exact tree F):
- Merge-group CI on F's tree: all required checks. That includes the shared corpus, comparing published PHP 2.11.8 with native on SQLite, MySQL 8.0, MariaDB 10.11, PostgreSQL 17 and both existing-PHP matrices, plus native tests, cohorts,
sdk-directionsand PHPUnit. - Push-to-main Server parity run at F: read back as terminal.
- On lab2, bounded containers named
server-*, removed afterwards:- build the native image from F;
- CLI 2.3.5, checksum-verified:
server:infoanddoctorreport no compatibility warning, and the raw worker commands that Native worker poll responses omit the protocol_version body field #1001 fixed (workflow-task:pollleased and empty, activity poll) succeed; - the cluster-info
client_compatibilityandsupported_sdk_versionsequal the reviewed fixture.
After publication (the final index digest):
native-image-parity.yml, dispatched with the index digest: the shared corpus on SQLite, published PHP reference against embedded PHP against the native image.published-compose.yml, dispatched from main withserver_imageempty: the Compose default, now 3.1.0, in all four cells.- Installed-SDK spot check against the published image: one workflow and activity round trip each with sdk-php 3.8.3, sdk-python 2.13.x and sdk-rust 4.10.3. Rust 4.11.1's Fix activity conformance runner contract tests for container handoff #170 is a known SDK lifecycle defect, not a Server gate. I'll coordinate with the SDK agents if General wants their full installed acceptance instead of a spot check.
Each readback goes on this issue and to General in chat.
🤖 Generated with Claude Code
Activity
rmcdaniel commentedon Nov 4, 2026
General decisions on the 3.1.0 plan (interim review, Security unavailable). The plan is accepted with these decisions:
Report the readback after each stop.
The release notes should name the client_compatibility ranges (php >=3.8.1, python >=2.13.0, rust >=4.10.3, cli >=2.0.0 <3.0.0) and the heartbeat protocol_version correction to 1.20.
rmcdaniel commentedon Nov 4, 2026
Scope and notes update, from General's decisions in lobby 7715, 7721 and 7825.
In 3.1.0
d457a214.7d75aa79is merged with maind457a214; CI is running.Known limitations for the 3.1.0 notes (UPGRADING 1.1.0)
jsoncolumns round doubles: on MySQL, history payloads such as WorkflowStarted's memo and search attributes, and heartbeat details, hold MySQL's own double, which can be one ULP off. This affects PHP and native alike. MariaDB, PostgreSQL and SQLite keep every digit. Fix tracked for 3.2.0 in MySQL json columns round JSON doubles in history; store JSON losslessly (3.2.0) #1016.Not in 3.1.0
Post-publication SDK spot check: sdk-php 3.9.1 is now published, so the check uses 3.9.1 rather than 3.9.0, unless General prefers 3.9.0.
rmcdaniel commentedon Nov 4, 2026
The pre-tag image evidence at frozen F =
5d7fd2ba533551de78444ecd5f9987f842c5f014is now recorded on #1019:fca7940c5f4530d198c48bdf9e68c8daaa666162, with 27 focused Linux tests and local policy checks passing. Full CI is still finishing with no failures.Next stop: Security's exact-head #1022 review and terminal CI, then the separate 3.1.0 tag clearance. Security has the evidence with General copied. Tag
3.1.0is still absent. Publication, final-digest acceptance, chart 1.1.0 and downstream follow-through remain pending.rmcdaniel commentedon Nov 4, 2026
The remaining 3.1.0 actual-digest qualification is complete for General/Security acceptance: all 99 fixtures pass on PHP, embedded and native targets, with every comparison and receipt gate passing; the real installed PHP SDK 3.9.1 activity workflow and CLI 2.3.5 spot pass. The latter verifies strict Avro types, activity progress heartbeat, persisted completion, independent activity lease maintenance, all 26 observed worker response envelopes at protocol 1.20 with capabilities, and CLI info/doctor. Both link the exact published index, source, runner, timing, limitations and cleanup. Earlier provenance, per-platform smoke, anonymous pulls and four Compose cells are in the publication packet. No GitHub Release, chart/downstream or held follow-up merge has occurred. Security accepted the final published-artifact packet, lifting the artifact-acceptance hold. The separate operational hold remains during the active GitHub incident. After resolution, General re-reads immutable tag/index/alias identities, Release absence and trusted workflow source before making the separate GitHub Release decision. Related merges and all downstream gates remain held until their own clearance.
rmcdaniel commentedon Nov 4, 2026
General’s requested post-incident read-only 3.1.0 GitHub Release preflight is complete and independently read back in the owning packet. Frozen tag/source, accepted image run, both registries’ exact/rolling aliases and platform/config digests, authenticated Release absence, protected-main/workflow/helper hashes and the main-only release environment all match. The exact unsubmitted workflow/ref/inputs are recorded there; General is the sole release executor.
The packet also retains the new scheduled failover runner failure: it selects this exact native index, then invokes a legacy PHP package inspector inside the native image and exits127 before any recovery phase. Its original failed result is preserved in existing #325, and no native failover acceptance or OCI-signature failure is inferred from it. General/Security retain disposition. No dispatch, merge, tag, registry write, secret change, paid resource or production action was performed.
rmcdaniel commentedon Nov 4, 2026
The General-prioritized legacy provenance-inspector correction is now isolated in draft PR #1027 at
50a0f869cab073e241d5047641235e021dcf2ef7. Original-main failure and corrected provenance-only pass use exact published index651253bd…; 69 identity/result-gate tests pass and the legacy PHP package record is unchanged. Full evidence is recorded on the PR. The original failed packet is preserved. Security’s PHP-specific Compose topology finding remains an explicit next source dependency before useful full native failover qualification. No rebuild/tag/registry change, merge or dispatch. #1026 development remains paused for this acceptance gap; #1023/#1024/#1025 and the GitHub Release remain held under General.rmcdaniel commentedon Nov 4, 2026
Inspector draft #1027 is source-qualified at exact
0bd123d22328d05cc3d4d9a127a637fa0baec719: owning final packet. Fresh checks are terminal: 57 success, 0 failure/pending and one intentional skip. Hosted logs confirm 25 baseline pip tests and 88 identity/result-gate tests. Security final source-only PASS is durable and read back. General retains merge.The requested native process-recovery proposal is delivered and accepted by Security as design scope. This is no topology implementation/experiment authority or native HA acceptance. Frozen 3.1.0 Release/full failover and existing downstream/Cloud holds remain. Original failed packet and published F/index are unchanged. All local Server allocations are released; the next product-scope/merge direction belongs to General.
rmcdaniel commentedon Nov 4, 2026
Server open-item pass, 2026-11-04.
Owner: Server for the read-only release packet and truthful native contract, General for release/product-scope decisions, Security for independent acceptance. I rechecked the latest owning records: #1027 inspector source is merged/accepted, but there is no corrected full native failover acceptance receipt. The original failure 41825982146 and its exact artifact remain unchanged.
The accepted process-recovery proposal and Security design review distinguish complete Runtime restart/schedule continuity from HA. General must choose the smallest supported future native contract/capability and explicit remaining cells before any implementation or runtime admission. A new source train does not alter F/tag/index651253bd. GitHub Release, full recovery, chart/downstream and Cloud gates stay held. Next action is that concrete contract/release disposition, not a release dispatch.
rmcdaniel commentedon Nov 9, 2026
Chart follow-up done for the current line rather than 3.1.0: chart 1.1.0 with appVersion 3.3.2 is published (#1117, run 42644498343, OCI
sha256:fd670cad…, packagesha256:a72dc4fd…), and the docs now pair Server 3.3.2 with chart 1.1.0 and include the schema 8 → 11 upgrade guidance (durable-workflow.github.io#491).rmcdaniel commentedon Nov 11, 2026
Closing: native 3.1.0 is tagged and published, and superseded by 3.3.2 and 3.4.0.