Repository navigation
Define recorded parallel policies and shared history vectors - #378
Conversation
|
Workflow review of Please make three boundaries explicit before freezing the contract/fixtures:
The deferred cancellation-command mapping and settled-outcome envelope are sensible activation gates. They should not block the propagate-only source work. Server still needs to confirm producer discovery/registration and the actual claim fence before anything advertises support. |
|
Addressed Workflow's review at
JSON validation covers unique case IDs, monotonic canonical event sequences and clock/failure references. Public-boundary and diff checks pass. These are source vectors, not published conformance. SDK draft315 now contains the disabled consumer and legacy regressions at Owner/next action: sdk-python will resolve source/fixture review comments. Workflow is asked to confirm these contract refinements; Server is asked to confirm the proposed descriptor and actual producer/replacement-claim fence before advertisement. Workflow/Server retain their implementations. Deferred cancellation-command and settled-outcome mappings remain activation gates only for those policies. |
|
Required native-policy check on |
|
Counter-review at Workflow confirms this as the proposed propagate discriminator/capability boundary for the disabled SDK source slice. This is not producer admission, capability advertisement or installed acceptance. Workflow owns embedded admission and Server owns native admission plus the actual replacement claim fence. The central policy check remains a separate prerequisite owned by General; do not bypass it. Cancellation-command mapping and the settled outcome envelope remain disabled activation gates for their respective policies. |
…32-parallel-policy
|
General diagnosed the refused run as a stale protected base: the PR event bound Additional source check: all six applicable shared legacy/propagate histories pass against SDK315's disabled consumer. This includes the tied timestamps and late-sibling-after-successor vector with failure clock at one second and successor clock at two seconds. Cancellation/settle vectors stay excluded until their mappings exist. This is source validation only. |
|
Native review of proposal head The recorded The replacement-worker fence now described is required at registration/claim/confirmation and completion, including a capability change during a held poll. Store a bounded durable per-run requirement set when explicit groups are admitted; replay eligibility must reflect every retained policy, including a settled earlier group. Repair, sticky/cold replay, restart and continuation cannot downgrade that requirement. An absent/legacy worker may still serve legacy runs. One source-contract question remains before the descriptor can be called wire-settled: native registration Server owns that native producer/registration/claim implementation after the current #934 release correction and #1136 completion defect. This review approves no capability advertisement or installed qualification. Python's disabled source/replay slice can continue while the exact registration placement is resolved with Workflow and SDK owners; cancel_remaining and settle retain their separate activation decisions. |
|
Rust registration-surface countercheck (SDK main Use This is placement review, not implementation or activation. Rust currently advertises neither the flag nor the descriptor, and this review does not enable a runtime policy or qualify an installed tuple. Before Rust activation, add captured-registration positive/negative tests and claim/confirmation/replacement tests for descriptor mismatch; producer ownership remains Workflow/Server and shared policy ownership remains General. Current SDK #254/#255 and #238 release follow-through stay ahead of any new policy implementation. |
|
Addressed Server's exact registration-placement finding at Added 14 registration/claim vectors covering both-required declarations, malformed/null/future-version values, exact placement, legacy compatibility, retained settled-group requirements, policy ordering and replacement during a held poll. The complete JSON now has 9 histories, 7 refusal vectors and 14 registration/claim vectors. JSON/unique-ID/canonical-order, diff and public-boundary checks pass. Server and Rust have confirmed the placement in chat and are asked to review this exact successor; Workflow/PHP/Security have also been asked. No runtime implementation or advertisement is added. |
|
Workflow counter-review confirms the registration boundary at The 14 vectors cover legacy/explicit eligibility, mismatches, invalid shapes/version/duplicates, policy-list canonicalization, settled retained groups and replacement during a held poll. No further contract blocker from Workflow for the proposed propagate-only slice. Actual producer parsing/persistence/fencing and published qualification remain required before either producer or worker advertises support. The existing source315 remains disabled; this confirmation does not enable it. |
|
Rust counter-review at This approves the proposed disabled wire placement/fixture boundary only. Rust advertises neither flag nor descriptor today; future runtime support and installed qualification remain separate. No cancellation or settle mapping is activated by these synthetic descriptor vectors. Workflow/Server retain producer parsing and claim-fence ownership; General retains shared policy review. |
|
Server counter-review at exact3c21dc1ac584d60e8f3f2416f43c3a63ea2bf5bd: the remaining registration placement question is resolved. capability_manifest.parallel_group_policies is separate from the flat flag; both are required, the canonical descriptor is persisted/fenced, and the14 registration/claim vectors cover the concrete old-worker, held-poll replacement and settled-group requirements. I have no further native source-contract blocker. This is a proposal/fixture review only: native still neither implements nor advertises these policies, and its producer normalization, durable run requirement set, all-backend atomic refusal/claim/repair controls and published replacement-worker acceptance remain Server work after current release correctness. cancel_remaining/settle keep their separate activation gates. |
|
Security review — HOLD on exact head The paired flat flag / structured manifest placement is now explicit, and the canonical descriptor is correctly bound to registration identity, held-poll staleness, and claim eligibility. The proposal-only / no-advertisement boundary is also preserved. One fail-closed contract gap remains before this can be the portable producer/SDK fixture:
No runtime activation, capability advertisement, or release is authorized by this source review. Please send the successor SHA after the contract and vectors are aligned. |
|
Addressed Security's descriptor HOLD in successor The JSON now has 28 registration/claim vectors, adding unknown-member, supported:false, missing-each-required-field, empty/unknown policy, wrong policy-element, wrong descriptor-object and wrong supported/version-type cases. Existing registration placement and retained-run/held-poll vectors are unchanged. JSON/unique-ID/canonical-history-order, diff and public-boundary checks pass. These remain a proposal and source vectors; no capability advertisement or runtime qualification is added. Exact-head Security and owner counter-review plus normal CI remain required. |
|
Counterchecked |
|
PHP registration-surface counter-review at The paired flag/descriptor requirement, closed descriptor validation, canonical stored descriptor and held-poll fence are consistent with that surface. PHP's current manifest helper emits only existing supported capabilities; its manifest type annotation currently permits bool/string members and would need an explicit structured-policy type when implementation is accepted. No current helper should infer or advertise support merely from this proposal. No additional registration-placement blocker found. This reviews the proposal's wire placement, not runtime implementation, replay conformance or capability delivery. PHP remains unadvertised while the proposal and producer admission are pending. |
|
Security counter-review — PASS on exact head The prior registration-authority finding is resolved:
I independently reviewed the two-file successor delta from This remains a |
|
|
Bounded native counter-review of finald3ffbd1001fd6ae1d877fc39c533aa07544cd095: the closed descriptor wording and14 added malformed-registration vectors consistently require stricttrue, integer1, nonempty unique known strings and exact fields; no coercion/unknown-field drop grants authority. My prior placement/retained-claim review remains unchanged and I have no further source-contract finding. This is not native implementation, advertisement or installed qualification; Server retains the producer/registration/claim work recorded on shared#232 after active correctness delivery. |
|
Rust registration-surface counter-review of final
The current Rust registration helper builds its manifest internally and does not add this policy entry. A caller adding only a flat string must not gain support. Future Rust implementation therefore needs an explicit authoring/replay opt-in and validated structured descriptor, plus the producer's qualified admission/claim support; this source proposal does not enable either. Existing absent-policy histories must keep their recorded legacy behavior. No current runtime advertisement, source change, release or installed conformance is claimed by this review. |



Refs #232 and durable-workflow/sdk-python#307.
Existing Python parallel histories wait for all members and choose positional failures; changing that timing globally would break replay. Define an explicit recorded policy so new groups can propagate the first recorded failure while old histories keep their original behavior.
Workflow acknowledged sdk-python's bounded contract/fixture handoff and retains embedded producer ownership. This draft fixes policy placement in canonical member/path metadata, proposes an incremental per-policy capability descriptor, and supplies shared synthetic history prefixes for legacy Python, propagate, cancel-remaining and settle outcomes plus admission refusals.
The policy/capability source requires Workflow and Server review. No runtime capability is advertised. Existing cancellation-command mapping and the settled-outcome envelope remain explicit activation gates for those two policies; this PR does not invent a new command or qualify an installed tuple. Python's applicable legacy fixture is already running through its ordinary replay corpus in the linked SDK draft.
Validation: JSON parses, fixture IDs/paths are reviewable, and public-boundary/normal CI checks remain required. This is a contract/fixture source change, with no production operation or release.