## Milestone 3: Workstreams ### Workstream Data Model 28. **Implement workstream storage** (`internal/storage/workstreams.go`) ```go type WorkstreamsFile struct { CurrentWorkstream string Workstreams map[string]*Workstream } func LoadWorkstreams(path string) (*WorkstreamsFile, error) func (w *WorkstreamsFile) Save(path string) error ``` 29. **Create workstream manager** (`internal/core/workstream_manager.go`) - `CreateWorkstream(name string, base string) error` - `GetCurrentWorkstream() (*Workstream, error)` - `SwitchWorkstream(name string) error` - `ListWorkstreams() ([]*Workstream, error)` - `AddCommitToWorkstream(sha, message string) error` ### Workstream Commands 30. **Implement onx new** (`internal/commands/new.go`) ```go func New(repo *Repository, name string) error { // 1. Fetch latest from origin/main // 2. Create workstream entry // 3. Set as current workstream // 4. Update workspace to base commit // 5. Log to oplog } ``` 31. **Implement onx list** (`internal/commands/list.go`) - Read workstreams.json - Format output with current indicator (*) - Show commit count per workstream - Color code output for better readability 32. **Implement onx switch** (`internal/commands/switch.go`) ```go func Switch(repo *Repository, name string) error { // 1. Save current ephemeral state // 2. Load target workstream // 3. Checkout latest commit in workstream // 4. Update current_workstream // 5. Restore workspace state // 6. Log to oplog } ``` 33. **Add workstream validation** - Validate workstream names (no special chars) - Check for uncommitted changes before switch - Prevent duplicate workstream names