Skip to content

Release native Server 3.1.0 #1009

Closed
Closed

Description

@rmcdaniel

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

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.

  1. Release PR release/3.1.0-compose-default: docker-compose.published.yml defaults to durableworkflow/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.

  2. Tag: one annotated tag 3.1.0 at F, message "Durable Workflow Server 3.1.0". Stop: General's go, then a readback of the tag object → F.

  3. Image: dispatch native-release.yml from refs/tags/3.1.0 with release_commit = F. Stop: General's go. The run:

    • builds amd64 and arm64;
    • publishes one index to durableworkflow/server and ghcr.io/durable-workflow/server;
    • attests the index's build provenance in both registries;
    • as a final release, moves 3.1 (new), 3 and latest to that index.

    Readback: the index digest in both registries, the per-architecture digests, the release labels, both attestations and the three rolling tags.

  4. GitHub Release: native-github-release.yml verifies the published index and its provenance, then creates the Release. Readback: the Release and its "latest" state.

  5. Post-publication checks: the parity and acceptance runs in section 3. Stop: readback.

  6. Chart: chart 1.1.0 (a minor, since the app's minor changes) with appVersion 3.1.0. It updates source-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, then helm-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-directions and 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:info and doctor report no compatibility warning, and the raw worker commands that Native worker poll responses omit the protocol_version body field #1001 fixed (workflow-task:poll leased and empty, activity poll) succeed;
    • the cluster-info client_compatibility and supported_sdk_versions equal 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 with server_image empty: 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

  1. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    General decisions on the 3.1.0 plan (interim review, Security unavailable). The plan is accepted with these decisions:

    1. Scope: Child start turn: a fresh parent turn when a child start commits (#966) #978, Serve client_compatibility and supported_sdk_versions from native (#1005) #1007 and Echo the worker protocol version in every worker-plane body (#1001) #1003 (runtime), Retire the PHP release workflow's tag trigger (#1002) #1004 (CI) and Chart 1.0.3: default to native Server 3.0.5 #1000 (chart), plus Close the worker-envelope follow-ups from the #1003 review #1008 once it clears its own review. Native: storage admission (disk-pressure drain and fence) for 3.1 #951 moves to 3.2.0; please relabel it.
    2. SBOM: ship 3.1.0 with provenance only, say so explicitly in the release notes, and file an SBOM-generation issue for 3.2.0. It doesn't block 3.1.0.
    3. Release candidate: none.
    4. Stops still requiring a go from General:
      • (a) the Compose-default release PR, at frozen SHA F, after the at-F checks;
      • (b) the 3.1.0 tag;
      • (c) native-release dispatch;
      • (d) the chart 1.1.0 publish.
        Report the readback after each stop.
    5. Installed-SDK spot check after publish: include sdk-php 3.9.0 if it is out by then, which it should be within the hour. Otherwise use 3.8.3.

    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.

  2. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    Scope and notes update, from General's decisions in lobby 7715, 7721 and 7825.

    In 3.1.0

    Known limitations for the 3.1.0 notes (UPGRADING 1.1.0)

    • Typed double search attributes on published PHP: PHP Server 2.11.8 renders them at PHP's 14-digit precision in describe and the visibility list (1.4820142857142857 → 1.4820142857143). That's a known limitation of the final PHP Server, and it won't be fixed. Native 3.1.0 keeps every digit.
    • MySQL json columns 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.
    • No SBOM: images carry build provenance only. SBOM work is in Publish and verify an SBOM for native Server images (3.2.0) #1012, for 3.2.0.

    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.

  3. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    The pre-tag image evidence at frozen F = 5d7fd2ba533551de78444ecd5f9987f842c5f014 is now recorded on #1019:

    • Original run: native and embedded each passed 98/98 fixtures, service-calls passed, and both amd64 Compose profiles passed. Published PHP's schedule-catalog record exhausted its five SQLite contention retries, so the original run failed.
    • Fresh confirmation using #1022's runner: all 99 distinct fixtures pass across all three targets and comparisons. PHP schedule-catalog completed all 72 requests on attempt 1. Source image F is unchanged. Runner R and final PR head identities are explicit in the evidence.
    • Isolate the PHP schedule catalog record from SQLite maintenance #1022 fixes the runner defect SQLite corpus: frozen PHP schedule backfill exhausts retries under maintenance contention #1021 with the existing PHP-only maintenance window; it preserves all fixture assertions and coverage. It is at fca7940c5f4530d198c48bdf9e68c8daaa666162, with 27 focused Linux tests and local policy checks passing. Full CI is still finishing with no failures.
    • Cleanup is complete for the temporary image, run clones, containers, networks and Compose volumes. A small sanitized diagnostic bundle is retained through 2026-11-05 08:00 UTC for Security review.

    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.0 is still absent. Publication, final-digest acceptance, chart 1.1.0 and downstream follow-through remain pending.

  4. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    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.

  5. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    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.

  6. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    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 index 651253bd…; 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.

  7. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    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.

  8. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    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.

  9. rmcdaniel commented on Nov 9, 2026

    @rmcdaniel
    MemberAuthor

    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…, package sha256: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).

  10. rmcdaniel commented on Nov 11, 2026

    @rmcdaniel
    MemberAuthor

    Closing: native 3.1.0 is tagged and published, and superseded by 3.3.2 and 3.4.0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions