# T021 — 後端 Run domain 與狀態規則 > Status: `done` > Milestone: `M2` > Est. change: `~170 lines` ## Goal 完成後,後端能以 domain Run 表達獨立批次、完整計數、不足原因與合法 guarded transition。 ## Depends on - T020 ## Inputs - 讀取 / 依賴: - 檔案:`apps/backend/internal/module/scout/domain/domain.go` - 既有能力 / API:NowNano、RunBrief、Job status patterns - Spec 段落:§2、§3、§8 ## Outputs ### 程式變更(預期路徑) | 路徑 | 動作 | 說明 | |------|------|------| | `apps/backend/internal/module/scout/domain/domain.go` | edit | 新增 Run、status、counts、shortfall reasons、RunID on Post。 | | `apps/backend/internal/module/scout/domain/run_test.go` | add | 驗證 target clamp、shortfall 與狀態轉移。 | ### 行為變更 - target 預設 20、範圍 1–40;終態不可回到 running。 ### API / 契約(若有) - 所有時間為 int64 UTC unix ns;shortfall reasons 為固定代碼集合。 ## Out of scope - 不寫 persistence、worker 或 HTTP logic。 ## Acceptance - [x] guarded transition table 覆蓋 queued/running/terminal。 - [ ] 指令: ```bash cd apps/backend && go test ./internal/module/scout/domain -count=1 ``` 驗收結果:3 tests passed。 ## Notes Run input 與搜尋診斷終態後不可改寫;pending/eligible 可因單筆異動調整。