Skip to content

Gate the first cancellation owner in joined recovery tests #118

Description

@lynnswap

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions