Skip to content

v0.27.0

Choose a tag to compare

@hegel-release hegel-release released this 06 Jul 20:56
Immutable release. Only release title and notes can be modified.

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.