# Two bounded balances, not a cleanliness test

Run `python reproduce.py` with numpy and matplotlib. Every parameter is assigned for teaching; no measured room, material or device performance is reported. The standalone script exports 3,751 tracer rows and 903 thermal rows (4,654 total), two original figures in PNG/SVG/PDF, recorded library versions, generator SHA256 and validation results.

## Generic inert tracer

`tracer(a,t)` returns C/C0 = exp(-a*t). Time t is hours and a=Q/V is the constant fresh-air exchange rate in inverse hours. Exported a=0..3 by0.1 and t=0..6 by0.05. The figure selects assigned rates 0,0.5,1,2 per hour. C0 is positive and the normalized initial value is1. A fixed-volume perfectly mixed balance with no source, no reaction and zero incoming tracer gives d(C/C0)/dt=-a(C/C0). At zero exchange the initial tracer remains. Mere recirculation without removal does not count as fresh-air exchange here. Real mixing, ongoing sources, chemical products, adsorption and exposure are absent.

## Independent thermal lumps

`thermal(t,tau)` returns theta=-expm1(-t/tau)=(T-T0)/(Tboundary-T0) for a nonzero fixed temperature step. Time and tau use the same arbitrary units, not prescribed minutes or seconds. Exported tau=1,3,10 and t=0..30 by0.1. The governing equation is dtheta/dt=(1-theta)/tau with theta(0)=0. Curves represent separate assigned first-order responses. They are not locations in a resolved object, a material-specific time constant or evidence that any particular interior has reached a temperature. At one time constant the response is about0.6321 of the imposed step; the limit is1.

## Checks and limits

The independent midpoint ODE integrator uses120,240,480 steps for four selected cases; endpoint errors decrease approximately fourfold when the step halves. This verifies the analytic curves against numerical integration without reusing their evaluation formula as the integrator. Bounds, monotonicity, initial/long-time/zero-exchange limits and eight invalid-input guards pass. `validation.json` records absolute errors. Domains require finite nonnegative rate/time and positive finite time constant.

Neither plot models microbial inactivation, sterilization, pathogen transport, safe occupancy, a treatment time, chemical exposure or food preservation. A concentration change or thermal response alone does not establish a hygiene endpoint. Applications are reading a conservation balance, separating assumptions from measurements, and understanding why a boundary condition cannot substitute for a validated process.
