{
  "capability_id": "mechanical.statics.planar_equilibrium",
  "calculation_version": "1.0.0",
  "protocol_version": "1.0.0-proposed",
  "protocol_document_status": "proposed",
  "verification_revision": "2026-09-27.o2-o3.v2",
  "oracle": {
    "class": "O3",
    "library": "mpmath 1.4.1",
    "mpmath_dps": 80,
    "backend": null,
    "rounding": null,
    "generator_id": "planar-equilibrium-mpmath-o3",
    "generator_version": "1.0.0",
    "generator_sha256": "7dab9ee2d379cbbfc8cf79687384a4d456d9f1377843bf8ccb795be326ae6eb6",
    "table_sha256": "fb7e0e5f7f76ee45392fe5d8b91cc0a1c14619556632445838de938dfa268f45",
    "seed": "20260927.planar-equilibrium-o3",
    "independent_of_iut": true
  },
  "claim_scope": "O2: planar ΣF/ΣM vs a separate-module identity (≤2 ULP). Not beam deflection, not distributed load, and not 3-D. ≤2 ULP vs O3 applies only to the published tabulated planar-equilibrium vectors. Not beam deflection.",
  "commands": {
    "regenerate_table": "python3 generate-planar-equilibrium-o3.py",
    "regenerate_table_repo": "python3 scripts/lib/cvp/oracles/generate-planar-equilibrium-o3.py",
    "independent_rest": "Compare POST /api/v1/calc/planar-equilibrium against /developers/cvp/reproduce/planar-equilibrium-o3-tables.json",
    "run_cvp": "npm run cvp:run -- --capability mechanical.statics.planar_equilibrium",
    "rest_example": "POST https://www.calculatorx.com/api/v1/calc/planar-equilibrium"
  },
  "public_files": {
    "table": "/developers/cvp/reproduce/planar-equilibrium-o3-tables.json",
    "table_url": "https://www.calculatorx.com/developers/cvp/reproduce/planar-equilibrium-o3-tables.json",
    "generator": "/developers/cvp/reproduce/generate-planar-equilibrium-o3.py",
    "generator_url": "https://www.calculatorx.com/developers/cvp/reproduce/generate-planar-equilibrium-o3.py",
    "checker": "/developers/cvp/reproduce/check-math-o3-rest.py",
    "checker_url": "https://www.calculatorx.com/developers/cvp/reproduce/check-math-o3-rest.py",
    "manifest": "/evidence/mechanical.statics.planar_equilibrium/1.0.0.cvp.json",
    "this_file": "/evidence/mechanical.statics.planar_equilibrium/reproduce.json"
  },
  "result_summary": {
    "passed": 8,
    "total": 8,
    "failed": 0,
    "max_error_ulp": 0,
    "threshold_ulp": 2,
    "max_threshold_ulp": 2
  },
  "vectors": [
    {
      "id": "o3-345",
      "kind": "resultant",
      "inputs": {
        "mode": "resultant",
        "forces": "3,0; 0,4"
      },
      "expected_f64": {
        "oracle_layer": "analytic",
        "resultant_n": 5,
        "sum_fx": 3,
        "sum_fy": 4,
        "sum_m": 0
      },
      "actual": {
        "mode": "resultant",
        "model": "planar_equilibrium",
        "sum_fx": 3,
        "sum_fy": 4,
        "sum_m": 0,
        "resultant_n": 5,
        "angle_deg": 53.13010235415598,
        "convention": "CCW positive; M = x Fy − y Fx about the origin",
        "balanced": false,
        "unknowns": [],
        "solver": "math.vector add + cross"
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "o3-moment",
      "kind": "moment",
      "inputs": {
        "mode": "resultant",
        "forces": "0,-10,2,0"
      },
      "expected_f64": {
        "oracle_layer": "analytic",
        "resultant_n": 10,
        "sum_fx": 0,
        "sum_fy": -10,
        "sum_m": -20
      },
      "actual": {
        "mode": "resultant",
        "model": "planar_equilibrium",
        "sum_fx": 0,
        "sum_fy": -10,
        "sum_m": -20,
        "resultant_n": 10,
        "angle_deg": -90,
        "convention": "CCW positive; M = x Fy − y Fx about the origin",
        "balanced": false,
        "unknowns": [],
        "solver": "math.vector add + cross"
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "o3-bracket",
      "kind": "equilibrium3",
      "inputs": {
        "mode": "equilibrium",
        "forces": "0,-100,2,0; 0,0,0,0,fx+fy",
        "moments": "0,m"
      },
      "expected_f64": {
        "oracle_layer": "analytic",
        "resultant_n": 100,
        "sum_fx": 0,
        "sum_fy": -100,
        "sum_m": -200
      },
      "actual": {
        "mode": "equilibrium",
        "model": "planar_equilibrium",
        "sum_fx": 0,
        "sum_fy": -100,
        "sum_m": -200,
        "resultant_n": 100,
        "angle_deg": -90,
        "convention": "CCW positive; M = x Fy − y Fx about the origin",
        "balanced": true,
        "unknowns": [
          {
            "id": "F2.fx",
            "value": 0
          },
          {
            "id": "F2.fy",
            "value": 100
          },
          {
            "id": "M1",
            "value": 200
          }
        ],
        "solver": "math.linear_algebra solve order 3"
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "o3-two",
      "kind": "equilibrium2",
      "inputs": {
        "mode": "equilibrium",
        "forces": "0,-10; 0,0,fx+fy"
      },
      "expected_f64": {
        "oracle_layer": "analytic",
        "resultant_n": 10,
        "sum_fx": 0,
        "sum_fy": -10,
        "sum_m": 0
      },
      "actual": {
        "mode": "equilibrium",
        "model": "planar_equilibrium",
        "sum_fx": 0,
        "sum_fy": -10,
        "sum_m": 0,
        "resultant_n": 10,
        "angle_deg": -90,
        "convention": "CCW positive; M = x Fy − y Fx about the origin",
        "balanced": true,
        "unknowns": [
          {
            "id": "F2.fx",
            "value": 0
          },
          {
            "id": "F2.fy",
            "value": 10
          }
        ],
        "solver": "math.linear_algebra solve order 2"
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "o3-awkward",
      "kind": "awkward",
      "inputs": {
        "mode": "resultant",
        "forces": "1.37,-2.5,0.83,0.2"
      },
      "expected_f64": {
        "oracle_layer": "analytic",
        "resultant_n": 2.85077182531,
        "sum_fx": 1.37,
        "sum_fy": -2.5,
        "sum_m": -2.349
      },
      "actual": {
        "mode": "resultant",
        "model": "planar_equilibrium",
        "sum_fx": 1.37,
        "sum_fy": -2.5,
        "sum_m": -2.349,
        "resultant_n": 2.85077182531,
        "angle_deg": -61.27725871500539,
        "convention": "CCW positive; M = x Fy − y Fx about the origin",
        "balanced": false,
        "unknowns": [],
        "solver": "math.vector add + cross"
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "o3-alias",
      "kind": "alias",
      "inputs": {
        "mode": "resultant",
        "F": "5,0; -3,4"
      },
      "expected_f64": {
        "oracle_layer": "analytic",
        "resultant_n": 4.472135955,
        "sum_fx": 2,
        "sum_fy": 4,
        "sum_m": 0
      },
      "actual": {
        "mode": "resultant",
        "model": "planar_equilibrium",
        "sum_fx": 2,
        "sum_fy": 4,
        "sum_m": 0,
        "resultant_n": 4.472135955,
        "angle_deg": 63.43494882292201,
        "convention": "CCW positive; M = x Fy − y Fx about the origin",
        "balanced": false,
        "unknowns": [],
        "solver": "math.vector add + cross"
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "o3-moments-only",
      "kind": "moments",
      "inputs": {
        "mode": "resultant",
        "moments": "12; -4"
      },
      "expected_f64": {
        "oracle_layer": "analytic",
        "resultant_n": 0,
        "sum_fx": 0,
        "sum_fy": 0,
        "sum_m": 8
      },
      "actual": {
        "mode": "resultant",
        "model": "planar_equilibrium",
        "sum_fx": 0,
        "sum_fy": 0,
        "sum_m": 8,
        "resultant_n": 0,
        "angle_deg": null,
        "convention": "CCW positive; M = x Fy − y Fx about the origin",
        "balanced": false,
        "unknowns": [],
        "solver": "math.vector add + cross"
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "o3-cancel",
      "kind": "cancel",
      "inputs": {
        "mode": "resultant",
        "forces": "2,3; -2,-3"
      },
      "expected_f64": {
        "oracle_layer": "analytic",
        "resultant_n": 0,
        "sum_fx": 0,
        "sum_fy": 0,
        "sum_m": 0
      },
      "actual": {
        "mode": "resultant",
        "model": "planar_equilibrium",
        "sum_fx": 0,
        "sum_fy": 0,
        "sum_m": 0,
        "resultant_n": 0,
        "angle_deg": null,
        "convention": "CCW positive; M = x Fy − y Fx about the origin",
        "balanced": true,
        "unknowns": [],
        "solver": "math.vector add + cross"
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    }
  ]
}
