v0.27.0
This release removes gs::fixed_dicts() and its FixedDictBuilder /
FixedDictGenerator types. They produced CBOR Value maps — a leftover
currency from the engine's old serialization layer with no other
consumer. For fixed-shape records, use #[derive(DefaultGenerator)] on
a struct, or gs::tuples!. The hegel::ciborium re-export and the
ciborium and serde dependencies are gone with it.
This release also fixes two long-standing frontend issues:
- Dropping a Hegel handle cached in your own
thread_local!no longer
risks aborting the process during thread teardown when destructor
ordering ran Hegel's internal state down first. - When the engine reports an error while the runner is pulling the next
test case, the run now fails with the engine's actual diagnostic
instead of a misleading "run has not finished yet" internal error.
Finally, chrono::NaiveDate generation now draws through the engine's
new bounded date support, so naive_dates() shrinks toward 2000-01-01
(clamped into the configured bounds) rather than toward year zero, and
shrinks as a single unit.
libhegel C ABI
This release adds inclusive min_value / max_value bounds to
hegel_generate_date, hegel_generate_time, and
hegel_generate_datetime (a breaking signature change). Pass
{1, 1, 1} / {9999, 12, 31} and all-zeros / {23, 59, 59, 999999}
for the conventional full ranges.
Dates are proleptic Gregorian with year in [-999999, 999999] and
draw as a single day offset centred on 2000-01-01 (clamped into range),
mirroring Hypothesis's DateStrategy, so bounded dates keep the
2000-01-01 shrink target. Times draw as a single microsecond offset
shrinking toward min_value, mirroring TimeStrategy; previously they
drew four separate components. Datetimes draw a bounded date, then a
time whose bounds tighten to the endpoint times when the drawn date
lands on a boundary date. Invalid calendar dates, out-of-range time
fields, and inverted bounds are rejected with HEGEL_E_INVALID_ARG.
Because the underlying choice sequences changed shape, failure
databases and reproduce blobs from earlier versions will not replay
against these draws.