教学项目：预览之后，输入变了就拒绝旧计划

自建 JSON 库存样例，非真实业务数据。上一例的导入程序在每次运行时读取输入；
此例另存预览计划，记录当时原文件和批次文件的 SHA-256 指纹及计算出的预览。
提交时重新读取两份文件，比较字节指纹，并再次校验和对照预览；不同就拒绝。

在项目目录先复制一份明确可替换的测试文件和导入批次：
Copy-Item fixtures/store.json test-store.json
Copy-Item fixtures/good-batch.json test-batch.json
python -B guarded_import.py preview --store test-store.json --input test-batch.json --plan test-plan.json
检查预览；确认文件没有变化后才运行：
python -B guarded_import.py commit --store test-store.json --input test-batch.json --plan test-plan.json
提交会替换 test-store.json，随后应重读并核对旧行、新行和库存 0。
预览计划路径不能已存在；请在新目录或用新文件名重新生成，不要覆盖旧计划。

python -B test_guarded_import.py 执行 8 项验收。脚本不调用 API。
本例只验证 Windows 本地测试副本。指纹用于对照读取时的文件字节，不是签名或防篡改机制；
没有文件锁，不能保证并发安全，也未测试真实库存、磁盘故障或断电恢复。
变更后又恢复成相同字节不能被该对照发现；实际业务应使用适合的事务和版本控制。

博客整理：bg7iae，2026-10-29。原实测日期：2026-10-28。
