# Complete - workflow_core/02+01_retry_timeout

## 완료 일시

2026-05-24

## 요약

Workflow Core retry/timeout metadata와 worker timeout 구현을 2회 리뷰 루프로 완료했다. 최종 판정은 PASS다.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_cloud_G07_0.log` | `code_review_cloud_G07_0.log` | FAIL | River retry가 `failed -> running` 전이에서 막히고 attempt 테스트가 production 경로를 검증하지 않아 follow-up을 생성했다. |
| `plan_cloud_G07_1.log` | `code_review_cloud_G07_1.log` | PASS | Retry 전이, production attempt helper, regression tests, gofmt 검증을 완료했다. |

## 구현/정리 내용

- Lifecycle metadata update로 attempt, heartbeat, agent run state, status reason을 기록한다.
- Scheduler worker에 task run timeout envelope를 추가하고 deadline exceeded를 `timeout` failure reason으로 매핑한다.
- River retry가 실패 상태 이후에도 다음 attempt를 실행할 수 있게 `failed -> running` 전이를 허용한다.
- Attempt 증가 계산을 `nextTaskAttempt` production helper로 분리하고 관련 regression tests를 추가했다.

## 최종 검증

- `gofmt -l services/core/cmd/server/main.go services/core/internal/config/config.go services/core/internal/config/config_test.go services/core/internal/scheduler/jobs.go services/core/internal/scheduler/jobs_test.go services/core/internal/scheduler/river.go services/core/internal/workflow/lifecycle.go services/core/internal/workflow/service.go services/core/internal/workflow/service_test.go` - PASS; 출력 없음.
- `cd services/core && go test -count=1 ./internal/workflow ./internal/scheduler` - PASS; workflow와 scheduler package tests 통과.
- `cd services/core && go test -count=1 ./internal/workflow` - PASS; workflow package tests 통과.
- `cd services/core && go test -count=1 ./...` - PASS; 전체 core Go tests 통과.

## 잔여 Nit

- 없음

## 후속 작업

- 없음
