Problem
ReviewAttemptProcessorTests.joinedExplicitCancellationInstallsProductDispositionBeforeRecoveryPreparation creates the MCP cancellation and the runtime-stop cancellation in separate unstructured tasks without waiting for either task to become the cancellation owner. The assertions then require the MCP cancellation to win. Task creation order is not execution or actor-admission order.
On the clean PR #117 checkpoint 4b5ef19, two isolated runs passed and the third reproduced all three assertions with .system(message: "Runtime stop") as the legitimate first owner. The same failure appeared while validating the unrelated Wave 3B runtime-generation checkpoint.
Required fix
Make the fixture deterministic: start the intended first cancellation, wait on the semantic cancellation-admission owner, then create the duplicate caller. Keep production ReviewStartAdmission unchanged. Search the same test file for any remaining concurrent-owner assertions that depend on unstructured task scheduling.
Acceptance
- The intended first cancellation is admitted before the duplicate task is created.
- The test still proves one interrupt request and that duplicate callers join the same operation.
- No sleeps,
Task.yield() ordering, request-count ordering, or production change.
- Focused repeated runs and the full package suite pass.
Problem
ReviewAttemptProcessorTests.joinedExplicitCancellationInstallsProductDispositionBeforeRecoveryPreparationcreates the MCP cancellation and the runtime-stop cancellation in separate unstructured tasks without waiting for either task to become the cancellation owner. The assertions then require the MCP cancellation to win. Task creation order is not execution or actor-admission order.On the clean PR #117 checkpoint
4b5ef19, two isolated runs passed and the third reproduced all three assertions with.system(message: "Runtime stop")as the legitimate first owner. The same failure appeared while validating the unrelated Wave 3B runtime-generation checkpoint.Required fix
Make the fixture deterministic: start the intended first cancellation, wait on the semantic cancellation-admission owner, then create the duplicate caller. Keep production
ReviewStartAdmissionunchanged. Search the same test file for any remaining concurrent-owner assertions that depend on unstructured task scheduling.Acceptance
Task.yield()ordering, request-count ordering, or production change.