@@ -14,92 +14,60 @@ qualify a later tree.
1414
1515## Current state
1616
17- Updated October 24, 2026.
18-
19- - ** Merged October 24.** Train
20- [ #729 ] ( https://github.com/durable-workflow/server/pull/729 ) (merge
21- ` 61219609b ` ):
22- - MySQL statement closes are sent with the next command
23- ([ #717 ] ( https://github.com/durable-workflow/server/pull/717 ) ), ending the
24- MySQL-family stalls of [ #714 ] ( https://github.com/durable-workflow/server/issues/714 ) ;
25- - policy maps that are not JSON objects are refused, like PHP #705 , and a
26- namespace quota map that is not UTF-8 is refused under either name
27- ([ #719 ] ( https://github.com/durable-workflow/server/pull/719 ) );
28- - worker history shows consumed signal sequences, hydrating only each page's
29- own signals, plus full task snapshots
30- ([ #710 ] ( https://github.com/durable-workflow/server/pull/710 ) );
31- - a newer push cancels a superseded Shared Server fixtures run
32- ([ #724 ] ( https://github.com/durable-workflow/server/pull/724 ) ).
33- - ** Merged October 20-23.** These are summarized in the checkpoint history:
34- - backup-first takeover on every database;
35- - multi-node kill and restart;
36- - ownership guards, search attributes, namespace update, history export,
37- retention and activity timeouts;
38- - the October 21-23 trains;
39- - the move to the published 2.11.1 reference;
40- - the GHSA-6q48 -6c7w-9gw2 fixes.
41-
42- Each train's PR holds its evidence.
43- - ** In review or qualifying, in merge order.**
44- 1 . CI speed and the merge queue:
45- - [ #741 ] ( https://github.com/durable-workflow/server/pull/741 ) runs the
46- SDK direction profiles in parallel lanes, about 14 minutes off every
47- database job, and fixes a timestamp-comparison test flake;
48- - [ #742 ] ( https://github.com/durable-workflow/server/pull/742 ) adds the
49- merge-queue prerequisites (` merge_group ` triggers, one fixtures
50- result, and fixture cells skipped when a change cannot affect them).
51- 2 . This train: operator metrics read across PHP's redispatch steps
52- ([ #708 ] ( https://github.com/durable-workflow/server/pull/708 ) ),
53- query-authority clients that wait for the acknowledgement
54- ([ #720 ] ( https://github.com/durable-workflow/server/pull/720 ) ), and the
55- machine-checked route list below.
56- 3 . Condition waits without a key, task snapshots, the SQLite patch cohort and
57- message streams (#713 , #718 , #722 , #709 ).
58- 4 . Update validation with PHP's poll request ID contract
59- ([ #712 ] ( https://github.com/durable-workflow/server/pull/712 ) ), then the
60- held-poll registration fence
61- ([ #739 ] ( https://github.com/durable-workflow/server/pull/739 ) , #734 ) and
62- worker sessions
63- ([ #740 ] ( https://github.com/durable-workflow/server/pull/740 ) , #736 ),
64- stacked in that order.
65- 5 . Activity cancellation acknowledgement, and pip, Composer and Cargo trust
66- in CI ([ #673 ] ( https://github.com/durable-workflow/server/pull/673 ) ).
17+ Updated October 27, 2026.
18+
19+ - ** Merged October 26-27, through the merge queue.**
20+ - [ #790 ] ( https://github.com/durable-workflow/server/pull/790 ) : prepared
21+ local-activity refusals.
22+ - [ #793 ] ( https://github.com/durable-workflow/server/pull/793 ) : Nexus catalog
23+ administration, service-call execute, show and cancel, shared admission
24+ limits, and catalog call reads.
25+ - [ #795 ] ( https://github.com/durable-workflow/server/pull/795 ) : takeover of
26+ published 2.11.1 databases (fresh and upgraded from 2.9.x), keeping search
27+ attribute definitions, worker sessions and service calls, plus the repair
28+ pass's service-call deadline sweep.
29+ - [ #797 ] ( https://github.com/durable-workflow/server/pull/797 ) : native's own
30+ maintenance repair loop (opt-in, ` DW_RUST_MAINTENANCE_LOOP=1 ` ); takeover
31+ keeps runtime credentials and update validation tasks; takeover of
32+ published 2.11.3, fresh and upgraded from 2.9.x.
33+ - ** In the queue or next, in order.**
34+ 1 . [ #799 ] ( https://github.com/durable-workflow/server/pull/799 ) : the fixture
35+ adapters' Cargo cache, saved only by pushes to main.
36+ 2 . Message-stream retention (PHP's ` MessageStreamRetentionCleanup ` ), and
37+ takeover that keeps message and workflow streams.
38+ 3 . The native release-candidate image (` Dockerfile.native ` ), its release
39+ workflow and the takeover runbook's image commands.
40+ 4 . The parity reference moves to published 2.11.3. Native already matches it
41+ on 62 of 65 fixtures. The move waits on two published 2.11.3 defects
42+ General owns: the storage diagnostic (#789 ) and cross-caller idempotent
43+ replay (Workflow #931 ).
44+ - ** Still refused at takeover:** workflow-to-workflow messages
45+ (` workflow_messages ` , written only by embedded PHP workflows) and external
46+ payload references. PHP keeps references in about 30 table and column
47+ locations in their URI form, so taking them over is its own project; the
48+ recommendation is that the release candidate keeps refusing them.
6749- ** Shared Server fixtures.** Native, embedded and published PHP 2.11.1 are
6850 compared on SQLite, MySQL 8.0, MariaDB 10.11 and PostgreSQL 17. Where the
6951 published reference itself misbehaves, an explicit boundary separates it
70- from native, and the PHP owner has an issue for each case:
71- - ` operator-metrics ` across PHP's redispatch window (#708 );
72- - the published-SDK patch cohort's SQLite poll refusal
73- ([ #721 ] ( https://github.com/durable-workflow/server/issues/721 ) , #722 );
74- - update validation under SQLite write locks
75- ([ #726 ] ( https://github.com/durable-workflow/server/issues/726 ) , fixed in
76- PHP by #730 );
77- - ` worker-sdk-persistent-pressure ` 's shutdown window
78- ([ #728 ] ( https://github.com/durable-workflow/server/issues/728 ) );
79- - a retried activity's cooperative cancellation
80- ([ Workflow #923 ] ( https://github.com/durable-workflow/workflow/issues/923 ) );
81- - a reacquired worker session keeping its old failure reason
82- ([ #737 ] ( https://github.com/durable-workflow/server/issues/737 ) ).
52+ from native, and the PHP owner has an issue for each case. Recent ones:
53+ - #796 , ` service-calls ` under full-corpus SQLite load;
54+ - #794 , workflow-bound Nexus handlers.
8355
8456 No expectation is edited to make native pass.
8557- ** Parity surface.** Native answers 174 of the 175 API route methods in
86- published 2.11.1's route table, with message streams, durable workflow
87- stream writes, update validation, activity cancellation acknowledgement,
88- worker sessions, workflow-task cancellation scopes, service catalog
89- administration, Nexus service-call execution, show and cancel for the
90- handler kinds that stay accepted, caller-indexed Nexus operation reads,
91- bridge adapter webhooks, and embedded v2 and Waterline v1 workflow import.
92- Eight of those are the prepared local-activity routes, which it answers
93- with PHP's refusal for a bridge without the prepared role. An execution
94- test sends each one through the native router, and the ones still
95- answering ` 501 rust_capability_not_implemented ` must match
58+ published 2.11.1's route table. Eight of those are the prepared
59+ local-activity routes, which it answers with PHP's refusal for a bridge
60+ without the prepared role. Nexus workflow-bound handler kinds answer 501
61+ until #794 settles their contract. An execution test sends each route
62+ through the native router, and the ones still answering
63+ ` 501 rust_capability_not_implemented ` must match
9664 [ ` unserved-php-routes.v2.11.1.txt ` ] ( ../rust/tests/fixtures/unserved-php-routes.v2.11.1.txt ) .
97- Unlike published PHP, native's embedded v2 import refuses a bundle whose
98- rows reference rows outside it, links only runs of one namespace, and reads
99- the signing key only from the request body
100- ( [ # 765 ] ( https://github.com/durable- workflow/server/issues/765 ) ).
101- - ** Next action. ** Land the items above in order, keep porting the unserved
102- routes fixture first, and package the native binary into the server image.
65+ - ** Remaining for the release candidate: **
66+ - the 2.11.3 reference move;
67+ - the scope question with the operator: prepared local activities,
68+ workflow-bound Nexus handlers and external payload takeover;
69+ - publishing the native image (General runs the release);
70+ - differential and performance qualification of the published image.
10371
10472## API surface still missing
10573
@@ -412,14 +380,14 @@ contract fixture before its correction.
412380 workflow task guard does not check registration freshness yet, and the
413381 local activity and cancellation scope checkpoints still use the older fence.
414382 Add a fixture for each before changing them.
415- - ** Retention of runs with external payloads or message streams .**
416- Published PHP deletes a pruned run's external payload objects and releases
417- its message stream items. It also compacts its instance's consumed inbound
418- stream items, and removes the instance's streams with its last run. Native
419- does not clean any of these up yet. It skips such a run, including any run
420- whose instance has inbound streams, with
421- ` external_payload_cleanup_unavailable ` or
422- ` message_stream_cleanup_unavailable ` , and keeps its details .
383+ - ** Retention of runs with external payloads.** Published PHP deletes a
384+ pruned run's external payload objects. Native does not delete them yet: it
385+ skips such a run with ` external_payload_cleanup_unavailable ` and keeps its
386+ details. A run whose instance has inbound message streams is pruned as PHP's
387+ ` MessageStreamRetentionCleanup ` prunes it (October 27): the messages it
388+ consumed lose their payloads once a retained later run's cursor checkpoint
389+ covers them, and the instance's last retained run, once terminal, takes the
390+ instance's streams with it .
423391- ** Deeply nested JSON bodies.** Published PHP decodes JSON up to 512 levels
424392 deep. Native checks every body as PHP does before any route, but its
425393 handlers parse with serde_json's 128-level limit. A body nested 129 to 512
0 commit comments