///|
fn main {
  let source = "# A deterministic cross-target scenario manifest\n" +
    "matrix name=basic-demo version=0.3.0\n" +
    "scenario id=hello title=hello-world command=\"moon run examples/basic\" " +
    "targets=native,js,wasm expected=success output=\"scenario-ok\" " +
    "timeout_ms=30000 required=true tags=smoke,readme\n"
  let manifest = @audit.parse_scenario_manifest(source)
  let digest = @audit.scenario_evidence_digest("scenario-ok", "")
  let observations = [
    @audit.ScenarioObservation::{
      id: "hello",
      target: @audit.Native,
      status: @audit.Passed,
      stdout: "scenario-ok",
      stderr: "",
      duration_ms: 14,
      evidence_digest: digest,
    },
    @audit.ScenarioObservation::{
      id: "hello",
      target: @audit.Js,
      status: @audit.Passed,
      stdout: "scenario-ok",
      stderr: "",
      duration_ms: 19,
      evidence_digest: digest,
    },
    @audit.ScenarioObservation::{
      id: "hello",
      target: @audit.Wasm,
      status: @audit.Passed,
      stdout: "scenario-ok",
      stderr: "",
      duration_ms: 23,
      evidence_digest: digest,
    },
  ]
  let matrix = @audit.build_scenario_matrix(manifest, observations, [
    @audit.Native,
    @audit.Js,
    @audit.Wasm,
  ])
  let final_matrix = @audit.apply_policy(matrix, @audit.default_matrix_policy())
  println("CakeCheck Scenario Matrix")
  println(@audit.scenario_matrix_summary(final_matrix))
  println(final_matrix.to_markdown())
  println("matrix-digest=" + @audit.digest_for_matrix(final_matrix))
}