{
  "capability_id": "mechanical.statics.bending_stress",
  "calculation_version": "1.0.0",
  "protocol_version": "1.0.0-proposed",
  "protocol_document_status": "proposed",
  "verification_revision": "2026-09-27.o2-o3",
  "oracle": {
    "class": "O3",
    "library": "mpmath 1.4.1",
    "mpmath_dps": 80,
    "backend": null,
    "rounding": null,
    "generator_id": "bending-stress-mpmath-o3",
    "generator_version": "1.0.0",
    "generator_sha256": "d24b69105fccd6d0af23c0799a1b1b3970fcc6c557a4bdf2601383613f05eef6",
    "table_sha256": "bb73a9f80d63e57442a213862a889e711ff060ca0f8ae6df9512b6c7bd729bed",
    "seed": "20260927.bending-stress-o3",
    "independent_of_iut": true
  },
  "claim_scope": "O2: σ = M/S vs a separate-module identity (≤2 ULP). Not plastic modulus, not a rectangle from b·h, and not beam deflection. ≤2 ULP vs O3 applies only to the published tabulated bending-stress vectors. Not plastic modulus.",
  "commands": {
    "regenerate_table": "python3 generate-bending-stress-o3.py",
    "regenerate_table_repo": "python3 scripts/lib/cvp/oracles/generate-bending-stress-o3.py",
    "independent_rest": "Compare POST /api/v1/calc/bending-stress against /developers/cvp/reproduce/bending-stress-o3-tables.json",
    "run_cvp": "npm run cvp:run -- --capability mechanical.statics.bending_stress",
    "rest_example": "POST https://www.calculatorx.com/api/v1/calc/bending-stress"
  },
  "public_files": {
    "table": "/developers/cvp/reproduce/bending-stress-o3-tables.json",
    "table_url": "https://www.calculatorx.com/developers/cvp/reproduce/bending-stress-o3-tables.json",
    "generator": "/developers/cvp/reproduce/generate-bending-stress-o3.py",
    "generator_url": "https://www.calculatorx.com/developers/cvp/reproduce/generate-bending-stress-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.bending_stress/1.0.0.cvp.json",
    "this_file": "/evidence/mechanical.statics.bending_stress/reproduce.json"
  },
  "result_summary": {
    "passed": 8,
    "total": 8,
    "failed": 0,
    "max_error_ulp": 1,
    "threshold_ulp": 2,
    "max_threshold_ulp": 2
  },
  "vectors": [
    {
      "id": "o3-MS",
      "kind": "S",
      "inputs": {
        "M": "12",
        "S": "4"
      },
      "expected_f64": {
        "oracle_layer": "analytic",
        "sigma": 3,
        "M": 12,
        "S": 4
      },
      "actual": {
        "model": "bending_stress",
        "M": 12,
        "S": 4,
        "sigma": 3,
        "solver": "elastic flexure",
        "convention": "σ = M/S on one centroidal axis. Positive M gives the stress sign at the fiber used to form S. S may be entered, or formed as Ix/c by the section-modulus engine. A rectangle built from b and h is the rectangular-section page. The plastic modulus of a rectangle is its own page."
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "o3-Ix",
      "kind": "Ix",
      "inputs": {
        "M": "100",
        "Ix": "50",
        "c": "2"
      },
      "expected_f64": {
        "oracle_layer": "analytic",
        "sigma": 4,
        "M": 100,
        "S": 25
      },
      "actual": {
        "model": "bending_stress",
        "M": 100,
        "S": 25,
        "Ix": 50,
        "c": 2,
        "sigma": 4,
        "solver": "section modulus",
        "convention": "σ = M/S on one centroidal axis. Positive M gives the stress sign at the fiber used to form S. S may be entered, or formed as Ix/c by the section-modulus engine. A rectangle built from b and h is the rectangular-section page. The plastic modulus of a rectangle is its own page."
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "o3-alias",
      "kind": "alias",
      "inputs": {
        "moment": "24",
        "section_modulus": "8"
      },
      "expected_f64": {
        "oracle_layer": "analytic",
        "sigma": 3,
        "M": 24,
        "S": 8
      },
      "actual": {
        "model": "bending_stress",
        "M": 24,
        "S": 8,
        "sigma": 3,
        "solver": "elastic flexure",
        "convention": "σ = M/S on one centroidal axis. Positive M gives the stress sign at the fiber used to form S. S may be entered, or formed as Ix/c by the section-modulus engine. A rectangle built from b and h is the rectangular-section page. The plastic modulus of a rectangle is its own page."
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "o3-awkward",
      "kind": "awkward",
      "inputs": {
        "M": "12.5",
        "S": "3.7"
      },
      "expected_f64": {
        "oracle_layer": "analytic",
        "sigma": 3.3783783783783785,
        "M": 12.5,
        "S": 3.7
      },
      "actual": {
        "model": "bending_stress",
        "M": 12.5,
        "S": 3.7,
        "sigma": 3.378378378378378,
        "solver": "elastic flexure",
        "convention": "σ = M/S on one centroidal axis. Positive M gives the stress sign at the fiber used to form S. S may be entered, or formed as Ix/c by the section-modulus engine. A rectangle built from b and h is the rectangular-section page. The plastic modulus of a rectangle is its own page."
      },
      "error_ulp": 1,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "o3-I-alias",
      "kind": "I",
      "inputs": {
        "M": "40",
        "I": "20",
        "cy": "2"
      },
      "expected_f64": {
        "oracle_layer": "analytic",
        "sigma": 4,
        "M": 40,
        "S": 10
      },
      "actual": {
        "model": "bending_stress",
        "M": 40,
        "S": 10,
        "Ix": 20,
        "c": 2,
        "sigma": 4,
        "solver": "section modulus",
        "convention": "σ = M/S on one centroidal axis. Positive M gives the stress sign at the fiber used to form S. S may be entered, or formed as Ix/c by the section-modulus engine. A rectangle built from b and h is the rectangular-section page. The plastic modulus of a rectangle is its own page."
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "o3-neg-M",
      "kind": "signed",
      "inputs": {
        "M": "-18",
        "S": "6"
      },
      "expected_f64": {
        "oracle_layer": "analytic",
        "sigma": -3,
        "M": -18,
        "S": 6
      },
      "actual": {
        "model": "bending_stress",
        "M": -18,
        "S": 6,
        "sigma": -3,
        "solver": "elastic flexure",
        "convention": "σ = M/S on one centroidal axis. Positive M gives the stress sign at the fiber used to form S. S may be entered, or formed as Ix/c by the section-modulus engine. A rectangle built from b and h is the rectangular-section page. The plastic modulus of a rectangle is its own page."
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "o3-small",
      "kind": "small",
      "inputs": {
        "M": "0.08",
        "S": "0.02"
      },
      "expected_f64": {
        "oracle_layer": "analytic",
        "sigma": 4,
        "M": 0.08,
        "S": 0.02
      },
      "actual": {
        "model": "bending_stress",
        "M": 0.08,
        "S": 0.02,
        "sigma": 4,
        "solver": "elastic flexure",
        "convention": "σ = M/S on one centroidal axis. Positive M gives the stress sign at the fiber used to form S. S may be entered, or formed as Ix/c by the section-modulus engine. A rectangle built from b and h is the rectangular-section page. The plastic modulus of a rectangle is its own page."
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "o3-large",
      "kind": "large",
      "inputs": {
        "M": "1e6",
        "S": "2500"
      },
      "expected_f64": {
        "oracle_layer": "analytic",
        "sigma": 400,
        "M": 1000000,
        "S": 2500
      },
      "actual": {
        "model": "bending_stress",
        "M": 1000000,
        "S": 2500,
        "sigma": 400,
        "solver": "elastic flexure",
        "convention": "σ = M/S on one centroidal axis. Positive M gives the stress sign at the fiber used to form S. S may be entered, or formed as Ix/c by the section-modulus engine. A rectangle built from b and h is the rectangular-section page. The plastic modulus of a rectangle is its own page."
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    }
  ]
}
