Why movement rather than value
A threshold asks a single question: is this number too high? It is a good question and it misses two important situations.
The first is the slow approach. A channel climbing steadily toward a limit is, by the threshold's account, fine - right up to the moment it is not. Everything worth knowing about that episode happened before the alarm, in the shape of the climb.
The second is the abnormal-but-legal reading. Every plant has its own ambient character: a paint shop is not a food line, and a machine shop at 3pm is not the same room at 3am. A value that is unremarkable in absolute terms can be extraordinary for that room at that hour, and a fixed threshold cannot see it because the number never crosses anything.
Reading movement addresses both. A rise of a given steepness is a rise regardless of where it started, which makes the signature portable across sites with different baselines - and portability is what makes a signature library worth building at all.
The twelve dimensions
Seven of the features are velocities - the rate of change of gas, temperature, humidity, pressure and sound channels across the window. Two are accelerations, which ask whether a rise is itself speeding up, the difference between a leak that is steady and one that is opening. The remaining three capture episode shape: the fraction of the window in which flame was active, a sustained rise in the noise floor, and how long the episode has been running.
- mq2_vel - Rate of change of the combustible-gas channel - smoke and LPG
- mq7_vel - Rate of change of the carbon-monoxide channel
- mq135_vel - Rate of change of the air-quality channel - VOCs and general contaminants
- temp_vel - Rate of temperature change
- humidity_vel - Rate of humidity change
- pressure_vel - Rate of pressure change
- mic_vel - Rate of change in sound level
- flame_frac - Fraction of the window in which flame was active
- gas_accel - Acceleration of the gas channels - is the rise itself speeding up
- temp_accel - Acceleration of temperature - the same question for heat
- noise_rise - Sustained rise in the noise floor
- duration - How long the episode has been running
Normalisation, and why each channel gets its own scale
Raw velocities are not comparable across channels. A pressure change of 0.03 units per second is dramatic; a gas-channel change of 0.03 units per second is nothing. Feeding both into the same distance calculation without normalising would let the noisiest channel dominate every match.
So each channel carries its own scale constant, chosen so that a velocity equal to the scale maps to a feature value of one. The genome is then dimensionless and its dimensions are commensurable - which is the precondition for comparing two signatures meaningfully at all.
The same feature order on both sides
The node computes its genome on board, and the server computes the same genome from stored vectors using the same feature order. This is stated explicitly in both the firmware and the TypeScript engine because it is a silent-failure risk of the worst kind: reorder the features on one side only and nothing crashes, nothing logs an error, and every similarity score is quietly meaningless.
Having the node compute it too is what allows a local risk assessment that survives a network outage, rather than one that depends on a round trip to a server it may not be able to reach.
What matching produces, and what it does not
A computed genome is compared against the factory's signature library, and the result is a matched signature and a similarity score. On the node's display this appears alongside the local risk state, so an engineer standing at the unit sees both what it thinks is happening and how confident that match is.
What a match does not do is decide the alarm. Threshold evaluation still runs on every reading and still drives the buzzer. A signature match is evidence - it can open an incident, trigger the burst recording and inform whether the advisory AI layer is consulted - and it is deliberately not the authority. A behaviour signature is a good hypothesis and a poor last word.
Where this is honest about its limits
A signature library has to be built before it can match anything, and building one means observing real hazards or credible simulations of them at a real site. That work is early. The engine is implemented and runs; the library it matches against is not a large, validated corpus, and no accuracy figure for signature matching is published because none has been measured.
The design is sound and the evidence is thin, and those are two different statements. Saying so is more useful than a percentage nobody measured.