feat(auto-repair): 移除所有阻擋門檻 — 直接全部跳成自動修復
Some checks failed
CD Pipeline / build-and-deploy (push) Failing after 1m38s

統帥指令: 所有 APPROVED Playbook 直接執行,不再檢查:
- 相似度門檻 (MIN_SIMILARITY_SCORE 0.7 → 0.0)
- is_high_quality 品質門檻
- 冷啟動信任機制
- 動作風險等級門檻 (evaluate + execute 兩層)

保留: P0/P1 嚴重度人工審核、全域冷卻熔斷、APPROVED 狀態檢查

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
OG T
2026-04-08 11:10:09 +08:00
parent 8fcb66eb52
commit 68a2fff746

View File

@@ -134,15 +134,13 @@ class AutoRepairService:
"""
# === 安全邊界常數 ===
MAX_AUTO_REPAIR_RISK = RiskLevel.MEDIUM # 最高允許自動修復的風險等級
MAX_AUTO_REPAIR_SEVERITY = Severity.P2 # 最高允許自動修復的嚴重度
MIN_SIMILARITY_SCORE = 0.7 # 最低相似度門檻
# 2026-04-07 Claude Code: 首次信任機制 — 打破冷啟動雞生蛋問題
# 條件: APPROVED + 全部步驟 risk=LOW + 執行次數 < 3
# 每日最多 5 次首次信任自動修復,防止失控
COLD_START_TRUST_MAX_EXECUTIONS = 3 # 累積幾次後回歸正常門檻
COLD_START_TRUST_DAILY_LIMIT = 5 # 每日首次信任上限
# 2026-04-07 Claude Code: 統帥指令「直接全部跳成自動修復」
# 移除相似度/品質/風險門檻,只保留 P0/P1 嚴重度阻擋
MAX_AUTO_REPAIR_RISK = RiskLevel.MEDIUM # 保留供日後參考,不再用於阻擋
MAX_AUTO_REPAIR_SEVERITY = Severity.P2 # P0/P1 仍需人工審核
MIN_SIMILARITY_SCORE = 0.0 # 🔴 已取消門檻
COLD_START_TRUST_MAX_EXECUTIONS = 3 # 保留供參考
COLD_START_TRUST_DAILY_LIMIT = 5 # 保留供參考
def __init__(
self,
@@ -255,69 +253,22 @@ class AutoRepairService:
# 4. 檢查最佳匹配
best_match = recommendations[0]
# 相似度檢查
if best_match.similarity_score < self.MIN_SIMILARITY_SCORE:
return AutoRepairDecision(
can_auto_repair=False,
playbook=best_match.playbook,
reason=f"相似度 {best_match.similarity_score:.0%} 低於門檻 {self.MIN_SIMILARITY_SCORE:.0%}",
blocked_by="LOW_SIMILARITY",
)
# 高品質檢查 + 首次信任機制
# 2026-04-07 Claude Code: 方案 C — 打破冷啟動雞生蛋問題
# 2026-04-07 Claude Code: 統帥指令「直接全部跳成自動修復」
# 移除: 相似度門檻、is_high_quality 門檻、冷啟動機制、風險等級門檻
# 只要有匹配 Playbook 且 APPROVED直接執行
max_risk = self._get_max_risk_level(best_match.playbook)
_is_cold_start = False # Sprint 4 B2: 預設非冷啟動
_is_cold_start = False
if not best_match.playbook.is_high_quality:
# 首次信任: APPROVED + 全步驟 LOW risk + 執行次數 < N
cold_start_eligible = (
best_match.playbook.status == PlaybookStatus.APPROVED
and max_risk == RiskLevel.LOW
and best_match.playbook.total_executions < self.COLD_START_TRUST_MAX_EXECUTIONS
)
if cold_start_eligible:
# 檢查每日首次信任上限
daily_ok = await self._check_cold_start_daily_limit()
if daily_ok:
logger.info(
"auto_repair_cold_start_trust",
incident_id=incident.incident_id,
playbook_id=best_match.playbook.playbook_id,
playbook_name=best_match.playbook.name,
total_executions=best_match.playbook.total_executions,
max_risk=max_risk.value,
)
_is_cold_start = True # Sprint 4 B2: 標記冷啟動
# 跳過 is_high_quality 門檻,直接進入風險檢查
else:
return AutoRepairDecision(
can_auto_repair=False,
playbook=best_match.playbook,
reason=f"首次信任每日上限已達 {self.COLD_START_TRUST_DAILY_LIMIT}",
blocked_by="COLD_START_DAILY_LIMIT",
)
else:
return AutoRepairDecision(
can_auto_repair=False,
playbook=best_match.playbook,
reason=f"Playbook 尚未達到高品質標準 (成功率: {best_match.playbook.success_rate:.0%}, 執行次數: {best_match.playbook.total_executions})",
blocked_by="NOT_HIGH_QUALITY",
)
# 5. 檢查動作風險等級
if self._risk_exceeds_threshold(max_risk):
# 只保留: Playbook 必須是 APPROVED 狀態
if best_match.playbook.status != PlaybookStatus.APPROVED:
return AutoRepairDecision(
can_auto_repair=False,
playbook=best_match.playbook,
reason=f"Playbook 包含 {max_risk.value} 風險動作,需要人工審核",
risk_level=max_risk,
blocked_by="HIGH_RISK",
reason=f"Playbook 狀態為 {best_match.playbook.status.value},必須是 APPROVED",
blocked_by="NOT_APPROVED",
)
# 6. 可以自動修復
# 5. 可以自動修復
logger.info(
"auto_repair_approved",
incident_id=incident.incident_id,
@@ -367,14 +318,8 @@ class AutoRepairService:
try:
# 執行每個步驟
for step in playbook.repair_steps:
# 安全檢查: 跳過高風險步驟
if self._risk_exceeds_threshold(step.risk_level):
logger.warning(
"auto_repair_skip_high_risk_step",
step_number=step.step_number,
risk_level=step.risk_level.value,
)
continue
# 2026-04-07 Claude Code: 統帥指令「直接全部跳成自動修復」
# 移除 step-level 風險門檻,所有步驟直接執行
# 執行步驟
step_result = await self._execute_step(incident, step)