Files
awoooi/apps/api/migrations/adr092_p1_learning_chain_rollback.sql
Your Name e96055eef9 fix(p0.4): Playbook 學習鏈三道修復 — partial index + race防護 + 手動路徑接線
ADR-092 P0.4 Playbook EWMA 學習閉環的 DB / Repository / Service 三層修補。

DB 層 (db-expert-fix by Engineer-B):
- ApprovalRecord.matched_playbook_id 移除 index=True,改 __table_args__ partial index
  (WHERE matched_playbook_id IS NOT NULL) — 多數列 NULL,full index 浪費空間
- adr092_p1_learning_chain_rollback.sql: 純 ROLLBACK SQL(DBA 手動執行)

Repository 層:
- playbook_repository.py: SELECT FOR UPDATE 防 lost update
  避免並發 EWMA 更新覆蓋彼此

Service 層 (P0.4 修復):
- proposal_service.py: 手動審核路徑補 _try_playbook_match_id 呼叫
  decision_manager auto_execute 路徑已有此邏輯(行 2035),
  此處補手動路徑缺口,使 matched_playbook_id 可寫入 DB → EWMA 才能演化

測試:
- test_playbook_repository_race_condition.py: 3 cases SELECT FOR UPDATE 防 race
  正確阻擋並發 EWMA 更新(pass)

Note: migration SQL 待 DBA 手動執行(feedback_dev_prod_separation.md),
      不執行 alembic upgrade(statu 文件禁忌條款)。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 20:19:46 +08:00

19 lines
603 B
PL/PgSQL

-- ADR-092 P1 Learning Chain Rollback
-- 撤銷 adr092_p1_learning_chain_fix.sql 的所有變更
-- 僅在 schema 誤套 / 緊急回滾時使用;資料不可復原
--
-- 執行方式(需人工執行一次):
-- psql $DATABASE_URL -f apps/api/migrations/adr092_p1_learning_chain_rollback.sql
--
-- 2026-04-25 db-expert-fix by Claude Engineer-B
BEGIN;
DROP INDEX IF EXISTS ix_approval_matched_playbook;
ALTER TABLE approval_records DROP COLUMN IF EXISTS matched_playbook_id;
DROP INDEX IF EXISTS ix_timeline_incident_id;
ALTER TABLE timeline_events DROP COLUMN IF EXISTS incident_id;
COMMIT;