TaskRunService 문자열 정리 및 로드맵 검증 수치 동기화
Some checks failed
Release Gate / gate (push) Has been cancelled
Some checks failed
Release Gate / gate (push) Has been cancelled
- TaskRunService의 권한/도구/완료/오류 기본 요약 문자열에서 깨진 문자(인코딩 깨짐) 제거 - Permission/Hook/Tool 이벤트별 기본 타이틀·요약 문구를 일관된 표현으로 정리하여 replay/요약 가독성 개선 - StopRequested 기본 요약 문구가 잘못 치환되는 문제를 수정해 취소 흐름 의미를 복구 - AGENT_ROADMAP, NEXT_ROADMAP의 테스트 스냅샷을 최신 실측값(Parity 13/13, Replay 14/14, 전체 379/379)으로 동기화
This commit is contained in:
@@ -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 키:
|
||||
|
||||
@@ -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 완료 기준)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace AxCopilot.Services;
|
||||
namespace AxCopilot.Services;
|
||||
|
||||
/// <summary>
|
||||
/// 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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user