Skip to content

ADR-0029: เพดานที่ยกทุกอย่างให้เข้มขึ้น จะกั้น action ที่ความเร็วคือความปลอดภัย - #65

Merged
monthop-gmail merged 2 commits into
mainfrom
adr-0029-cost-of-not-acting
Sep 10, 2026

Conversation

@monthop-gmail

Copy link
Copy Markdown
Owner

Status: Proposed — รอเจ้าของงานเคาะ

care-agent-platform รายงานเคสจาก production ใน dis-65134078 seq 12:

เพดานของเราตอนแรกยกทุกอย่างให้เข้มขึ้นอย่างสม่ำเสมอ ผลคือ emergency.escalate (critical) ถูกยกจาก notify เป็น human_command_requiredตอนผู้ป่วยล้ม ระบบจะรอคนสั่งก่อนถึงจะเรียกคน

วันเดียวกัน รูปเดียวกันโผล่จากคนละโดเมนใน dis-a84b7a8e: tools.cancel ต้องไม่มีวันติดคิวอนุมัติ · สองทีม สองโดเมน หนึ่งวัน → เป็นเรื่องของสัญญา ไม่ใช่ของ implementation ใครคนใดคนหนึ่ง

สาเหตุเชิงโครงสร้าง — taxonomy มีแกนเดียว

authority_map:  action_risk ──→ authority
                 ↑ ความเสียหายถ้า "ทำ" ผิด (ADR-0010)

ไม่มีที่ไหนในสัญญาที่บันทึกความเสียหายถ้า "ไม่ทำ" — เพดานใดที่สร้างบนแกนเดียวนี้จะกั้น action ที่คุณค่าของมันคือความเร็ว โดยไม่ผิดกติกาสักข้อ

Options

ทาง จุดตาย
A ไม่ทำอะไร มีหลักฐานแล้วว่าพลาดจริง และทีมที่พลาดคือทีมที่รอบคอบที่สุด
B boolean never_gated คือคำว่า "เชื่อผมเถอะ" ที่เขียนเป็น YAML — ไม่มีอะไรให้ validator เทียบ
C undoes อย่างเดียว ไม่ครอบ emergency.escalate ซึ่งเป็นเคสที่จุดชนวน
D undoes + ข้อยกเว้นที่ประกาศแยก ห้ามยุบเป็นฟิลด์เดียว สองฟิลด์ต้องอธิบายให้ชัด · ครึ่งหลังตรวจได้แค่ว่า audit ออกจริง
E เขียนกฎอย่างเดียว รอ producer ตรงกับนิสัย repo ที่สุด แต่กฎเปล่าไม่ได้กันเคสนี้ — ทีมที่รู้หลักอยู่แล้วยังตั้งผิด

undoes มาจากผู้รายงานเอง พร้อมคำเตือนของเขาว่า ถ้ารวมสองรูปเป็นฟิลด์เดียว อันที่สองจะลากอันแรกลงไปเป็น "เชื่อผมเถอะ" ด้วย

ยังไม่ปิด

  • ที่ทางของข้อยกเว้น (capability/v1 หรือ profile/v1) — รอ producer รายแรก
  • ยังไม่มีใครผลิต undoes เลยวันนี้ รวมทั้งผู้เสนอ · ถ้าเคาะ D แล้วไม่มีใครใช้ในรอบถัดไป นั่นคือหลักฐานว่าควรถอยไป E

อัปเดตทะเบียน consumer ด้วย

ตรวจ care-agent-platform โดยดึง platform-contract.yaml มาอ่านเอง ไม่ได้เชื่อรายงาน — manifest โตเป็น 6 conformance check แล้ว และพบข้อไม่ตรงกัน: profile_check อ้าง profile/v1 แต่ profile/v1 ไม่อยู่ใน contracts: · บันทึกไว้เป็นคำถาม ไม่ใช่ข้อสรุป

ตรวจแล้ว

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

🤖 Generated with Claude Code

https://claude.ai/code/session_01LHv7HRmnnGAoKT5BvxDWHs

monthop-gmail and others added 2 commits September 11, 2026 03:46
…วามปลอดภัย

care-agent-platform รายงานเคสจาก production ว่าเพดานของเขายกทุกอย่างให้เข้มขึ้น
อย่างสม่ำเสมอ ผลคือ emergency escalate ถูกยกจาก notify เป็น human_command_required
แปลว่าตอนผู้ป่วยล้ม ระบบจะรอคนสั่งก่อนถึงจะเรียกคน เพดานที่ตั้งใจเพิ่มความปลอดภัย
กลับลบความปลอดภัยข้อที่สำคัญที่สุดทิ้ง

วันเดียวกัน รูปเดียวกันโผล่จากคนละโดเมนในกระทู้ ai-tools-mcp คือ tools cancel
และการฆ่า execution ที่กำลังรันต้องไม่มีวันติดคิวอนุมัติ สองทีม สองโดเมน หนึ่งวัน
จึงเป็นเรื่องของสัญญา ไม่ใช่ของ implementation ใครคนใดคนหนึ่ง

สาเหตุเชิงโครงสร้างคือ authority_map map จาก action_risk ไป authority และ ADR-0010
นิยาม action_risk ว่าความเสียหายถ้าทำผิด ไม่มีที่ไหนในสัญญาที่บันทึกความเสียหายถ้า
ไม่ทำ taxonomy จึงมีแกนเดียวแต่โลกมีสองแกน เพดานใดที่สร้างบนแกนเดียวนี้จะกั้นการ
กระทำที่คุณค่าของมันคือความเร็ว โดยไม่ได้ผิดกติกาสักข้อ

ผู้รายงานตอบตรง ๆ ว่าฝั่งเขาไม่มีกลไก แยกด้วยมือและเคยตั้งผิดมาแล้ว แล้วเสนอทางที่
ตรวจได้คืออย่าประกาศคุณสมบัติ ให้ประกาศความสัมพันธ์ ด้วย undoes ที่ชี้ไป CapabilityId
จริง กฎจึงกลายเป็นสิ่งที่เครื่องตรวจได้ว่าตัวที่ undo ต้องไม่ต้องการ authority สูงกว่า
ตัวที่มันยกเลิก แต่เขาเตือนเองว่ามันไม่ครอบ emergency escalate ซึ่งไม่ได้ undo อะไร
และถ้ารวมสองรูปเป็นฟิลด์เดียว อันที่สองจะลากอันแรกลงไปเป็นเชื่อผมเถอะด้วย

ใบนี้เป็น Proposed เสนอ D คือสองฟิลด์แยกกัน และบันทึกไว้ว่า E ซึ่งเป็นการเขียนกฎ
อย่างเดียวรอ producer เป็นทางที่ตรงกับนิสัยของ repo นี้ที่สุดและใช้มาแล้วสามรอบติด
ต่างกันตรงที่สามรอบนั้นความล้มเหลวคืออ่านยาก รอบนี้คือระบบไม่เรียกคนตอนคนล้ม และ
กฎเปล่าไม่ได้ป้องกันเคสนี้เพราะทีมที่รู้หลักอยู่แล้วยังตั้งผิด

อัปเดตทะเบียน consumer ของ care ด้วย ตรวจโดยดึง platform-contract.yaml มาอ่านเอง
ไม่ได้เชื่อรายงาน พบว่า manifest โตเป็น 6 conformance check แล้ว และพบข้อไม่ตรงกัน
คือ profile_check อ้าง profile/v1 แต่ profile/v1 ไม่อยู่ใน contracts ของ manifest
บันทึกไว้เป็นคำถาม ไม่ใช่ข้อสรุป

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>
…นฟิลด์เดียว

เจ้าของงานเคาะทางเลือก D

เหตุผลที่ไม่เลือก E ทั้งที่ E ตรงกับนิสัยของ repo นี้ที่สุดและถูกมาแล้วสามรอบติด คือ
สามรอบนั้นความล้มเหลวเป็นเรื่องอ่านยาก ส่วนรอบนี้เป็นเรื่องระบบไม่เรียกคนตอนผู้ป่วยล้ม
และหลักฐานบอกว่ากฎที่ไม่มีของบังคับไม่พอ เพราะทีมที่รู้หลักนี้อยู่แล้วยังตั้งผิด

ที่ทางของข้อยกเว้นยังไม่ตัดสินในใบนี้ รอ producer รายแรกตามหลักเดียวกับ ADR-0025
และ ADR-0027 และบันทึกไว้ว่าถ้าเคาะ D แล้วรอบถัดไปไม่มีใครใช้ undoes เลย นั่นคือ
หลักฐานว่าควรถอยไป E ไม่ใช่เหตุผลให้เติมฟิลด์เพิ่ม

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>
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