Repository navigation
feat: strengthen canonical cancellation context and propagation - #603
Conversation
|
The required closure scenario is now part of docs/architecture/cooperative-cancellation-model.md: PHP parent, Python child, Rust remote activity and PHP local activity, one root identity and original 30 second deadline, real callback stops without application heartbeats, stale-attempt rejection, workflow-worker SIGKILL, replay and resumed cleanup, stable duplicate requests, all runs Cancelled before the deadline, and one cascade inspection view. This remains an acceptance gate to implement and qualify using published artifacts. Workflow 2.3.3 deadline recovery is merged into this branch as a prerequisite. Shared issue 136 remains open. |
|
Exact source head 50e67c9 passed its PR quality, unit, MySQL feature, replay/counterfactual corpus and build gates. Local focused tests passed 140 cases with 1,726 assertions, and full PHPStan passed without errors. The immutable request context and deterministic original-budget replay foundation are implemented in this draft. Genuine child propagation, operation policies, portable exposure and the required published mixed-language cascade remain open. This is not a shipped model. |
|
Candidate context/propagation foundation is pushed at
Local affected regression checks passed 131 tests / 1,833 assertions, with a fresh SQLite file and zero failures/errors/warnings. ECS and full The PR remains draft. This primitive is not yet wired to automatic delivery/parent-close propagation or per-operation policies. Simultaneous-request database qualification, continuation semantics, portable SDK context, and the cascade API/UI view remain required before publication. The full published mixed-language 30-second SIGKILL/cleanup recovery gate still controls shared issue 136 closure. |
|
Exact-head CI at aa78415 passed: MySQL execution, unit contracts, static/style checks, replay/counterfactual corpus and repository/public-boundary checks. https://github.com/durable-workflow/workflow/actions/runs/36924880935. The PR stays draft for the automatic propagation/policy/SDK/inspection work and required published mixed-language recovery gate. |
|
Implemented candidate child cancellation policies at
Source verification completed:
The portable bridge now reports |
|
Child policy source verification is green at
The temporary Redis dependency and its isolated network were removed after qualification. First-party SDK handling of pending child acknowledgement is now being implemented. This remains candidate source evidence. Full published mixed-language cascade, stronger-model qualification and shared issue 136 closure are still outstanding. |
Parent claims park while child cleanup finishesHolding a parent's workflow claim while awaiting child cancellation could occupy Local source checks:
Native source is |
Next: durable local callback identity and physical stopThe existing remote stop receipt deliberately refuses local activities because Use the existing activity execution/attempt model for the stronger optional The local stop receipt must bind to that original attempt and accepted Expose this through an optional backend interface and explicit source capability. Deterministic budget helpers also need an explicit recorded clock boundary. Next source work is the shared Native preparation/receipt primitive and its |
Local callback stop receipt bound to the original workflow claimSource head: Added The original owner can report after another worker takes over the workflow task. A replacement claim cannot impersonate the original claim. The receipt preserves the original task snapshot, root identity and deadline. It neither changes nor renews the replacement task, activity attempt or cleanup authority. Duplicate reports return the first event. Late reports remain explicitly late. Missing, malformed or post-cancellation preparation is refused. The remote receipt path still refuses local callbacks. The timeline now describes a local receipt's original workflow claim correctly. It does not describe that workflow claim as a cancelled ordinary activity task. Local qualification: PHP 8.3.35, isolated SQLite file and Redis, container UID/GID 1000:1000. The affected portable cancellation, child policy, ordinary local activity, timeline and payload-contract suites pass 144 tests / 865 assertions, zero failures, errors or skips, in 69.432 seconds. ECS and affected PHPStan pass. JUnit SHA256:
The new cases check the saved claim from inside the actual embedded executor's mock callback before requesting cancellation. Its returned result cannot publish. These tests qualify backend authority and evidence. They do not prove that an SDK callback process physically stopped. Commands: Exact-head CI passes quality, unit contracts, regression corpus and MySQL features. The explicit local receipt step passes 14 cases / 190 assertions, with zero skips, in 8.521 seconds. The bounded changed-feature suite passes 77 / 800, plus MySQL smoke 4 / 56. Unit contracts pass 196 / 1,256, and the timeline step passes 71 / 158. Retained MySQL raw JUnit and selection evidence was downloaded and verified. Local-receipt JUnit SHA256 is Next: portable local preparation must acknowledge durable identity before application execution, preserve the authored command prefix and reuse prepared rows at completion. Then expose the optional Server/backend route and qualify actual local supervisors. The required published PHP parent, Python child, Rust remote activity and PHP local activity cascade, actual SIGKILL during cleanup and convergence before the original 30-second deadline remain outstanding. No publication or closure is claimed. Raw local affected-suite JUnit<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="/evidence/affected.xml" tests="144" assertions="865" errors="0" failures="0" skipped="0" time="69.387166">
<testsuite name="unit" tests="144" assertions="865" errors="0" failures="0" skipped="0" time="69.387166">
<testsuite name="Tests\Feature\V2\V2PortableCancellationDeliveryTest" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" tests="60" assertions="553" errors="0" failures="0" skipped="0" time="50.987076">
<testcase name="testOptionalCooperativeBridgeUsesTheExistingBinding" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="56" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="1" time="12.600108"/>
<testcase name="testPortableChildWaitReleasesItsClaimUntilCanonicalChildCancellationCompletes" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="61" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="22" time="1.395666"/>
<testcase name="testPortableWaitDoesNotTreatATerminalProjectionAsCanonicalAcknowledgement" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="118" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="6" time="0.948876"/>
<testcase name="testPortableChildPolicyRejectsInvalidValuesBeforeCreatingAnyChild" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="147" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="16" time="0.418551"/>
<testcase name="testExistingCustomBridgeDoesNotAcquireCooperativeCapability" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="164" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="2" time="0.113363"/>
<testcase name="testDeliveryWithoutAScheduledCallReservesItsPositionAndPreservesCleanupAuthority" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="173" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="12" time="0.357011"/>
<testcase name="testDeliveryRetryAfterCleanupSubmissionDoesNotCancelCleanupOrChangeIdentity" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="199" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="8" time="0.676056"/>
<testcase name="testParallelDeliveryBeforeSchedulingReservesTheEntireAuthoredRange" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="225" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="5" time="0.554619"/>
<testcase name="testDeliveryRevokesAnOpenActivityAttemptAndRefusesLateCompletion" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="243" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="10" time="0.749914"/>
<testcase name="testDeliveryCancelsTheOriginalTimerAndItsQueuedTask" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="273" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="6" time="0.739202"/>
<testsuite name="Tests\Feature\V2\V2PortableCancellationDeliveryTest::testWorkflowLeaseRecoveryPreservesAnOlderRunningActivity" tests="2" assertions="33" errors="0" failures="0" skipped="0" time="1.786153">
<testcase name="testWorkflowLeaseRecoveryPreservesAnOlderRunningActivity with data set "expired workflow lease"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="294" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="19" time="0.951201"/>
<testcase name="testWorkflowLeaseRecoveryPreservesAnOlderRunningActivity with data set "fresh workflow lease"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="294" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="14" time="0.834953"/>
</testsuite>
<testcase name="testRemoteCallbackStopReceiptIsSeparateFromFencingAndKeepsTheOriginalBudget" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="378" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="28" time="0.956495"/>
<testsuite name="Tests\Feature\V2\V2PortableCancellationDeliveryTest::testRemoteStopReceiptRejectsAnotherOwnerAttemptOrRequest" tests="3" assertions="24" errors="0" failures="0" skipped="0" time="2.310876">
<testcase name="testRemoteStopReceiptRejectsAnotherOwnerAttemptOrRequest with data set "attempt"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="433" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="8" time="0.789709"/>
<testcase name="testRemoteStopReceiptRejectsAnotherOwnerAttemptOrRequest with data set "owner"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="433" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="8" time="0.760586"/>
<testcase name="testRemoteStopReceiptRejectsAnotherOwnerAttemptOrRequest with data set "request"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="433" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="8" time="0.760580"/>
</testsuite>
<testcase name="testMutableCancelledRowsCannotSubstituteForCanonicalCancellationHistory" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="453" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="6" time="0.700265"/>
<testsuite name="Tests\Feature\V2\V2PortableCancellationDeliveryTest::testLegacyOrMalformedCancellationSnapshotCannotAuthorizeAWorkerStopReceipt" tests="2" assertions="14" errors="0" failures="0" skipped="0" time="1.595382">
<testcase name="testLegacyOrMalformedCancellationSnapshotCannotAuthorizeAWorkerStopReceipt with data set "attempt snapshot without identity"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="478" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="7" time="0.809038"/>
<testcase name="testLegacyOrMalformedCancellationSnapshotCannotAuthorizeAWorkerStopReceipt with data set "malformed attempt snapshot"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="478" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="7" time="0.786344"/>
</testsuite>
<testcase name="testLateStopReportRemainsLateAndCannotGrantAnotherCleanupBudget" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="507" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="11" time="0.771423"/>
<testcase name="testRemoteStopReceiptCannotAuthorizeALocalActivityCallback" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="532" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="7" time="0.764814"/>
<testcase name="testLocalStopReceiptKeepsTheOriginalWorkflowClaimAndDoesNotRenewCleanupAuthority" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="550" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="23" time="0.751122"/>
<testcase name="testLocalOriginalOwnerCanReportAfterWorkflowTakeoverButTheReplacementCannotImpersonateIt" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="585" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="27" time="0.819992"/>
<testsuite name="Tests\Feature\V2\V2PortableCancellationDeliveryTest::testLocalStopReceiptRequiresTheClaimSavedBeforeItsCallback" tests="8" assertions="88" errors="0" failures="0" skipped="0" time="5.196257">
<testcase name="testLocalStopReceiptRequiresTheClaimSavedBeforeItsCallback with data set "legacy start without claim"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="651" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="11" time="0.657769"/>
<testcase name="testLocalStopReceiptRequiresTheClaimSavedBeforeItsCallback with data set "malformed claim"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="651" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="11" time="0.651474"/>
<testcase name="testLocalStopReceiptRequiresTheClaimSavedBeforeItsCallback with data set "another task"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="651" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="11" time="0.655920"/>
<testcase name="testLocalStopReceiptRequiresTheClaimSavedBeforeItsCallback with data set "ordinary activity task"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="651" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="11" time="0.658021"/>
<testcase name="testLocalStopReceiptRequiresTheClaimSavedBeforeItsCallback with data set "unclaimed task"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="651" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="11" time="0.646093"/>
<testcase name="testLocalStopReceiptRequiresTheClaimSavedBeforeItsCallback with data set "another original owner"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="651" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="11" time="0.650300"/>
<testcase name="testLocalStopReceiptRequiresTheClaimSavedBeforeItsCallback with data set "missing original attempt"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="651" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="11" time="0.646218"/>
<testcase name="testLocalStopReceiptRequiresTheClaimSavedBeforeItsCallback with data set "nonpositive original attempt"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="651" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="11" time="0.630463"/>
</testsuite>
<testcase name="testLocalStopReceiptCannotBorrowARemoteAttemptOrAnotherCancellationRequest" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="688" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="17" time="1.083465"/>
<testsuite name="Tests\Feature\V2\V2PortableCancellationDeliveryTest::testLocalStopReceiptRejectsAnAbsentOrPostCancellationStart" tests="2" assertions="22" errors="0" failures="0" skipped="0" time="1.283522">
<testcase name="testLocalStopReceiptRejectsAnAbsentOrPostCancellationStart with data set "callback without durable preparation"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="712" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="11" time="0.657499"/>
<testcase name="testLocalStopReceiptRejectsAnAbsentOrPostCancellationStart with data set "post hoc callback start"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="712" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="11" time="0.626023"/>
</testsuite>
<testcase name="testLateLocalReceiptDoesNotRenewTheOriginalDeadlineOrReplacementLease" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="741" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="13" time="0.682531"/>
<testcase name="testARecordedCallCannotBeRelabelledAsADifferentOperation" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="770" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="6" time="0.602392"/>
<testsuite name="Tests\Feature\V2\V2PortableCancellationDeliveryTest::testOpenWaitsCanBeInterruptedWithoutRevokingCleanupAuthority" tests="4" assertions="30" errors="0" failures="0" skipped="0" time="3.001159">
<testcase name="testOpenWaitsCanBeInterruptedWithoutRevokingCleanupAuthority with data set "condition timeout unbounded"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="789" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="7" time="0.733894"/>
<testcase name="testOpenWaitsCanBeInterruptedWithoutRevokingCleanupAuthority with data set "signal timeout unbounded"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="789" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="7" time="0.752840"/>
<testcase name="testOpenWaitsCanBeInterruptedWithoutRevokingCleanupAuthority with data set "condition timeout 300"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="789" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="8" time="0.755899"/>
<testcase name="testOpenWaitsCanBeInterruptedWithoutRevokingCleanupAuthority with data set "signal timeout 300"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="789" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="8" time="0.758526"/>
</testsuite>
<testsuite name="Tests\Feature\V2\V2PortableCancellationDeliveryTest::testRecordedResultsBeforeTheRequestReplayNormally" tests="2" assertions="10" errors="0" failures="0" skipped="0" time="1.385638">
<testcase name="testRecordedResultsBeforeTheRequestReplayNormally with data set "result precedes request"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="830" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="5" time="0.679470"/>
<testcase name="testRecordedResultsBeforeTheRequestReplayNormally with data set "request precedes result"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="830" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="5" time="0.706168"/>
</testsuite>
<testsuite name="Tests\Feature\V2\V2PortableCancellationDeliveryTest::testInvalidDeliveryClaimsDoNotPartiallyApply" tests="9" assertions="45" errors="0" failures="0" skipped="0" time="3.511079">
<testcase name="testInvalidDeliveryClaimsDoNotPartiallyApply with data set "another request"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="869" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="5" time="0.457423"/>
<testcase name="testInvalidDeliveryClaimsDoNotPartiallyApply with data set "future call"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="869" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="5" time="0.379129"/>
<testcase name="testInvalidDeliveryClaimsDoNotPartiallyApply with data set "zero call"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="869" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="5" time="0.379671"/>
<testcase name="testInvalidDeliveryClaimsDoNotPartiallyApply with data set "unknown kind"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="869" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="5" time="0.374346"/>
<testcase name="testInvalidDeliveryClaimsDoNotPartiallyApply with data set "zero range"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="869" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="5" time="0.385176"/>
<testcase name="testInvalidDeliveryClaimsDoNotPartiallyApply with data set "scalar range"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="869" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="5" time="0.388402"/>
<testcase name="testInvalidDeliveryClaimsDoNotPartiallyApply with data set "overflowing range"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="869" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="5" time="0.377773"/>
<testcase name="testInvalidDeliveryClaimsDoNotPartiallyApply with data set "absent selection member"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="869" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="5" time="0.391712"/>
<testcase name="testInvalidDeliveryClaimsDoNotPartiallyApply with data set "selection metadata on scalar"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="869" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="5" time="0.377446"/>
</testsuite>
<testcase name="testDeliveryCannotUseAnExpiredWorkflowLease" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="905" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="5" time="0.403811"/>
<testcase name="testDeadlineExpiryClosesTheOriginalRequestWithoutDeliveringLate" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="920" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="6" time="0.460159"/>
<testsuite name="Tests\Feature\V2\V2PortableCancellationDeliveryTest::testCleanupEndsWithTheOriginalCancellationOutcome" tests="3" assertions="21" errors="0" failures="0" skipped="0" time="1.569867">
<testcase name="testCleanupEndsWithTheOriginalCancellationOutcome with data set "return"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="941" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="7" time="0.516898"/>
<testcase name="testCleanupEndsWithTheOriginalCancellationOutcome with data set "throw"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="941" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="7" time="0.533060"/>
<testcase name="testCleanupEndsWithTheOriginalCancellationOutcome with data set "continue"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="941" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="7" time="0.519909"/>
</testsuite>
<testcase name="testTerminationRevokesCleanupAndCannotBeReplacedByCancellation" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="974" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="8" time="0.535415"/>
<testcase name="testSelectionHandleDeliveryOnlyCancelsTheNamedOpenOperation" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="993" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="5" time="0.652635"/>
<testsuite name="Tests\Feature\V2\V2PortableCancellationDeliveryTest::testRecordedParallelRangeIsCancelledAsOneAuthoredCall" tests="2" assertions="16" errors="0" failures="0" skipped="0" time="1.609256">
<testcase name="testRecordedParallelRangeIsCancelledAsOneAuthoredCall with data set "parallel barrier"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="1016" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="8" time="0.798940"/>
<testcase name="testRecordedParallelRangeIsCancelledAsOneAuthoredCall with data set "selection member range"" file="/work/tests/Feature/V2/V2PortableCancellationDeliveryTest.php" line="1016" class="Tests\Feature\V2\V2PortableCancellationDeliveryTest" classname="Tests.Feature.V2.V2PortableCancellationDeliveryTest" assertions="8" time="0.810317"/>
</testsuite>
</testsuite>
<testsuite name="Tests\Feature\V2\V2ChildCancellationPolicyTest" file="/work/tests/Feature/V2/V2ChildCancellationPolicyTest.php" tests="8" assertions="118" errors="0" failures="0" skipped="0" time="16.337631">
<testcase name="testWaitDefersParentDeliveryUntilChildCleanupHasCanonicalTerminalHistory" file="/work/tests/Feature/V2/V2ChildCancellationPolicyTest.php" line="46" class="Tests\Feature\V2\V2ChildCancellationPolicyTest" classname="Tests.Feature.V2.V2ChildCancellationPolicyTest" assertions="37" time="2.394106"/>
<testcase name="testTryCancelRequestsCooperationButDoesNotWaitForChildCleanup" file="/work/tests/Feature/V2/V2ChildCancellationPolicyTest.php" line="107" class="Tests\Feature\V2\V2ChildCancellationPolicyTest" classname="Tests.Feature.V2.V2ChildCancellationPolicyTest" assertions="13" time="2.150710"/>
<testcase name="testAbandonLeavesChildUntouched" file="/work/tests/Feature/V2/V2ChildCancellationPolicyTest.php" line="128" class="Tests\Feature\V2\V2ChildCancellationPolicyTest" classname="Tests.Feature.V2.V2ChildCancellationPolicyTest" assertions="7" time="1.319716"/>
<testcase name="testMixedParallelWaitFencesActivityButStillWaitsForChildCleanup" file="/work/tests/Feature/V2/V2ChildCancellationPolicyTest.php" line="140" class="Tests\Feature\V2\V2ChildCancellationPolicyTest" classname="Tests.Feature.V2.V2ChildCancellationPolicyTest" assertions="14" time="2.513942"/>
<testcase name="testHistoricalMissingPolicyRemainsAbandonOnColdExecution" file="/work/tests/Feature/V2/V2ChildCancellationPolicyTest.php" line="158" class="Tests\Feature\V2\V2ChildCancellationPolicyTest" classname="Tests.Feature.V2.V2ChildCancellationPolicyTest" assertions="5" time="1.358904"/>
<testcase name="testSelectedChildHandleWaitsAtItsOriginalOperationRange" file="/work/tests/Feature/V2/V2ChildCancellationPolicyTest.php" line="176" class="Tests\Feature\V2\V2ChildCancellationPolicyTest" classname="Tests.Feature.V2.V2ChildCancellationPolicyTest" assertions="15" time="2.498814"/>
<testcase name="testIndependentChildRequestKeepsItsRootAndReportsPropagationConflict" file="/work/tests/Feature/V2/V2ChildCancellationPolicyTest.php" line="198" class="Tests\Feature\V2\V2ChildCancellationPolicyTest" classname="Tests.Feature.V2.V2ChildCancellationPolicyTest" assertions="17" time="2.400740"/>
<testcase name="testWaitingCannotExtendTheOriginalDeadlineWhenChildCleanupDoesNotFinish" file="/work/tests/Feature/V2/V2ChildCancellationPolicyTest.php" line="232" class="Tests\Feature\V2\V2ChildCancellationPolicyTest" classname="Tests.Feature.V2.V2ChildCancellationPolicyTest" assertions="10" time="1.700698"/>
</testsuite>
<testsuite name="Tests\Feature\V2\V2LocalActivityTest" file="/work/tests/Feature/V2/V2LocalActivityTest.php" tests="2" assertions="32" errors="0" failures="0" skipped="0" time="1.517829">
<testcase name="testLocalActivityExecutesInWorkflowTaskAndRecordsMarkedHistory" file="/work/tests/Feature/V2/V2LocalActivityTest.php" line="30" class="Tests\Feature\V2\V2LocalActivityTest" classname="Tests.Feature.V2.V2LocalActivityTest" assertions="27" time="0.878552"/>
<testcase name="testLocalActivityHeartbeatRenewsWorkflowTaskAndRecordsLocalMarker" file="/work/tests/Feature/V2/V2LocalActivityTest.php" line="108" class="Tests\Feature\V2\V2LocalActivityTest" classname="Tests.Feature.V2.V2LocalActivityTest" assertions="5" time="0.639278"/>
</testsuite>
<testsuite name="Tests\Unit\V2\CancellationHistoryTimelineTest" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" tests="71" assertions="158" errors="0" failures="0" skipped="0" time="0.543688">
<testsuite name="Tests\Unit\V2\CancellationHistoryTimelineTest::testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata" tests="68" assertions="136" errors="0" failures="0" skipped="0" time="0.520450">
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "StartAccepted"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007885"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "StartRejected"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007598"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "WorkflowStarted"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007748"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "WorkflowContinuedAsNew"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007867"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ChildWorkflowScheduled"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007299"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ChildCancellationRequested"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007384"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ChildCancellationResolved"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007085"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ChildRunStarted"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.008117"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ChildRunCompleted"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007281"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ChildRunFailed"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007103"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ChildRunCancelled"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007178"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ChildRunTerminated"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.008452"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ServiceCallStarted"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007399"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ServiceCallCompleted"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007145"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ServiceCallFailed"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007006"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ServiceCallCancelled"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007095"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ConditionWaitOpened"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007657"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ConditionWaitSatisfied"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007390"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ConditionWaitTimedOut"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007939"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "SignalWaitOpened"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007246"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "SignalReceived"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007602"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "SignalApplied"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007376"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "UpdateAccepted"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007017"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "UpdateRejected"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007071"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "UpdateApplied"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007914"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "UpdateCompleted"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.008304"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "RepairRequested"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007326"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "CancelRequested"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007184"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "CooperativeCancellationRequested"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007093"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "CooperativeCancellationDelivered"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007512"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "WorkflowCancelled"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007448"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "TerminateRequested"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007791"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "WorkflowTerminated"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007519"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ArchiveRequested"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007589"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "WorkflowArchived"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007458"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ActivityScheduled"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007254"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ActivityStarted"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007086"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ActivityHeartbeatRecorded"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007132"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ActivityRetryScheduled"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.008122"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ActivityCompleted"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.008157"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ActivityFailed"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007557"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ActivityCancelled"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007164"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ActivityCancellationAcknowledged"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007532"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ActivityTimedOut"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007386"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "FailureHandled"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007199"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "SideEffectRecorded"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007063"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "VersionMarkerRecorded"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007490"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "TimerScheduled"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.008281"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "TimerFired"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007368"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "TimerCancelled"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007130"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "SelectionResolved"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007101"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "SelectionOperationCancelled"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007446"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "SearchAttributesUpserted"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.016458"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "MemoUpserted"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.008718"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "WorkflowTimedOut"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.008207"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "WorkflowCompleted"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007857"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "WorkflowFailed"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007414"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ParentClosePolicyApplied"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007446"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ParentClosePolicyFailed"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007157"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ParentCloseCancellationRequested"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.008129"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "MessageCursorAdvanced"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.008225"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ScheduleCreated"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007712"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "SchedulePaused"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007294"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ScheduleResumed"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007504"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ScheduleUpdated"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007478"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ScheduleTriggered"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007095"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ScheduleDeleted"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.007118"/>
<testcase name="testEverySupportedHistoryEventCanBeInspectedWithSparseMetadata with data set "ScheduleTriggerSkipped"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="18" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="2" time="0.008093"/>
</testsuite>
<testsuite name="Tests\Unit\V2\CancellationHistoryTimelineTest::testStopReceiptExplainsTheOriginalAttemptAndBudgetWithoutGrantingAuthority" tests="2" assertions="18" errors="0" failures="0" skipped="0" time="0.015598">
<testcase name="testStopReceiptExplainsTheOriginalAttemptAndBudgetWithoutGrantingAuthority with data set "before original deadline"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="37" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="9" time="0.008215"/>
<testcase name="testStopReceiptExplainsTheOriginalAttemptAndBudgetWithoutGrantingAuthority with data set "after original deadline"" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="37" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="9" time="0.007383"/>
</testsuite>
<testcase name="testLocalStopReceiptDoesNotDescribeItsWorkflowClaimAsACancelledActivityTask" file="/work/tests/Unit/V2/CancellationHistoryTimelineTest.php" line="80" class="Tests\Unit\V2\CancellationHistoryTimelineTest" classname="Tests.Unit.V2.CancellationHistoryTimelineTest" assertions="4" time="0.007640"/>
</testsuite>
<testsuite name="Tests\Unit\V2\HistoryEventPayloadContractTest" file="/work/tests/Unit/V2/HistoryEventPayloadContractTest.php" tests="3" assertions="4" errors="0" failures="0" skipped="0" time="0.000942">
<testcase name="testEveryHistoryEventTypeHasAPayloadContractEntry" file="/work/tests/Unit/V2/HistoryEventPayloadContractTest.php" line="14" class="Tests\Unit\V2\HistoryEventPayloadContractTest" classname="Tests.Unit.V2.HistoryEventPayloadContractTest" assertions="1" time="0.000324"/>
<testcase name="testPayloadContractRejectsUnknownProducerKeys" file="/work/tests/Unit/V2/HistoryEventPayloadContractTest.php" line="28" class="Tests\Unit\V2\HistoryEventPayloadContractTest" classname="Tests.Unit.V2.HistoryEventPayloadContractTest" assertions="2" time="0.000309"/>
<testcase name="testSelectionResolutionAcceptsDurableWinnerMetadata" file="/work/tests/Unit/V2/HistoryEventPayloadContractTest.php" line="39" class="Tests\Unit\V2\HistoryEventPayloadContractTest" classname="Tests.Unit.V2.HistoryEventPayloadContractTest" assertions="1" time="0.000308"/>
</testsuite>
</testsuite>
</testsuite>
</testsuites> |
Portable local preparation kernel qualifiedSource Local history now identifies the original workflow claim for local activity events, including its leased status when the activity terminates. The canonical stop receipt remains bound to its saved original start snapshot. Verification: isolated PHP 8.3.35, SQLite/Redis affected suite 171 tests / 997 assertions, no failures/errors/skips. Affected PHPStan and ECS pass. Exact-head CI passes quality, regression corpus, MySQL and unit gates. Explicit preparation 18 / 114, original-claim receipts 14 / 190, changed features 95 / 914 plus smoke 4 / 56, unit contracts 196 / 1,256, timeline 80 / 176. Raw MySQL JUnit artifact, preparation XML SHA-256 Commands: This kernel is not connected to an endpoint or SDK callback path. Next: retained-claim prefix checkpoint and prepared outcome/retry/replay, followed by Server admission and physical local supervisors. Published protocol 1.19 remains unchanged. This PR remains draft and the shared published 30-second cascade remains required. |
|
The PostgreSQL fixture comparison correction is committed/pushed as c30428e. The first full gate at c8be089 completed with two failures in the new pending/expired request fixtures. They compared the saved model's timestamp strings against PostgreSQL's round trip, which removes the textual zero-fraction suffix. Downloaded shard JUnit independently verifies 567 / 5676, zero errors, those two failures and four existing skips. The actual request-before-preparation recovery case passed there. Both before snapshots now read the stored rows and still compare every claim field. Only one test file changes. Corrected complete request class: 33 / 242, zero errors/failures, the same three existing SQLite database-lock race skips and unchanged case inventory. ECS/syntax, host/runtime test hash and all 125 pinned dependency tuples verify. All 581 runtime/composer file hashes are byte-identical to c8be089. New full qualification and ordinary CI are running at c30428e. Server 92e9f12866be51e86d35b043597af3e705ff8122 passes local 57 / 4069 HTTP checks and its supported-database pairing is running with explicit c8be089 input, whose runtime bytes match the current Native head. Keep these source inputs and their artifact provenance explicit. Shared #136 remains open and the model PRs draft. |
|
Accepted scoped cancellation is now recoverable before preparation in qualified source Native c30428e and Server 92e9f12866be51e86d35b043597af3e705ff8122. Acceptance bounds the hosting lease under the original deadline. The real watchdog recovers the unprepared task, the stale owner remains fenced, and the replacement prepares the first delivery boundary. Duplicate requests preserve identity, deadline and current ownership. Native full qualification and ordinary CI pass. Downloaded JUnit independently verifies all 130 feature files and 2255 unique cases exactly once per database. MySQL 2255/21479, PostgreSQL 2255/21420, zero errors/failures, three/eight existing skips. Unit 2400/17412, five skips/fifteen notices. Combined coverage 89.36% (62061/69444) exceeds the 87.85% baseline. Server paired qualification passes with explicit Native input c8be089. Its 581 runtime/composer file hashes match c30428e. Downloaded JUnit verifies all preceding 305 cases plus exactly one HTTP request-before-preparation recovery case on each supported database: SQLite/MySQL/PostgreSQL each 306/11604, affected SQLite 317/3667, zero errors/failures/skips. Separate published-package qualification 2397/48774 retains Workflow 2.3.3, 55 reported skips/six deprecations. Both model PRs stay draft and shared #136 stays open. Default/published protocol is 1.19. Candidate 1.20 remains unfrozen. Next is SDK-authored scope execution and selective callback supervision, physical scoped cleanup-worker replacement and the coherent operator view. Published PHP/Python/Rust artifacts, the complete original-budget cascade and fair competitive qualification remain required. Local qualification resources are removed. |
|
Scope recovery documentation now matches request acceptance at The change is documentation only. Production source and tests are unchanged |
Namespace repair reproduced and correctedWorkflow#605 is an independently shippable released-runtime defect, with The new 35-case creation/recovery/guard inventory has twenty expected failures The cancellation candidate receives the same runtime correction plus a This reproduces the ready/unclaimed and queue/run visibility pattern from the |
Corrected connected source qualificationRun 37266432981
The artifact is 11327325939, The deterministic repair ordering reproduction and runtime correction are owned |
|
The native cancellation draft now incorporates Workflow 2.3.4 main at Ordinary PR CI The connected PHP qualification Exact source tuple: PHP This qualifies the new source tuple. #603 stays draft and shared #136 stays open. |
Implements the Native cancellation model for shared #136.
Supported release
Whole-run cooperative requests carry immutable request identity, reason, requester, source, lineage and the original cleanup deadline. Parent-close RequestCancel propagates cooperation. Activities and Children have explicit operation policies. Physical stop receipts fence stale publication. Replacement workers replay the same preparation/delivery boundary and resume shielded durable cleanup under the original budget. Cascade inspection explains the whole tree.
Native 2.4.0-rc.1 advertises worker protocol 1.20 and surface contract 5. Existing accepted protocols remain compatible. Historical suite-v47 1.19 specifications and fixtures remain unchanged. Independently cancellable scopes stay disabled by default and outside the supported RC claim.
Qualification
Current reviewed head is
8e6a8ca042f9c11677a4542a63d4e91c042539f8. Current PR checks and complete default-1.20 qualification are green, including all database cells, Laravel 9–13 upgrades, source analysis, regression corpus and the required coverage ratchet. Release-contract checks pass 64 cases / 932 assertions. Frozen protocol contracts pass 16 cases / 738 assertions.The expanded MySQL shard 3 completes 754 cases / 7,149 assertions in 12:42 with three existing projection-failure skips. The bounded MySQL check permits 15 minutes, with a 21-minute total job ceiling. No cases were removed, and the shard verifier confirms every feature file appears exactly once. Legacy tests explicitly retain protocol 1.19 and the frozen historical specifications. These final test and CI adjustments leave production code unchanged.
Server qualification passes 321 cases / 12,123 assertions on each of SQLite, MySQL and PostgreSQL. The final PHP/Python/Rust source cascade passes 237 assertions and finishes both runs Cancelled 17.169470 seconds after the original request, before its 30-second deadline. Physical callback stop, stale fencing, actual cleanup-worker SIGKILL, replacement replay, duplicate identity/deadline and API/CLI inspection pass.
Publication follow-through
Publish the immutable Native RC, lock it into Server 2.5.0-rc.1, then qualify the exact registry SDKs and image digest. PHP #91, Python #90, approved Rust #55 and CLI #38 are merged and their RCs published. Waterline #139 and site #149 complete the inspection/docs surface. Shared #136 stays open through the required published cascade and stable release verification.