Home Developers Evidence electrical.battery.pack_sizing

Public evidence

electrical.battery.pack_sizing

Machine-checked verification for calculation version 1.2.0 · tier internally_reviewed

CVP: CVP VERIFIED · CVP protocol 1.0.0-proposed · Engineering assurance· Planning estimate — not BMS / chemistry pack design · Protocol · Schema · Production report

Declared partition coverage
PASS · 4/4 declared partitions (watts, amps, cells, invalid-domain)
Versions
Calculation 1.2.0 · CVP protocol 1.0.0-proposed · Evidence 2026-09-12.round-xcal-iface
Verification revision
2026-09-12.round-xcal-iface · 7/7 property · digest 1e3949ba3d8e

Verification

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.

    This calculator CURRENT · Public schema 1.2.0 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-12.round-xcal-iface. Calculation version 1.2.0. CVP 1.0.0-proposed. 3/3 golden · 16/16 CVP boundary · 14/14 invalid · 7/7 property · 2/2 round-trip · 3/3 cross-interface · 2/2 cross-calculator · 4/4 CVP contract. digest 1e3949ba3d8e.

  • Golden (oracle-backed) 3 / 3
  • CVP boundary 16 / 16
  • Invalid input 14 / 14
  • Property 7 / 7
  • Round-trip 2 / 2
  • Cross-interface 3 / 3
  • Cross-calculator 2 / 2
  • CVP contract 4 / 4
  • Interfaces PASS · UI (SSR) / REST / MCP
  • Interface claim ui-ssr is query-result HTML, not a live browser session.
  • Assurance Engineering
  • release artifacts aligned PASS
  • schema valid input executes PASS
  • engine success output validates schema PASS
  • schema rejects incomplete input PASS

Fingerprint sha256:b3a87a18a21fe41a5c7d2da0d313bf40be7ccbbf30980df5749b8ea96dbd34ca

Input schema sha256:efbfe6f1c002ef9ba44af12ce224324e0618ece83cfc78c98f4db8b38c5f70f3 · Output schema sha256:acb2f259f709c99aca6f4aac55846212b216b63f875beae2644fd0d8aecde756 · 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
battery-pack-sizing
Engine
battery-pack-sizing
Engine build
2026-09-10
Evidence core
2026-09-05T15:29:50.831Z
Rendered
2026-09-16T22:03:43.720Z
Last reviewed
2026-09-05

Assumptions

  • Constant load; ceil cell counts as nominal packing estimate; not Peukert or BMS design
  • Amps mode I_A is battery-side; η does not enter Ah
  • V is target/system nominal voltage; V_pack = Ns·V_cell may differ

Limitations

  • Constant-load inverse of BatteryRuntimeBaseInput / battery_runtime 1.2+
  • Amps mode = battery-side current; η does not enter Ah
  • Cell Ns/Np use ceil — nominal packing estimate only, not BMS / chemistry pack design
  • When V_pack ≠ V_target the result includes warning PACK_VOLTAGE_DIFFERS_FROM_TARGET
  • mode=watts requires P_W; mode=amps requires I_A
  • V_cell XOR incomplete pair → NEEDS_TWO_INPUTS (both or neither)

Sources

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

Methods

Algorithms this engine uses. Not external references.

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
ideal-10AhgoldenpassExpected capacity_Ah=10 · E_Wh=120 · Actual mode=watts · capacity_Ah=10 · E_Wh=120 · t_h=6 · V=12 · dod=1 · eta=1 · P_W=20
cellsgoldenpassExpected capacity_Ah=10 · n_s=4 · n_p=4 · n_cells=16 · Actual mode=watts · capacity_Ah=10 · E_Wh=148 · t_h=5 · V=14.8 · dod=1 · eta=1 · P_W=29.6
cell-halfboundarypassExpected NEEDS_TWO_INPUTS · Actual NEEDS_TWO_INPUTS
missing-tboundarypassExpected MISSING_REQUIRED_INPUT · Actual MISSING_REQUIRED_INPUT
amps-eta-ignoredgoldenpassExpected capacity_Ah=10 · E_Wh=96 · Actual mode=amps · capacity_Ah=10 · E_Wh=96 · t_h=4 · V=12 · dod=0.8 · eta=1 · I_A=2
nonintegral-seriesboundarypasswarning PACK_VOLTAGE_DIFFERS_FROM_TARGET
boundary-10AhboundarypassExpected capacity_Ah=10 · E_Wh=120 · Actual mode=watts · capacity_Ah=10 · E_Wh=120 · t_h=6 · V=12 · dod=1 · eta=1 · P_W=20
boundary-cellsboundarypassExpected n_s=4 · n_p=4 · Actual mode=watts · capacity_Ah=10 · E_Wh=148 · t_h=5 · V=14.8 · dod=1 · eta=1 · P_W=29.6
boundary-cell-capacity-onlyboundarypassExpected NEEDS_TWO_INPUTS · Actual NEEDS_TWO_INPUTS
boundary-invalid-modeboundarypassExpected INVALID_MODE · Actual INVALID_MODE
boundary-dod-over-oneboundarypassExpected FRACTION_OUT_OF_RANGE · Actual FRACTION_OUT_OF_RANGE
boundary-eta-zeroboundarypassExpected FRACTION_OUT_OF_RANGE · Actual FRACTION_OUT_OF_RANGE
boundary-t-zeroboundarypassExpected VALUE_MUST_BE_POSITIVE · Actual VALUE_MUST_BE_POSITIVE
boundary-V-zeroboundarypassExpected VOLTAGE_MUST_BE_POSITIVE · Actual VOLTAGE_MUST_BE_POSITIVE
boundary-P-zeroboundarypassExpected LOAD_MUST_BE_POSITIVE · Actual LOAD_MUST_BE_POSITIVE
boundary-I-zeroboundarypassExpected LOAD_MUST_BE_POSITIVE · Actual LOAD_MUST_BE_POSITIVE
boundary-dod-zeroboundarypassExpected FRACTION_OUT_OF_RANGE · Actual FRACTION_OUT_OF_RANGE
boundary-eta-over-oneboundarypassExpected FRACTION_OUT_OF_RANGE · Actual FRACTION_OUT_OF_RANGE
boundary-watts-missing-PboundarypassExpected MISSING_REQUIRED_INPUT · Actual MISSING_REQUIRED_INPUT
boundary-amps-missing-IboundarypassExpected MISSING_REQUIRED_INPUT · Actual MISSING_REQUIRED_INPUT
property-ahpropertypass10 Ah
property-loadpropertypass2P → 2Ah
property-cellspropertypass4S4P exact stack (no voltage-diff warning)
property-amps-eta-ignoredpropertypassamps η ignored
property-pack-voltage-differspropertypass12 V / 3.7 V → V_pack 14.8 + PACK_VOLTAGE_DIFFERS_FROM_TARGET
property-roundtrip-runtime-wattspropertypasspack sizing ↔ battery_runtime watts round-trip
property-roundtrip-runtime-ampspropertypasspack sizing ↔ battery_runtime amps round-trip