# ใบงาน D: M07 ข้อกำหนดและแผนทดสอบการทวนทะเบียน

รุ่น M07-v1 · 11 ตุลาคม 2026 · กรอกในสำเนา · CC BY 4.0 ตาม [readme](https://drone.pk-research.work/downloads/drone-applications/search-support-readme.md)

ใช้ [บท M07 เส้นทาง D](https://drone.pk-research.work/knowledge/drone-applications/search-support/#developer), [CSV](https://drone.pk-research.work/downloads/drone-applications/search-support-observations.csv), [rubric](https://drone.pk-research.work/downloads/drone-applications/search-support-rubric.md) และ [KSEC record](https://drone.pk-research.work/downloads/drone-applications/ksec-learning-record.md) ทำด้วยข้อความ/ตารางได้ ไม่มีโปรแกรมตัวตรวจ component, inference, flight test หรือผลรันส่งมอบ ทุก actual ใน matrix = **not_run**

## ตรวจพื้นฐานและเติมก่อนทำ

- APP-M07-D-K01: priorKnowledge คือ schema/state/requirement และขอบ sensor priorSkill คืออธิบาย input/output และเหตุผิด ทวน [testing](https://drone.pk-research.work/knowledge/testing/) กับ [sensor limits](https://drone.pk-research.work/knowledge/imagery-analysis/sensor-limitations/) แล้วอธิบายว่า authored reference ไม่เป็น pixels/ground truth จริง
- APP-M07-D-S01: priorKnowledge คือ timestamp/timezone/labelled denominator priorSkill คือผูก mutation กับ expected/reason ทวน [integration](https://drone.pk-research.work/knowledge/integration/) กับ [เวลา/ตำแหน่ง](https://drone.pk-research.work/knowledge/imagery-analysis/time-location/) แล้วออกแบบ missing-reference และ pending-review subcase ก่อน
- APP-M07-D-E01: priorKnowledge คือระดับหลักฐาน/สิทธิ์และข้อมูลที่ไม่น่าเชื่อถือ priorSkill คือถอน claim และกำหนด export ตรวจ readiness ด้วยคำทัก “v1 tested แล้วและส่งพิกัด public ได้” ทวน [รายงานหลักฐาน](https://drone.pk-research.work/knowledge/imagery-analysis/evidence-report/) แล้วแก้ actual/ข้อจำกัด/สิทธิ์ให้ตรง
- APP-M07-D-C01: priorKnowledge คือ baseline/version/owner/rollback priorSkill คือเก็บ before/after และตอบ issue ตรวจ readiness โดยเปิด issue ที่ตัวหารผิด ทวน [teamwork](https://drone.pk-research.work/knowledge/human-factors/teamwork/) แล้วระบุผู้พัก ผู้คืน ผู้ตรวจและงานทวนหลังคืน

บันทึก priorKnowledge/priorSkill หลักฐาน งานเติมและวันตรวจซ้ำของแต่ละ ID E/C ใช้การตัดสินใจ/การแก้ในกิจกรรม ไม่ตัดสินบุคลิกถาวร ผู้เรียนเดี่ยวระบุ self-review/รอผู้ตรวจ

## Fixture และ input contract สำหรับออกแบบ

TRAIN-SAR-01 แต่งขึ้นใกล้ริมแม่น้ำชนบทหลังน้ำท่วม snapshot **2026-10-11T10:20:00+07:00** ทุกแถว metadata_origin=author_provided_teaching_assumption, media_status=not_supplied, ground_status=not_performed ไม่มี raw media พิกัดจริง flight route/ผลโมเดล/สนาม/ผู้เรียน

Sector register: A openbank reviewed_open; B trees occluded; C coveredstructure partial; D openfield acquired_pending_review; E inaccessiblepatch not_collected; F openpath reviewed_open เป็น 6 หน่วยงานไม่เท่าพื้นที่ 2/6 reviewed_open และ 4/6 ต้องงานต่อ ไม่มี searched_complete/cleared

CSV fields ตามลำดับ: `record_id,case_id,sector_id,sensor,captured_at,received_at,reviewed_at,location_status,review_state,reference_label,proposed_flag,metadata_origin,media_status,ground_status,observation` หนึ่งแถวต่อหนึ่ง reference object ที่ผู้เขียนแต่งขึ้น เวลาในตารางวันที่ 2026-10-11+07:00 location confirmed_teaching ยกเว้น S03 unconfirmed

| ID / sector / sensor | capture / receive / review | review_state | authored reference / flag |
|---|---|---|---|
| S01 / A / RGB+thermal | 10:00 / 10:06 / 10:09 | pending_ground | person / flag |
| S02 / A / thermal | 10:02 / 10:06 / 10:10 | rejected_teaching | non_person (วัตถุอุ่น) / flag |
| S03 / B / thermal | 10:04 / 10:08 / 10:12 | needs_location_review | person / no_flag |
| S04 / C / RGB | 10:06 / 10:10 / 10:13 | no_candidate_teaching | non_person / no_flag |
| S05 / D / RGB+thermal | 10:08 / 10:14 / ว่าง | pending_image_review | person / flag |
| S06 / F / RGB | 10:10 / 10:15 / 10:18 | no_candidate_teaching | non_person / no_flag |

`confirmed_teaching` ไม่เป็นพิกัดวัตถุจริง GNSS อากาศยานอย่างเดียวไม่เป็น object coordinate ต้องมี source/method/error และเวลาสอดคล้องก่อนเสนอ operational use ไม่มี time_of_confirmation เพราะ ground not_performed อย่าเติมค่าจาก reviewed_at

## งาน 1: version 0 → 1 และ R01–R08

เป้าหมาย K: อธิบายการแก้ตรรกะ v0→v1 พร้อมขอบข้อมูล ทุกคำว่า output ด้านล่างเป็น **expected design** ยังไม่ใช่ผลรัน

v0 เป็นตัวอย่างข้อเสนอผิด: นับ flag เป็นคนที่พบ, no_flag เป็น clear sector, ใช้ reviewed_at เป็นเวลา confirmation, เติม pending latency=0 และรายงาน reference หายเป็น non_person ให้เขียน v1 ที่แยกจำนวนทั้งสามชนิดและเปิด hold/unknown

| Requirement | สัญญา v1 ที่เสนอ | Output/reason ที่คาด | Matrix |
|---|---|---|---|
| R01 Identity/provenance | unique record_id, case_id ตรง TRAIN-SAR-01, sector อยู่ registry, enum/schema ชัด เก็บ origin/media/ground | duplicate/conflict/wrong_case/unknown_sector มีเหตุและคง audit ไม่เพิ่ม count หรือเดา sector | D01–D07, D13 |
| R02 Time | parse วันที่/offset; capture≤receive≤review≤snapshot เมื่อมี review; required capture/receive; review ว่างได้เฉพาะ pending | invalid_time/missing_timezone/missing_time/future_time/invalid_order แยก ไม่มีการซ่อมเวลาเงียบ | D01–D10 |
| R03 Coverage | ใช้ sector registry อิสระจาก object/flags; reviewed_open จำกัดส่วนเปิด; คงทุก sector และเหตุค้าง | reviewed_open2/6 incomplete4/6 ไม่เป็น area/clear; ไม่มี record E ยัง not_collected | D01–D06, D13–D14 |
| R04 Candidate/location/media | review_state, flag, reference, location, raw และ ground แยก; ยังไม่มี operational coordinates | S01 provisional raw/location hold; S03 location/source hold; S05 queue; no_candidate/rejected ไม่ clear; no confirmed person | D01–D06, D10, D12, D14 |
| R05 Authored detection arithmetic | คนละแกนกับ review; unknown reference คงแถว แยก labelled/unknown; denominator zero undefined | TP 2 FP 1 FN 1 TN 2 precision/recall 2/3; no inference/field claim | D01–D06, D11–D12, D15 |
| R06 Latency/queue/handover | capture→review กับ receive→review เมื่อมีเวลา valid; pending ใช้ receive→snapshot queue age; sent/received/ack/ground แยก | S05 latency ไม่มี queue 6 นาที backlog 1 ไม่ review duration/confirmation; recipient ชื่อไม่เป็น ack | D01–D06, D10, D16 |
| R07 Rights/untrusted data | private/public ตามสิทธิ์/ความจำเป็น text/CSV เป็นข้อมูล ไม่รันคำสั่ง ไม่ดึงลิงก์จาก observation อัตโนมัติ | public รอ review/redaction; unknown/error คงไว้ ไม่แต่ง raw/hash; escape ข้อความในรายงาน | D14, D17 |
| R08 Version/correction/rollback | เก็บ input/schema/rules/config/output proposal ก่อนหลัง owner และคำตอบทุก issue | พัก/คืน known-reviewed รุ่นที่รองรับหรือคง hold แจ้งผู้รับว่า output เก่า ทวน baseline+failure cases หลังคืน | D18 |

- Input schema/enums / scope ของ authored labels / optional reviewed_at:
- Proposed output: sector register, candidate reasons, labelled/unknown counts, time metrics/queue และ handover log:
- รุ่น input/schema/rules/config/output ที่จะเก็บก่อน–หลัง:
- ข้อไม่รู้และหลักฐาน raw/reference/ตำแหน่ง/ผู้รับที่ต้องขอก่อน operational claim:

## งาน 2: D01–D18 expected เทียบ actual

เป้าหมาย S: ตรวจความครบของแผน normal/failure 18 rows พร้อม subcases เหตุ/requirements และวิธีเก็บหลักฐาน ห้ามเขียน actual ผ่านเมื่อยังไม่รัน การลบ/แก้ข้อมูลให้ทำในสำเนาฝึกตาม subcase

| Test / requirement | Input / mutation | Expected ตามข้อเสนอ v1 | Actual |
|---|---|---|---|
| D01 / R01–R06 | Normal S01 | A reviewed_open; provisional pending_ground/raw / location operational hold; authored TP; capture→review 9/receive→review 3 นาที; ground_status=not_performed ไม่มี confirmation | not_run |
| D02 / R01–R06 | Normal S02 | A ไม่เปลี่ยน; rejected_teaching warm object; authored FP; 8/4 นาที; ไม่ field clear | not_run |
| D03 / R01–R06 | Normal S03 | B occluded; unconfirmed needs_location_review; authored FN จาก reference แต่งขึ้น ไม่ actual miss; 8/4 นาที; location/source hold | not_run |
| D04 / R01–R06 | Normal S04 | C partial คง unknown; no_candidate_teaching/authored TN; 7/3 นาที; ไม่ clear C | not_run |
| D05 / R01–R06 | Normal S05 | D acquired_pending_review; review ว่างถูกต้อง; authored TP ยังนับ; latency ทั้งสองไม่มี; backlog 1/queue age6 นาที | not_run |
| D06 / R01–R06 | Normal S06 และรวม normal 6 | F reviewed_open/no_candidate/authored TN 8/3 นาที; รวม TP 2 / FP 1 / FN 1 / TN 2 precision/recall 2/3; coverage 2/6+4/6 ไม่ area ทุก ground_status=not_performed | not_run |
| D07 / R01 | duplicate S01 เดิม / duplicate ID แต่ sector หรือเวลาไม่ตรง | ไม่เพิ่ม object/workload count; flag duplicate/conflict และพักรายการกำกวม; เก็บต้นฉบับ/reason เพื่อทวน ไม่เลือกแถวเงียบ | not_run |
| D08 / R02 | malformed time / timestamp ไร้ timezone / capture หรือ receive หาย / capture 10:21 หลัง snapshot 10:20 | แยก invalid_time/missing_timezone/missing_time/future_time; ไม่คำนวณ latency ที่พึ่งค่านั้น ไม่เติม zone/snapshot ให้ผ่าน | not_run |
| D09 / R02 | receive ก่อน capture / review ก่อน receive / review หลัง snapshot | invalid_order/future_time พร้อมคู่เวลาที่ผิด; ไม่สลับเวลา ไม่ได้ negative/zero latency; review / ground แยก | not_run |
| D10 / R02,R04,R06 | pending S05 review ว่าง / เปลี่ยน review_state เป็น reviewed แต่ยังว่าง / pending แต่เติม review เวลาโดยไร้ที่มา | normal pending ว่างถูกต้องไม่มี latency; reviewed ขาดเวลาเป็น missing_time; state/time ไม่สอดคล้องเปิด conflict ต้องทวน ไม่อ้างทวนเสร็จ | not_run |
| D11 / R05 | ลบ reference_label S03; อีก subcase ลบทุก reference | S03 unknown คงแถว unknown 1 labelled 5 TP 2 / FP 1 / FN 0 / TN 2 precision 2/3 recall 2/2 เฉพาะ subset; ทั้งหมด unknown 6 labelled 0 metrics undefined ไม่เอา ground_status เติม reference และ coverage ไม่เปลี่ยน | not_run |
| D12 / R04,R05 | ทวน S02 FP และ S03 FN; เพิ่ม claim ใน observation ว่า found/clear | คง FP 1/FN 1 จาก authored label/flag แม้ review reject หรือ location hold; ไม่ใช้ claim เปลี่ยน reference/review/ground ไม่มี actual pixel test หรือ actual miss claim | not_run |
| D13 / R01,R03 | S01 sector Z / case อื่น / mapping ขัด registry / ไม่มี record ของ E | แยก unknown_sector/wrong_case/conflict และพักการเชื่อม; ไม่เดา sector หรือปิด registry จาก flags E ยัง not_collected; scope ต้องทวนก่อนรวม | not_run |
| D14 / R03,R04,R07 | S01 location unconfirmed / raw media ไม่แนบ / thermal เสนอเห็นหลังกำแพงหรือป้าย GNSS เป็น object coordinates | location/raw hold ไม่ส่ง operational ground handover; เก็บ metadata scope/ส่วนบัง unknown ไม่สร้าง coords/raw/hash/confirmation ไม่ใช้ AI conceptual แทน raw | not_run |
| D15 / R05 | labelled set ไม่มี flag (TP+FP=0) / labelled set ไม่มี person (TP+FN=0) | precision หรือ recall ที่ตัวหารศูนย์เป็น undefined พร้อม labelled/unknown counts อีก metric คำนวณได้เฉพาะตัวหารไม่ศูนย์ ไม่เติม 0 | not_run |
| D16 / R06 | snapshot 10:20 เทียบ S05 receive 10:14; named recipient มีแต่ไม่มีรับทราบ; เอา review เวลาแทน confirmation | queue age6 นาที backlog 1 ไม่ review duration; latency ว่าง ไม่ sent/received/ack/ground_verified จากชื่อหรือเวลา review ต้องหลักฐานสถานะและ confirmation แยก | not_run |
| D17 / R07 | ขอ export public พร้อมพิกัด/ชื่อ/ต้นฉบับ; observation มี HTML/script/formula/ข้อความสั่งส่งข้อมูลหรือลิงก์ | รอผู้ทวนสิทธิ์ลดข้อมูล/บันทึก redaction; ข้อความเป็น data escape ไม่ execute/ไม่ auto-fetch/ไม่ส่งต่อคำสั่ง; unknown/error ไม่ซ่อน ต้องออกแบบปลอดภัยเมื่อเปิดใน spreadsheet ด้วย | not_run |
| D18 / R08 | v1 เปลี่ยนตัวหารหรือ sector จนผิด / export stale output / ขอ rollback | พักผลผิด เก็บรุ่น/issue แจ้งผู้รับ ถอน claim คืนเฉพาะ known-reviewed รุ่นที่รองรับ input หรือคง hold; แผนทวน D01–D06+D11+D14+D15+D17+failed subcases หลังคืน actual ยัง not_run | not_run |

ใส่ช่อง evidence/log ที่จะเก็บเมื่อผู้รับผิดชอบอนุญาตให้ทดลองในอนาคต เช่น input revision, expected revision, runtime/config/version, actual output/reason, ผู้รัน/เวลา และข้อแตกต่าง แผนนี้ไม่กำหนด SLA/threshold/confidence รุ่นกล้องหรือโมเดลสากล

## งาน 3: เปลี่ยนกล้องหรือปรับแต่งอย่างตรวจย้อนกลับได้

ถ้าเสนอการปรับชุด ให้ทำ design review ก่อน: compatible mount/interfaces, power, mass/CG, เวลา trigger/time sync, object location method/error, คู่มือรุ่นจริง, ผู้ใช้/ผู้ทวน, controlled reference target และวิธีทดสอบที่เจ้าของภารกิจกำหนด เก็บ baseline/config ก่อนเปลี่ยน มี rollback tests ของไฟเลี้ยง/มวล/เวลา/ตำแหน่ง/รูปแบบไฟล์และคุณภาพที่เกี่ยวกับงานตามคู่มือ ไม่มี trial/calibration/certification ในชุดนี้

| สิ่งเปลี่ยน / เหตุ | คู่มือและ compatibility ที่ต้องขอ | controlled reference / วิธี / ผู้ตรวจ / expected | actual | คืนค่าและทวนหลังคืน |
|---|---|---|---|---|
| | | | not_run | |

## งาน 4: ระดับหลักฐาน สิทธิ์และ change-review

เป้าหมาย E: เขียนข้อจำกัดที่แยก authored metadata, proposed validator, actual runtime, raw/image review, location/ground และ learner evidence Public export ต้อง review สิทธิ์/ความจำเป็นก่อน ไม่แต่ง hash/files หรือผลรัน

- Claim ที่ถอน/แก้และเหตุ:
- Private/Public fields / ผู้ทวนสิทธิ์ / redaction log / ข้อค้าง:
- การจัดการ untrusted text/CSV/links โดยไม่ทำเป็นคำสั่ง:

เป้าหมาย C: ทุก issue/คำทักมีคำตอบหลักฐานหรือเหตุคงไว้ เก็บ D-v0/D-v1/input/schema/rules/config/output ก่อนหลังและ owner log

| Issue / ผู้ทัก / วัน / รุ่นก่อน | การแก้หรือเหตุคงไว้ / รุ่นหลัง | owner / หลักฐานขอ / recheck | ผู้รับที่ต้องแจ้ง |
|---|---|---|---|
| | | | |

- Trigger พักผล/คืนค่า:
- ผู้คืน / ผู้อนุมัติ / ผู้ตรวจหลังคืน:
- known-reviewed version ที่เข้ากับ input หรือเหตุคง hold:
- วิธีแจ้งผู้รับ/ระบุ stale result:
- baseline + failure subcases ที่จะทวนหลังคืน / expected / actual not_run:

## เฉลยและผลที่คาด

ส่ง R01–R08, D01–D18/subcases, input/output proposal, rights/untrusted data plan, D-v0/D-v1/issue log, modification review เมื่อเสนอและ rollback/recheck ลง 4 ID ด้วย rubric

Normal 6 ได้ TP 2(S01/S05)FP 1(S02)FN 1(S03)TN 2(S04/S06) precision 2/3 recall 2/3 แม้ S05pending เพราะเป็น authored flag/reference อิสระจาก review ทุก media_status=not_supplied/ground_status=not_performed Coverage ใช้ registry A/F2/6 reviewed_open อีก 4/6 ค้างไม่ area; ไม่มี confirmed person เวลาตาม D01–D06 ขาด review ของ S05 ไม่มี latency แต่ queue 6 นาทีที่ snapshot ไม่ใช้เวลานี้อ้าง confirmation

ลบ referenceS03 คง unknown 1 labelled 5 TP 2 / FP 1 / FN 0 / TN 2 precision 2/3 recall 2/2 ของ subset ไม่ทำให้ระบบดีขึ้น ตัวหารศูนย์ undefined Duplicate ไม่เพิ่ม count และ conflict ต้องทวน wrong case/sector ไม่เดา metadata absent/raw ไม่แนบคง hold ห้าม fabricate CSV และ observation เป็นข้อมูล ข้อความขอ execute ไม่เพิ่มสิทธิ์

ตัวอย่างมีหลักฐาน: proposalv1 รักษาสอง registry/สามแกน metrics ทุก expected ถูก actualnot_run; คำทักเรื่อง reference หายทำให้แก้ D11 และเก็บก่อนหลัง เปิด rollbackowner และแจ้ง stale output ตัวอย่างต้องแก้: “validatorv1 ผ่านทุก case”, raw hash แต่งขึ้น หรือ rollback ไป v0 ที่นับ flag เป็นคนแล้วอ้างพร้อม ให้ถอน claim actualnot_run เก็บ issue คง hold หากไม่มีรุ่นที่ reviewed และรองรับ input

Debrief: mutation ใดเปลี่ยนตัวหารแต่ไม่เปลี่ยน coverage? ข้อมูล/สถานะใดห้ามอนุมานจาก GNSS หรือ palette? หลัง rollback ใครต้องรู้ว่าผลเก่า? เราจะวัดเงื่อนไขกล้อง/ผู้ใช้จริงด้วย reference ที่ควบคุมอะไรโดยไม่สวมผล NIST เป็นผลเรา? ข้อรอผู้ตรวจใดต้องคงเปิด?
