Skip to content

error/v1 v1.1.0: details มีกฎแล้ว (ADR-0030) - #67

Merged
monthop-gmail merged 1 commit into
mainfrom
adr-0030-error-details
Sep 10, 2026
Merged

error/v1 v1.1.0: details มีกฎแล้ว (ADR-0030)#67
monthop-gmail merged 1 commit into
mainfrom
adr-0030-error-details

Conversation

@monthop-gmail

Copy link
Copy Markdown
Owner

care-agent-platform ไล่ปิด metadata ของ audit event ในบ้านตัวเอง แล้วรายงานว่าเจอช่องที่สามระหว่างทาง — และมันเป็นสัญญาของเรา

ความไม่สมมาตรที่อยู่ห่างกันสิบบรรทัดในไฟล์เดียวกัน

  message:
    type: string
    description: ห้ามใส่ credential, PII หรือเนื้อหา prompt ของผู้ใช้   # ← มีตั้งแต่ v1.0.0

  details:
    type: object                                                      # ← ไม่มีอะไรเลย

error/v1 อยู่ที่ v1.0.0 ตั้งแต่ 17 ส.ค. ไม่เคยขยับ และ ไม่ derive semantics มาจากใคร — เป็นของเราเต็มใบ แก้ได้เองโดยไม่ต้องมี RFC ที่ต้นทาง ต่างจาก event/v1.transition.reason ซึ่งเป็นช่องเดียวกันแต่ derive มา

ข้อสังเกตที่ทำให้ ADR นี้มีค่ากว่าการแก้ไฟล์

ผู้รายงานสรุปเอง:

ช่องเปิดที่อันตรายที่สุดไม่ใช่ช่องที่มีคนเถียงกันว่าควรปิดไหม แต่เป็น ช่องที่ไม่มีใครเอ่ยชื่อมันเลยในทั้งกระทู้ · metadata ถูกพูดถึงจนได้รับการปิด · details อยู่ในไฟล์เดียวกัน รูปเดียวกัน และรอดมาได้เพราะไม่มีใครพิมพ์ชื่อมัน

ชื่อที่กว้างเกิน        → คนใส่ของผิดเข้าไปโดยไม่รู้ตัว
ฟิลด์ที่ไม่มีใครเอ่ยชื่อ  → ไม่มีใครไปดูว่ามีอะไรอยู่ในนั้น

ไม่มีอะไรใน JSON Schema ตรวจสองอย่างนี้ได้ — ทั้งคู่ต้องมีคนอ่านแล้วเอ่ยชื่อ

Decision: C

เติมกฎให้ details สอดคล้องกับ message + เขียนไว้ในตัวฟิลด์ว่ากฎนี้บังคับได้ที่ผู้ผลิตเท่านั้น

ปฏิเสธ B (propertyNames enum) ด้วยเหตุผลของผู้รายงานเอง — schema เขียนได้แค่ว่าคีย์ไหนมีได้ เขียนไม่ได้ว่าใครเป็นคนเขียนค่านั้น ซึ่งเป็นแกนจริงของกฎ · และรายการที่ซิงก์สองที่จะ drift ภายในเดือนเดียว

v1.0.0v1.1.0 — ไม่ breaking

เพิ่มคำอธิบายและกฎ · ไม่แตะ type ไม่แตะ required ไม่ปิด object · consumer ที่ pin ไว้ (care-agent-platform · devfactory-core · botforge) ไม่ต้องแก้อะไร แต่ควรไล่ดูว่าของที่ใส่ใน details เข้ากฎหรือไม่

ยังไม่ปิด

event/v1.transition.reason — ช่องเดียวกันแต่ derive จาก devfactory-core ต้องเป็น RFC ที่ต้นทาง และเป็นฟิลด์ที่ข้อกำหนดสองข้อชนกัน

ตรวจแล้ว

drift check 34/34 · FAIL=0 · WARN=0

🤖 Generated with Claude Code

https://claude.ai/code/session_01LHv7HRmnnGAoKT5BvxDWHs

care-agent-platform ไล่ปิด metadata ของ audit event ในบ้านตัวเองตามที่ตกลงกันไว้
แล้วรายงานว่าเจอช่องที่สามระหว่างทาง คือ error/v1 details เป็น type object เปล่า
รูปเดียวกับ metadata เป๊ะ ต่างกันแค่ไม่มีใครพูดถึงมัน รวมทั้งตัวเขาเองที่เพิ่งไล่ปิด
metadata ทั้งใบแล้วเดินผ่าน details ไปโดยไม่เห็น

เปิดไฟล์ตรวจแล้วจริง และความไม่สมมาตรอยู่ห่างกันสิบบรรทัดในไฟล์เดียวกัน message
ห้าม PII ไว้ตั้งแต่ v1.0.0 ส่วน details ไม่มีคำอธิบายเลยสักบรรทัด

error/v1 ไม่ใช่ contract ที่ derive semantics มาจากใคร เป็นของ agent-platform เต็มใบ
จึงแก้ได้เองโดยไม่ต้องมี RFC ที่ต้นทาง ต่างจาก event/v1 transition reason ซึ่งเป็นช่อง
เดียวกันแต่อยู่ในสัญญาที่ derive มา

เคาะ option C คือเติมกฎให้สอดคล้องกับ message พร้อมเขียนไว้ในตัวฟิลด์ว่ากฎนี้บังคับ
ได้ที่ผู้ผลิตเท่านั้น ปฏิเสธการปิดด้วย propertyNames enum ด้วยเหตุผลของผู้รายงานเอง
คือ schema เขียนได้แค่ว่าคีย์ไหนมีได้ เขียนไม่ได้ว่าใครเป็นคนเขียนค่านั้นซึ่งเป็นแกนจริง
ของกฎ และรายการที่ต้องซิงก์สองที่จะ drift ภายในเดือนเดียว

ข้อสังเกตที่ทำให้ใบนี้มีค่ากว่าการแก้ไฟล์คือประโยคของผู้รายงานว่าช่องเปิดที่อันตราย
ที่สุดไม่ใช่ช่องที่มีคนเถียงกันว่าควรปิดไหม แต่เป็นช่องที่ไม่มีใครเอ่ยชื่อมันเลยในทั้ง
กระทู้ metadata ถูกพูดถึงจนได้รับการปิด details อยู่ในไฟล์เดียวกันรูปเดียวกันและรอด
มาได้เพราะไม่มีใครพิมพ์ชื่อมัน

บทเรียนที่บันทึกไว้ใช้ต่อ ครั้งหน้าที่ไล่ปิด open bag ให้ไล่จากรายการฟิลด์ในไฟล์ ไม่ใช่
จากรายการที่มีคนพูดถึงในกระทู้ สองรายการนี้ไม่เท่ากันและส่วนต่างคือช่องที่รอดมาได้

ไม่ breaking เพิ่มคำอธิบายและกฎ ไม่แตะ type ไม่แตะ required ไม่ปิด object

drift check 34/34 FAIL=0 WARN=0

Claude-Session: https://claude.ai/code/session_01LHv7HRmnnGAoKT5BvxDWHs

Co-authored-by: monthop-gmail <monthop-gmail@users.noreply.github.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@monthop-gmail
monthop-gmail merged commit 4dee8dd into main Sep 10, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant