58 lines
1.8 KiB
Markdown
58 lines
1.8 KiB
Markdown
|
|
# T051 — Worker guarded 生命週期
|
|||
|
|
|
|||
|
|
> Status: `done`
|
|||
|
|
> Milestone: `M5`
|
|||
|
|
> Est. change: `~190 lines`
|
|||
|
|
|
|||
|
|
## Goal
|
|||
|
|
|
|||
|
|
完成後,worker 驗證 run context,guarded 推進 run/job 並回報搜尋階段與 eligible/target 進度。
|
|||
|
|
|
|||
|
|
## Depends on
|
|||
|
|
|
|||
|
|
- T050
|
|||
|
|
|
|||
|
|
## Inputs
|
|||
|
|
|
|||
|
|
- 讀取 / 依賴:
|
|||
|
|
- 檔案:`apps/backend/cmd/worker/main.go`、job/scout usecase
|
|||
|
|
- 既有能力 / API:MarkRunningProgress、SucceedJob、FailJob、RunScan pipeline
|
|||
|
|
- Spec 段落:§3.1、§5.3
|
|||
|
|
|
|||
|
|
## Outputs
|
|||
|
|
|
|||
|
|
### 程式變更(預期路徑)
|
|||
|
|
|
|||
|
|
| 路徑 | 動作 | 說明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `apps/backend/cmd/worker/main.go` | edit | 驗證 RefID/payload/owner,推進 run,傳遞階段 progress,成功發佈。 |
|
|||
|
|
| `apps/backend/internal/module/scout/usecase/run_progress.go` | add | 封裝 guarded running/succeeded/failed/cancelled 與安全摘要。 |
|
|||
|
|
| `apps/backend/internal/module/scout/usecase/run_progress_test.go` | add | 驗證合法/非法 transition 與終態不倒退。 |
|
|||
|
|
|
|||
|
|
### 行為變更
|
|||
|
|
|
|||
|
|
- queued→running→terminal;summary 顯示 stage 及 eligible/target,不含 token。
|
|||
|
|
|
|||
|
|
### API / 契約(若有)
|
|||
|
|
|
|||
|
|
- Job guarded 更新沿用既有規則,Redis lock value 保持 workerID。
|
|||
|
|
|
|||
|
|
## Out of scope
|
|||
|
|
|
|||
|
|
- 不修改其他 job template,不更換 lock 實作。
|
|||
|
|
|
|||
|
|
## Acceptance
|
|||
|
|
|
|||
|
|
- [x] payload/ref mismatch 在搜尋前失敗,終態 run 不被 retry 改回 running。
|
|||
|
|
- [x] 指令:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd apps/backend && go test ./cmd/worker ./internal/module/scout/... ./internal/module/job/... -count=1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
驗收結果:worker 驗證 payload.run_id/job.RefID/owner/job binding,guarded queued→running→succeeded/failed,搜尋結果先 stage 再 PublishRun;StartRun retry 與終態防倒退測試通過。
|
|||
|
|
|
|||
|
|
## Notes
|
|||
|
|
|
|||
|
|
worker orchestration 只協調,不複製 candidate/pipeline 邏輯。
|