# Complete - m-workflow-core/04+03_retry_timeout

## 완료 일시

2026-06-01

## 요약

Workflow retry/timeout 최소 정책을 상수, metadata, 문서, 테스트 증거와 연결했고 1회 리뷰 루프로 PASS 완료했다.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_cloud_G07_0.log` | `code_review_cloud_G07_0.log` | PASS | retry max attempts 상수화, retryable metadata, timeout failure metadata/docs/tests가 계획 범위를 충족했다. |

## 구현/정리 내용

- `workflow.DefaultTaskMaxAttempts`와 `MetadataKeyRetryable`을 추가하고 River `MaxAttempts`와 lifecycle failure metadata를 같은 정책으로 연결했다.
- scheduler timeout failure가 `failure_type=timeout`, `status_reason=timeout`으로 기록되는 경로와 retry-from-failed 동작을 테스트로 보강했다.
- Core README에 단일 attempt timeout, 최대 시도 횟수, failed 상태 re-enqueue 정책을 문서화했다.

## 최종 검증

- `cd services/core && go test -count=1 ./internal/scheduler ./internal/workflow` - PASS; `code_review_cloud_G07_0.log`에 scheduler/workflow focused test 성공 출력 기록.
- `cd services/core && go test -count=1 ./internal/scheduler ./internal/config` - PASS; `code_review_cloud_G07_0.log`에 scheduler/config focused test 성공 출력 기록.
- `cd services/core && go test -count=1 ./internal/workflow ./internal/scheduler ./internal/config` - PASS; `code_review_cloud_G07_0.log`에 최종 focused package fresh test 성공 출력 기록.
- `cd services/core && go test ./...` - PASS; `code_review_cloud_G07_0.log`에 core 전체 Go test 성공 출력 기록.
- Code-review rerun: BLOCKED; `agent-test/local/rules.md`가 현재 환경에서 새 테스트 실행을 금지해 리뷰어는 테스트를 재실행하지 않고 기록된 stdout/stderr와 실제 소스/테스트를 대조했다.

## Roadmap Completion

- Milestone: `agent-roadmap/phase/workflow-core/milestones/workflow-core.md`
- Completed task ids:
  - `retry-timeout`: PASS; evidence=`agent-task/archive/2026/06/m-workflow-core/04+03_retry_timeout/plan_cloud_G07_0.log`, `agent-task/archive/2026/06/m-workflow-core/04+03_retry_timeout/code_review_cloud_G07_0.log`; verification=`cd services/core && go test -count=1 ./internal/scheduler ./internal/workflow`, `cd services/core && go test -count=1 ./internal/scheduler ./internal/config`, `cd services/core && go test -count=1 ./internal/workflow ./internal/scheduler ./internal/config`, `cd services/core && go test ./...`
- Not completed task ids: 없음

## 잔여 Nit

- `services/core/internal/workflow/model.go`와 `services/core/internal/workflow/lifecycle.go`는 다음 편집 시 `gofmt`로 빈 줄을 정리하면 된다.

## 후속 작업

- 없음
