{
  "schemaVersion": 1,
  "lessonId": "recovery-05",
  "contentHash": "53af93b1c6c37ad3ae60af050b3fbce1aec596ad453fe6c06ad32042e883b6b8",
  "rendererHash": "a1bd5b648f4731ae5d5f0a24811c2540d1a0a132149ce589d17c4113509cbedf",
  "kind": "executed",
  "generatedAt": "2026-10-20T10:45:46.880275+00:00",
  "provenance": "recorded_cpu_computation",
  "environment": {
    "backend": "cpu",
    "deviceCount": 1,
    "jax": "0.9.2",
    "numpy": "2.4.4",
    "matplotlib": "3.10.8"
  },
  "stdout": "Checkpoint workspace: /var/folders/mp/_mq7srqx2y10p5nhjz9m7hj40000gn/T/jax-async-lesson-z476f6cd\n{\n  \"save_call_seconds\": 0.0032774158753454685,\n  \"remaining_work_and_wait_seconds\": 0.013643625192344189,\n  \"accepted_step\": 1,\n  \"live_step\": 2\n}\nUnpublished step 2 exists; application recovery still selects verified step 1.\n",
  "data": {
    "kind": "bar",
    "labels": [
      "saved snapshot",
      "live state",
      "accepted checkpoint"
    ],
    "ylabel": "completed step",
    "series": [
      {
        "label": "local publication experiment",
        "y": [
          1,
          2,
          1
        ]
      }
    ]
  }
}
