diff --git a/docs/AGENT_ROADMAP.md b/docs/AGENT_ROADMAP.md index 9b64f45..e147a4b 100644 --- a/docs/AGENT_ROADMAP.md +++ b/docs/AGENT_ROADMAP.md @@ -34,9 +34,9 @@ 3. 패리티 수치(테스트 통과 수/게이트 상태)를 로드맵 문서 간 동일 문구로 유지. ## 6. 최신 검증 스냅샷 (2026-04-03) -- `dotnet test --filter "Suite=ParityBenchmark"`: 12/12 통과. -- `dotnet test --filter "Suite=ReplayStability"`: 12/12 통과. -- `dotnet test`: 374/374 통과. +- `dotnet test --filter "Suite=ParityBenchmark"`: 13/13 통과. +- `dotnet test --filter "Suite=ReplayStability"`: 14/14 통과. +- `dotnet test`: 379/379 통과. ## 7. 권한 Hook 계약 (P2 마감 기준) - lifecycle hook 키: diff --git a/docs/NEXT_ROADMAP.md b/docs/NEXT_ROADMAP.md index 5c45b2e..a727d90 100644 --- a/docs/NEXT_ROADMAP.md +++ b/docs/NEXT_ROADMAP.md @@ -36,7 +36,7 @@ ## 7. 2026-04-03 실행 증적 동기화 (M4 포함) - 기준 시점: 2026-04-03. -- 테스트: `dotnet test` 374/374 통과. +- 테스트: `dotnet test` 379/379 통과. - M1 증적: Hook 계약 필드(`updatedInput`, `updatedPermissions`, `additionalContext`) 반영 경로 구현 완료. - M2 증적: run 복원/이력 재구성(`RestoreRecentFromExecutionEvents`, `RestoreCurrentAgentRun`, plan 이력 조회) 구현 및 테스트 존재. - M3 증적: unknown-tool 복구 루프/결정 이벤트 처리 경로 구현 및 테스트 존재. @@ -56,7 +56,7 @@ - 기준 문서: `docs/CLAW_CODE_PARITY_PLAN.md` 13절. - 테스트 태그: `Suite=ReplayStability`. - 운영 기준: 릴리즈 전 `ReplayStability` 시나리오 전건 통과 시 replay 불일치 0건으로 판정. -- 최신 실행 증적(2026-04-03): `ParityBenchmark 12/12`, `ReplayStability 12/12`, 전체 `374/374`. +- 최신 실행 증적(2026-04-03): `ParityBenchmark 13/13`, `ReplayStability 14/14`, 전체 `379/379`. - 실행 자동화: `scripts/release-gate.ps1`로 빌드/벤치마크/리플레이/전체 테스트를 일괄 점검. ## 11. 권한 Hook 계약 고정 (M1 완료 기준) diff --git a/src/AxCopilot/Services/TaskRunService.cs b/src/AxCopilot/Services/TaskRunService.cs index b2ef969..0a54d0f 100644 --- a/src/AxCopilot/Services/TaskRunService.cs +++ b/src/AxCopilot/Services/TaskRunService.cs @@ -1,4 +1,4 @@ -namespace AxCopilot.Services; +namespace AxCopilot.Services; /// /// Executes task-state tracking behind a single service boundary. @@ -89,7 +89,7 @@ public sealed class TaskRunService StartOrUpdate( GetPermissionTaskKey(evt), "permission", - string.IsNullOrWhiteSpace(toolName) ? "권한 요청" : $"{toolName} 권한", + string.IsNullOrWhiteSpace(toolName) ? "permission request" : $"{toolName} permission", summary, "waiting", filePath); @@ -239,28 +239,28 @@ public sealed class TaskRunService StartPermissionRequest( evt.RunId, evt.ToolName, - string.IsNullOrWhiteSpace(evt.Summary) ? "권한 확인 대기" : evt.Summary, + string.IsNullOrWhiteSpace(evt.Summary) ? "waiting for permission" : evt.Summary, evt.FilePath); break; case Agent.AgentEventType.PermissionGranted: CompletePermissionRequest( evt.RunId, evt.ToolName, - string.IsNullOrWhiteSpace(evt.Summary) ? "권한 확인됨" : evt.Summary, + string.IsNullOrWhiteSpace(evt.Summary) ? "permission granted" : evt.Summary, true); break; case Agent.AgentEventType.PermissionDenied: CompletePermissionRequest( evt.RunId, evt.ToolName, - string.IsNullOrWhiteSpace(evt.Summary) ? "권한 거부됨" : evt.Summary, + string.IsNullOrWhiteSpace(evt.Summary) ? "permission denied" : evt.Summary, false); break; case Agent.AgentEventType.ToolCall: StartToolRun( evt.RunId, evt.ToolName, - string.IsNullOrWhiteSpace(evt.Summary) ? $"{evt.ToolName} 실행 중" : evt.Summary, + string.IsNullOrWhiteSpace(evt.Summary) ? $"{evt.ToolName} running" : evt.Summary, evt.FilePath); break; case Agent.AgentEventType.ToolResult: @@ -274,7 +274,7 @@ public sealed class TaskRunService StartToolRun( evt.RunId, evt.ToolName, - string.IsNullOrWhiteSpace(evt.Summary) ? $"{evt.ToolName} 실행 중" : evt.Summary, + string.IsNullOrWhiteSpace(evt.Summary) ? $"{evt.ToolName} running" : evt.Summary, evt.FilePath, skill: true); break; @@ -282,7 +282,7 @@ public sealed class TaskRunService RecordHookResult( evt.RunId, evt.ToolName, - string.IsNullOrWhiteSpace(evt.Summary) ? "hook 실행" : evt.Summary, + string.IsNullOrWhiteSpace(evt.Summary) ? "hook running" : evt.Summary, evt.Success, evt.FilePath); break; @@ -311,19 +311,19 @@ public sealed class TaskRunService case Agent.AgentEventType.Complete: CompleteAgentRun( evt.RunId, - string.IsNullOrWhiteSpace(evt.Summary) ? "작업 완료" : evt.Summary, + string.IsNullOrWhiteSpace(evt.Summary) ? "task completed" : evt.Summary, true); CompleteByPrefix( string.IsNullOrWhiteSpace(evt.RunId) ? "tool:" : $"tool:{evt.RunId}:", - string.IsNullOrWhiteSpace(evt.Summary) ? "작업 완료" : evt.Summary, + string.IsNullOrWhiteSpace(evt.Summary) ? "task completed" : evt.Summary, "completed"); CompleteByPrefix( string.IsNullOrWhiteSpace(evt.RunId) ? "permission:" : $"permission:{evt.RunId}:", - string.IsNullOrWhiteSpace(evt.Summary) ? "작업 완료" : evt.Summary, + string.IsNullOrWhiteSpace(evt.Summary) ? "task completed" : evt.Summary, "completed"); CompleteByPrefix( string.IsNullOrWhiteSpace(evt.RunId) ? "hook:" : $"hook:{evt.RunId}:", - string.IsNullOrWhiteSpace(evt.Summary) ? "작업 완료" : evt.Summary, + string.IsNullOrWhiteSpace(evt.Summary) ? "task completed" : evt.Summary, "completed"); break; case Agent.AgentEventType.StopRequested: @@ -364,15 +364,15 @@ public sealed class TaskRunService { CompleteAgentRun( evt.RunId, - string.IsNullOrWhiteSpace(evt.Summary) ? "오류 발생" : evt.Summary, + string.IsNullOrWhiteSpace(evt.Summary) ? "error occurred" : evt.Summary, false); CompleteByPrefix( string.IsNullOrWhiteSpace(evt.RunId) ? "permission:" : $"permission:{evt.RunId}:", - string.IsNullOrWhiteSpace(evt.Summary) ? "오류 발생" : evt.Summary, + string.IsNullOrWhiteSpace(evt.Summary) ? "error occurred" : evt.Summary, "failed"); CompleteByPrefix( string.IsNullOrWhiteSpace(evt.RunId) ? "hook:" : $"hook:{evt.RunId}:", - string.IsNullOrWhiteSpace(evt.Summary) ? "오류 발생" : evt.Summary, + string.IsNullOrWhiteSpace(evt.Summary) ? "error occurred" : evt.Summary, "failed"); } break; @@ -456,7 +456,7 @@ public sealed class TaskRunService { Id = BuildScopedId("permission", item), Kind = "permission", - Title = string.IsNullOrWhiteSpace(item.ToolName) ? "권한" : $"{item.ToolName} 권한", + Title = string.IsNullOrWhiteSpace(item.ToolName) ? "permission" : $"{item.ToolName} permission", Summary = item.Summary, Status = string.Equals(item.Type, nameof(Agent.AgentEventType.PermissionDenied), StringComparison.OrdinalIgnoreCase) ? "failed" : "completed", StartedAt = item.Timestamp, @@ -531,7 +531,7 @@ public sealed class TaskRunService { Id = BuildScopedId("permission", item), Kind = "permission", - Title = string.IsNullOrWhiteSpace(item.ToolName) ? "권한 요청" : $"{item.ToolName} 권한", + Title = string.IsNullOrWhiteSpace(item.ToolName) ? "permission request" : $"{item.ToolName} permission", Summary = item.Summary, Status = "waiting", StartedAt = item.Timestamp, @@ -776,3 +776,4 @@ public sealed class TaskRunService +