Public evidence
Machine-checked verification for calculation version 1.0.2 · tier engine_tested
CVP: CVP VERIFIED · CVP protocol 1.0.0-proposed · Core assurance · all published modes· Declared CVP coverage is all six published modes (simplify, proportion, scale, split, compare, convert), including A:B:C where those modes support it. Integer, terminating-decimal, and simple a/b terms. · Protocol · Schema · Production report
Legacy regression suite: 26/26 calculation tests · Production surface contract 8/8
Three distinct suites: educational examples on the calculator page, this legacy regression count (26/26 golden + boundary), and the CVP verification suite below. They are not the same number. Property, metamorphic, round-trip, O3, and interface statuses/checks are recorded in the CVP Manifest . SKIP (0/0) means that suite has no published vectors.
Protocol checks from the Evidence Manifest. Distinct from the legacy regression suite above. Verification revision 2026-09-16.sources-no-wolfram. Calculation version 1.0.2. CVP 1.0.0-proposed. 13/13 golden · 7/7 CVP boundary · 7/7 invalid · 7/7 property · 2/2 metamorphic · 2/2 round-trip · 3/3 cross-interface · 8/8 CVP contract. digest e32c91d652f9. All six published Ratio modes (simplify, proportion, scale, split, compare, convert), including A:B:C where those modes support it. Independent O2 expected values; exact rational BigInt; Node is runtime host only.
Fingerprint sha256:dac908da70997d5d17219bced551bfbb3489d162043cbc082941e63da82008f4
Input schema sha256:f265bc76ddf4ac054863a56d32fe03592f46d7a183cf98ad39c180496f456d46 · Output schema sha256:a88be281f59641c093c0fb7b28328ac502a4d55a7cda009c4ab75bc5f195a1ca · Build-time SHA-256 digests prove published artifacts agree with each other (release_integrity.scope=workspace). Production attestation GETs canonical URLs twice (public/cached view and origin), including Capability HTML, via npm run attest:production --write
(published at /.well-known/calculatorx-production-attestation.json) and fails if the public Capability page advertises a different calculation_version. This is artifact consistency, not an independent immutable release log.
Engine identity and declared limitations.
Standards and references supporting this tool specification. Methods are listed separately — they are algorithms, not bibliographic sources.
Golden and boundary cases from the legacy Evidence JSON. CVP property, metamorphic, round-trip, O3, and interface statuses/checks are recorded in the Manifest — including SKIP when a suite has no vectors.
| ID | Kind | Status | Detail |
|---|---|---|---|
simplify-12-18 | golden | pass | Expected value=2:3 · formula=r₁:⋯:rₙ → (r₁′÷g):⋯:(rₙ′÷g), rᵢ′=L·rᵢ, L=LCM(dᵢ), g=GCF(|rᵢ′|) · calculation_version=1.0.2 · inputs_summary=12:18 · Actual value=2:3 · mode=simplify · mode_label=Simplify · calculation_version=1.0.2 · formula=r₁:⋯:rₙ → (r₁′÷g):⋯:(rₙ′÷g), rᵢ′=L·rᵢ, L=LCM(dᵢ), g=GCF(|rᵢ′|) · heading=Simplified ratio · ratio=2:3 · gcf=6 |
simplify-decimal | golden | pass | Expected value=2:3 · formula=r₁:⋯:rₙ → (r₁′÷g):⋯:(rₙ′÷g), rᵢ′=L·rᵢ, L=LCM(dᵢ), g=GCF(|rᵢ′|) · calculation_version=1.0.2 · inputs_summary=1.5:2.25 · Actual value=2:3 · mode=simplify · mode_label=Simplify · calculation_version=1.0.2 · formula=r₁:⋯:rₙ → (r₁′÷g):⋯:(rₙ′÷g), rᵢ′=L·rᵢ, L=LCM(dᵢ), g=GCF(|rᵢ′|) · heading=Simplified ratio · ratio=2:3 · gcf=3 |
simplify-fraction | golden | pass | Expected value=9:10 · formula=r₁:⋯:rₙ → (r₁′÷g):⋯:(rₙ′÷g), rᵢ′=L·rᵢ, L=LCM(dᵢ), g=GCF(|rᵢ′|) · calculation_version=1.0.2 · inputs_summary=0.75:5/6 · Actual value=9:10 · mode=simplify · mode_label=Simplify · calculation_version=1.0.2 · formula=r₁:⋯:rₙ → (r₁′÷g):⋯:(rₙ′÷g), rᵢ′=L·rᵢ, L=LCM(dᵢ), g=GCF(|rᵢ′|) · heading=Simplified ratio · ratio=9:10 · gcf=1 |
proportion-missing-c | golden | pass | Expected value=12 · solved_for=C · formula=A/B = C/D · calculation_version=1.0.2 · Actual value=12 · mode=proportion · mode_label=Proportion · calculation_version=1.0.2 · formula=A/B = C/D · heading=C = · solved=12 · solved_for=C |
scale-2-5-times-4 | golden | pass | Expected value=8:20 · formula=r₁:⋯:rₙ → k·r₁:⋯:k·rₙ · calculation_version=1.0.2 · Actual value=8:20 · mode=scale · mode_label=Scale · calculation_version=1.0.2 · formula=r₁:⋯:rₙ → k·r₁:⋯:k·rₙ · heading=Scaled ratio · ratio=8:20 · k=4 |
split-25-by-3-2 | golden | pass | Expected value=15 : 10 · formula=partᵢ = total × (termᵢ / Σ terms) · calculation_version=1.0.2 · Actual value=15 : 10 · mode=split · mode_label=Split · calculation_version=1.0.2 · formula=partᵢ = total × (termᵢ / Σ terms) · heading=Shares · inputs_summary=3:2 · total=25 · explainer=Split 25 by 3:2. |
compare-equivalent | golden | pass | Expected value=Equivalent · equivalent=true · formula=A/B ? C/D · calculation_version=1.0.2 · Actual value=Equivalent · mode=compare · mode_label=Compare · calculation_version=1.0.2 · formula=A/B ? C/D · heading=Comparison · equivalent=true · inputs_summary=4:6 vs 10:15 |
golden-three-term-simplify | golden | pass | Expected value=2:3:4 · formula=r₁:⋯:rₙ → (r₁′÷g):⋯:(rₙ′÷g), rᵢ′=L·rᵢ, L=LCM(dᵢ), g=GCF(|rᵢ′|) · calculation_version=1.0.2 · inputs_summary=6:9:12 · Actual value=2:3:4 · mode=simplify · mode_label=Simplify · calculation_version=1.0.2 · formula=r₁:⋯:rₙ → (r₁′÷g):⋯:(rₙ′÷g), rᵢ′=L·rᵢ, L=LCM(dᵢ), g=GCF(|rᵢ′|) · heading=Simplified ratio · ratio=2:3:4 · gcf=3 |
golden-three-term-scale | golden | pass | Expected value=4:8:12 · formula=r₁:⋯:rₙ → k·r₁:⋯:k·rₙ · calculation_version=1.0.2 · Actual value=4:8:12 · mode=scale · mode_label=Scale · calculation_version=1.0.2 · formula=r₁:⋯:rₙ → k·r₁:⋯:k·rₙ · heading=Scaled ratio · ratio=4:8:12 · k=4 |
golden-three-term-split | golden | pass | Expected value=5 : 10 : 15 · formula=partᵢ = total × (termᵢ / Σ terms) · calculation_version=1.0.2 · Actual value=5 : 10 : 15 · mode=split · mode_label=Split · calculation_version=1.0.2 · formula=partᵢ = total × (termᵢ / Σ terms) · heading=Shares · inputs_summary=1:2:3 · total=30 · explainer=Split 30 by 1:2:3. |
golden-convert | golden | pass | Expected part_to_part=2/3 · part_of_whole_A=40 · part_of_whole_B=60 · formula=A:B → fraction / % · calculation_version=1.0.2 · Actual value=2/3 = 2/3 · mode=convert · mode_label=Convert · calculation_version=1.0.2 · formula=A:B → fraction / % · heading=Conversion · part_to_part=2/3 · part_of_whole_A=40 |
boundary-all-zero | boundary | pass | Expected ALL_ZERO · Actual ALL_ZERO |
boundary-missing | boundary | pass | Expected MISSING_REQUIRED_INPUT · Actual MISSING_REQUIRED_INPUT |
boundary-split-negative | boundary | pass | Expected SPLIT_NEGATIVE_TERM · Actual SPLIT_NEGATIVE_TERM |
boundary-split-zero-sum | boundary | pass | Expected SPLIT_ZERO_SUM · Actual SPLIT_ZERO_SUM |
boundary-proportion-two-blanks | boundary | pass | Expected PROPORTION_ONE_BLANK · Actual PROPORTION_ONE_BLANK |
boundary-proportion-d-zero | boundary | pass | Expected ZERO_DENOMINATOR · Actual ZERO_DENOMINATOR |
boundary-scale-divide-zero | boundary | pass | Expected DIVISION_BY_ZERO · Actual DIVISION_BY_ZERO |
property-simplify-12-18 | property | pass | 12:18 → 2:3 |
property-decimal-equals-fraction | property | pass | 1.5:2.25 = 3/2:9/4 = 2:3 with n-term formula |
property-scale-preserves-equivalence | property | pass | 2:3 × 4 is equivalent to 8:12; scale formula is n-term |
property-part-of-whole-sums-100 | property | pass | 2:3 as parts of the whole is 40% | 60% |
property-negative-simplify | property | pass | -12:18 → -2:3 |
property-share-alias | property | pass | aInput/bInput aliases match a/b |
property-three-term-scale-invariant | property | pass | simplify(kA:kB:kC) = simplify(A:B:C) with the same n-term formula |
property-three-term-split-sums-total | property | pass | Σ share_i = total for A:B:C |