///|
fn main {
  let hole = @lsh775/moonbit_metrology.Feature::{
    id: "H1",
    kind: @lsh775/moonbit_metrology.FeatureKind::Hole,
    nominal: 10.0,
    lower: -0.1,
    upper: 0.1,
    datum: false,
  }
  let datum = @lsh775/moonbit_metrology.Feature::{
    id: "A",
    kind: @lsh775/moonbit_metrology.FeatureKind::Plane,
    nominal: 1.0,
    lower: -0.1,
    upper: 0.1,
    datum: true,
  }
  let device = @lsh775/moonbit_metrology.new_device("cmm-demo", 0.01, 50.0, [
    @lsh775/moonbit_metrology.FeatureKind::Hole,
    @lsh775/moonbit_metrology.FeatureKind::Plane,
  ])
  let features = [hole, datum]
  let planned = @lsh775/moonbit_metrology.plan(
    part_id="bracket-demo",
    features,
    [device],
  )
  let observations = [
    @lsh775/moonbit_metrology.new_observation("H1", 10.02, 3),
    @lsh775/moonbit_metrology.new_observation("A", 1.0, 5),
  ]
  let trace = @lsh775/moonbit_metrology.build_audit_trace_with_features(
    plan=planned,
    features~,
    observations~,
  )
  let summary = @lsh775/moonbit_metrology.summarize_batch(feature=hole, observations=[
    observations[0],
  ])
  println(
    @lsh775/moonbit_metrology.render_audit_report(trace~, summary=Some(summary)),
  )
}