Home Developers Evidence engineering.uncertainty.propagate

Public evidence

engineering.uncertainty.propagate

Machine-checked verification for calculation version 1.9.8 · tier internally_reviewed

CVP: CVP VERIFIED · CVP protocol 1.0.0-proposed · Engineering assurance · Linear GUM: sum, difference, product, quotient, RSS, sensitivity, budget. Correlation matrices must be PSD (singular PSD allowed). O3 mpmath (80 dps) tabulated linear u_c. Monte Carlo: O2-B seeded mulberry32+Box-Muller replay of y_mean/u_c/percentiles (≤2 ULP) for sum, difference, product, quotient, correlated normal, and budget/rectangular; linear_u_c vs first-order GUM.· All published modes; MC is seeded independent replay plus linear_u_c, not full JCGM 101. O3 covers tabulated linear vectors only. Budget dimensional algebra deferred. · Protocol · Schema · Production report

Declared partition coverage
PASS · 9/9 declared partitions (sum, difference, product, quotient, rss, sensitivity, budget, montecarlo, invalid-domain)
Versions
Calculation 1.9.8 · CVP protocol 1.0.0-proposed · Evidence 2026-09-16.seeded-mc-o3
Verification revision
2026-09-16.seeded-mc-o3 · 29/29 property · digest 77cad1dafb2f

Verification

Legacy regression suite: 88/88 calculation tests · Production surface contract 8/8

Three distinct suites: educational examples on the calculator page, this legacy regression count (88/88 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.

    This calculator CURRENT · Public schema 1.9.8 matches · Semantic contract ✓ · Production attested · Public/cache ✓ · Origin ✓

CVP verification suite

Protocol checks from the Evidence Manifest. Distinct from the legacy regression suite above. Verification revision 2026-09-16.seeded-mc-o3. Calculation version 1.9.8. CVP 1.0.0-proposed. 18/18 golden · 47/47 CVP boundary · 29/29 invalid · 29/29 property · 10/10 O3 · 6/6 cross-interface · 8/8 CVP contract. digest 77cad1dafb2f. Published modes: linear GUM (sum, difference, product, quotient, RSS, sensitivity, budget) and seeded Monte Carlo replay of y_mean/u_c/percentiles. Not a full JCGM 101 validation procedure. RNG: mulberry32; normal sampler: Box-Muller. ≤2 ULP vs O3 applies only to the published tabulated linear GUM vectors (sum, difference, ρ=1 difference, product, quotient, RSS, sensitivity, 3×3 PSD, singular PSD, budget). It is not a whole-domain guarantee and does not cover Monte Carlo.

  • Golden (oracle-backed) 18 / 18
  • CVP boundary 47 / 47
  • Invalid input 29 / 29
  • Property 29 / 29
  • O3 high-precision 10 / 10
  • Cross-interface 6 / 6
  • CVP contract 8 / 8
  • Interfaces PASS · UI (SSR) / REST / MCP
  • Interface claim ui-ssr is query-result HTML, not a live browser session.
  • Verified scope Linear GUM: sum, difference, product, quotient, RSS, sensitivity, budget. Correlation matrices must be PSD (singular PSD allowed). O3 mpmath (80 dps) tabulated linear u_c. Monte Carlo: O2-B seeded mulberry32+Box-Muller replay of y_mean/u_c/percentiles (≤2 ULP) for sum, difference, product, quotient, correlated normal, and budget/rectangular; linear_u_c vs first-order GUM.
  • Assurance Engineering
  • Deferred Adaptive MCM, arbitrary PDFs, and the full JCGM 101 validation procedure. Budget sensitivity-coefficient dimensional algebra is not automatically verified. Correlated non-normal MC remains out of O2. O3 does not cover Monte Carlo.
  • contract page version PASS
  • contract capability version PASS
  • contract input schema version PASS
  • contract output schema version PASS
  • evidence version matches manifest PASS
  • schema valid input executes PASS
  • engine success output validates schema PASS
  • schema rejects incomplete input PASS

Fingerprint sha256:d8cfcf55210b3e57585f02738f49bb344b4c1cc9d6597384fadb8f7da98e3fb8

Input schema sha256:263d0ba0dda3ea81aa635bcd61d0eb9e9e9fc347ab4890b6cc20ccacc3a6843f · Output schema sha256:d1d0c1d06cbe6b38725a8566ba4273291b9558081c5786b8e0b65b862a8e66b1 · 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.

Build & scope

Engine identity and declared limitations.

Tool
uncertainty-propagate
Engine
uncertainty-propagate
Engine build
2026-09-12
Evidence core
2026-09-12T08:32:37.705Z
Rendered
2026-09-16T22:03:43.714Z
Last reviewed
2026-08-10

Assumptions

  • Default uncorrelated (rho=0); optional correlations when provided.
  • Linear propagation assumes a local first-order approximation is adequate. For significant model nonlinearity, consider higher-order treatment (JCGM 100:2008/Amd.1:2026) or Monte Carlo propagation (JCGM 101:2008).

Limitations

  • Linear GUM (binary/sensitivity/RSS/budget) or Monte Carlo (JCGM 101) with normal/rectangular draws; not adaptive/MCMC
  • MC: N in 100…100000 (default 10000), deterministic Mulberry32 seed; confidence → empirical percentiles; k → U=k·u_c
  • budget/sensitivity Type A/B + distributions are metadata (except MC uses distribution for draws); u is standard uncertainty
  • contributions are diagonal (c·u)² fractions for linear modes; with correlations percents may not sum to 100%
  • Product/quotient use absolute first-order forms in linear mode; MC quotient rejects >5% near-zero denominator draws (MONTECARLO_UNSTABLE)
  • n×n correlation matrix not positive semidefinite → CORRELATION_MATRIX_NOT_PSD (singular PSD allowed); duplicate unordered pair → DUPLICATE_CORRELATION; conflicting ρ for the same pair → CONFLICTING_CORRELATION
  • Optional Quantity Engine v1.1: SI-prefix conversion + electrical derived rewrites (1000 mV + 2 V → 3 V; V/A → Ω; A·Ω → V; V×A → VA); different additive dimensions → UNIT_MISMATCH; not full SI algebra
  • Unknown mode → INVALID_MODE; k and confidence together → INVALID_INPUT
  • confidence with nonzero ρ/correlations → CORRELATED_DOF_NOT_SUPPORTED (use fixed k)
  • MC rectangular + correlation → CORRELATED_NON_NORMAL_MC_NOT_SUPPORTED (normal marginals only)
  • Public Agent schema uses canonical field names only (components.u/c/x; correlations i/j as index or name). Runtime still accepts legacy aliases (ua/uncertainty/sensitivity/value) for compatibility.

Sources

Standards and references supporting this tool specification. Methods are listed separately — they are algorithms, not bibliographic sources.

Legacy published checks

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.

IDKindStatusDetail
sum-defaultgoldenpassExpected y=150 · u_c=0.22360679774997896 · Actual mode=sum · y=150 · u_c=0.223606797749979 · u_rel=0.00149071198499986 · a=100 · b=50 · ua=0.1 · ub=0.2
product-defaultgoldenpassExpected y=50 · u_c=0.7071067811865476 · Actual mode=product · y=50 · u_c=0.7071067811865476 · u_rel=0.01414213562373095 · a=10 · b=5 · ua=0.1 · ub=0.05
sensitivitygoldenpassExpected u_c=0.6324555320336759 · u_rel=0.06324555320336758 · Actual mode=sensitivity · u_c=0.632455532033676 · u_rel=0.0632455532033676 · y=10 · terms=2 · nu_eff_infinite=false
rssgoldenpassExpected u_c=0.5 · Actual mode=rss · u_c=0.5 · terms=2 · nu_eff_infinite=false
product-a-zerogoldenpassExpected y=0 · u_c=0.5 · Actual mode=product · y=0 · u_c=0.5 · a=0 · b=5 · ua=0.1 · ub=0.05 · rho=0
quotient-b-zeroboundarypassExpected DIVISION_BY_ZERO · Actual DIVISION_BY_ZERO
missing-uaboundarypassExpected MISSING_REQUIRED_INPUT · Actual MISSING_REQUIRED_INPUT
invalid-modeboundarypassExpected INVALID_MODE · Actual INVALID_MODE
rho-sumgoldenpassExpected y=150 · u_c=0.3 · rho=1 · Actual mode=sum · y=150 · u_c=0.30000000000000004 · u_rel=0.0020000000000000005 · a=100 · b=50 · ua=0.1 · ub=0.2
k-expandedgoldenpassExpected U=0.4472135954999579 · k=2 · Actual mode=sum · y=150 · u_c=0.223606797749979 · u_rel=0.00149071198499986 · a=100 · b=50 · ua=0.1 · ub=0.2
nueff-binarygoldenpassExpected nu_eff=225 · Actual mode=sum · y=150 · u_c=0.223606797749979 · u_rel=0.00149071198499986 · a=100 · b=50 · ua=0.1 · ub=0.2
student-t-kgoldenpassExpected nu_eff=9 · k=2.26215716274 · Actual mode=sum · y=1 · u_c=0.1 · u_rel=0.1 · a=1 · b=0 · ua=0.1 · ub=0
budget-basicgoldenpassExpected y=5 · u_c=0.00223606797749979 · Actual mode=budget · u_c=0.0022360679774997894 · u_rel=0.0004472135954999579 · y=5 · terms=2 · nu_eff_infinite=false
mc-sumgoldenpassExpected linear_u_c=0.22360679774997896 · Actual mode=montecarlo · model=sum · a=100 · b=50 · ua=0.1 · ub=0.2 · rho=0 · terms=2
boundary-product-b-zeroboundarypassExpected y=0 · u_c=0.25 · Actual mode=product · y=0 · u_c=0.25 · a=5 · b=0 · ua=0.1 · ub=0.05 · rho=0
boundary-quotient-a-zeroboundarypassExpected y=0 · u_c=0.02 · Actual mode=quotient · y=0 · u_c=0.020000000000000004 · a=0 · b=5 · ua=0.1 · ub=0.05 · rho=0
boundary-all-zero-uboundarypassExpected y=2 · u_c=0 · Actual mode=sum · y=2 · u_c=0 · u_rel=0 · a=1 · b=1 · ua=0 · ub=0
boundary-coeffs-lengthboundarypassExpected INVALID_INPUT · Actual INVALID_INPUT
boundary-empty-uncertaintiesboundarypassExpected MISSING_REQUIRED_INPUT · Actual MISSING_REQUIRED_INPUT
boundary-neg-uaboundarypassExpected VALUE_MUST_BE_NON_NEGATIVE · Actual VALUE_MUST_BE_NON_NEGATIVE
boundary-unit-mismatchboundarypassExpected UNIT_MISMATCH · Actual UNIT_MISMATCH
boundary-unit-sumboundarypassExpected y=150 · u_c=0.22360679774997896 · unit=V · Actual mode=sum · y=150 · u_c=0.223606797749979 · u_rel=0.00149071198499986 · a=100 · b=50 · ua=0.1 · ub=0.2
boundary-unit-si-sumboundarypassExpected y=3 · u_c=0.010049875621120889 · unit=V · Actual mode=sum · y=3 · u_c=0.01004987562112089 · u_rel=0.00334995854037363 · a=1000 · b=2 · ua=1 · ub=0.01
boundary-unit-productboundarypassExpected y=2760 · unit=VA · Actual mode=product · y=2760 · u_c=25.942243542145693 · u_rel=0.0093993636022267 · a=230 · b=12 · ua=1 · ub=0.1
boundary-unit-si-quotientboundarypassExpected y=0.5 · unit=1 · Actual mode=quotient · y=0.5 · u_c=0.0025495097567963926 · u_rel=0.005099019513592785 · a=1000 · b=2 · ua=1 · ub=0.01
boundary-unit-ohmboundarypassExpected y=5 · unit=Ω · Actual mode=quotient · y=5 · u_c=0.05590169943749475 · u_rel=0.01118033988749895 · a=10 · b=2 · ua=0.1 · ub=0.01
boundary-unit-mv-maboundarypassExpected y=500 · unit=Ω · Actual mode=quotient · y=500 · u_c=2.5495097567963922 · u_rel=0.005099019513592784 · a=1000 · b=2 · ua=1 · ub=0.01
boundary-unit-a-ohmboundarypassExpected y=10 · unit=V · Actual mode=product · y=10 · u_c=0.20615528128088306 · u_rel=0.020615528128088305 · a=2 · b=5 · ua=0.01 · ub=0.1
boundary-nua-null-infiniteboundarypassExpected y=150 · nu_eff_infinite=true · Actual mode=sum · y=150 · u_c=0.223606797749979 · u_rel=0.00149071198499986 · a=100 · b=50 · ua=0.1 · ub=0.2
boundary-mc-sumboundarypassExpected linear_u_c=0.22360679774997896 · Actual mode=montecarlo · model=sum · a=100 · b=50 · ua=0.1 · ub=0.2 · rho=0 · terms=2
boundary-mc-NboundarypassExpected VALUE_OUT_OF_RANGE · Actual VALUE_OUT_OF_RANGE
boundary-mc-budgetboundarypassExpected linear_u_c=0.22360679774997896 · Actual mode=montecarlo · model=linear · terms=2 · y=2.9979412161635093 · u_c=0.22221998921316938 · u_rel=0.07412419830484407 · y_mean=2.9979412161635093 · y_median=2.999790879812373
boundary-rho-diffboundarypassExpected y=50 · u_c=0.1 · rho=1 · Actual mode=difference · y=50 · u_c=0.1 · u_rel=0.002 · a=100 · b=50 · ua=0.1 · ub=0.2
boundary-rho-outboundarypassExpected VALUE_OUT_OF_RANGE · Actual VALUE_OUT_OF_RANGE
boundary-k-invalidboundarypassExpected VALUE_MUST_BE_POSITIVE · Actual VALUE_MUST_BE_POSITIVE
boundary-sens-corrboundarypassExpected u_c=0.3 · Actual mode=sensitivity · u_c=0.30000000000000004 · terms=2 · nu_eff_infinite=false
boundary-rss-corr-rejectboundarypassExpected INVALID_INPUT · Actual INVALID_INPUT
boundary-contrib-sumboundarypassExpected u_c=0.22360679774997896 · Actual mode=sum · y=150 · u_c=0.223606797749979 · u_rel=0.00149071198499986 · a=100 · b=50 · ua=0.1 · ub=0.2
boundary-nueff-sensboundarypassExpected nu_eff=32 · Actual mode=sensitivity · u_c=0.28284271247461906 · terms=2 · nu_eff=32.000000000000014 · nu_eff_infinite=false
boundary-dof-lengthboundarypassExpected INVALID_INPUT · Actual INVALID_INPUT
boundary-nua-aloneboundarypassExpected INVALID_INPUT · Actual INVALID_INPUT
boundary-student-tboundarypassExpected nu_eff=9 · k=2.26215716274 · Actual mode=rss · u_c=0.1 · terms=1 · nu_eff=9 · nu_eff_infinite=false · k=2.2621571627981485 · U=0.22621571627981485 · k_source=student_t
boundary-student-normalboundarypassExpected k=1.95996398454 · Actual mode=sum · y=150 · u_c=0.223606797749979 · u_rel=0.00149071198499986 · a=100 · b=50 · ua=0.1 · ub=0.2
boundary-k-and-confidenceboundarypassExpected INVALID_INPUT · Actual INVALID_INPUT
boundary-confidence-rangeboundarypassExpected VALUE_OUT_OF_RANGE · Actual VALUE_OUT_OF_RANGE
boundary-corr-confidenceboundarypassExpected CORRELATED_DOF_NOT_SUPPORTED · Actual CORRELATED_DOF_NOT_SUPPORTED
boundary-corr-confidence-sensboundarypassExpected CORRELATED_DOF_NOT_SUPPORTED · Actual CORRELATED_DOF_NOT_SUPPORTED
boundary-mc-rect-corrboundarypassExpected CORRELATED_NON_NORMAL_MC_NOT_SUPPORTED · Actual CORRELATED_NON_NORMAL_MC_NOT_SUPPORTED
boundary-mc-quotient-unstableboundarypassExpected MONTECARLO_UNSTABLE · Actual MONTECARLO_UNSTABLE
boundary-cov-contribboundarypassExpected u_c=0.3 · Actual mode=sum · y=150 · u_c=0.30000000000000004 · u_rel=0.0020000000000000005 · a=100 · b=50 · ua=0.1 · ub=0.2
boundary-budgetboundarypassExpected y=5 · u_c=0.0022360679774997894 · Actual mode=budget · u_c=0.0022360679774997894 · u_rel=0.0004472135954999579 · y=5 · terms=2 · nu_eff_infinite=false
boundary-budget-named-corrboundarypassExpected u_c=0.3 · Actual mode=budget · u_c=0.30000000000000004 · terms=2 · nu_eff_infinite=false
boundary-budget-emptyboundarypassExpected MISSING_REQUIRED_INPUT · Actual MISSING_REQUIRED_INPUT
boundary-budget-partial-xboundarypassExpected INVALID_INPUT · Actual INVALID_INPUT
boundary-corr-psd-3x3boundarypassExpected u_c=0.20493901531919195 · Actual mode=sensitivity · u_c=0.20493901531919198 · terms=3 · nu_eff_infinite=false
boundary-corr-singular-psdboundarypassExpected u_c=0.3 · Actual mode=sensitivity · u_c=0.30000000000000004 · terms=3 · nu_eff_infinite=false
boundary-corr-not-psdboundarypassExpected CORRELATION_MATRIX_NOT_PSD · Actual CORRELATION_MATRIX_NOT_PSD
boundary-corr-duplicateboundarypassExpected DUPLICATE_CORRELATION · Actual DUPLICATE_CORRELATION
boundary-corr-conflictboundarypassExpected CONFLICTING_CORRELATION · Actual CONFLICTING_CORRELATION
property-sum-ypropertypassy=a+b
property-sum-upropertypassu=√(ua²+ub²)
property-diff-upropertypassdiff shares RSS u
property-productpropertypassproduct absolute first-order
property-product-a-zeropropertypassproduct a=0 → y=0, u_c=|b|ua, u_rel null
property-quotient-a-zeropropertypassquotient a=0 → u_c=|ua/b|, u_rel null
property-quotient-b-zeropropertypassquotient b=0 → DIVISION_BY_ZERO
property-senspropertypass√Σ(c·u)²
property-rsspropertypass3-4-5 RSS
property-zero-upropertypassall ua=0 → u_c=0
property-reportedpropertypassreported u_c=0.22 (2 sig) with formatted_y=150.00; raw retained
property-unit-matchpropertypassmatching units → V
property-unit-mismatchpropertypassV+A → UNIT_MISMATCH
property-unit-si-prefixpropertypass1000 mV + 2 V → 3 V
property-unit-productpropertypassproduct units → VA
property-unit-ohmpropertypassV/A → Ω
property-unit-mv-mapropertypassmV/mA → Ω after SI convert
property-rho-perfectpropertypasssum ρ=1 → ua+ub
property-rho-antipropertypasssum ρ=−1 → |ua−ub|
property-expanded-UpropertypassU=k·u_c with reported.U
property-sens-rho0propertypasssensitivity ρ=0 matches uncorrelated
property-contribpropertypassub dominates → 80%
property-nueffpropertypassWS νeff with νb→∞
property-typespropertypassType A/B + labels pass-through
property-student-tpropertypassStudent-t k(ν=9, p=0.95)
property-budgetpropertypassbudget y=Σx, Vref largest
property-mc-sumpropertypassMC sum ≈ linear u_c within 3%
property-corr-singular-psdpropertypassall ρ=1 3×3 → u_c=0.3
property-corr-not-psdpropertypasspairwise |ρ|≤1 but non-PSD 3×3 → CORRELATION_MATRIX_NOT_PSD