Skip to content

payload ใช้ supersedes_approval_id ตาม approval/v1 v1.1.0 - #24

Merged
monthop-gmail merged 1 commit into
mainfrom
refactor/supersedes-approval-id
Aug 19, 2026
Merged

payload ใช้ supersedes_approval_id ตาม approval/v1 v1.1.0#24
monthop-gmail merged 1 commit into
mainfrom
refactor/supersedes-approval-id

Conversation

@monthop-gmail

Copy link
Copy Markdown
Owner

ตามหลัง agent-platform#24
approval/v1 v1.1.0 ตั้งชื่อ field จริงว่า supersedes_approval_id
· ฝั่งเราใส่ชื่อชั่วคราวของตัวเองไว้ (supersedes_decision_id) ตั้งแต่ #5 ตอนที่สัญญายังไม่มี field ให้

payload ที่เราผลิตจึงเปลี่ยนไปใช้ชื่อตามสัญญาแล้ว — pin ถูก bump ไปก่อนหน้าใน
#23 ตามกฎที่ห้ามอัปเกรด pin ปนกับงาน code

ชื่อใน Python ยังเป็น supersedes_decision_id — ตั้งใจ

repo นี้มีกฎอยู่แล้วว่า id ใช้ชื่อของเราใน Python และใช้ชื่อของเขาบน wire
(decision_idapproval_id · RFC-0005 Rule 1: semantics เป็นของเรา ชื่อ field เป็นของเขา)
ถ้าเปลี่ยนชื่อภายในด้วย จะกลายเป็น id เดียวในไฟล์ที่ไม่เดินตามกฎนั้น และอ่านแล้วขัดกัน —
Decision ถือ approval_id ทั้งที่ Decision.decision_id ข้างบนยังชื่อ decision_id

การ map อยู่ที่เดียวคือ decision.WIRE_FIELD_NAMES · as_payload() render ผ่าน dict นี้
ไม่ hardcode string · มีเทสไล่ทุก entry สองทาง — attribute ต้องมีจริง · payload ต้องมีเฉพาะชื่อของเขา
· ชื่อของเราต้องไม่หลุดออกไปบน wire → rename ครั้งหน้าเป็นการแก้บรรทัดเดียว ไม่ใช่การ grep

check ใหม่ที่กัดจริง

approval/v1 ไม่ได้ปิด additionalProperties แปลว่า ชื่อ field ผิดก็ยัง validate ผ่าน
— schema จึงจับ regression แบบนี้ให้ไม่ได้ ต้องตรวจเอง · เพิ่ม 2 check ใน payload_check.py

พิสูจน์แล้วว่ามันกัด — ย้อน WIRE_FIELD_NAMES กลับเป็นชื่อเก่าชั่วคราว → passed=18 FAIL=2
ไม่ใช่ check ที่ผ่านเพราะไม่มีอะไรให้ตรวจ

ผลตรวจ

gate ก่อน หลัง
pytest 503 504 passed
payload_check.py 18 20 passed · 0 fail
simulation/e2e_flow.py 34 34 passed · 0 fail

เก็บกวาดที่พ่วงมาด้วย

ช่องว่างที่บันทึกไว้ ไม่ได้ปิดในนี้

approval/v1 v1.1.0 ฝาก invariant 5 ข้อไว้กับ ผู้ผลิต (ใบที่อ้างต้องมีจริง · tenant เดียวกัน
· subject เดียวกัน · ห้ามชี้ตัวเอง · ห้ามเป็นวง) — ทางเดิน default ของ Job.decide ทำครบทั้ง 5
โดยธรรมชาติ แต่ถ้า caller ส่ง citation เข้ามาเอง ยังไม่มีใครตรวจ 4 ข้อแรก
· ยังไม่มี payload ที่ผิดจริง แต่ประตูเปิดอยู่ → ลง remaining: ไว้ ไม่แก้ในนี้เพราะเป็นการเพิ่ม guard
นอกขอบเขต rename

expires_at · REQUIRE_CHANGES (RFC-0011) · replay ไม่ถูกกระทบ

…thon ยังเป็นของเรา

agent-platform#24 ตั้งชื่อ field จริงว่า supersedes_approval_id (approval/v1 v1.1.0,
pin ขยับไปแล้วใน #23) ชื่อที่เราตั้งเองไว้ก่อนคือ supersedes_decision_id จึงต้องเลิกใช้
บน wire ก่อน payload ชื่อเก่าจะสะสม

ชื่อภายในยังเป็น supersedes_decision_id ตาม convention เดิมของ repo นี้ที่ decision_id
(ภายใน) → approval_id (payload) — RFC-0005 Rule 1: semantics เป็นของเรา ชื่อ field เป็น
ของเขา · map ระหว่างสองชื่ออยู่ที่เดียวคือ decision.WIRE_FIELD_NAMES ซึ่ง as_payload
render ผ่านมัน และมีเทสไล่ทุก entry ในนั้น

payload_check เพิ่มการตรวจชื่อ field: approval/v1 ไม่ได้ตั้ง additionalProperties: false
ชื่อที่เราคิดเองจึง validate ผ่านเงียบ ๆ — ใช้ properties ของ schema เป็นชุดปิดแทน
พร้อมตรวจอีกด้านว่าลิงก์ยังถูกส่งจริง ไม่ใช่หายไปพร้อมการ rename
(ยืนยันแล้วว่าเช็คกัดจริง: ย้อนชื่อกลับ → FAIL=2)

gap approval-supersedes-field-missing ปิดแล้ว ติด status: resolved ไว้แบบเดียวกับ
blocking: ข้างบน · pinned_contracts_commit ใน platform-contract.yaml ยังค้างที่ 7263588
หลัง #23 จึงขยับตามให้ตรงกับ conformance/pinned.yaml (ไม่ได้แตะ pinned.yaml)

ไม่แตะ expires_at และเส้นทาง REQUIRE_CHANGES (RFC-0011) — เช็คทั้งสองยังเขียวอยู่

pytest 504 · payload_check passed=20 FAIL=0 · e2e_flow passed=34 FAIL=0

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