# เฉลยและเหตุผล: Log Diagnostics

ข้อมูลทั้งหมดสร้างเพื่อฝึก ไม่มีการวัดจากบอร์ด ใช้ delta ของสองแถวที่อยู่ติดกันในไฟล์; fresh/stale นับเฉพาะแถวที่เห็น

| กรณี | delta tick / overflow / dropped | สิ่งที่เห็น | สิ่งที่ยังสรุปไม่ได้ | ตรวจเพิ่ม |
|---|---|---|---|---|
| stale-only | 1 / 0 / 0 ทั้งสองคู่ | fresh 1, stale 2; ไม่มี reported queue/log loss; age 20,000 ยัง fresh | ไม่มี reported loss ไม่ได้แปลว่าไม่มี stale หรือ capture ครบ | ต้นทุน pop/gate/CSV/main และ timestamp ที่จุดใช้ |
| queue-loss | 3 / 2 / 0 | ช่องว่างสอง callback อธิบายด้วย rejection ที่ queue; fresh ที่เห็น 2 | ไม่ทราบอายุ/ค่าของ event ที่ถูกปฏิเสธ, occupancy หรือ rejection หลัง enqueue สุดท้าย | current snapshot/high-water ต้องออกแบบ instrumentation แยก และทดสอบจริง |
| serial-loss | 2 / 0 / 1 | แถวที่ main ส่งไม่ได้เพิ่มหนึ่ง; fresh ที่เห็น 2 | ไม่รู้ state/work ของแถวที่ส่งไม่ได้ และไม่รับรอง PC รับทุกแถว | แยก producer counter/Serial transmission/PC capture protocol |
| combined-loss | 4 / 2 / 1 | ช่องว่างอธิบายด้วย queue rejection 2 และ unsent row 1; fresh ที่เห็น 2 | บอก state ของส่วนที่หายหรือกลไกความช้าบนบอร์ดไม่ได้ | แยกตรวจบริการคิวและช่องส่ง ไม่เปลี่ยนสองตัวแปรพร้อมกัน |
| task-budget | 1 / 0 / 0 | fresh 2; task 2,001 us เกิน budget 2,000 อยู่หนึ่งแถว | ไม่ใช่ loop deadline miss เพราะ work ไม่รวม gate/pop/CSV/transmission | วัด end-to-end ตรง requirement ของงานจริง |
| partial-window | 1 / 0 / 0 | fresh 2; cumulative overflow 7/dropped 3 ไม่เพิ่มระหว่างสองแถว | นำ 7/3 ไปอ้างว่าหายภายในช่วงนี้ไม่ได้; ก่อนแถวแรก/หลังสุดท้ายไม่ทราบ | ระบุช่วง capture/boot identity/end snapshot ให้ครบ |
| unexplained-gap | 2 / 0 / 0 | equation ต้องเป็น 2 = 0+0+1 ซึ่งไม่จริง; CLI exit 2 | แยก PC ข้ามแถว/reset/log ผิดรุ่นไม่ได้จากไฟล์นี้ | กลับตรวจต้นฉบับ/header/โปรแกรม/capture ห้ามเดาเติม counter |

`no_reported_queue_or_log_losses=true` ใน stale-only/task-budget ไม่ได้รับรองว่าคุณภาพข้อมูลทุกด้านผ่าน; `false` ใน partial-window เป็น cumulative count ไม่ใช่ loss ใหม่ในคู่ที่เห็น การผ่าน analyzer หมายถึงสอดคล้องกับสัญญา CSV ที่ตรวจได้เท่านั้น

บทเรียนต่อไปเมื่อมีอุปกรณ์: ออกแบบ capture boundary/boot ID และแยก timestamp เซนเซอร์ ก่อนวัด occupancy/IRQ latency หรือเปลี่ยน deadline ของงานจริง ชุดนี้ยังไม่เพิ่มฟิลด์เหล่านั้นและไม่สร้างผลฮาร์ดแวร์สมมติ
