{
  "schema": 1,
  "kind": "synthetic learner export",
  "identity": "Course Engineer <engineer@example.invalid>",
  "checkpoints": {
    "CP00": {
      "commit": "ee438a6fcaa96b2f461f48217d479cb7ab1003c9",
      "files": {
        "CHECKPOINT.md": "39515a3a2e530c2c0712fe650da3fc74f631f267feb79cb6606e22f9831f92e3",
        "README.md": "16d88a5d6ad31dba8fc45e497d38595acacf553e1dd488c15e6b0c6198e29707",
        "excerpts/reading.cpp": "6c4fff7967759f4ed687fcadc83ec24f2998c4fdbe3cc29e4f2dc54fc2b6f198",
        "fixtures/sample-log.jsonl": "24f94252f30f15701ebcb127e726e502a62264d32285b97eb67cbf4f962aada6",
        "references/technical-note.md": "243ada138c24c76e6afbb73208695acc060a7c9530e994e66e0e53d849f02261"
      }
    },
    "CP01": {
      "commit": "1ca7e71bcad58601cc3c4dc1114ac98086a674f9",
      "files": {
        ".gitignore": "d285b4a293e7885821ef54d87490f94baeeb89bc97efd1e3790f25f5db992b55",
        "CHECKPOINT.md": "6289fc81c273ee83c072a8f2bfe86d84f47fc9b50546f6ea7460653a60f17825",
        "README.md": "bc49d608730e03de1fa873dbe3dc14605b81544a84c75d179d260fae149190e5",
        "dependencies.json": "ac647209d612d443389459618d3ab3e39a8dc5e819f7a3a4dfeb8415b370313d",
        "docs/setup.md": "61a006dd7aedb92d1b6c24c28c021952f93b01b724b4fb6fd79cd39d1f42ff94",
        "firmware/sensor-monitor/sensor-monitor.ino": "eead565ae1113e2456c19801bffc6c14d97c315287ed4c79f4a74393856e755c",
        "fixtures/normal.csv": "be74fcd5440baa3ae249d2c0179e77a7d7fd78637dc60513f22d1de293976810",
        "host/replay.cpp": "4f63a4bd7fa7599d3b7eaff6f32b11ce1a264a3fd01a601872ec9d4969849a59",
        "scripts/build-firmware.cmd": "109e770c569ffd3198ffd5a0fe18ea3160986dcefb11e5f8e1d4c44a93dd6476",
        "scripts/common.cmd": "c9c8dc0d3f2227e3430dc0ba72257a9a0c12e8f796a669cf0f2950f84b5a6027",
        "scripts/replay.cmd": "4cf3ae69f7a027d91dd3dcc9f68839d17fc4a31efa5e6dd7c56a548bd96f8b44"
      }
    },
    "CP02": {
      "commit": "70abd1f47a51b8899677bebdf8e3da44921e15ba",
      "files": {
        ".gitignore": "d285b4a293e7885821ef54d87490f94baeeb89bc97efd1e3790f25f5db992b55",
        "CHECKPOINT.md": "b07e5403f15d3b547b7a4a4ad5ed9eae068f90a9e23fca92d093e1db8f5a3ac6",
        "README.md": "488a1ef508e44507420b15f4274f738ad09483dc80bef0f3a810dfe55c258b32",
        "dependencies.json": "ac647209d612d443389459618d3ab3e39a8dc5e819f7a3a4dfeb8415b370313d",
        "docs/hardware.md": "1a665605b31bb6954f349ea72b6ff59c605723bb37a006e4a50fb01a0183cae4",
        "docs/project-brief.md": "2eb408a988d5131d47ea9ed5cfb8f9edef1474175ad8ae1e548b4583dc82ed62",
        "docs/setup.md": "61a006dd7aedb92d1b6c24c28c021952f93b01b724b4fb6fd79cd39d1f42ff94",
        "firmware/sensor-monitor/sensor-monitor.ino": "eead565ae1113e2456c19801bffc6c14d97c315287ed4c79f4a74393856e755c",
        "fixtures/normal.csv": "be74fcd5440baa3ae249d2c0179e77a7d7fd78637dc60513f22d1de293976810",
        "host/replay.cpp": "4f63a4bd7fa7599d3b7eaff6f32b11ce1a264a3fd01a601872ec9d4969849a59",
        "scripts/build-firmware.cmd": "109e770c569ffd3198ffd5a0fe18ea3160986dcefb11e5f8e1d4c44a93dd6476",
        "scripts/common.cmd": "c9c8dc0d3f2227e3430dc0ba72257a9a0c12e8f796a669cf0f2950f84b5a6027",
        "scripts/replay.cmd": "4cf3ae69f7a027d91dd3dcc9f68839d17fc4a31efa5e6dd7c56a548bd96f8b44"
      }
    },
    "CP03": {
      "commit": "d045b0974ffde5f6919ea260a7ba2e352a0b5911",
      "files": {
        ".gitignore": "d285b4a293e7885821ef54d87490f94baeeb89bc97efd1e3790f25f5db992b55",
        "AGENTS.md": "11b50e5713c2a79e8d8d93e62f51afaceb278b61ac2b72091e32621bedbfec6d",
        "CHECKPOINT.md": "5be48447e8c2c369ec208a89786fce001b884cc37612bf16325175e52dea530a",
        "README.md": "4e1e52731f685529b539b7564884daa9de462d0d1e9c204307562b3962e46ae9",
        "dependencies.json": "ac647209d612d443389459618d3ab3e39a8dc5e819f7a3a4dfeb8415b370313d",
        "docs/hardware.md": "1a665605b31bb6954f349ea72b6ff59c605723bb37a006e4a50fb01a0183cae4",
        "docs/project-brief.md": "2eb408a988d5131d47ea9ed5cfb8f9edef1474175ad8ae1e548b4583dc82ed62",
        "docs/setup.md": "61a006dd7aedb92d1b6c24c28c021952f93b01b724b4fb6fd79cd39d1f42ff94",
        "firmware/sensor-monitor/sensor-monitor.ino": "eead565ae1113e2456c19801bffc6c14d97c315287ed4c79f4a74393856e755c",
        "fixtures/normal.csv": "be74fcd5440baa3ae249d2c0179e77a7d7fd78637dc60513f22d1de293976810",
        "host/replay.cpp": "4f63a4bd7fa7599d3b7eaff6f32b11ce1a264a3fd01a601872ec9d4969849a59",
        "scripts/build-firmware.cmd": "109e770c569ffd3198ffd5a0fe18ea3160986dcefb11e5f8e1d4c44a93dd6476",
        "scripts/common.cmd": "c9c8dc0d3f2227e3430dc0ba72257a9a0c12e8f796a669cf0f2950f84b5a6027",
        "scripts/replay.cmd": "4cf3ae69f7a027d91dd3dcc9f68839d17fc4a31efa5e6dd7c56a548bd96f8b44"
      }
    },
    "CP04": {
      "commit": "16fa361d35712c123d86b4d280167a80cc9e4004",
      "files": {
        ".agents/skills/datasheet-to-constraints/SKILL.md": "93ef9e420fab8f86385d3dd7290d2c1affb2d3390fd6cd24df916109894ac155",
        ".agents/skills/datasheet-to-constraints/references/extraction-rules.md": "d7d84bdd69a842bab502d1849eb0d8c10bb4b51bb9ce2f4cfe7d1380d1107946",
        ".gitignore": "d285b4a293e7885821ef54d87490f94baeeb89bc97efd1e3790f25f5db992b55",
        "AGENTS.md": "11b50e5713c2a79e8d8d93e62f51afaceb278b61ac2b72091e32621bedbfec6d",
        "CHECKPOINT.md": "59e16d1c4b229cd5e21e2af6932c9d5f37457524639b7d79fa594947ff74c833",
        "README.md": "8f0f574a93fe1874390d7ab956ffa22c15bd4060fcabd206cae51e8e3ec77640",
        "dependencies.json": "ac647209d612d443389459618d3ab3e39a8dc5e819f7a3a4dfeb8415b370313d",
        "docs/hardware.md": "1a665605b31bb6954f349ea72b6ff59c605723bb37a006e4a50fb01a0183cae4",
        "docs/interface-plan.md": "db807bb703fdb82a0f4c0ef290237414963dae432136912a50ebee756c98d865",
        "docs/project-brief.md": "2eb408a988d5131d47ea9ed5cfb8f9edef1474175ad8ae1e548b4583dc82ed62",
        "docs/setup.md": "61a006dd7aedb92d1b6c24c28c021952f93b01b724b4fb6fd79cd39d1f42ff94",
        "docs/skills.md": "4816eacbbfb0cf3b1ebb87fd6bd31bcdfa146830de22678f4151b027909b45e8",
        "firmware/sensor-monitor/sensor-monitor.ino": "eead565ae1113e2456c19801bffc6c14d97c315287ed4c79f4a74393856e755c",
        "fixtures/normal.csv": "be74fcd5440baa3ae249d2c0179e77a7d7fd78637dc60513f22d1de293976810",
        "host/replay.cpp": "4f63a4bd7fa7599d3b7eaff6f32b11ce1a264a3fd01a601872ec9d4969849a59",
        "scripts/build-firmware.cmd": "109e770c569ffd3198ffd5a0fe18ea3160986dcefb11e5f8e1d4c44a93dd6476",
        "scripts/common.cmd": "c9c8dc0d3f2227e3430dc0ba72257a9a0c12e8f796a669cf0f2950f84b5a6027",
        "scripts/replay.cmd": "4cf3ae69f7a027d91dd3dcc9f68839d17fc4a31efa5e6dd7c56a548bd96f8b44"
      }
    },
    "CP05": {
      "commit": "fad21278a827e2b44805bd403f91f5974a11fefe",
      "files": {
        ".agents/skills/datasheet-to-constraints/SKILL.md": "93ef9e420fab8f86385d3dd7290d2c1affb2d3390fd6cd24df916109894ac155",
        ".agents/skills/datasheet-to-constraints/references/extraction-rules.md": "d7d84bdd69a842bab502d1849eb0d8c10bb4b51bb9ce2f4cfe7d1380d1107946",
        ".gitignore": "d285b4a293e7885821ef54d87490f94baeeb89bc97efd1e3790f25f5db992b55",
        "AGENTS.md": "6c885ea9b9307dfdf9e325d3de9e3331acd2cf681249850842a763a3e1593e4e",
        "CHECKPOINT.md": "4afe1f45044701f671518180bacf75dcfe69ebfbb43b58cfa6163be9b27e10f3",
        "README.md": "cb59f1bee4f31d3ecd6e3068e358823f5a22e7696f4893c1144b352003700469",
        "dependencies.json": "ac647209d612d443389459618d3ab3e39a8dc5e819f7a3a4dfeb8415b370313d",
        "docs/hardware.md": "1a665605b31bb6954f349ea72b6ff59c605723bb37a006e4a50fb01a0183cae4",
        "docs/interface-plan.md": "db807bb703fdb82a0f4c0ef290237414963dae432136912a50ebee756c98d865",
        "docs/project-brief.md": "2eb408a988d5131d47ea9ed5cfb8f9edef1474175ad8ae1e548b4583dc82ed62",
        "docs/requirements.md": "f4d65136e03c8284dd959bf42e79b344f42d49ca4fbdee59e811f91cae758cae",
        "docs/setup.md": "61a006dd7aedb92d1b6c24c28c021952f93b01b724b4fb6fd79cd39d1f42ff94",
        "docs/skills.md": "4816eacbbfb0cf3b1ebb87fd6bd31bcdfa146830de22678f4151b027909b45e8",
        "firmware/sensor-monitor/monitor_policy.cpp": "43bc64e21cea5af086ddeb982bf3e57b1d105889c348e199e5c17cd468278088",
        "firmware/sensor-monitor/monitor_policy.h": "672d9f0d948e257e6faf32fd12959714bce5291c00f3c9536a5b2294a3ba1754",
        "firmware/sensor-monitor/output_format.cpp": "2eda473b61f2b14117075cbf12d5761963f45b20147064fa0bcca11ac80635e3",
        "firmware/sensor-monitor/output_format.h": "58b5c4c7c723ed0348c590c94da4e811b39bdccbfd54113af4a5f5f473b4e0c9",
        "firmware/sensor-monitor/sensor-monitor.ino": "4bae4fec285c64f4e001051a10d35b14c28325145a0bf617137a09c1a9d350df",
        "fixtures/invalid.csv": "c82bd7a97c98e6a77d94cea0a24951a30b54dbbcf1bfdb8aaa5a29f848eed24d",
        "fixtures/normal.csv": "b9d81792812b3d5491b2e0a5835559def2d21e368d7a1affbffc7d3b819989bd",
        "fixtures/rollover.csv": "c2ff3df63ce88910dca783a727133028026784cfa020aae8b1a06058345dbbf1",
        "fixtures/stale-recovery.csv": "4c08215b5aa2f28d6da241d57f61a0fdb996a903b783f6d407d77f55d137e449",
        "host/replay.cpp": "a416af2f78e8e1a63e2a1f6022f32754d63ac93a6a473b690273ed094bf70757",
        "scripts/build-firmware.cmd": "109e770c569ffd3198ffd5a0fe18ea3160986dcefb11e5f8e1d4c44a93dd6476",
        "scripts/common.cmd": "4642f120918390f07d3c6e4eddaf3c4a7beb6627dae064e58d08890aa17f7e31",
        "scripts/native.py": "0eaf2a61fcee72122e81b8620d5d5fb97ea61a9816657f1647d42249b32e33dd",
        "scripts/replay.cmd": "4cf3ae69f7a027d91dd3dcc9f68839d17fc4a31efa5e6dd7c56a548bd96f8b44"
      }
    },
    "CP06": {
      "commit": "6fd778f7f1c57c0ab60f6a8fe995540a41656312",
      "files": {
        ".agents/skills/datasheet-to-constraints/SKILL.md": "93ef9e420fab8f86385d3dd7290d2c1affb2d3390fd6cd24df916109894ac155",
        ".agents/skills/datasheet-to-constraints/references/extraction-rules.md": "d7d84bdd69a842bab502d1849eb0d8c10bb4b51bb9ce2f4cfe7d1380d1107946",
        ".gitignore": "d285b4a293e7885821ef54d87490f94baeeb89bc97efd1e3790f25f5db992b55",
        "AGENTS.md": "6c885ea9b9307dfdf9e325d3de9e3331acd2cf681249850842a763a3e1593e4e",
        "CHECKPOINT.md": "6e0482769ad97ad8a7e912ff35094ca0541cc1c17e8cd338d53701d8292691b4",
        "README.md": "72b2d2f6213a2d3c642f317fca3c1345b100d2bfd79787005bbd14fe2a84cbdb",
        "dependencies.json": "ac647209d612d443389459618d3ab3e39a8dc5e819f7a3a4dfeb8415b370313d",
        "docs/fault-exercise.md": "7f8722da7f3032fcb63f80ec808341b2674dd76adc2d1c0c0e0585f8d95499be",
        "docs/hardware.md": "1a665605b31bb6954f349ea72b6ff59c605723bb37a006e4a50fb01a0183cae4",
        "docs/interface-plan.md": "db807bb703fdb82a0f4c0ef290237414963dae432136912a50ebee756c98d865",
        "docs/project-brief.md": "2eb408a988d5131d47ea9ed5cfb8f9edef1474175ad8ae1e548b4583dc82ed62",
        "docs/requirements.md": "f4d65136e03c8284dd959bf42e79b344f42d49ca4fbdee59e811f91cae758cae",
        "docs/setup.md": "61a006dd7aedb92d1b6c24c28c021952f93b01b724b4fb6fd79cd39d1f42ff94",
        "docs/skills.md": "4816eacbbfb0cf3b1ebb87fd6bd31bcdfa146830de22678f4151b027909b45e8",
        "firmware/sensor-monitor/monitor_policy.cpp": "43bc64e21cea5af086ddeb982bf3e57b1d105889c348e199e5c17cd468278088",
        "firmware/sensor-monitor/monitor_policy.h": "672d9f0d948e257e6faf32fd12959714bce5291c00f3c9536a5b2294a3ba1754",
        "firmware/sensor-monitor/output_format.cpp": "2eda473b61f2b14117075cbf12d5761963f45b20147064fa0bcca11ac80635e3",
        "firmware/sensor-monitor/output_format.h": "58b5c4c7c723ed0348c590c94da4e811b39bdccbfd54113af4a5f5f473b4e0c9",
        "firmware/sensor-monitor/sensor-monitor.ino": "4bae4fec285c64f4e001051a10d35b14c28325145a0bf617137a09c1a9d350df",
        "fixtures/invalid.csv": "c82bd7a97c98e6a77d94cea0a24951a30b54dbbcf1bfdb8aaa5a29f848eed24d",
        "fixtures/normal.csv": "b9d81792812b3d5491b2e0a5835559def2d21e368d7a1affbffc7d3b819989bd",
        "fixtures/rollover.csv": "c2ff3df63ce88910dca783a727133028026784cfa020aae8b1a06058345dbbf1",
        "fixtures/stale-recovery.csv": "4c08215b5aa2f28d6da241d57f61a0fdb996a903b783f6d407d77f55d137e449",
        "host/replay.cpp": "a416af2f78e8e1a63e2a1f6022f32754d63ac93a6a473b690273ed094bf70757",
        "scripts/build-firmware.cmd": "109e770c569ffd3198ffd5a0fe18ea3160986dcefb11e5f8e1d4c44a93dd6476",
        "scripts/common.cmd": "4642f120918390f07d3c6e4eddaf3c4a7beb6627dae064e58d08890aa17f7e31",
        "scripts/native.py": "0eaf2a61fcee72122e81b8620d5d5fb97ea61a9816657f1647d42249b32e33dd",
        "scripts/replay.cmd": "4cf3ae69f7a027d91dd3dcc9f68839d17fc4a31efa5e6dd7c56a548bd96f8b44"
      }
    },
    "CP07": {
      "commit": "ad87252fb09788ac377a713fb6ee305eb95faf45",
      "files": {
        ".agents/skills/datasheet-to-constraints/SKILL.md": "93ef9e420fab8f86385d3dd7290d2c1affb2d3390fd6cd24df916109894ac155",
        ".agents/skills/datasheet-to-constraints/references/extraction-rules.md": "d7d84bdd69a842bab502d1849eb0d8c10bb4b51bb9ce2f4cfe7d1380d1107946",
        ".gitignore": "d285b4a293e7885821ef54d87490f94baeeb89bc97efd1e3790f25f5db992b55",
        "AGENTS.md": "930d5fca84c6d93c3d5dee5ebd4036f847cea42dd6ca70bd60f18dd916436203",
        "CHECKPOINT.md": "001a806f53d885e9daaf2e2232538dcc9603bcc46421335f49cdd1402008d128",
        "README.md": "579fcdf2fb40d19b7e8592940804a5bb1b478965b36656cd347f845692d8f597",
        "dependencies.json": "ac647209d612d443389459618d3ab3e39a8dc5e819f7a3a4dfeb8415b370313d",
        "docs/evidence.md": "c66a4089e7a0eafb80af08fecd38e2adc26edeb42e848bf5813206c185fe80f5",
        "docs/fault-exercise.md": "7f8722da7f3032fcb63f80ec808341b2674dd76adc2d1c0c0e0585f8d95499be",
        "docs/hardware.md": "1a665605b31bb6954f349ea72b6ff59c605723bb37a006e4a50fb01a0183cae4",
        "docs/interface-plan.md": "db807bb703fdb82a0f4c0ef290237414963dae432136912a50ebee756c98d865",
        "docs/project-brief.md": "2eb408a988d5131d47ea9ed5cfb8f9edef1474175ad8ae1e548b4583dc82ed62",
        "docs/requirements.md": "f4d65136e03c8284dd959bf42e79b344f42d49ca4fbdee59e811f91cae758cae",
        "docs/setup.md": "61a006dd7aedb92d1b6c24c28c021952f93b01b724b4fb6fd79cd39d1f42ff94",
        "docs/skills.md": "4816eacbbfb0cf3b1ebb87fd6bd31bcdfa146830de22678f4151b027909b45e8",
        "firmware/sensor-monitor/monitor_policy.cpp": "43bc64e21cea5af086ddeb982bf3e57b1d105889c348e199e5c17cd468278088",
        "firmware/sensor-monitor/monitor_policy.h": "672d9f0d948e257e6faf32fd12959714bce5291c00f3c9536a5b2294a3ba1754",
        "firmware/sensor-monitor/output_format.cpp": "2eda473b61f2b14117075cbf12d5761963f45b20147064fa0bcca11ac80635e3",
        "firmware/sensor-monitor/output_format.h": "58b5c4c7c723ed0348c590c94da4e811b39bdccbfd54113af4a5f5f473b4e0c9",
        "firmware/sensor-monitor/sensor-monitor.ino": "4bae4fec285c64f4e001051a10d35b14c28325145a0bf617137a09c1a9d350df",
        "fixtures/invalid.csv": "c82bd7a97c98e6a77d94cea0a24951a30b54dbbcf1bfdb8aaa5a29f848eed24d",
        "fixtures/normal.csv": "b9d81792812b3d5491b2e0a5835559def2d21e368d7a1affbffc7d3b819989bd",
        "fixtures/rollover.csv": "c2ff3df63ce88910dca783a727133028026784cfa020aae8b1a06058345dbbf1",
        "fixtures/stale-recovery.csv": "4c08215b5aa2f28d6da241d57f61a0fdb996a903b783f6d407d77f55d137e449",
        "host/replay.cpp": "a416af2f78e8e1a63e2a1f6022f32754d63ac93a6a473b690273ed094bf70757",
        "scripts/build-firmware.cmd": "109e770c569ffd3198ffd5a0fe18ea3160986dcefb11e5f8e1d4c44a93dd6476",
        "scripts/common.cmd": "4642f120918390f07d3c6e4eddaf3c4a7beb6627dae064e58d08890aa17f7e31",
        "scripts/native.py": "0eaf2a61fcee72122e81b8620d5d5fb97ea61a9816657f1647d42249b32e33dd",
        "scripts/replay.cmd": "4cf3ae69f7a027d91dd3dcc9f68839d17fc4a31efa5e6dd7c56a548bd96f8b44",
        "scripts/test.cmd": "2e2207c48683a46d01dbb010c3afae36e099fdd12fdf9a444680f32455d2b2e1",
        "tests/test_monitor.cpp": "eef9ddfe7c1caeb4229f681c200b625495bbcffd05f3bfea277a6420b128ae15"
      }
    },
    "CP08": {
      "commit": "6c88f5dd30672f0a6c727bb7e07dcbbf0a01227a",
      "files": {
        ".agents/skills/datasheet-to-constraints/SKILL.md": "93ef9e420fab8f86385d3dd7290d2c1affb2d3390fd6cd24df916109894ac155",
        ".agents/skills/datasheet-to-constraints/references/extraction-rules.md": "d7d84bdd69a842bab502d1849eb0d8c10bb4b51bb9ce2f4cfe7d1380d1107946",
        ".agents/skills/firmware-review/SKILL.md": "3e52d2ba4936cf1fe14e5c8c86e9468786466a24a0bd94c17c79d7263dcb33bd",
        ".gitignore": "d285b4a293e7885821ef54d87490f94baeeb89bc97efd1e3790f25f5db992b55",
        "AGENTS.md": "930d5fca84c6d93c3d5dee5ebd4036f847cea42dd6ca70bd60f18dd916436203",
        "CHECKPOINT.md": "8ba8bcfa27372d2a20b8da9aa54ab358f6d6c8e289108f9676251560abeb6391",
        "README.md": "5915061dc100c394e5f9a71461516c98773d2e1a7b76ea227aaf94d161980346",
        "dependencies.json": "ac647209d612d443389459618d3ab3e39a8dc5e819f7a3a4dfeb8415b370313d",
        "docs/evidence.md": "c66a4089e7a0eafb80af08fecd38e2adc26edeb42e848bf5813206c185fe80f5",
        "docs/fault-exercise.md": "7f8722da7f3032fcb63f80ec808341b2674dd76adc2d1c0c0e0585f8d95499be",
        "docs/handoff.md": "25d243f752b63cee0b8fb6d4762558eca8224406f349e7c342df56c6867e58a8",
        "docs/hardware.md": "1a665605b31bb6954f349ea72b6ff59c605723bb37a006e4a50fb01a0183cae4",
        "docs/interface-plan.md": "db807bb703fdb82a0f4c0ef290237414963dae432136912a50ebee756c98d865",
        "docs/project-brief.md": "2eb408a988d5131d47ea9ed5cfb8f9edef1474175ad8ae1e548b4583dc82ed62",
        "docs/requirements.md": "f4d65136e03c8284dd959bf42e79b344f42d49ca4fbdee59e811f91cae758cae",
        "docs/setup.md": "61a006dd7aedb92d1b6c24c28c021952f93b01b724b4fb6fd79cd39d1f42ff94",
        "docs/skills.md": "4816eacbbfb0cf3b1ebb87fd6bd31bcdfa146830de22678f4151b027909b45e8",
        "firmware/sensor-monitor/monitor_policy.cpp": "43bc64e21cea5af086ddeb982bf3e57b1d105889c348e199e5c17cd468278088",
        "firmware/sensor-monitor/monitor_policy.h": "672d9f0d948e257e6faf32fd12959714bce5291c00f3c9536a5b2294a3ba1754",
        "firmware/sensor-monitor/output_format.cpp": "2eda473b61f2b14117075cbf12d5761963f45b20147064fa0bcca11ac80635e3",
        "firmware/sensor-monitor/output_format.h": "58b5c4c7c723ed0348c590c94da4e811b39bdccbfd54113af4a5f5f473b4e0c9",
        "firmware/sensor-monitor/sensor-monitor.ino": "4bae4fec285c64f4e001051a10d35b14c28325145a0bf617137a09c1a9d350df",
        "fixtures/invalid.csv": "c82bd7a97c98e6a77d94cea0a24951a30b54dbbcf1bfdb8aaa5a29f848eed24d",
        "fixtures/normal.csv": "b9d81792812b3d5491b2e0a5835559def2d21e368d7a1affbffc7d3b819989bd",
        "fixtures/rollover.csv": "c2ff3df63ce88910dca783a727133028026784cfa020aae8b1a06058345dbbf1",
        "fixtures/stale-recovery.csv": "4c08215b5aa2f28d6da241d57f61a0fdb996a903b783f6d407d77f55d137e449",
        "host/replay.cpp": "a416af2f78e8e1a63e2a1f6022f32754d63ac93a6a473b690273ed094bf70757",
        "scripts/build-firmware.cmd": "109e770c569ffd3198ffd5a0fe18ea3160986dcefb11e5f8e1d4c44a93dd6476",
        "scripts/common.cmd": "4642f120918390f07d3c6e4eddaf3c4a7beb6627dae064e58d08890aa17f7e31",
        "scripts/native.py": "0eaf2a61fcee72122e81b8620d5d5fb97ea61a9816657f1647d42249b32e33dd",
        "scripts/replay.cmd": "4cf3ae69f7a027d91dd3dcc9f68839d17fc4a31efa5e6dd7c56a548bd96f8b44",
        "scripts/test.cmd": "2e2207c48683a46d01dbb010c3afae36e099fdd12fdf9a444680f32455d2b2e1",
        "tests/test_monitor.cpp": "eef9ddfe7c1caeb4229f681c200b625495bbcffd05f3bfea277a6420b128ae15"
      }
    },
    "CP09": {
      "commit": "1fe0a4f650ad6e8dcf21fb6ef653cffc6baf381b",
      "files": {
        ".agents/skills/datasheet-to-constraints/SKILL.md": "93ef9e420fab8f86385d3dd7290d2c1affb2d3390fd6cd24df916109894ac155",
        ".agents/skills/datasheet-to-constraints/references/extraction-rules.md": "d7d84bdd69a842bab502d1849eb0d8c10bb4b51bb9ce2f4cfe7d1380d1107946",
        ".agents/skills/firmware-review/SKILL.md": "3e52d2ba4936cf1fe14e5c8c86e9468786466a24a0bd94c17c79d7263dcb33bd",
        ".gitignore": "d285b4a293e7885821ef54d87490f94baeeb89bc97efd1e3790f25f5db992b55",
        "AGENTS.md": "b36682f1bfe1290a98e4dd2da336ec25699958e5671b39c95643f1ecbc1956b6",
        "CHECKPOINT.md": "f53aeb0be37fb3ed0d7c821c1226dfc3a8f6e5c726fa090599c4fcd94a49f9f4",
        "README.md": "054d1e4c640d076aaa54e4384b8505524a765621baebe88cb3fc458f447646cc",
        "dependencies.json": "ac647209d612d443389459618d3ab3e39a8dc5e819f7a3a4dfeb8415b370313d",
        "docs/checkpoints.md": "de46b2ab7a66828d7b4b1a7b750bc55a49bae5a9247ed44ffdb0063837f2542e",
        "docs/decisions.md": "c241489c9ae4b02c24719f94a35749050a01fdbae90adc02d4b75e8da1eb6b81",
        "docs/evidence.md": "c66a4089e7a0eafb80af08fecd38e2adc26edeb42e848bf5813206c185fe80f5",
        "docs/formats.md": "5e6847c480e8e8e24605ead6660e78ab6bc4035103e1c4e8ce933a3224f5cfca",
        "docs/handoff.md": "312696675d4e69185f340cb3b984ba6419a548ad4f15b776bed42505f3d2ff6e",
        "docs/hardware.md": "1a665605b31bb6954f349ea72b6ff59c605723bb37a006e4a50fb01a0183cae4",
        "docs/requirements.md": "960e603628909ad4ad6bf0c003247151987ff09362ba1985e7d5ecfc80c1eaae",
        "docs/setup.md": "61a006dd7aedb92d1b6c24c28c021952f93b01b724b4fb6fd79cd39d1f42ff94",
        "docs/skills.md": "4816eacbbfb0cf3b1ebb87fd6bd31bcdfa146830de22678f4151b027909b45e8",
        "firmware/sensor-monitor/command_parser.cpp": "af6a58267ba395897de5e3ed49337a92fecfa05bf4fec8d3ab6e8853dc91aeee",
        "firmware/sensor-monitor/command_parser.h": "c4401cb1ad88398d4eaea41527c70a98571e9e0e350eb4d263c45048d549b5cf",
        "firmware/sensor-monitor/monitor_policy.cpp": "a7fb9d5dad2ed373d5a90fd39b88e1ccf97d12ac786cd53b86c255ab4e920758",
        "firmware/sensor-monitor/monitor_policy.h": "75276a45778fb3e0e3e291e38947a59adde370c8016aff2c13fb272499387777",
        "firmware/sensor-monitor/output_format.cpp": "547a8e3f4b2c6f646ecb197a3b9a7b62247f0cec308a2d76874917ad70daafb9",
        "firmware/sensor-monitor/output_format.h": "d2280deb781f44a11f2bda98d8bccc0e603bfd3614c53c112adab1dda614eec8",
        "firmware/sensor-monitor/sensor-monitor.ino": "0d38792adbd97b5bc0e0f6e9678571c42ce9a6d204670772ba7285809c691ad5",
        "fixtures/commands.csv": "162c30b0b5009d46e7768a9390fda3be004074136618691fe6ce0bd68fe19016",
        "fixtures/invalid.csv": "c82bd7a97c98e6a77d94cea0a24951a30b54dbbcf1bfdb8aaa5a29f848eed24d",
        "fixtures/normal.csv": "b9d81792812b3d5491b2e0a5835559def2d21e368d7a1affbffc7d3b819989bd",
        "fixtures/rollover.csv": "c2ff3df63ce88910dca783a727133028026784cfa020aae8b1a06058345dbbf1",
        "fixtures/stale-recovery.csv": "4c08215b5aa2f28d6da241d57f61a0fdb996a903b783f6d407d77f55d137e449",
        "host/replay.cpp": "61ea40ae7e1044511c5f1aee1b09b016a62c748605b453535af3d863b60351cc",
        "scripts/build-firmware.cmd": "109e770c569ffd3198ffd5a0fe18ea3160986dcefb11e5f8e1d4c44a93dd6476",
        "scripts/build-firmware.ps1": "ee2e884ccdd83df0f00fb38e77cc597b8ca04d63da1e63d882bae9a8e0d42cfb",
        "scripts/common.cmd": "d22e99cd6e5b3709446e9e684eb798ea1afc2c6807583aacd2f13c667850ef05",
        "scripts/common.ps1": "7c07345ff6c5c967b7e7fdb6c77ace06e732b7352720a64ffb3ed9b8793d263c",
        "scripts/export_checkpoints.py": "ebf46f97db21ed003f8f9f8fff24e6465f515d246b0701e1edf808dd5ee842f5",
        "scripts/native.py": "969338aed21bef9d2d1c71854450e044db4688c77cd8e245db3c331009444b1f",
        "scripts/replay.cmd": "4cf3ae69f7a027d91dd3dcc9f68839d17fc4a31efa5e6dd7c56a548bd96f8b44",
        "scripts/replay.ps1": "79c258d98d7d76d9f054c5ecbc979903fe65ad78e885fc26fdc46ad0a0461a88",
        "scripts/test.cmd": "2e2207c48683a46d01dbb010c3afae36e099fdd12fdf9a444680f32455d2b2e1",
        "scripts/test.ps1": "c7de326884bbd363926a91ed3d5c7e8524f98e1d6a99f178151e2b5cfd7ddbcd",
        "scripts/validate_release.py": "bed24fda4fcc465beacedb3750c1fcb3b5e597e95dc69773881d350bd50faf88",
        "tests/test_monitor.cpp": "92ab4a4ffc524105f60c5f92a94cd97b97ab13bc783a2cf6ecacc17976beae6e",
        "tests/test_replay.py": "9d3fa08951531d4b3e52da5e787414461606022fe3750addf61f06fabf26e332"
      }
    }
  },
  "faults": {
    "FAULT-hysteresis": {
      "base": "CP09",
      "commit": "299f10f97c74efb57e43f9131847c97f4c9eccb6",
      "file": "firmware/sensor-monitor/monitor_policy.cpp",
      "before": "temperature <= threshold_ - kHysteresis",
      "after": "temperature < threshold_ - kHysteresis"
    },
    "FAULT-stale": {
      "base": "CP07",
      "commit": "a0135fef9c5b0c7ce6db8e9615cdd71a02c04052",
      "file": "firmware/sensor-monitor/monitor_policy.cpp",
      "before": "if (current_ && uint32_t(now - last_sample_) > kStaleAfterMs)",
      "after": "if (current_ && false && uint32_t(now - last_sample_) > kStaleAfterMs)"
    },
    "FAULT-command": {
      "base": "CP09",
      "commit": "2821a8cf1d2946892ac87af20047a211d5260f63",
      "file": "firmware/sensor-monitor/command_parser.cpp",
      "before": "if (i != length_) return CommandResult::Malformed;",
      "after": "// Defect: trailing command bytes are not rejected."
    },
    "FAULT-fixture": {
      "base": "CP06",
      "commit": "739251d09e382b3452162cc50351451fbe09c33b",
      "file": "fixtures/normal.csv",
      "before": "1000,sample,26",
      "after": "1000,sample,26C"
    }
  },
  "artifacts": {
    "sensor-monitor-CP00.zip": {
      "bytes": 1607,
      "sha256": "850819c0b3c5bebef04544f683f5af3b16c938523788b3dcdbe9ed1ddfc07e89"
    },
    "sensor-monitor-CP01.zip": {
      "bytes": 6201,
      "sha256": "2a2142fbe4aad9049f63732f9532fabe4be9100c739c98f43bf6b48a73131022"
    },
    "sensor-monitor-CP02.zip": {
      "bytes": 8633,
      "sha256": "19043f521736c304f2ca9313f2491408fd3c2466ea4755ee8f624e78d03677a4"
    },
    "sensor-monitor-CP03.zip": {
      "bytes": 9141,
      "sha256": "fae8f79c12394e7bd4dcdaf477908f1884a8666b6cbd6f61a4cd2fbc68918e36"
    },
    "sensor-monitor-CP04.zip": {
      "bytes": 12962,
      "sha256": "6b08d09550499b95126fe2a5f270f3dcd21c10f2c78ecf54e353fc763bdbfd6c"
    },
    "sensor-monitor-CP05.zip": {
      "bytes": 19570,
      "sha256": "8b0a6f19603c7c69ffb0df860fab9e15e40ccf2ec015cf2b37c4df5fe9129818"
    },
    "sensor-monitor-CP06.zip": {
      "bytes": 20038,
      "sha256": "e2a4bed8e20584bc82b837f0e17ea780aa620613e6ada10f26dc8e65a1dc3d2a"
    },
    "sensor-monitor-CP07.zip": {
      "bytes": 22381,
      "sha256": "c09557264fd65207598fe509119894918a2f2145dbf69d1ba80f317c44150cf4"
    },
    "sensor-monitor-CP08.zip": {
      "bytes": 24298,
      "sha256": "0d0c35651fa992a6748eca3567484e765f65812ab972bf68fd049645ac6e724e"
    },
    "sensor-monitor-CP09.zip": {
      "bytes": 46816,
      "sha256": "92cdb046fdb21824fa5c2859de53992424d69c7ba793bff80542fbe98f87e59d"
    },
    "sensor-monitor-FAULT-command.zip": {
      "bytes": 46837,
      "sha256": "d06198baf398f36d82c0a6b31472159e5dc183c46ea2b713d195b5608cbf0d4b"
    },
    "sensor-monitor-FAULT-fixture.zip": {
      "bytes": 20038,
      "sha256": "82c7fb0fef64e5a070d5d0f110ca4cb451de9b3d472c58b251c01db8d63d0c6c"
    },
    "sensor-monitor-FAULT-hysteresis.zip": {
      "bytes": 46817,
      "sha256": "7d56607acddd329c90fd24a933c2b40b62b865a3d4362a66c59aee5431108a28"
    },
    "sensor-monitor-FAULT-stale.zip": {
      "bytes": 22385,
      "sha256": "852f6666c19c02362fd58260bd702c58ad023ac15eca5a68fe9117ad993c9518"
    },
    "sensor-monitor-history.bundle": {
      "bytes": 56014,
      "sha256": "af9a8a9e2eb0dc5b43964400d407cef3fa751274cc092dd760f476a950e04f83"
    }
  },
  "bundle_verify": "The bundle contains these 22 refs:\n2821a8cf1d2946892ac87af20047a211d5260f63 refs/heads/fault-command\n739251d09e382b3452162cc50351451fbe09c33b refs/heads/fault-fixture\n299f10f97c74efb57e43f9131847c97f4c9eccb6 refs/heads/fault-hysteresis\na0135fef9c5b0c7ce6db8e9615cdd71a02c04052 refs/heads/fault-stale\n1fe0a4f650ad6e8dcf21fb6ef653cffc6baf381b refs/heads/main\na22f8c67de522f5760378379e4eda189a8130f9d refs/heads/practice-conflict-left\na5ac88b88e3ea02287ce9993908674bf94233699 refs/heads/practice-conflict-right\nee438a6fcaa96b2f461f48217d479cb7ab1003c9 refs/tags/CP00\n1ca7e71bcad58601cc3c4dc1114ac98086a674f9 refs/tags/CP01\n70abd1f47a51b8899677bebdf8e3da44921e15ba refs/tags/CP02\nd045b0974ffde5f6919ea260a7ba2e352a0b5911 refs/tags/CP03\n16fa361d35712c123d86b4d280167a80cc9e4004 refs/tags/CP04\nfad21278a827e2b44805bd403f91f5974a11fefe refs/tags/CP05\n6fd778f7f1c57c0ab60f6a8fe995540a41656312 refs/tags/CP06\nad87252fb09788ac377a713fb6ee305eb95faf45 refs/tags/CP07\n6c88f5dd30672f0a6c727bb7e07dcbbf0a01227a refs/tags/CP08\n1fe0a4f650ad6e8dcf21fb6ef653cffc6baf381b refs/tags/CP09\n2821a8cf1d2946892ac87af20047a211d5260f63 refs/tags/FAULT-command\n739251d09e382b3452162cc50351451fbe09c33b refs/tags/FAULT-fixture\n299f10f97c74efb57e43f9131847c97f4c9eccb6 refs/tags/FAULT-hysteresis\na0135fef9c5b0c7ce6db8e9615cdd71a02c04052 refs/tags/FAULT-stale\n1fe0a4f650ad6e8dcf21fb6ef653cffc6baf381b HEAD\nThe bundle records a complete history.\nThe bundle uses this hash algorithm: sha1",
  "history": "2821a8c Course Engineer <engineer@example.invalid> FAULT-command: seed one deliberate teaching defect\n739251d Course Engineer <engineer@example.invalid> FAULT-fixture: seed one deliberate teaching defect\n299f10f Course Engineer <engineer@example.invalid> FAULT-hysteresis: seed one deliberate teaching defect\na0135fe Course Engineer <engineer@example.invalid> FAULT-stale: seed one deliberate teaching defect\n1fe0a4f Course Engineer <engineer@example.invalid> CP09: record the chapter starting state\na22f8c6 Course Engineer <engineer@example.invalid> Revise the reporting label for conflict practice\na5ac88b Course Engineer <engineer@example.invalid> Revise the reporting label for conflict practice\nee438a6 Course Engineer <engineer@example.invalid> CP00: record the chapter starting state\n1ca7e71 Course Engineer <engineer@example.invalid> CP01: record the chapter starting state\n70abd1f Course Engineer <engineer@example.invalid> CP02: record the chapter starting state\nd045b09 Course Engineer <engineer@example.invalid> CP03: record the chapter starting state\n16fa361 Course Engineer <engineer@example.invalid> CP04: record the chapter starting state\nfad2127 Course Engineer <engineer@example.invalid> CP05: record the chapter starting state\n6fd778f Course Engineer <engineer@example.invalid> CP06: record the chapter starting state\nad87252 Course Engineer <engineer@example.invalid> CP07: record the chapter starting state\n6c88f5d Course Engineer <engineer@example.invalid> CP08: record the chapter starting state\nfe9afd2 Course Engineer <engineer@example.invalid> Add minimal synthetic firmware and host baseline"
}
