Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions contracts/identity/v1/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# identity/v1

## v1.1.0 — 2026-08-22

* `WorkspaceId` เขียนให้ชัดว่าเป็น **ขอบเขตอนุญาต ไม่ใช่กำแพง** — [ADR-0021](../../../decisions/0021-workspace-is-a-scope-not-a-boundary.md)

`enterprise-knowledge` เปิด [#23](https://github.com/monthop-gmail/enterprise-knowledge/issues/23) ถามว่า `workspace_id` เข้มเท่า `tenant_id` ไหม ก่อนจะเขียน `schema.sql` — [ADR-0007](../../../decisions/0007-multi-tenancy.md) พูดสองอย่างที่ต้องอ่านคู่กัน (*"workspace = grouping"* กับเหตุผลที่ปฏิเสธ option C ว่า *"ไม่มี workspace แล้วทีมหนึ่งเห็น knowledge อีกทีมทั้งหมด"*) แล้วไม่เคยมีใครเคาะว่าตกลงบังคับแค่ไหน

| | `tenant_id` | `workspace_id` |
| --- | --- | --- |
| ข้ามได้ไหม | ไม่ได้ทุกกรณี | **deny by default แต่อนุญาตได้** ผ่าน `policy/v1` |
| บังคับที่ชั้นไหน | ชั้นเก็บข้อมูล (RLS/partition) | ชั้นตรวจสิทธิ์ |
| การข้ามที่สำเร็จ | ไม่มี | **ต้องออก audit event เสมอ** |

**ไม่มี field เปลี่ยน ไม่มีอะไร breaking** — เป็นการเขียนความหมายที่ ADR-0007 ตัดสินไว้แล้วให้ชัดขึ้น ตรงที่คนอ่านจริง

## v1.0.0 — 2026-08-17
- ตั้งต้นตาม [ADR-0007](../../../decisions/0007-multi-tenancy.md)
- `TenantId` `WorkspaceId` `ActorId` `AgentId` `ExecutionId` `Principal` `RequestContext` `ExecutionContext`
15 changes: 14 additions & 1 deletion contracts/identity/v1/identity.schema.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,20 @@ $defs:
$ref: '#/$defs/Id'
description: >-
ขอบเขตงานภายใน tenant — agent, knowledge, tool, policy อยู่ใน workspace
`Project` และ `Department` เป็น label ของ workspace ไม่ใช่ชั้น id ใหม่ (ADR-0007)
`Project` และ `Department` เป็น label ของ workspace ไม่ใช่ชั้น id ใหม่ ([ADR-0007](../../../decisions/0007-multi-tenancy.md))

🔒 **เป็นขอบเขตอนุญาต ไม่ใช่กำแพง** ([ADR-0021](../../../decisions/0021-workspace-is-a-scope-not-a-boundary.md))
— ต่างจาก `TenantId` ตรงที่ **มีคนอนุญาตให้ข้ามได้** ไม่ใช่ตรงที่เข้มน้อยกว่า

· **ปฏิเสธโดยปริยาย** — ทุก query ถูก scope ด้วย workspace เสมอ ไม่ใช่ filter ที่เลือกใส่

· **ขยายได้ผ่าน [`policy/v1`](../../policy/v1/)** (และ [`consent/v1`](../../consent/v1/) ถ้าเป็นข้อมูลส่วนบุคคล) ไม่ใช่ผ่านการเขียนโค้ดข้ามเอง

· **การข้ามที่สำเร็จต้องออก audit event เสมอ** ว่าอนุญาตด้วยอะไร — ถ้าข้ามได้เงียบ ๆ
ก็ไม่ต่างจากไม่มี workspace เลย

· บังคับที่ **ชั้นตรวจสิทธิ์** ส่วน `tenant_id` บังคับที่ **ชั้นเก็บข้อมูล** (RLS/partition/index)
ซึ่งโค้ดที่เขียนผิดก็ยังข้ามไม่ได้

ActorId:
$ref: '#/$defs/Id'
Expand Down
Loading
Loading