{
  "schema_version": 1,
  "evidence_type": "executed numerical and synthetic commissioning study",
  "command": "python complete_validation.py",
  "passed": true,
  "checks": [
    {
      "id": "selected-corners",
      "description": "Selected setting fits every declared corner",
      "expected": "all five corner outcomes accepted",
      "observed": 5,
      "passed": true,
      "method": "Exact motion, torque extrema and polynomial duty integrals"
    },
    {
      "id": "mechanical-energy",
      "description": "Signed shaft work equals all mechanical losses",
      "expected": "absolute residual < 1e-8 J",
      "observed": 2.0095036745715333e-14,
      "passed": true,
      "method": "Rest-to-rest kinetic-energy balance across every candidate/corner"
    },
    {
      "id": "overload-rejected",
      "description": "High mass and drag exceed the declared drive envelope",
      "expected": "rejected",
      "observed": [
        "peak_torque_Nm",
        "rms_torque_Nm",
        "peak_current_Arms",
        "rms_current_Arms",
        "bus_regen_J",
        "average_bus_regen_W"
      ],
      "passed": true,
      "method": "Executed 160 kg, 90 N drag counterfactual using selected trajectory"
    },
    {
      "id": "current-rejected",
      "description": "Insufficient peak current is detected",
      "expected": "rejected",
      "observed": true,
      "passed": true,
      "method": "Acceptance with 0.1 A peak-current limit"
    },
    {
      "id": "independent-quadrature",
      "description": "Exact torque-square integral agrees with adaptive quadrature",
      "expected": "difference < 1e-8 N2 m2 s",
      "observed": 1.433159146912999e-13,
      "passed": true,
      "method": "SciPy QUADPACK evaluates scalar loads independently of polynomial integration"
    },
    {
      "id": "passive-losses",
      "description": "Passive losses and separately accumulated energy are nonnegative",
      "expected": "minimum >= -1e-9 J",
      "observed": 0.0,
      "passed": true,
      "method": "All 240 candidate/corner runs, including back-driving phases"
    },
    {
      "id": "direction-symmetry",
      "description": "Horizontal forward and reverse duties agree",
      "expected": "max difference < 1e-9",
      "observed": 0.0,
      "passed": true,
      "method": "Independent signed-profile construction and motor integration"
    },
    {
      "id": "encoder-quantization",
      "description": "Position rounding stays within half a 1 micrometer increment",
      "expected": "maximum <= 0.5 micrometer",
      "observed": 0.5000000000005,
      "passed": true,
      "method": "Synthetic command rounding; not an encoder accuracy measurement"
    },
    {
      "id": "controller-intervals",
      "description": "Every jerk ramp spans at least ten 1 ms controller intervals",
      "expected": ">= 10 intervals",
      "observed": 49.99999999999999,
      "passed": true,
      "method": "Analytical selected ramp duration divided by declared sample period"
    },
    {
      "id": "tracking-35Hz",
      "description": "Reduced tracking model at 35 Hz",
      "expected": "within 0.10 mm following-error allowance",
      "observed": 0.04991720150532286,
      "passed": true,
      "method": "Executed second-order ODE with position and velocity command inputs; no acceleration feedforward"
    },
    {
      "id": "tracking-25Hz",
      "description": "Reduced tracking model at 25 Hz",
      "expected": "within 0.10 mm following-error allowance",
      "observed": 0.09806687745672962,
      "passed": true,
      "method": "Executed second-order ODE with position and velocity command inputs; no acceleration feedforward"
    },
    {
      "id": "tracking-8Hz",
      "description": "Reduced tracking model at 8 Hz",
      "expected": "outside 0.10 mm following-error allowance",
      "observed": 0.9709794229880528,
      "passed": true,
      "method": "Executed second-order ODE with position and velocity command inputs; no acceleration feedforward"
    },
    {
      "id": "tracking-refinement",
      "description": "Halving the integration step leaves the following-error result stable",
      "expected": "maximum pointwise change < 0.001 mm",
      "observed": 8.634648551719692e-09,
      "passed": true,
      "method": "Two RK45 runs at common requested output times"
    },
    {
      "id": "kinetic-reference",
      "description": "Lossless deceleration returns the peak kinetic energy",
      "expected": "difference < 1e-9 J",
      "observed": 8.881784197001252e-16,
      "passed": true,
      "method": "Closed-form 0.5(m + J/r\u00b2)v_peak\u00b2 versus integrated negative shaft work"
    },
    {
      "id": "regression-provenance",
      "description": "Regression record matches the executed source",
      "expected": "all regressions pass; hashes current",
      "observed": {
        "tests": 20,
        "hashes_current": true
      },
      "passed": true,
      "method": "Recorded unittest result plus SHA-256 comparison"
    }
  ],
  "source_sha256": {
    "planner.py": "b7910aca63447dd27023291a4b439544ecea13f6d565d6cad5853e5aee2dd8fc",
    "test_planner.py": "6847813a30b61d5940a0d35979152b27d19e6fe8821afb1905ee3e6e80e43a41",
    "run.py": "b0974e3cf457e81aa15f87a889d5c8de63225cf5842d896188df5990c9b50c90",
    "reporting.py": "0f510ade8d2f0f9ac5d06315c6ddbea7c2323e92782e8546b432b9cc4c49764a",
    "verify.py": "8a401b4ec44c0a3ee582e5818fccdbbc06c5aa49d8e828b339d8f936b4da1055",
    "complete_validation.py": "a0c366b7873fa8c9b9a11bb3a49a949f655184a068844e73f4806340033b9593",
    "inputs.json": "b0b9773c4d0e1b640cbecab746362a7e74d2082252d0c746214481a7815b2684",
    "requirements.txt": "815360a00e0e1d7a128cade3de11b66d3fe997cbd6e2c69f8081eb9bc8b88197",
    "package_metadata.py": "7878027db98912bacb62855454bc96af5a29507c7dd699a4ef363ee16f8ca3ef"
  },
  "report": "completion/report.html",
  "limitations": [
    "The physical axis, drive, and encoder are not present. The tracking ODE and quantization are explicit reduced-model substitutes.",
    "Motor envelope and friction/efficiency values are declared inputs, not vendor certifications.",
    "The study does not qualify collision protection, emergency stopping, or actual position-control stability."
  ],
  "results": {
    "corner_runs": 240,
    "tracking_cases": [
      {
        "bandwidth_hz": 35,
        "damping_ratio": 0.75,
        "peak_following_error_mm": 0.04991720150532286,
        "accepted": true,
        "expected": "accepted"
      },
      {
        "bandwidth_hz": 25,
        "damping_ratio": 0.75,
        "peak_following_error_mm": 0.09806687745672962,
        "accepted": true,
        "expected": "accepted"
      },
      {
        "bandwidth_hz": 8,
        "damping_ratio": 0.75,
        "peak_following_error_mm": 0.9709794229880528,
        "accepted": false,
        "expected": "rejected"
      }
    ],
    "overload_rejected": true,
    "quadrature_difference_Nm2s": 1.433159146912999e-13
  }
}
