diff --git a/apps/api/src/services/proposal_service.py b/apps/api/src/services/proposal_service.py index 2b7cd85cd..fd6184423 100644 --- a/apps/api/src/services/proposal_service.py +++ b/apps/api/src/services/proposal_service.py @@ -602,6 +602,39 @@ class ProposalService: error=str(e), ) + # 3. 更新 DecisionToken 狀態為 COMPLETED + # 關鍵修復: DecisionToken 獨立儲存在 decision:{token} + # 必須同步更新,否則下次 poll 會顯示 Y/n + decision_ok = False + try: + from src.services.decision_manager import get_decision_manager, DecisionState + decision_manager = get_decision_manager() + existing_token = await decision_manager._find_existing_token(incident_id) + if existing_token: + await decision_manager.update_token_state( + existing_token.token, + DecisionState.COMPLETED, + ) + decision_ok = True + logger.info( + "resolve_decision_token_updated", + incident_id=incident_id, + token=existing_token.token, + new_state="completed", + ) + else: + decision_ok = True # 沒有 token 也算成功 + logger.warning( + "resolve_decision_token_not_found", + incident_id=incident_id, + ) + except Exception as e: + logger.exception( + "resolve_decision_token_error", + incident_id=incident_id, + error=str(e), + ) + # 只要 Redis 更新成功就算成功(API 只讀 Redis) success = redis_ok logger.info( @@ -611,6 +644,7 @@ class ProposalService: success=success, redis_ok=redis_ok, db_ok=db_ok, + decision_ok=decision_ok, ) return success