{
  "schema": "durable-workflow.v2.platform-conformance.runtime-scenarios",
  "version": 2,
  "category": "history_replay_bundles",
  "suite_schema": "durable-workflow.v2.platform-conformance.suite",
  "suite_version": 12,
  "description": "Public scenario manifest for deterministic replay conformance. Harnesses use these scenario ids and criteria when evaluating published Durable Workflow artifacts.",
  "fixture_type": "published_artifact_runtime_scenario_manifest",
  "result_statuses": [
    "pass",
    "fail",
    "unsupported",
    "not_covered",
    "runner_blocked"
  ],
  "artifact_policy": {
    "published_artifacts_only": true,
    "requires_resolved_versions": true,
    "implementation_tests_are_not_sources": true
  },
  "common_result_evidence": [
    "suite_version",
    "scenario_id",
    "status",
    "published_artifact_versions",
    "implementation_identity",
    "runtime_matrix",
    "observed_outputs",
    "history_dumps",
    "replay_diagnostics",
    "linked_findings"
  ],
  "scenarios": [
    {
      "id": "published_artifact_install_only",
      "title": "Published artifact install only",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "workflow_php_runtime",
        "python_sdk_runtime",
        "cli"
      ],
      "operations": [
        "install the server image, CLI, Python SDK, and PHP workflow runtime from published channels",
        "record the resolved artifact name and version for every actor",
        "run no product code from a local checkout"
      ],
      "pass_criteria": [
        "the result document records every resolved artifact version",
        "all actors under test came from published install channels",
        "local product source checkouts are not used as artifacts under test"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "python_completed_history_activity_replay",
      "title": "Python completed-history activity replay",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "python_sdk_runtime",
        "cli"
      ],
      "operations": [
        "replay a Python golden history whose branch depends on an activity result",
        "compare the replayed final command sequence with the fixture expectation"
      ],
      "pass_criteria": [
        "the replay reaches the recorded terminal decision",
        "activity output state and the final command sequence match the fixture exactly"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "python_completed_history_signal_update_replay",
      "title": "Python completed-history signal and update replay",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "python_sdk_runtime",
        "cli"
      ],
      "operations": [
        "replay a Python golden history containing signal and update handler mutations",
        "query the replayed state after applying recorded events"
      ],
      "pass_criteria": [
        "signal and update state is reproduced from history",
        "the final command sequence matches the fixture exactly"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "python_completed_history_wait_condition_replay",
      "title": "Python completed-history wait-condition replay",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "python_sdk_runtime",
        "cli"
      ],
      "operations": [
        "replay a Python golden history containing a wait condition that resolves from recorded state",
        "compare replay progress and final commands with the fixture"
      ],
      "pass_criteria": [
        "the wait condition resolves at the recorded history point",
        "no extra timer, activity, or completion command is emitted"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "python_completed_history_version_marker_replay",
      "title": "Python completed-history version marker replay",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "python_sdk_runtime",
        "cli"
      ],
      "operations": [
        "replay a Python golden history containing a version marker",
        "verify the replayed branch follows the recorded marker value"
      ],
      "pass_criteria": [
        "the marker value is read from history",
        "the replayed branch and final command sequence match the fixture"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "python_completed_history_saga_compensation_replay",
      "title": "Python completed-history saga compensation replay",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "python_sdk_runtime",
        "cli"
      ],
      "operations": [
        "replay a Python golden history containing a compensated activity failure",
        "compare compensation decisions with the fixture expectation"
      ],
      "pass_criteria": [
        "the compensation path is reproduced from history",
        "no silent alternate success path is accepted"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "php_completed_history_activity_replay",
      "title": "PHP completed-history activity replay",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "workflow_php_runtime",
        "cli"
      ],
      "operations": [
        "replay a PHP golden history whose branch depends on an activity result",
        "compare the replayed final command sequence with the fixture expectation"
      ],
      "pass_criteria": [
        "the replay reaches the recorded terminal decision",
        "activity output state and the final command sequence match the fixture exactly"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "php_completed_history_signal_update_replay",
      "title": "PHP completed-history signal and update replay",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "workflow_php_runtime",
        "cli"
      ],
      "operations": [
        "replay a PHP golden history containing signal and update handler mutations",
        "query the replayed state after applying recorded events"
      ],
      "pass_criteria": [
        "signal and update state is reproduced from history",
        "the final command sequence matches the fixture exactly"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "php_completed_history_wait_condition_replay",
      "title": "PHP completed-history wait-condition replay",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "workflow_php_runtime",
        "cli"
      ],
      "operations": [
        "replay a PHP golden history containing a wait condition that resolves from recorded state",
        "compare replay progress and final commands with the fixture"
      ],
      "pass_criteria": [
        "the wait condition resolves at the recorded history point",
        "no extra timer, activity, or completion command is emitted"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "php_completed_history_version_marker_replay",
      "title": "PHP completed-history version marker replay",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "workflow_php_runtime",
        "cli"
      ],
      "operations": [
        "replay a PHP golden history containing a version marker",
        "verify the replayed branch follows the recorded marker value"
      ],
      "pass_criteria": [
        "the marker value is read from history",
        "the replayed branch and final command sequence match the fixture"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "php_completed_history_saga_compensation_replay",
      "title": "PHP completed-history saga compensation replay",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "workflow_php_runtime",
        "cli"
      ],
      "operations": [
        "replay a PHP golden history containing a compensated activity failure",
        "compare compensation decisions with the fixture expectation"
      ],
      "pass_criteria": [
        "the compensation path is reproduced from history",
        "no silent alternate success path is accepted"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "python_worker_restart_completed_query",
      "title": "Python completed workflow query after worker restart",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "python_sdk_runtime",
        "cli"
      ],
      "operations": [
        "complete a Python workflow, capture its query result, restart the worker with server history unchanged",
        "query the completed workflow through a fresh worker process"
      ],
      "pass_criteria": [
        "the fresh worker replays from history",
        "the replay query answer matches the original answer byte-for-byte after documented normalization"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "python_worker_restart_activity_state",
      "title": "Python activity state after worker restart",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "python_sdk_runtime",
        "cli"
      ],
      "operations": [
        "complete a Python workflow whose query result depends on recorded activity output",
        "restart the worker and query the state"
      ],
      "pass_criteria": [
        "the query answer reproduces activity-derived state from history",
        "no cached in-memory state is required"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "python_worker_restart_signal_update_state",
      "title": "Python signal and update state after worker restart",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "python_sdk_runtime",
        "cli"
      ],
      "operations": [
        "mutate a Python workflow with signal and update handlers",
        "restart the worker and query the handler-derived state"
      ],
      "pass_criteria": [
        "the query answer reproduces signal and update state from history",
        "the result matches the pre-restart answer"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "python_worker_restart_wait_condition_state",
      "title": "Python wait-condition state after worker restart",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "python_sdk_runtime",
        "cli"
      ],
      "operations": [
        "drive a Python workflow through a wait condition",
        "restart the worker and query state that depends on the resolved condition"
      ],
      "pass_criteria": [
        "the replayed state reflects the recorded condition resolution",
        "the worker does not issue a divergent wait/timer decision"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "python_worker_restart_version_marker_state",
      "title": "Python version marker state after worker restart",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "python_sdk_runtime",
        "cli"
      ],
      "operations": [
        "complete a Python workflow whose branch depends on a version marker",
        "restart the worker and query the selected branch"
      ],
      "pass_criteria": [
        "the marker-selected branch is reproduced from history",
        "the query answer matches the original branch state"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "python_worker_restart_saga_compensation_state",
      "title": "Python saga compensation state after worker restart",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "python_sdk_runtime",
        "cli"
      ],
      "operations": [
        "complete a Python workflow that records compensation after failure",
        "restart the worker and query compensation state"
      ],
      "pass_criteria": [
        "the compensation state is reconstructed from history",
        "the worker does not re-run or skip compensating decisions"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "php_worker_restart_completed_query",
      "title": "PHP completed workflow query after worker restart",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "workflow_php_runtime",
        "cli"
      ],
      "operations": [
        "complete a PHP workflow, capture its query result, restart the worker with server history unchanged",
        "query the completed workflow through a fresh worker process"
      ],
      "pass_criteria": [
        "the fresh worker replays from history",
        "the replay query answer matches the original answer byte-for-byte after documented normalization"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "php_worker_restart_activity_state",
      "title": "PHP activity state after worker restart",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "workflow_php_runtime",
        "cli"
      ],
      "operations": [
        "complete a PHP workflow whose query result depends on recorded activity output",
        "restart the worker and query the state"
      ],
      "pass_criteria": [
        "the query answer reproduces activity-derived state from history",
        "no cached in-memory state is required"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "php_worker_restart_signal_update_state",
      "title": "PHP signal and update state after worker restart",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "workflow_php_runtime",
        "cli"
      ],
      "operations": [
        "mutate a PHP workflow with signal and update handlers",
        "restart the worker and query the handler-derived state"
      ],
      "pass_criteria": [
        "the query answer reproduces signal and update state from history",
        "the result matches the pre-restart answer"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "php_worker_restart_wait_condition_state",
      "title": "PHP wait-condition state after worker restart",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "workflow_php_runtime",
        "cli"
      ],
      "operations": [
        "drive a PHP workflow through a wait condition",
        "restart the worker and query state that depends on the resolved condition"
      ],
      "pass_criteria": [
        "the replayed state reflects the recorded condition resolution",
        "the worker does not issue a divergent wait/timer decision"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "php_worker_restart_version_marker_state",
      "title": "PHP version marker state after worker restart",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "workflow_php_runtime",
        "cli"
      ],
      "operations": [
        "complete a PHP workflow whose branch depends on a version marker",
        "restart the worker and query the selected branch"
      ],
      "pass_criteria": [
        "the marker-selected branch is reproduced from history",
        "the query answer matches the original branch state"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "php_worker_restart_saga_compensation_state",
      "title": "PHP saga compensation state after worker restart",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "workflow_php_runtime",
        "cli"
      ],
      "operations": [
        "complete a PHP workflow that records compensation after failure",
        "restart the worker and query compensation state"
      ],
      "pass_criteria": [
        "the compensation state is reconstructed from history",
        "the worker does not re-run or skip compensating decisions"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "python_code_divergence_refusal",
      "title": "Python divergent workflow code refusal",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "python_sdk_runtime",
        "cli"
      ],
      "operations": [
        "replay a completed Python history against workflow code with a changed deterministic decision",
        "capture the replay error type, message, and structured fields"
      ],
      "pass_criteria": [
        "the worker refuses with a non-determinism error",
        "the diagnostics name the workflow sequence, expected shape, recorded event types, and message"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "php_code_divergence_refusal",
      "title": "PHP divergent workflow code refusal",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "workflow_php_runtime",
        "cli"
      ],
      "operations": [
        "replay a completed PHP history against workflow code with a changed deterministic decision",
        "capture the replay error type, message, and structured fields"
      ],
      "pass_criteria": [
        "the worker refuses with a non-determinism error",
        "the diagnostics name the workflow sequence, expected shape, recorded event types, and message"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "server_history_mutation_refusal",
      "title": "Server history mutation refusal",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "workflow_php_runtime",
        "python_sdk_runtime",
        "cli"
      ],
      "operations": [
        "mutate a recorded server history event or activity result in a replay bundle",
        "verify the bundle through the documented replay verification surface"
      ],
      "pass_criteria": [
        "the mutated bundle is refused as invalid or drifted",
        "the report includes integrity rule, integrity path, replay diff reason, and message"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "malformed_history_refusal",
      "title": "Malformed history refusal",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "workflow_php_runtime",
        "python_sdk_runtime",
        "cli"
      ],
      "operations": [
        "delete or corrupt a required history field in a replay bundle",
        "verify the bundle through the documented replay verification surface"
      ],
      "pass_criteria": [
        "the malformed bundle is refused as invalid or failed",
        "the report includes integrity rule, path, and message"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "python_in_flight_signal_restart_timing",
      "title": "Python in-flight signal replay timing",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "python_sdk_runtime",
        "cli"
      ],
      "operations": [
        "start a Python workflow awaiting a signal",
        "send the signal and restart the worker around history reload before the next activity decision",
        "compare the next decision with the original execution"
      ],
      "pass_criteria": [
        "the signal is applied at the same deterministic replay point",
        "the next decision sequence matches the original execution"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    },
    {
      "id": "php_in_flight_signal_restart_timing",
      "title": "PHP in-flight signal replay timing",
      "claim_targets": [
        "official_sdk",
        "worker_protocol_implementation"
      ],
      "actors": [
        "server",
        "workflow_php_runtime",
        "cli"
      ],
      "operations": [
        "start a PHP workflow awaiting a signal",
        "send the signal and restart the worker around history reload before the next activity decision",
        "compare the next decision with the original execution"
      ],
      "pass_criteria": [
        "the signal is applied at the same deterministic replay point",
        "the next decision sequence matches the original execution"
      ],
      "unsupported_when": [
        "the implementation does not claim the runtime or surface under test"
      ]
    }
  ]
}
