Skip to content

conformance-2026.12

@samuelduchesne samuelduchesne tagged this 08 Sep 02:23
The case set is unchanged from conformance-2026.11: 69 cases, 211 assertions, and
the same 22 accepted divergences. This level exists for `checks/`.

WHAT IS NEW

`checks/weather-monthly` is the first member of a directory the corpus contract has
reserved since the corpus landed, and it is not one of the two claims that contract
named. Reading a file from disk and retrieving weather both stay open; this is a
third claim meeting the same criterion, and it is the one that arrived first.

It claims that each library, handed the text of an EPW file, computes the same
monthly figures the EnergyPlus Weather Converter computed from the same file, and
reports a measurement that was not taken as absent rather than as the value the
format reserves for it.

The oracle is the `.stat` member of a station archive. It is produced by the Weather
Converter, not by either library, and it ships in the same archive as the `.epw` it
describes, so the expectation and the input cannot drift apart. Without it this
capability would be the first in the unification proven only by its own tests.

WHAT A LIBRARY PINNING THIS LEVEL GETS

Two new entry points, one per language, beside the case runners rather than inside
them:

    node runners/weather-check.mjs --library <path>
    python runners/weather_check.py --library <path>

293 comparisons each. 288 monthly means of dry bulb, dew point, relative humidity
and wind speed across six stations, against committed expectations derived from each
station's own summary, within a tolerance derived from the precision that summary
prints rather than chosen. 5 more against the reserved-value table, on a seventh
file from the other producer that carries the sentinels the six do not.

Also `checks/weather-monthly/sentinels.toml`, the EPW reserved-value table, read
from the EnergyPlus Weather File Data Dictionary at two document versions that
agree. Both libraries generate it into themselves at build time from this level, so
neither transcribes it and neither can drift from the other.

`manifest.json` gains a `checks` section, described in `manifest.schema.json` and
mirrored in both runner models. A check is not a case: it has no input document, no
epJSON expectation, and no place in either existing section.

THE FIXTURES ARE COMMITTED, NOT FETCHED

1.7 MB gzipped, seven files, already more than twice the whole `cases/` tree. Gzip
because it is the only compression both standard libraries decode: Node has no xz
and Python has no brotli, and the runners take no dependency. The set does not grow
without a reason recorded in `check.md`.
Assets 2
Loading