{
  "schema_version": "1.0",
  "artifact": "RogueBall_CodeOnly_Godot",
  "purpose": "Independent reproduction protocol derived from the 2026-08-15 runtime audit; this is a repeatable procedure, not the original terminal transcript.",
  "prerequisites": [
    "Windows x86_64",
    "Godot 4.7.1 stable .NET",
    ".NET SDK capable of targeting net8.0",
    "An isolated copy of the source snapshot whose hashes match rogueball-manifest.json"
  ],
  "controls": [
    "Never modify the hashed source snapshot",
    "Record engine and .NET versions before running",
    "Treat engine error output as failure even when the process exit code is zero",
    "Keep build, smoke-run and functional-probe results separate"
  ],
  "sequence": [
    {
      "step": 1,
      "name": "verify_snapshot",
      "action": "Compare project.godot, README.md, scenes/Empty.tscn and scripts/App.cs against the SHA-256 values in rogueball-manifest.json.",
      "pass_condition": "Every byte count and SHA-256 value matches."
    },
    {
      "step": 2,
      "name": "preserve_original_failure",
      "action": "Open or run the untouched snapshot with Godot .NET in headless mode and capture stdout and stderr.",
      "pass_condition": "The record contains the autoload compilation failure; a zero exit code must not override that engine error."
    },
    {
      "step": 3,
      "name": "apply_minimal_repair",
      "action": "Copy the snapshot to a temporary directory and save RogueBall_CodeOnly.csproj.txt there as RogueBall_CodeOnly.csproj. Make no other source change.",
      "pass_condition": "The copy differs from the snapshot by exactly the documented .csproj before testing."
    },
    {
      "step": 4,
      "name": "build",
      "action": "Run dotnet build on the repaired project and retain the complete output.",
      "pass_condition": "Exit code 0, zero errors, zero warnings and RogueBall_CodeOnly.dll produced."
    },
    {
      "step": 5,
      "name": "headless_smoke_run",
      "action": "Run the repaired project with Godot .NET headless for a maximum of 120 frames and retain the complete output.",
      "pass_condition": "The .NET module, App.cs and Empty.tscn load; no engine/runtime error appears; the process exits after the frame limit."
    },
    {
      "step": 6,
      "name": "functional_probe",
      "action": "Execute rogueball-functional-probe.gd.txt as a temporary Godot test script against the repaired copy.",
      "pass_condition": "The output contains TEST_PASS initial_state_and_pass_action and all assertions in the runtime audit hold."
    }
  ],
  "claim_boundary": "Passing this protocol verifies a repaired runtime and one bounded behavior. It does not verify an exported build, a complete match, performance, playability, creation time, cost, agent authorship or autonomous provenance."
}
