# S7-D · สัญญาข้อมูลที่ไม่กลายเป็นคำสั่งพ่น

**ก่อนเริ่ม:** อ่าน M02/M03/C03, schema, version/time/unknown และ expected เทียบ actual. KSEC `APP-CSA-D-K01/S01/E01/C01`; [rubric](rubric.md)

ออกแบบ contract 18 fields. Output มี `source_row, record_id, input_revision, expected_status, reason, next_check, rule_revision`; ห้ามมี `disease_confirmed`, `application_authorized` หรือ dose ที่อนุมานเอง. ทดสอบ baseline และ mutation: IMG-A รุ่นกลับลำดับ, IMG-B cloud flag หาย, IMG-C เวลา/ระยะขาด, FIELD-A requested กลายเป็น confirmed โดยไร้หลักฐาน, PRODUCT-A unknown, PAYLOAD-A มวลว่าง, AIR-A สิทธิ์ว่าง, MSG-A sent แต่ ACK-A ว่าง, rights เปลี่ยนจาก training_only และ source_row ซ้ำ. กักข้อมูลผิดพร้อมเหตุ ไม่เติมค่าเอง

เก็บ hash input/source, คำสั่ง เวลา exit/raw/diff ที่ **ผู้เรียนรันจริง**; คืน baseline แล้วรันซ้ำ. ทำ D-v0 → review log ≥2 issue → D-v1 พร้อม owner/rollback/retest จริงหรือ NOT_RUN. ไม่มีการเชื่อมเครื่องพ่นหรือโดรนจริง
