SWMM5 ⇄ SWMM6 Differential Sweep

ENGINE LOADING…
Fleet-scale round-trip verification — every model runs live through the genuine EPA SWMM 5.2.2 WASM engine as the reference side, then deterministic gates compare it against candidate-engine results paired by filename. Certificates are withheld until every gate passes.

1 · Load corpus

Drop .inp files, candidate .out/.rpt results, or a whole folder here.
Candidates pair to models by basename.
Corpus empty.

2 · Tolerances & gates

status: OK ≤ TOL · NEAR MISS ≤ 5×TOL · FAIL > 5×TOL
advisory metrics WARN, never FAIL
certificate requires every required metric ≤ TOL
Changing a value recomputes verdicts instantly from cached results — no engine re-run.

3 · Run & export

Fleet verdicts — severity first

ModelVerdictWorst element ΔPeak%ΔInt% NRMSE%ΔtP h Cont A/B %El.
Load a corpus or the demo fleet, then run the sweep.

Model detail

Select a model row above.
Learn more — how the verdicts work

The verdict hierarchy (highest precedence wins)

RUN INCOMPLETE (errorCode ≠ 0 or zero periods, either side) → FLOW UNITS DIFFER (exact match required) → INCOMPATIBLE TIME GRIDS (report step + period count + start date + every individual report date) → RECORD SETS DIFFER (subcatchment, node, link and pollutant ID sets) → RESULT VARIABLES DIFFER (per-object variable schemas) → CONTINUITY (|flow-routing continuity error| beyond the gate on either side; a candidate .rpt is required unless waived in settings) → DIVERGENT → NEAR MISS → WITHIN TOLERANCE → NUMERICALLY EQUIVALENT. A model only reaches the comparison verdicts if every upstream gate passes — the certificate is withheld on incompatible pairs, so a fleet of comparisons cannot issue false passes.

Required vs advisory metrics

Per element, ΔPeak% and ΔIntegral% are required. Links compare flow, nodes compare depth and total inflow, subcatchments compare runoff. Each integral uses the trapezoidal rule on |value| over the report grid, and is a different physical quantity per kind: flow-through volume for links, inflow volume for node total inflow, runoff volume for subcatchments, and a depth·time area for node depth (integrated depth is not a volume, so the app never calls it one). NRMSE% (series error normalized by the larger peak) and ΔtP (time-of-peak shift) are advisory: they can decorate an element with a WARN but never a FAIL, and never block a certificate. A required metric between TOL and 5×TOL makes the model a NEAR MISS — compared and ranked, but not certified; the certificate requires every required metric at or below TOL. Absolute floors (ABS Q, ABS D) stop near-zero flows from faking percentage blowups.

Where the reference side comes from

Side A is the genuine EPA SWMM 5.2 (Build 5.2.2) engine compiled to WebAssembly, running your .inp in the browser. Side B is whatever your candidate engine wrote — a SWMM6/SWMM5+ build, a different SWMM5 release, or another run of the same engine — as a SWMM5-format .out (plus optional .rpt for the continuity gate) paired by basename. The .out version stamps are shown in the detail panel as version codes, not build fingerprints.

Relation to the orchestration workflow

This app is the browser half of a graph-engineered differential sweep: engine runs and verdict gates are deterministic code (the edges), and judgment — deciding why a DIVERGENT model diverged — stays with you or with a diagnosing agent in a Claude Code workflow. Roadmap: GitHub corpus browser with sibling auto-fetch, interpolated time-grid alignment, .inp fingerprint diff, Web Worker engine execution.