59 lines
1.8 KiB
Markdown
59 lines
1.8 KiB
Markdown
## 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
|
|
|