Skip to content

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 07 Jun 12:36
· 15 commits to main since this release
v0.1.0
6ed43e7

[0.1.0] - 2026-06-07: full assertion surface

The full surface: a queryable MeasurementSet, multi-instrument MeterCapture, meter-introspection
MeterInspector, baseline deltas, and the complete Assert.That assertion vocabulary across all three.

Added

  • MeasurementSet (core): an immutable, queryable set of captured measurements with counter-style
    (Total) and histogram-style (Sum/Min/Max/Average) aggregates, raw Values/All, ordered and
    order-insensitive sample comparisons, tag and instrument narrowing (Tagged/ForInstrument), range and
    tag predicates, and a deterministic ToSnapshotString projection.
  • MeterCapture (core): a meter-wide bundle composed from per-instrument captures, built fluently
    with For + Add, queried per instrument or across all via Measurements, with RecordObservable
    for observable gauges.
  • MeterInspector (core): discovers which instruments a meter publishes
    (PublishedInstrumentNames/IsPublished/PublishesAll) via a short-lived MeterListener.
  • InstrumentCapture (core): expanded with OfName/OfObservable construction, Total/LastValue,
    tag queries (Tagged/HasMeasurementTagged), baseline deltas (Snapshot/Since + MeasurementBaseline),
    RecordObservable, and WaitForAsync.
  • MetricsAssertions.TUnit (adapter): the full Assert.That(...).Has* vocabulary (counter and
    up-down-counter totals, measurement counts, emptiness, last value, histogram sum/average/range, exact and
    order-insensitive sample sets, and tag-consistency) over InstrumentCapture, MeasurementSet, and
    MeterCapture.
  • Failure diagnostics: every assertion dumps the captured measurements (instrument, value, tags,
    timestamp) under the failure, so a mismatch shows what was actually recorded, not only the mismatched
    scalar.
  • Hardening: tolerance arguments are validated (finite, non-negative), inverted range bounds are
    rejected, baselines are bound to their originating capture, duplicate MeterCapture instrument names
    dispose the prior capture, and unknown meter-capture instruments fail as assertions rather than throwing.

Changed

  • Breaking: InstrumentCapture.Measurements now returns a MeasurementSet instead of
    IReadOnlyList<CapturedMeasurement>. Use Measurements.All for the underlying list, or the new query
    surface directly.