v0.2.2
A live fetch now has to return something shaped like the dataset before it is
believed. A 200 carrying valid JSON with no feature records indexed to zero
features and was returned as source: "live" with no warning, so an endpoint that
had moved produced a confident empty matrix: search_features reported every
feature as nonexistent, and check_feature_support and lint_email failed with "No
client matches", which reads as the caller's typo. A body that fails the check
now takes the same route as a 500, down to the cache and then the bundle, with
the warning that says so.
The live-fetch test runs nightly instead of never. It has always been gated
behind CANIEMAIL_TEST_NETWORK=1 so a caniemail.com outage could not read as a
broken commit, but nothing ever set that variable, and the one path that talks
to upstream had no automated coverage at all.
Nothing changes for a caller getting real data.