Public evidence
Machine-checked verification for calculation version 1.1.2 · tier internally_reviewed
CVP: CVP VERIFIED · CVP protocol 1.0.0-proposed · Engineering assurance· Ideal diodes; continuous-discharge Cap model when I+C given · Protocol · Schema · Production report
Legacy regression suite: 27/27 calculation tests · Production surface contract 4/4
Three distinct suites: educational examples on the calculator page, this legacy regression count (27/27 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. Calculation version 1.1.2. CVP 1.0.0-proposed. 3/3 golden · 8/8 CVP boundary · 7/7 invalid · 16/16 property · 1/1 cross-interface · 1/1 CVP contract. digest 5a857ec1e482.
Fingerprint sha256:d76b8885f1e5c5a6fc2e79ba140b081e8ea7dd2d25e06c09c76b237629a80f1a
Input schema sha256:cf5bdc0117b7efd2fa3ef4654762c36013049847ebd797a361b0b75d8b18db98 · Output schema sha256:282b736029074bb7ae43782ae5d06564f04ada7bb02d2f5efa7ea9e4d38c7d4d · 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 |
|---|---|---|---|
full-230 | golden | pass | Expected circuit_model=rectified_waveform · Vpeak=325.2691193458119 · Vavg=207.0727527161344 · Vrms_out=230 · f_ripple_Hz=100 · Actual mode=full · circuit_model=rectified_waveform · Vac_rms=230 · Vpeak=325.2691193458119 · Vavg=207.0727527161344 · Vrms_out=230 · f_line_Hz=50 · f_ripple_Hz=100 |
half-230 | golden | pass | Expected circuit_model=rectified_waveform · Vavg=103.5363763580672 · Vrms_out=162.63455967290594 · f_ripple_Hz=50 · Actual mode=half · circuit_model=rectified_waveform · Vac_rms=230 · Vpeak=325.2691193458119 · Vavg=103.5363763580672 · Vrms_out=162.63455967290594 · f_line_Hz=50 · f_ripple_Hz=50 |
ripple | golden | pass | Expected circuit_model=capacitor_smoothed · ripple_Vpp=5 · Vdc_est=14.470562748477143 · Vmin=11.970562748477143 · Vmax=16.970562748477143 · Actual mode=full · circuit_model=capacitor_smoothed · Vac_rms=12 · Vpeak=16.970562748477143 · Vavg=10.803795793885275 · Vrms_out=12 · f_line_Hz=50 · f_ripple_Hz=100 |
bad-vac | boundary | pass | Expected VALUE_MUST_BE_POSITIVE · Actual VALUE_MUST_BE_POSITIVE |
boundary-neg-vac | boundary | pass | Expected VALUE_MUST_BE_POSITIVE · Actual VALUE_MUST_BE_POSITIVE |
boundary-i-without-c | boundary | pass | Expected NEEDS_TWO_INPUTS · Actual NEEDS_TWO_INPUTS |
boundary-c-without-i | boundary | pass | Expected NEEDS_TWO_INPUTS · Actual NEEDS_TWO_INPUTS |
boundary-bad-c | boundary | pass | Expected VALUE_MUST_BE_POSITIVE · Actual VALUE_MUST_BE_POSITIVE |
boundary-bad-f | boundary | pass | Expected VALUE_MUST_BE_POSITIVE · Actual VALUE_MUST_BE_POSITIVE |
boundary-neg-i | boundary | pass | Expected VALUE_MUST_BE_POSITIVE · Actual VALUE_MUST_BE_POSITIVE |
boundary-ripple-exceeds-peak | boundary | pass | warning RIPPLE_EXCEEDS_PEAK |
property-avg-full-twice-half | property | pass | Vavg_full = 2 × Vavg_half |
property-vpeak-mode-independent | property | pass | Vpeak = √2 × Vac |
property-full-vrms-equals-vac | property | pass | full-wave Vrms_out = Vac |
property-half-vrms-vac-over-sqrt2 | property | pass | half-wave Vrms_out = Vac/√2 |
property-full-friple-2fline | property | pass | full-wave f_ripple = 2 × f_line |
property-half-friple-fline | property | pass | half-wave f_ripple = f_line |
property-scale-vac | property | pass | Vac × 2 → Vpeak / Vavg / Vrms × 2 |
property-c-double-halves-ripple | property | pass | C × 2 → ripple ÷ 2 |
property-i-double-doubles-ripple | property | pass | I × 2 → ripple × 2 |
property-f-double-halves-ripple | property | pass | f × 2 → ripple ÷ 2 |
property-models-differ | property | pass | Vdc_est ≠ unfiltered Vavg |
property-vdc-midpoint | property | pass | Vdc_est = (Vmax+Vmin)/2 = Vpeak − ΔV/2 |
property-ripple-warning | property | pass | tiny C → RIPPLE_EXCEEDS_PEAK |
property-invalid-estimate-gated | property | pass | ΔV≥Vpeak → Vdc_est/Vmin null; raw extrapolation only |
property-reject-vac-le0 | property | pass | Vac≤0 rejected |
property-reject-partial-cap | property | pass | I xor C → NEEDS_TWO_INPUTS |