Your Name
13e51802fe
feat(awooop): Phase 0 全 ADR + Phase 1 control plane schema(含 critic 四項修正)
## Phase 0(文件層,全部 Accepted)
- ADR-106/107:AwoooP 平台架構 + 儲存策略
- ADR-111~118:Bootstrap → RLS 七項核心 ADR
- ADR-119~124:SAGA → Singleton Decomposition 六項 ADR
- ADR-UI-01~04:Operator Console 四個 UI ADR
## Phase 1(DB schema + migration)
- awooop_phase1_control_plane_2026-05-04.sql:7 張新表 + trigger + RLS
- Step 1:三角色(platform_admin/migration BYPASSRLS,awooop_app 受 RLS)
- Step 13:GRANT awooop_app 最小權限(7 條)
- Step 14:RLS fail-closed,移除 __platform__ 後門
- awooop_phase1_batch1_rls_2026-05-04.sql:高流量四表三步式 ADD COLUMN
- awooop_phase1_batch1_backfill.py:SKIP LOCKED 分批回填腳本
- awooop_models.py:7 個 SQLAlchemy 2.x models
## Critic 修正(4 Critical + 3 Major)
- C-1:ADD CONSTRAINT IF NOT EXISTS → DO 塊 + pg_constraint 查詢
- C-2:__mapper_args__ 字串 list → primary_key=True on mapped_column
- C-3:__platform__ RLS 後門 → 全移除,改用 BYPASSRLS role
- C-4:awooop_app role 從未建立 → Step 1 + 7 條 GRANT
- M-1:active_pointer_guard SECURITY DEFINER(FORCE RLS 跨租戶保護)
- M-2:pg_partman create_parent 加冪等防護
- M-3:immutability trigger 新增身份欄位保護(project_id/family/contract_id)
## Task 1.2 修補
- agent_loader.py:硬編碼 Mac 路徑 → AGENTS_DIR 環境變數
- Dockerfile:補 COPY .claude/agents/
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 13:37:11 +08:00
..
2026-04-11 02:24:20 +08:00
2026-04-17 16:14:44 +08:00
2026-04-18 13:18:46 +08:00
2026-04-18 13:23:39 +08:00
2026-04-18 16:04:23 +08:00
2026-04-19 00:00:31 +08:00
2026-04-20 04:04:13 +08:00
2026-04-20 04:23:09 +08:00
2026-04-24 15:41:35 +08:00
2026-04-26 20:19:46 +08:00
2026-04-25 02:10:06 +08:00
2026-04-25 02:10:06 +08:00
2026-04-30 23:53:19 +08:00
2026-05-01 13:21:19 +08:00
2026-05-04 13:37:11 +08:00
2026-05-04 13:37:11 +08:00
2026-04-24 10:55:50 +08:00
2026-05-04 11:18:20 +08:00
2026-04-15 22:03:59 +08:00
2026-04-10 11:04:56 +08:00
2026-05-03 12:42:40 +08:00
2026-04-29 10:44:39 +08:00
2026-04-27 08:11:40 +08:00
2026-04-27 08:11:40 +08:00
2026-04-27 14:54:19 +08:00
2026-04-27 14:54:19 +08:00
2026-04-04 12:02:03 +08:00
2026-04-04 12:35:05 +08:00
2026-04-04 12:35:05 +08:00
2026-04-08 11:16:37 +08:00
2026-04-08 11:22:03 +08:00
2026-04-08 11:22:03 +08:00
2026-03-26 16:06:20 +08:00
2026-04-01 21:36:15 +08:00
2026-05-01 11:08:21 +08:00
2026-04-06 11:46:05 +08:00
2026-04-10 01:06:51 +08:00
2026-04-10 01:50:22 +08:00
2026-04-10 01:50:22 +08:00
2026-04-10 01:37:43 +08:00
2026-04-10 10:33:32 +08:00
2026-04-15 22:02:17 +08:00
2026-04-09 18:38:08 +08:00
2026-04-08 16:24:09 +08:00
2026-04-08 16:24:09 +08:00