Design decisions

The required product is a synthetic terminal/replay teaching project with an embedded cross-build. A four-concern design is enough: input adapter, policy, command parser, output format. The host adapter reads files/stdin; the firmware adapter generates a short known sequence. Both compile the same policy/parser/output source. No virtual sensor interface, dependency injection framework, heap allocation in the policy/parser, or hardware driver is needed.

State starts explicitly in FAULT. Two good samples at startup and after every fault make recovery visible. The threshold defaults to 28.0 °C and hysteresis is fixed at 1.0 °C. These were chosen for easy boundary demonstrations, not a claim about an application safety limit. Threshold updates are intentionally RAM only and apply immediately to a current non-fault reading. No flash writes occur.

Use fixed 65-byte command storage, complete-line validation and a discard-until-LF overflow path. Validate the number before narrowing double to float. Rejected input must not change the previous threshold. Board-specific code stays in the sketch; no guessed peripheral pins enter the shared tests. Rendering uses bounded snprintf, with buffer-completion checks.

The primary learner terminal is Windows PowerShell. Python helpers are optional host authoring/appendix utilities; the ordinary Windows native-test/replay/firmware path does not require Python. The dependency manifest pins the known toolchain. A future version change requires a new build receipt rather than a silent compatibility assumption.