คำว่า subject: lock ความหมาย และให้ policy/v1 เลิกเรียกผู้กระทำว่า subject - #33
Merged
Conversation
…bject ADR-0017 เคาะ option B ไล่ทั้ง contracts/ แล้วคำนี้ถูกใช้ใน 5 contract 3 ความหมาย — policy (ผู้กระทำ) capability (ผู้ประกาศ) event (หัวเรื่องของบันทึก) approval (สิ่งที่ถูกอนุมัติ) consent (เจ้าของข้อมูล ซึ่งเขียนกำกับไว้เองว่าไม่ใช่ actor) และคำนี้ไม่อยู่ใน ตารางศัพท์ที่ lock ไว้ ทั้งที่ตารางนั้นมีไว้กันเรื่องแบบนี้โดยเฉพาะ คำวินิจฉัย: subject = สิ่งที่บันทึกนั้นเกี่ยวกับ ผู้กระทำคือ actor ความหมายเจ้าของข้อมูลส่วนบุคคลใช้ได้เฉพาะ consent/v1 เพราะเป็นศัพท์กฎหมาย กฎนี้ทำให้ 4 ใน 5 ถูกอยู่แล้ว เหลือ policy/v1 ตัวเดียวที่ต้องแก้ policy/v1 v1.2.0 เพิ่ม actor ติด deprecated ให้ subject ถอด subject ออกจาก required แล้วใช้ oneOf บังคับให้มีอย่างใดอย่างหนึ่ง ห้ามมีทั้งคู่ — payload เดิม ยัง valid ทุกใบ ไม่มีใครต้อง migrate ทันที event/v1 กับ approval/v1 ไม่แตะ เพราะใช้ในความหมายที่ถูกอยู่แล้วและเป็น semantics ของ devfactory-core ที่เปลี่ยนที่นี่ไม่ได้ ทั้งสามได้หมายเหตุ อ้างอิงไขว้แทน ซึ่งเป็นส่วนที่ปิดความเสี่ยงจริง เพราะความเสี่ยงอยู่ที่คนอ่าน ไม่ใช่บน wire — schema จับการสลับได้อยู่แล้วเพราะรูปต่างกัน Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LHv7HRmnnGAoKT5BvxDWHs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ADR-0017 option B · ต่อจากข้อค้นพบ 4 ของ ADR-0016
หนึ่งคำ สามความหมาย ข้าม 5 contract
ADR-0016 บันทึกไว้ว่าเป็นปัญหาข้าม 3 contract — นับขาด · ไล่ทั้ง
contracts/แล้วมี 5:policy/v1Request.subject{principal, agent_id}capability/v1declaration.subject{kind, id}event/v1🔗subject_type/subject_idIdapproval/v1🔗subject{type, id}consent/v1subject_idIdเดี่ยวและคำนี้ ไม่อยู่ในตารางศัพท์ที่ lock ไว้ ทั้งที่ตารางนั้นมีอยู่เพื่อกันเรื่องนี้โดยเฉพาะ
ความเสี่ยงอยู่ตรงไหนจริง ๆ — ไม่ตีขลุม
คู่ที่อันตรายคือ
policy.subject(ผู้กระทำ) ↔consent.subject_id(เจ้าของข้อมูล) เพราะเป็น "id ของคน" ที่ความหมายตรงข้าม และเป็นสองด่านที่ต้องเรียกคู่กันตามconsent_rulesข้อ 6แต่บน wire วันนี้ schema จับความผิดพลาดนี้ได้อยู่แล้ว — ตัวหนึ่งเป็น object อีกตัวเป็น scalar
Idส่งสลับกันจะ validate ไม่ผ่านenterprise-knowledgeกำลัง mapPrincipal/PolicyContextเข้าชุดนี้อยู่ตอนนี้ และcontracts.pyของเขาเป็น Python ล้วน — ในงาน ACL-aware retrieval การสลับสองคำนี้แปลว่า เอาสิทธิ์ของคนหนึ่งไปเปิดข้อมูลของอีกคนคำวินิจฉัยที่ lock
กฎนี้ทำให้ 4 ใน 5 ถูกอยู่แล้ว และชี้ตัวที่ต้องแก้ได้ตัวเดียว
สิ่งที่เปลี่ยน —
policy/v1v1.2.0$defs.Actorนิยามรูปครั้งเดียว ทั้งactorและsubject$refตัวเดียวกัน — รูปเหมือนกันทุกอย่าง เปลี่ยนแค่ชื่อไม่ breaking
payload เดิมที่ส่ง
subjectยัง valid ทุกใบ ·oneOfห้ามส่งสองชื่อพร้อมกัน แต่actorเพิ่งเกิด จึงไม่มี payload เดิมใบไหนส่งทั้งคู่ได้ ·care-agent-platformและdevfactory-coreไม่ต้องทำอะไรทันที⏳ ต้องลบใน
policy/v2บันทึกไว้ใน
contracts/README.mdเป็นตารางของ field ที่ deprecated — สองชื่อสำหรับสิ่งเดียวกันคือสิ่งที่ repo นี้ห้ามไว้ทุกที่ (expires_at: null·conditions: []) จึงต้องมีวันหมดอายุ ไม่ใช่อยู่ถาวรที่ไม่แตะ — และทำไม
event/v1·approval/v1ใช้subjectในความหมายที่ ถูกตามคำวินิจฉัยอยู่แล้ว และเป็น 🔒 semantics ของdevfactory-core(RFC-0008) ที่เปลี่ยนที่นี่ไม่ได้ ·consent/v1.subject_idเป็น data subject ตามศัพท์กฎหมาย ซึ่ง ADR อนุญาตไว้เป็นข้อยกเว้นทั้งสี่ได้ หมายเหตุอ้างอิงไขว้ แทนการเปลี่ยนชื่อ — และนั่นคือส่วนที่ปิดความเสี่ยงจริง เพราะความเสี่ยงคือการอ่าน ไม่ใช่ชื่อ
ตรวจแล้ว
drift_check.py→passed=20 FAIL=0 WARN=0· payload จริง 7 เคสตรงตามคาด รวม negative ของoneOf:subject· payload ใหม่ที่ใช้actor·actor+consentactorและsubject· ไม่ส่งทั้งคู่ ·actorไม่มีprincipal· ขาดaction🤖 Generated with Claude Code
https://claude.ai/code/session_01LHv7HRmnnGAoKT5BvxDWHs