///|
/// A correction arrived after the first invoice was issued. Valid time is
/// measured in business days; knowledge time is an ordered intake sequence.
fn main raise {
  let quarter = try! @temporal.Span::new(0L, 90L)
  let opening = try! @temporal.Ledger::new()
  let published = try! opening.commit(10L, [
    @temporal.Change::put("sku/coffee", quarter, "USD 10.00"),
  ])

  // At knowledge time 10, the invoice for day 35 used the original price.
  let original_invoice = published.get("sku/coffee", 35L, 10L)
  assert_eq(original_invoice, Some("USD 10.00"))
  println("Invoice originally issued for day 35: USD 10.00")

  // A correction on knowledge day 20 applies only to valid days [30, 45).
  let revised = try! published.commit_with_report(20L, [
    @temporal.Change::put(
      "sku/coffee",
      try! @temporal.Span::new(30L, 45L),
      "USD 9.50",
    ),
  ])
  assert_eq(revised.changed_fragment_count(), 1)
  let ledger = revised.next()
  let corrected_bill = ledger.get("sku/coffee", 35L, 20L)
  assert_eq(corrected_bill, Some("USD 9.50"))
  assert_eq(ledger.get("sku/coffee", 50L, 20L), Some("USD 10.00"))
  println("Corrected bill for day 35: USD 9.50")

  // The system can still reproduce the originally sent invoice.
  let historical_belief = ledger.get("sku/coffee", 35L, 10L)
  assert_eq(historical_belief, original_invoice)
  println("Replayed prior belief for day 35: USD 10.00")

  // Export a tail for a remote billing worker that already has the base.
  let tail = ledger.to_json_since(10L)
  let worker = try! published.append_json(tail)
  assert_eq(worker.get("sku/coffee", 35L, 20L), corrected_bill)
  println("Archive tail replay agrees with the corrected bill")

  // Whole-window comparison identifies exactly the affected invoice days.
  let differences = ledger.diff_timeline("sku/coffee", quarter, 10L, 20L)
  assert_eq(differences.length(), 1)
  assert_eq(differences[0].valid().start(), 30L)
  assert_eq(differences[0].valid().end(), Some(45L))
  println("Changed valid-day range: [30, 45)")
}