Checkpoints and recovery

Every ZIP has a sensor-monitor/ top folder and a CHECKPOINT.md. Extract into a new exercise folder, change to that top folder, and read its README. Earlier snapshots contain earlier implementations; CP05–08 have no threshold, hysteresis, or command-parser source. CP00 is an inspection packet without learner history.

Checkpoint Starts Contents and applicable verification
CP00 Chapters 1–4 Source/reference excerpts and clearly synthetic log; annotate claims
CP01 Chapters 5–7 Minimal firmware and host report, setup, dependencies, ignores; replay/build; two demonstration commits
CP02 Chapters 8–9 CP01 plus project brief and sourced hardware facts; check links/source applicability
CP03 Chapter 10 Working AGENTS.md; fresh-session bounded edit and actual replay/build receipt
CP04 Chapters 11–12 Datasheet skill and interface plan; relevant/unrelated/incomplete behavior requests
CP05 Chapter 13 Synthetic adapter and shared normal/fault policy; replay/build
CP06 Chapter 14 Diagnosable fixture exercise and separate fault snapshots; preserve reproducer and diagnosis
CP07 Chapter 15 Basic normal/fault host tests and evidence guidance; test/replay/build
CP08 Chapter 16 Firmware-review skill and repository-only handoff; basic tests and real fresh-session receipt
CP09 Chapters 17–18 Final threshold/hysteresis/commands, complete tests and release source; full verification and fresh checkout

Prepared history is in sensor-monitor-history.bundle; ZIPs cannot substitute for the graph. The bundle contains only the generic Course Engineer demonstration identity and its manufactured teaching history. It contains no authoring commits or remote credentials. To practice without overwriting earlier work:

git clone .\sensor-monitor-history.bundle chapter-07
Set-Location .\chapter-07
git switch -c my-practice CP01
git log --oneline -3

CP00 through CP09 are stable content tags. Create your own branch from a tag; do not edit a detached tag accidentally. To resolve a deliberate conflict, use a new clone, switch to a new branch from origin/practice-conflict-left, then merge origin/practice-conflict-right. Both changed the same README line. Inspect the conflict, choose a coherent sentence, remove markers, stage the resolved README, and commit. git merge --abort returns to the pre-merge state while the merge is in progress. Inspect status before any recovery command.

Fault checkpoint Starting stage Diagnosis key and recovery
FAULT-stale CP07 normal/fault solution, also usable after CP06 poll no longer expires a current sample; at 4001 ms the 1000 ms reading remains current. Restore the guard and run basic tests/replay
FAULT-fixture CP06 26C violates numeric grammar at line 3. Correct only the fixture; malformed input is not a sensor fault
FAULT-hysteresis CP09 capstone < misses exact clear equality at 27.0 °C. Restore <=, run full tests and cross-build
FAULT-command CP09 capstone Removing complete-token validation accepts a malformed numeric suffix. Restore the guard and rerun parser tests/cross-build

For committed-error practice, use a separate clone and git switch -c recover-hysteresis FAULT-hysteresis, inspect git show HEAD, then git revert --no-edit HEAD. The new commit restores the preceding solution without rewriting history. Re-run native tests and the firmware build. For an uncommitted change, inspect git diff before git restore -- path/to/file; that discards the selected unsaved edit. Use separate exercise folders for these two different operations.

Authoring export command (Python 3 and Git):

python3 scripts/export_checkpoints.py --output exports/release-01

The exporter refuses an existing destination. It creates a fresh isolated Git repository below ignored build/, uses a fixed generic identity/date, and writes deterministic ZIP entries plus source/artifact hashes. It never commits in the authoring repository. Regenerate into a new folder after changing final source; do not silently replace an already distributed release hash.