Public evidence
Machine-checked verification for calculation version 1.1.1 · tier engine_tested
CVP: CVP VERIFIED · CVP protocol 1.0.0-proposed · Core assurance· SI percent = 0.01; modes of / is-what / of-what / change / adjust-up / adjust-down / difference · Protocol · Schema · Production report
Legacy regression suite: 19/19 calculation tests · Production surface contract 3/3
Three distinct suites: educational examples on the calculator page, this legacy regression count (19/19 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-08.xcal. Calculation version 1.1.1. CVP 1.0.0-proposed. 2/2 golden · 7/7 CVP boundary · 7/7 invalid · 2/2 property · 2/2 metamorphic · 2/2 round-trip · 1/1 cross-interface · 3/3 cross-calculator · 1/1 CVP contract. digest e1b745d88212.
Fingerprint sha256:43a3601fe3d15428d83cc6f727320b8d989bb2e6bb877edd058c45853c2458a3
Input schema sha256:188e4f67b78437338e3f56cb4e7e82003b521697af6707b04fa75321ca920f39 · Output schema sha256:14cbd02203cf735e07c23bf387ea886fc53cd9e9419602643dd6d69f34d95c56 · 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 |
|---|---|---|---|
pct-of | golden | pass | Expected 50 · Actual value=50 · mode=of · mode_label=P% of X · heading=20% of 250 · explainer=20% of 250 equals 50. · inputs_summary=P=20% · X=250 · formula=Y = X × P / 100 · status=success |
pct-of-share-aliases | golden | pass | Expected 50 · Actual value=50 · mode=of · mode_label=P% of X · heading=20% of 250 · explainer=20% of 250 equals 50. · inputs_summary=P=20% · X=250 · formula=Y = X × P / 100 · status=success |
is-what | golden | pass | Expected 25 · Actual value=25 · mode=is-what · mode_label=X is what % of Y · heading=Percent · unit=% · explainer=50 is 25% of 200. · inputs_summary=X=50 · Y=200 · formula=P = 100 × X / Y |
ui-what | golden | pass | Expected 25 · Actual value=25 · mode=is-what · mode_label=X is what % of Y · heading=Percent · unit=% · explainer=50 is 25% of 200. · inputs_summary=X=50 · Y=200 · formula=P = 100 × X / Y |
of-what | golden | pass | Expected 60 · Actual value=60 · mode=of-what · mode_label=X is P% of what · heading=Whole · explainer=12 is 20% of 60. · inputs_summary=X=12 · P=20% · formula=Y = 100 × X / P · status=success |
change | golden | pass | Expected 25 · Actual delta=10 · value=25 · mode=change · mode_label=Percent change · heading=Percent change · unit=% · explainer=increase: 40 → 50 is 25%. · inputs_summary=40 → 50 |
change-abs-old | golden | pass | Expected 50 · Actual delta=50 · value=50 · mode=change · mode_label=Percent change · heading=Percent change · unit=% · explainer=increase: -100 → -50 is 50%. · inputs_summary=-100 → -50 |
adjust-up | golden | pass | Expected 550 · Actual value=550 · mode=adjust-up · mode_label=Increase by % · heading=Increased value · explainer=500 increased by 10% equals 550. · inputs_summary=X=500 · P=10% · formula=Y = X × (1 ± P/100) · status=success |
adjust-down | golden | pass | Expected 450 · Actual value=450 · mode=adjust-down · mode_label=Decrease by % · heading=Decreased value · explainer=500 decreased by 10% equals 450. · inputs_summary=X=500 · P=10% · formula=Y = X × (1 ± P/100) · status=success |
difference | golden | pass | Expected 50 · Actual value=50 · mode=difference · mode_label=Percent difference · heading=Percent difference · unit=% · explainer=Relative difference of 10 and 6 is 50% of their average. · inputs_summary=A=10 · B=6 · formula=Δ% = 100 × |A − B| / ((A + B) / 2) |
diff-negative | boundary | pass | Expected VALUE_MUST_BE_NON_NEGATIVE · Actual VALUE_MUST_BE_NON_NEGATIVE |
change-old-0 | boundary | pass | Expected DIVISION_BY_ZERO · Actual DIVISION_BY_ZERO |
is-what-y-0 | boundary | pass | Expected DIVISION_BY_ZERO · Actual DIVISION_BY_ZERO |
of-what-p-0 | boundary | pass | Expected DIVISION_BY_ZERO · Actual DIVISION_BY_ZERO |
diff-both-zero | boundary | pass | Expected DIVISION_BY_ZERO · Actual DIVISION_BY_ZERO |
of-nan | boundary | pass | Expected INVALID_NUMBER · Actual INVALID_NUMBER |
of-huge | golden | pass | Expected 200000000000000 · Actual value=200000000000000 · mode=of · mode_label=P% of X · heading=20% of 1.000000e+15 · explainer=20% of 1.000000e+15 equals 2.000000e+14. · inputs_summary=P=20% · X=1.000000e+15 · formula=Y = X × P / 100 · status=success |
change-tiny | golden | pass | Expected 100 · Actual delta=1e-8 · value=100 · mode=change · mode_label=Percent change · heading=Percent change · unit=% · explainer=increase: 1.000000e-8 → 2.000000e-8 is 100%. · inputs_summary=1.000000e-8 → 2.000000e-8 |
boundary-pct-diff-neg | boundary | pass | Expected VALUE_MUST_BE_NON_NEGATIVE · Actual VALUE_MUST_BE_NON_NEGATIVE |