Home Developers CVP

CalculatorX Developers

Calculator Verification Protocol

A public, versioned protocol for verifying CalculatorX calculators with reproducible evidence. Proposed — not Stable.

Proposed CVP 1.0 — not Stable.

A public, versioned protocol for verifying CalculatorX computational tools with reproducible evidence.

Layer Answers
Evidence What evidence exists for a calculator?
CVP (this page) Which rules make that evidence sufficient?
Trust Summary How do humans read the evaluation result?

Trust Summary is the human-readable result of CVP verification — not a separate trust system.

Trust architecture

CVP Specification
        ↓
Verification Runner
        ↓
Evidence Manifest ──→ Attestation ──→ Production binding
        ↓
   ┌────┴────┐
Trust Summary   Evidence JSON / API / MCP
 (humans)            (agents)

What does CVP Verified mean?

CVP Verified is CalculatorX machine verification against the public CVP protocol for a declared version and assurance profile. Evidence (Manifest, tests, digest, production attestation) is inspectable.

It does not mean third-party certification, laboratory accreditation, or an independent audit — unless that is explicitly stated. It does not mean every possible input has been enumerated. It means the declared model passed the required controls as specified, with published evidence.

Core (pure math / unitless transforms) is that machine-verification profile: algebraic model, independent O2 expected values, golden / boundary / invalid-input cases, declared partition coverage, contracts, cross-interface consistency, and production attestation. Domain expert review is optional; when it has not been performed, that absence is disclosed.

While Proposed, UI MUST show the CVP protocol version (including -proposed) plus the assurance profile in the badge (e.g. CVP VERIFIED · CVP protocol 1.0.0-proposed · Engineering assurance), not bare CVP VERIFIED. Do not emit a bare Proposed 1.0.0 token next to Calculation 1.1.1 — that collides with calculation versions. The assurance token is the CVP profile, not a calculator input mode. When a Manifest declares verified_scope, the badge and Trust card SHOULD show that scope as a claim field (example: Verified scope: Basic RSS/WCA).

What cross-interface PASS means

CVP-IFACE-01 compares equivalent semantic inputs across published surfaces: crawlable UI (SSR) query-result HTML, REST, and MCP. MCP invokes the same calc API handler as REST — it is not a second independent runtime.

PASS means those surfaces agreed on the recorded samples. It does not prove a live browser session, client hydration, cache switching, or end-to-end UI interaction. Those remain outside Core interface evidence unless a separate check is explicitly recorded.

Core controls (summary)

CVP evaluates objective evidence across:

  • Formula / model provenance
  • Independent reference (reference_scope: model · expected values · numerical behavior)
  • Golden, boundary, and invalid-input tests
  • Numerical policy (no post-hoc tolerance fit)
  • Input / mode coverage
  • Semantic contracts
  • Cross-interface consistency (when multiple surfaces exist)
  • Artifact integrity
  • Production attestation
  • Stochastic / Monte Carlo contract (when the IUT is RNG-driven): RNG + seed + sampler, seeded O2, analytic vs sampling layers, semantic partitions, sampling CI

Normative MUST / SHOULD language lives only in the specification.

Assurance profiles

Profile Typical use
core Pure math / unitless transforms
engineering Physical models with units and assumptions
numerical Iterative / approximate / high-precision algorithms

Random / Monte Carlo calculators keep their assurance profile (engineering or numerical) and additionally satisfy the stochastic contract: RNG + seed + sampler, a seeded stochastic O2, analytic vs sampling layers, semantic partitions, and sampling CI when yield is published. Gold standard: Monte Carlo Tolerance Analysis.

CVP vs Review policy

Signal Role
CVP Computational verification status from Evidence Manifest
Review policy / Domain Expert Review Supplemental human / domain assurance — does not by itself determine CVP conformance

Short-term both coexist. Long-term, CalculatorX trust claims migrate to the CVP evidence model.

Public verification summaries

Public Evidence records the model, numerical policy, calculation version, verification revision, aggregate outcomes, references and artifact commitments. The complete verification corpus, oracle implementations, reference tables, generators and source archives are retained privately. This publication boundary applies equally to Web, REST and MCP consumers.

Public resource Example
Verification summary /evidence/math.cos/reproduce
Summary JSON /evidence/math.cos/reproduce.json
Public Manifest representation /evidence/math.cos/latest.cvp.json
Input contract and examples /capabilities/math.cos

The disclosure.policy value calculatorx-public-evidence-v1 identifies a public summary representation, rather than the complete maintainer verification document. Full case inputs, expected/actual execution records, seeds, oracle source and reference-table downloads are not included in those summaries. Historical reproduce routes provide summaries.

A digest identifies an artifact; it does not disclose it or establish that an external reader has independently reproduced the complete verification run. You can recompute the listed public cases with the open-source verifier in the public replay packs section. Complete suite reruns require authorized access to the maintainer artifacts. CVP remains proposed and is not third-party certification.

Numerical calculation versions and the REST/MCP computation contracts are unchanged. The public-representation migration changes artifact hashes and requires a fresh production attestation before those new bytes can be advertised as CURRENT.

Digest names (do not interchange)

Agents often see several SHA-256 values labeled loosely as “evidence digest.” They hash different subjects:

Interop name Field Scope
cvp_core_sha256 / cvp_evidence_digest Manifest artifacts.cvp_core_sha256 (= evidence_digest) CVP verification fingerprint v2 (immutable core)
artifact_evidence_sha256 Evidence release_integrity.digests.evidence_core_sha256 Canonical Evidence core (Trust freshness)
evidence_catalog_digest Manifest artifacts.attested_catalog_sha256 / report attested_catalog_digest Capability catalog integrity

Core vs Overlay: attestation status, CURRENT/STALE, timestamps, and Evidence tests.contract counts are Trust Overlay — they MUST NOT change cvp_core_sha256. Immutable pins are write-once for a given core digest.

Also distinguish display fields:

Field Meaning
verification_status Suite obligations only (VERIFIED / FAILED / …)
production_freshness Attestation bind of cvp_core_sha256 (CURRENT / STALE / ABSENT)
overall_trust Machine overall (VERIFIED / VERIFIED_STALE / VERIFIED_UNATTESTED / …)
status Composite Trust projection (suite + freshness). VERIFIED requires CURRENT.

Production Attestation binds cvp_core_sha256, not the overlay revision label and not live CURRENT/STALE fields. Immutable pins are write-once for a given core digest; latest.cvp.json may carry overlay updates.

Manifests SHOULD expose artifacts.digest_registry with digest_scope, digest_algorithm, and canonicalization. Spec: CVP §11.1.

Production attestation

CVP-PROD-01 binds to the site-wide report at /.well-known/calculatorx-production-attestation.json. The calculator Manifest attestation field is a projection of that report onto the capability — not a second independent signature.

Distinguish two layers:

Layer Meaning
Site-wide artifact checks (status=pass, is_current=true) Published HTML / schema / evidence digests matched when the report was written
Per-calculator CVP Production CURRENT Requires CVP Manifest VERIFIED and Manifest attestation CURRENT

A site-wide pass does not by itself authorize Calculator / Capability / Evidence Trust rows to show Production CURRENT, and MUST NOT paint CVP VERIFIED when the Manifest is STALE. Trust surfaces share one final CVP status; local artifact PASS must not independently invent VERIFIED/CURRENT.

calculator-html-cvp-projection is a full Trust Projection equality check, not a badge-only check. Advertised Calculator / Capability / Evidence fields (revision, verified_scope, deferred_scope, coverage N/N, suite counts, digest) MUST match the Manifest. A VERIFIED badge with an old scope-honesty revision is a fail. Share URLs that are a primary UX (for example Tolerance Stack-up ?mode=rss&tol1=…) are probed in addition to the canonical calculator page.

Inside the production report, also distinguish probe snapshot from final CVP status:

Field Meaning
snapshot_status / items[] Probe-time checks. Immediately after the digest-stamp attest (before cvp:run + Trust HTML redeploy), CVP surface rows may still say STALE. After the closing attest (post-CVP deploy), these should agree with live VERIFIED.
cvp_probe_status Index of those probe-time CVP statuses.
current_cvp_status Final publish gate per capability. Updated when cvp:run binds Manifest attestation to CURRENT; does not rewrite items or mint a new attestation_id until the next --write.

Auditors should prefer a closed deploy (npm run deploy:pages) where the final --write re-probes after VERIFIED is live, so items / cvp_probe_status / current_cvp_status tell one story. If reading an in-flight report, gate on Manifest attestation.status=CURRENT and current_cvp_status, not a lone historical STALE string in an older probe detail.

Site-wide status: stale is not a calculator veto. The top-level report is a snapshot of every attested capability. One STALE capability (or a digest drift) sets status=stale and is_current=false even when 9776/9776 probe items PASS and electrical.apparent_power is VERIFIED + CURRENT. Read these fields instead of treating the first stale token as site-wide failure:

Field Meaning
snapshot_status Artifact probe result (pass / fail)
stale_capability_count / cvp.stale How many capabilities are live CVP STALE
verified_current_capability_count / cvp.current How many are live VERIFIED + CURRENT
stale_reason Why the top-level status is stale, including which ids
current_cvp_status.{capability_id} The calculator gate

After Evidence or Manifest regeneration: digest-stamp with attest:production --write, bind with cvp:run, deploy Trust HTML, then attest again so attested_evidence_digest matches current_evidence_digest and probe rows are not left STALE while Manifest is VERIFIED. A Manifest MUST NOT show CURRENT while the site-wide report is fail for the same evidence set. CVP-PROD-01 MUST FAIL when the bound report status=fail; do not record an unconditional PASS whose notes quote a production FAIL. Site-wide status=stale with snapshot_status=pass does not by itself demote a capability whose current_cvp_status is VERIFIED + CURRENT.

Trust Production copy MUST distinguish the bound snapshot from the live site-wide report when they disagree, including timestamps:

Token Meaning
Bound attestation PASS @ T1 This calculator's last production bind / snapshot
Site-wide CVP health: N CURRENT · K require re-attestation @ T_live Live origin report: this calculator may be CURRENT while other capabilities need re-attestation

Do not label baked SSR clocks as Live. Immutable Manifest overlay notes MAY retain the bind-time Live site report phrasing as historical context; Trust HTML MUST not present that bind-time clock as the current site report.

Do not write CVP-PROD-01 notes that say site report pass when the live top-level status is stale. Auditors should see both clocks, not a collapsed CURRENT badge that contradicts the open site report.

Protocol status

Item Value
Version 1.0.0-proposed
Document status Proposed (not Stable)
Normative text /developers/cvp/spec/1.0
Evidence Manifest schema /developers/cvp/schema · JSON
Errata ledger /developers/cvp/errata (history only)
Engineering pilots electrical.amps_to_volts, electrical.adc.snr, electrical.rf.antenna_length (engineering O3 template) → /evidence/{capability_id}/{version}.cvp.json
Math graph pilots math.arcsin, math.arccos, math.arctan, math.sin, math.cos, math.tan, math.log, math.ln, math.square_root, math.root, math.exponent, math.antilog (core + URL→result→graph)
Math engineering graph math.exponential_growth (engineering + URL→result→graph; constant-rate model, not a unitless core identity)
Math core (profile only) arithmetic, fractions, scientific notation, quadratic, percentage / percent change — core, no Live-graph integration claim

Stable readiness (internal) requires a production-grade Runner across heterogeneous calculators without special exemptions, Trust Summary fully derived from the same Manifest, and formal JSON canonicalization before signed manifests.

Public replay packs

Get the open-source CVP CLI and run the commands from its checkout with Python 3.9 or newer. Each release pins a replay Manifest SHA-256. The separate CVP core identifies the CalculatorX verification release. The machine-readable release index lists both pins and the exact download paths.

The commands download the pack and then verify it offline. Obtain the Manifest pin from a release record you trust. To also compare the listed inputs with production, add --live https://www.calculatorx.com to the verify command. The report separates file integrity, reference replay, and optional API comparison.

units.convert@0.1.1 public-replay-1

Public cases for 10 registered units. Covers exact linear and affine conversions, symbolic pi, decimal34, binary64 boundaries, and listed rejections.

18 cases · CVP CLI 0.1.0 or newer · Pinned CVP Manifest · manifest.json · cases.json · reference-units.json

mkdir -p 'units.convert-0.1.1-public-replay-1'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-1/manifest.json' -o 'units.convert-0.1.1-public-replay-1/manifest.json'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-1/cases.json' -o 'units.convert-0.1.1-public-replay-1/cases.json'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-1/reference-units.json' -o 'units.convert-0.1.1-public-replay-1/reference-units.json'
python3 -m cvp_cli verify 'units.convert-0.1.1-public-replay-1' --manifest-sha256 4a02c7146ad66f8db17c7eb05a238cf485fe105a4f0fc15aa563e823bcbbfefa

units.temperature.celsius_kelvin@1.0.2 public-replay-1

Public decimal-text cases for both temperature point directions, absolute zero, and listed input rejections.

8 cases · CVP CLI 0.1.1 or newer · Pinned CVP Manifest · manifest.json · cases.json

mkdir -p 'units.temperature.celsius_kelvin-1.0.2-public-replay-1'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.temperature.celsius_kelvin/1.0.2/public-replay-1/manifest.json' -o 'units.temperature.celsius_kelvin-1.0.2-public-replay-1/manifest.json'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.temperature.celsius_kelvin/1.0.2/public-replay-1/cases.json' -o 'units.temperature.celsius_kelvin-1.0.2-public-replay-1/cases.json'
python3 -m cvp_cli verify 'units.temperature.celsius_kelvin-1.0.2-public-replay-1' --manifest-sha256 edfbddfb0893eca47a89b43d65b029dd84c9b1eaf50df74b365c12dc21dbc04a

units.pressure.psi_bar@1.0.2 public-replay-1

Public decimal-text cases for both positive pressure directions, including binary64 range boundaries and listed rejections.

8 cases · CVP CLI 0.1.1 or newer · Pinned CVP Manifest · manifest.json · cases.json

mkdir -p 'units.pressure.psi_bar-1.0.2-public-replay-1'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.pressure.psi_bar/1.0.2/public-replay-1/manifest.json' -o 'units.pressure.psi_bar-1.0.2-public-replay-1/manifest.json'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.pressure.psi_bar/1.0.2/public-replay-1/cases.json' -o 'units.pressure.psi_bar-1.0.2-public-replay-1/cases.json'
python3 -m cvp_cli verify 'units.pressure.psi_bar-1.0.2-public-replay-1' --manifest-sha256 2b51b19389d9b3a484f129c14168c14205a3ea1f8f2f6aa7afd76d30e2d02afc

math.percentage@1.2.0 public-replay-1

Public cases for percentage of a whole, part as a percentage, and recovering the whole. Covers listed decimal inputs and zero-divisor rejections.

10 cases · CVP CLI 0.1.0 or newer · Pinned CVP Manifest · manifest.json · cases.json

mkdir -p 'math.percentage-1.2.0-public-replay-1'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/math.percentage/1.2.0/public-replay-1/manifest.json' -o 'math.percentage-1.2.0-public-replay-1/manifest.json'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/math.percentage/1.2.0/public-replay-1/cases.json' -o 'math.percentage-1.2.0-public-replay-1/cases.json'
python3 -m cvp_cli verify 'math.percentage-1.2.0-public-replay-1' --manifest-sha256 826fbc505e4546df7fb2df3a90c0700dff2f73b5942b5c4e9baeb9233309dc51

units.convert@0.1.1 public-replay-2

Additional public cases for 51 unit definitions across 13 quantity kinds, including mass, elapsed time, speed, area, volume, section modulus, force, pressure, energy, power, frequency, information, and data rates.

39 cases · CVP CLI 0.1.0 or newer · Pinned CVP Manifest · manifest.json · cases.json · reference-units.json

mkdir -p 'units.convert-0.1.1-public-replay-2'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-2/manifest.json' -o 'units.convert-0.1.1-public-replay-2/manifest.json'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-2/cases.json' -o 'units.convert-0.1.1-public-replay-2/cases.json'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-2/reference-units.json' -o 'units.convert-0.1.1-public-replay-2/reference-units.json'
python3 -m cvp_cli verify 'units.convert-0.1.1-public-replay-2' --manifest-sha256 26aaf7d8f1d704b8812b1f76145b23cf64fd6ff4a6f2d37b7b68c3472b44bce9

units.convert@0.1.1 public-replay-3

Public electrical and magnetic conversions for 50 unit definitions across 12 quantity kinds. Includes exact prefixes, ampere-hours, elementary charge, electrical material properties, apparent and reactive power, and gauss.

39 cases · CVP CLI 0.1.0 or newer · Pinned CVP Manifest · manifest.json · cases.json · reference-units.json

mkdir -p 'units.convert-0.1.1-public-replay-3'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-3/manifest.json' -o 'units.convert-0.1.1-public-replay-3/manifest.json'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-3/cases.json' -o 'units.convert-0.1.1-public-replay-3/cases.json'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-3/reference-units.json' -o 'units.convert-0.1.1-public-replay-3/reference-units.json'
python3 -m cvp_cli verify 'units.convert-0.1.1-public-replay-3' --manifest-sha256 f9cd1cc85d1c109dcc266c2e460e0535c72249307db8437bafce6edacfe51710

units.convert@0.1.1 public-replay-4

Public fluid, thermal, and structural conversions for 52 unit definitions across 16 quantity kinds. Includes flow, density, concentration, viscosity, thermal properties, temperature coefficients, and area moments.

39 cases · CVP CLI 0.1.0 or newer · Pinned CVP Manifest · manifest.json · cases.json · reference-units.json

mkdir -p 'units.convert-0.1.1-public-replay-4'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-4/manifest.json' -o 'units.convert-0.1.1-public-replay-4/manifest.json'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-4/cases.json' -o 'units.convert-0.1.1-public-replay-4/cases.json'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-4/reference-units.json' -o 'units.convert-0.1.1-public-replay-4/reference-units.json'
python3 -m cvp_cli verify 'units.convert-0.1.1-public-replay-4' --manifest-sha256 31314a7a0fe6356bde67a9b718e7b183d37c0e24190d86ad709b2a307b75a00b

units.convert@0.1.1 public-replay-5

Public metric and customary conversions for 58 unit definitions across 9 quantity kinds. Includes international and nautical lengths, US and imperial capacities, short and long tons, exact ratios, and symbolic angle and angular-velocity results.

40 cases · CVP CLI 0.1.0 or newer · Pinned CVP Manifest · manifest.json · cases.json · reference-units.json

mkdir -p 'units.convert-0.1.1-public-replay-5'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-5/manifest.json' -o 'units.convert-0.1.1-public-replay-5/manifest.json'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-5/cases.json' -o 'units.convert-0.1.1-public-replay-5/cases.json'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-5/reference-units.json' -o 'units.convert-0.1.1-public-replay-5/reference-units.json'
python3 -m cvp_cli verify 'units.convert-0.1.1-public-replay-5' --manifest-sha256 6233f817a1a53508a6aa5d1282c0d114e7c2b7598d13bd4a22e4cfa930c084da

units.convert@0.1.1 public-replay-6

Public engineering and information conversions for 65 unit definitions across 14 quantity kinds. Includes pressure, energy and calorie conventions, refrigeration power, force, torque, electrical prefixes, and decimal and binary information units.

40 cases · CVP CLI 0.1.0 or newer · Pinned CVP Manifest · manifest.json · cases.json · reference-units.json

mkdir -p 'units.convert-0.1.1-public-replay-6'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-6/manifest.json' -o 'units.convert-0.1.1-public-replay-6/manifest.json'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-6/cases.json' -o 'units.convert-0.1.1-public-replay-6/cases.json'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-6/reference-units.json' -o 'units.convert-0.1.1-public-replay-6/reference-units.json'
python3 -m cvp_cli verify 'units.convert-0.1.1-public-replay-6' --manifest-sha256 15ef4599787c327a8f69bf3ca13059ad7e26a17a7a05b6eb5244fc5ff89b4396

units.convert@0.1.1 public-replay-7

Public cases for 47 unit definitions across 23 quantity kinds, including Rankine, photometry, activity, dose, and amount of substance. Nine cases check same-unit conversion in quantity kinds with a single registered unit.

39 cases · CVP CLI 0.1.0 or newer · Pinned CVP Manifest · manifest.json · cases.json · reference-units.json

mkdir -p 'units.convert-0.1.1-public-replay-7'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-7/manifest.json' -o 'units.convert-0.1.1-public-replay-7/manifest.json'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-7/cases.json' -o 'units.convert-0.1.1-public-replay-7/cases.json'
curl -fSL 'https://www.calculatorx.com/developers/cvp/packs/units.convert/0.1.1/public-replay-7/reference-units.json' -o 'units.convert-0.1.1-public-replay-7/reference-units.json'
python3 -m cvp_cli verify 'units.convert-0.1.1-public-replay-7' --manifest-sha256 8b24de33eca3cee90e715e3789c5b0f7b0de0bcd5bd0fcba0696f2c2225b795c