# T0.2: Shared Types ## Scope Implement `statemachine/types.go` with all config/input/output structs and document defaults. ## Implementation File: `statemachine/types.go` ```go type ModelSpec struct { ModelID string // e.g. "claude-opus-5", "claude-sonnet-5" Thinking string // "adaptive" or "" Effort string // "low", "medium", "high", "xhigh", "max" } type PromptSpec struct { TemplateRef string // e.g. "planner/default.tmpl" RawTemplate string // overrides TemplateRef if non-empty Variables map[string]any Model ModelSpec LessonsRef string // key into lessons store } type PiRetryPolicy struct { ScheduleToCloseTimeout time.Duration // default: 5m InitialInterval time.Duration // default: 2s MaximumInterval time.Duration // default: 30s BackoffCoefficient float64 // default: 2.0 StreamTimeout time.Duration // default: 30s StreamTimeoutMax time.Duration // default: 2m } type ActivityTuning struct { ImplementerBaseTimeout time.Duration // default: 10m ImplementerMaxRetries int // default: 3 JudgeTimeout time.Duration // default: 5m PiRetry PiRetryPolicy } type OrchestratorConfig struct { SystemPrompt string // shared prompt prefix Skills []SkillRef // required skill sources RolePrompts map[string]PromptSpec // per-role: "planner", "judge", "implementer" Tuning ActivityTuning } type OrchestratorInput struct { TargetRepoPath string RemoteURL string Milestone string // e.g. "T0" Config OrchestratorConfig DryRun bool CycleCount int MaxCyclesBeforeCAN int // default: 100 } type OrchestratorOutput struct { MilestoneComplete bool Done bool LastError string } type TaskUnitInput struct { TaskID string TargetRepoPath string JudgeSpec PromptSpec ImplementerSpec PromptSpec BaseTimeout time.Duration MaxJudgeRetries int } type TaskUnitOutput struct { TaskID string Verdict string // "pass" or "fail" Critique string Branch string } type SkillRef struct { Name string // skill identifier URL string // source to clone } ``` ## Verification ```bash cd /Users/rockliang/workplace/Poimen/workflows go build ./statemachine/ # Run unit test: go test -v ./tests -run TestTypesDefaults ``` Test file: `tests/types_test.go` ```go func TestTypesDefaults(t *testing.T) { // Verify all defaults are correctly set pr := PiRetryPolicy{} assert.Equal(t, 5*time.Minute, pr.ScheduleToCloseTimeout) // ... more assertions } ``` ## Done Criteria - `go build ./statemachine/` succeeds - `go test ./tests -run TestTypesDefaults` passes - All struct fields documented with default values - No compilation errors