{
  "capability_id": "math.percent_error",
  "calculation_version": "1.1.4",
  "protocol_version": "1.0.0-proposed",
  "protocol_document_status": "proposed",
  "verification_revision": null,
  "evidence_digest": "e527121b29b32732ec81592284339bca19db22035a309273cfe05206cdae785a",
  "pack_kind": "public_o2_reproduce",
  "oracle": {
    "class": "O2",
    "module": "percent-error-reference",
    "source": "/developers/cvp/reproduce/percent-error-reference.mjs",
    "checker": "/developers/cvp/reproduce/check-percent-error-o2.mjs",
    "independent_of_iut": true,
    "same_runtime_as_iut": true,
    "precision_bits": 53,
    "oracle_sha256": "96409f51ab7564d7570a8f919da0936b743b324099567a47804d58405dc76029",
    "notes": "Distinct module; does not import the production engine. Shares Node/V8 binary64 with the IUT. Expected values are computed by this oracle, not transcribed from IUT output."
  },
  "runtime_lock": {
    "runtime": "node",
    "compatible_execution": {
      "node": ">=18",
      "numeric_model": "IEEE-754 binary64 percent error"
    },
    "reference_environment": {
      "runtime": "node",
      "runtime_version": "20.19.2",
      "os": "darwin",
      "numeric_model": "IEEE-754 binary64"
    },
    "engines": {
      "node": ">=18",
      "node_pinned": "20.19.2"
    },
    "numeric_model": "IEEE-754 binary64 percent error",
    "bit_for_bit": "Bit-for-bit agreement with published expected values is only claimed for the pinned reference_environment. Node >=18 is compatible within the declared ULP contract.",
    "imports": [],
    "files": [
      "percent-error-reference.mjs",
      "check-percent-error-o2.mjs"
    ]
  },
  "claim_scope": "O2 expected values and inverse solution sets (candidates, solution_type, status, code) on the published vectors. Same-runtime binary64 is declared; O3 is not required for this algebraic model.",
  "commands": {
    "run_oracle": "node public/developers/cvp/reproduce/check-percent-error-o2.mjs",
    "run_oracle_public": "node check-percent-error-o2.mjs",
    "run_cvp": "npm run cvp:run -- --capability math.percent_error",
    "rest_example": "POST https://www.calculatorx.com/api/v1/calc/percent-error"
  },
  "public_files": {
    "oracle": "/developers/cvp/reproduce/percent-error-reference.mjs",
    "oracle_url": "https://www.calculatorx.com/developers/cvp/reproduce/percent-error-reference.mjs",
    "oracle_sha256": "96409f51ab7564d7570a8f919da0936b743b324099567a47804d58405dc76029",
    "checker": "/developers/cvp/reproduce/check-percent-error-o2.mjs",
    "checker_url": "https://www.calculatorx.com/developers/cvp/reproduce/check-percent-error-o2.mjs",
    "bundle": "/evidence/math.percent_error/o2-reproduce-pack.zip",
    "bundle_url": "https://www.calculatorx.com/evidence/math.percent_error/o2-reproduce-pack.zip",
    "manifest": "/evidence/math.percent_error/1.1.4.cvp.json",
    "this_file": "/evidence/math.percent_error/reproduce.json",
    "calculator": "/calc/math/percent-error",
    "bundle_sha256": "67d9e389ec662319d877ce4373f5fbee8bf42cbbcc752ed8dd7f8225548a270f",
    "bundle_size_bytes": 22174
  },
  "result_summary": {
    "passed": 6,
    "total": 6,
    "failed": 0,
    "max_error_ulp": 0,
    "threshold_ulp": 2,
    "evidence_digest": "e527121b29b32732ec81592284339bca19db22035a309273cfe05206cdae785a"
  },
  "vectors": [
    {
      "id": "g-basic",
      "kind": "o2-golden",
      "inputs": {
        "experimental": 101.5,
        "theoretical": 100
      },
      "expected": {
        "solve_for": "p",
        "value": 1.5,
        "solution_type": "unique",
        "status": "success",
        "percent_error": 1.5,
        "observed": 101.5,
        "true": 100
      },
      "actual": {
        "solve_for": "p",
        "value": 1.5,
        "solution_type": "unique",
        "status": "success",
        "percent_error": 1.5,
        "observed": 101.5,
        "true": 100
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "g-solve-o",
      "kind": "o2-golden",
      "inputs": {
        "true": 100,
        "percent": 2,
        "solve_for": "o",
        "abs": "1"
      },
      "expected": {
        "solve_for": "o",
        "value": 98,
        "candidates": [
          98,
          102
        ],
        "solution_type": "two",
        "status": "success",
        "percent_error": 2,
        "observed": null,
        "true": 100
      },
      "actual": {
        "solve_for": "o",
        "value": 98,
        "candidates": [
          98,
          102
        ],
        "solution_type": "two",
        "status": "success",
        "percent_error": 2,
        "observed": null,
        "true": 100
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "g-solve-t-two",
      "kind": "o2-golden",
      "inputs": {
        "observed": 98,
        "percent": 2,
        "solve_for": "t",
        "abs": "1"
      },
      "expected": {
        "solve_for": "t",
        "value": 96.07843137254902,
        "candidates": [
          96.07843137254902,
          100
        ],
        "solution_type": "two",
        "status": "success",
        "percent_error": 2,
        "observed": 98,
        "true": null
      },
      "actual": {
        "solve_for": "t",
        "value": 96.07843137254902,
        "candidates": [
          96.07843137254902,
          100
        ],
        "solution_type": "two",
        "status": "success",
        "percent_error": 2,
        "observed": 98,
        "true": null
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "g-signed",
      "kind": "o2-golden",
      "inputs": {
        "experimental": 7,
        "theoretical": 9,
        "abs": "0"
      },
      "expected": {
        "solve_for": "p",
        "value": -22.22222222222222,
        "solution_type": "unique",
        "status": "success",
        "percent_error": -22.22222222222222,
        "observed": 7,
        "true": 9
      },
      "actual": {
        "solve_for": "p",
        "value": -22.22222222222222,
        "solution_type": "unique",
        "status": "success",
        "percent_error": -22.22222222222222,
        "observed": 7,
        "true": 9
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "g-infinite-t",
      "kind": "o2-golden",
      "inputs": {
        "observed": 0,
        "percent": 100,
        "solve_for": "t",
        "abs": "1"
      },
      "expected": {
        "solve_for": "t",
        "value": null,
        "solution_type": "infinite",
        "status": "infinite",
        "code": "INFINITELY_MANY",
        "constraint": "T != 0",
        "percent_error": 100,
        "observed": 0,
        "true": null
      },
      "actual": {
        "solve_for": "t",
        "value": null,
        "solution_type": "infinite",
        "status": "infinite",
        "code": "INFINITELY_MANY",
        "constraint": "T != 0",
        "percent_error": 100,
        "observed": 0,
        "true": null
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    },
    {
      "id": "g-p100-t",
      "kind": "o2-golden",
      "inputs": {
        "observed": 50,
        "percent": 100,
        "solve_for": "t",
        "abs": "1"
      },
      "expected": {
        "solve_for": "t",
        "value": 25,
        "solution_type": "unique",
        "status": "success",
        "percent_error": 100,
        "observed": 50,
        "true": 25,
        "omitted_branches": [
          {
            "branch": "T = O / (1 − P/100)",
            "code": "DENOMINATOR_ZERO"
          }
        ]
      },
      "actual": {
        "solve_for": "t",
        "value": 25,
        "solution_type": "unique",
        "status": "success",
        "percent_error": 100,
        "observed": 50,
        "true": 25,
        "omitted_branches": [
          {
            "branch": "T = O / (1 − P/100)",
            "code": "DENOMINATOR_ZERO"
          }
        ]
      },
      "error_ulp": 0,
      "threshold_ulp": 2,
      "ok": true
    }
  ],
  "package_files": [
    {
      "path": "percent-error-reference.mjs",
      "sha256": "96409f51ab7564d7570a8f919da0936b743b324099567a47804d58405dc76029",
      "role": "oracle"
    },
    {
      "path": "check-percent-error-o2.mjs",
      "sha256": "3f0e860060814449dd12db4322fa3ba17903456f20a0cb8bef08f26fe4f76ed6",
      "role": "checker"
    },
    {
      "path": "README.txt",
      "sha256": "bf407d99773008629f071536d7ee4397f2788dbd9b4d9619e5f10962a7db30a7",
      "role": "readme"
    },
    {
      "path": "reproduce.json",
      "sha256": "048d96370795ef0715687dff83f743b5b6a51c4db63cd475507f6d08b84bcd66",
      "role": "vectors"
    }
  ],
  "bundle": {
    "url": "https://www.calculatorx.com/evidence/math.percent_error/o2-reproduce-pack.zip",
    "path": "/evidence/math.percent_error/o2-reproduce-pack.zip",
    "sha256": "67d9e389ec662319d877ce4373f5fbee8bf42cbbcc752ed8dd7f8225548a270f",
    "size_bytes": 22174
  }
}
