feat(trust): ADR-088 Trust Score 持久化 — L4 自動放行核心
All checks were successful
CD Pipeline / build-and-deploy (push) Successful in 10m40s

TrustScoreManager 從記憶體升級為 PostgreSQL 持久化,
Pod 重啟後信任分數不再歸零,AI 能真正累積到 L4 自動放行門檻。

變更:
- migrations/adr088_trust_score_persistence.sql: trust_records 表
- db/models.py: TrustRecordDB ORM model
- repositories/interfaces.py: ITrustRepository Protocol
- repositories/trust_repository.py: PG upsert ON CONFLICT DO UPDATE
- services/trust_engine.py: bulk_load() 啟動 warm-up
- services/learning_service.py: _persist_trust() + 2 call sites
- main.py: 啟動時 load_all() → bulk_load()

流程: 批准 5 次 → score=5 寫入 DB → Pod 重啟 → warm-up 讀回
      → evaluate_adjusted_risk MEDIUM→LOW → 自動執行

2026-04-17 ogt + Claude Sonnet 4.6(亞太): ADR-088

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
OG T
2026-04-17 16:14:33 +08:00
parent 148d59a0e4
commit 9d6aa7ea45
7 changed files with 353 additions and 1 deletions

View File

@@ -302,6 +302,19 @@ async def lifespan(_app: FastAPI) -> AsyncGenerator[None, None]:
except Exception as e:
logger.warning("working_memory_warmup_failed", error=str(e))
# ADR-088: Trust Score 冷啟動 — 從 PostgreSQL 恢復信任分數
# 解決: Pod 重啟後 TrustScoreManager 記憶歸零AI 永遠無法累積到 L4 自動放行
# 2026-04-17 ogt + Claude Sonnet 4.6(亞太): Phase 4 信任持久化
try:
from src.repositories.trust_repository import get_trust_repository
from src.services.trust_engine import get_trust_manager
trust_records = await get_trust_repository().load_all()
loaded = get_trust_manager().bulk_load(trust_records)
logger.info("trust_scores_warmed_up", loaded=loaded)
except Exception as e:
logger.warning("trust_scores_warmup_failed", error=str(e))
# Phase 4 飛輪修復: Playbook Embedding 冷啟動索引
# 2026-04-10 Claude Sonnet 4.6 Asia/Taipei
# 目的: 確保 playbook_embeddings 表有最新向量,供語義相似度查詢