{
  "schema": "router-step-release-v1",
  "step_id": "STEP_050M07P25_R02_CONTROLLED_SYNTHETIC_WIREGUARD_DOMAIN_V2_E2E",
  "revision": "R02",
  "workflow_contract_version": 2,
  "canonical_zip_required": true,
  "classification": "class_c_controlled_live_network_test",
  "functional_stage": "p25_controlled_synthetic_wireguard_domain_v2_e2e",
  "source_changed": false,
  "live_database_written": true,
  "database_schema_changed": false,
  "runtime_impact": true,
  "snapshot_required": false,
  "reboot_required": false,
  "runtime_provisioning_active": false,
  "external_onboarding_active": false,
  "encrypted_database_backup_required": true,
  "backup_restore_proof_required": true,
  "worker_entry": "scripts/run-step.sh",
  "exact_worker_fixture": "tests/exact-worker.sh",
  "target_package_path": "payload/p25-controlled-live-package.tar.gz",
  "target_package_sha256": "f3f697c7324e00464d02befd7d05bf37e9336a5d73d0f8e6296b3e9dfe2ceaa3",
  "expected_installer_sha256": "7ce739dd67e450912c14503ee2596a983839c379a9dcc49c2d007aa39be02cf7",
  "mandatory_fixture_count": 5,
  "target_environment_matrix": "reference/target-environment.tsv",
  "path_ownership_manifest": "reference/path-ownership.tsv",
  "vm100_base_commit": "8c5d11b7e4b119757ea16b46775b26e0ac903d7c",
  "vm100_base_tree": "f25aab0f1886647b52a11ccebe080894bd06542a",
  "vm100_expected_file_count": 34,
  "vm101_base_commit": "94a1c5627bacf9212d3fb2af1a77507ec57ff74b",
  "vm101_base_tree": "ee4dddf35e308096d6496a4ecc25268ebcb3058a",
  "vm101_expected_file_count": 59,
  "vm121_base_commit": "891fd5939906e40f88144b64478eb6c39045a9e9",
  "vm121_base_tree": "474568f60cf6363fe4e43f59873f8dcf1a29b950",
  "vm121_expected_file_count": 48,
  "alembic_target": "0004_profile_provisioning",
  "source_of_truth": "post-P24 canonical Machine Git and live read-only preflight; VM100 remains sole selector authority",
  "next_action": "After PASS, update Project Sources to post-P25 checkpoint, then P26 invite redemption + magic-link + secure session MVP",
  "continuation_of": "STEP_050M07P25_R01_CONTROLLED_SYNTHETIC_WIREGUARD_DOMAIN_V2_E2E",
  "continuation_reason": "R01 stopped before detached runner start because transition helper was given a file directly under /tmp; R02 uses an owned mktemp directory"
}
