diff --git a/notes/checklist.md b/notes/checklist.md index 399b4f4..bcd692b 100644 --- a/notes/checklist.md +++ b/notes/checklist.md @@ -1,71 +1,58 @@ -# Complete Implementation Plan for Onyx Phase 1 +## Milestone 3: Workstreams -## Milestone 2: Transparent Versioning and onx save ✓ COMPLETED +### Workstream Data Model -### Filesystem Daemon Implementation +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 + ``` -21. ✓ **Create daemon structure** (`internal/daemon/daemon.go`) - - Implemented Daemon struct with repo, watcher, ticker, debounce, and shutdown channels - - Added configuration support with Config struct - - Implemented Start(), Stop(), and IsRunning() methods - - Includes main event loop with proper goroutine management +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` -22. ✓ **Implement filesystem watching** (`internal/daemon/watcher.go`) - - Initialized fsnotify watcher - - Added repository root to watch list with recursive directory walking - - Implemented recursive subdirectory watching - - Filtered out .git, .onx, and other ignored directories - - Implemented debouncing (500ms default, configurable) +### Workstream Commands -23. ✓ **Implement snapshot algorithm** (`internal/daemon/snapshot.go`) - - Implemented CreateSnapshot() with full workflow: - 1. Read current workspace pointer from .onx/workspace - 2. Create tree from working directory state - 3. Create ephemeral commit with auto-generated message - 4. Update refs/onyx/workspaces/current reference - 5. Update .onx/workspace pointer with latest state - - Added workspace state serialization/deserialization +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 + } + ``` -24. ✓ **Create daemon entry point** (`cmd/onxd/main.go`) - - Implemented command-line interface with cobra - - Parse command line flags (repo path, interval, debounce) - - Initialize daemon with configuration - - Set up signal handlers (SIGTERM, SIGINT) for graceful shutdown - - Run main loop with PID file management +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 -25. ✓ **Implement daemon control** (`internal/commands/daemon.go`) - - `onx daemon start` - Start background daemon with process detachment - - `onx daemon stop` - Stop daemon gracefully using SIGTERM - - `onx daemon status` - Check daemon status via PID file - - PID file management in .onx/daemon.pid - - Process lifecycle management with proper signal handling +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 + } + ``` -### onx save Command - -26. ✓ **Implement save command** (`internal/commands/save.go`) - - Implemented Save() with complete workflow: - 1. Read current ephemeral commit from refs/onyx/workspaces/current - 2. Create new commit with user-provided message - 3. Determine next branch number based on workstream commit count - 4. Create branch ref (refs/onyx/workstreams/{name}/commit-{n}) - 5. Update workstreams.json with new commit metadata - 6. Log to oplog via transaction support - - Integrated with existing workstream model - - Added transaction support for undo capability - -27. ✓ **Add message validation** - - Require non-empty message (enforced by cobra flag) - - Validate message length (max 72 chars for title) - - Support multi-line messages with -m flag - - Proper error messages for validation failures - -### Implementation Summary - -All components of Milestone 2 have been successfully implemented: -- **Daemon**: Full filesystem monitoring with fsnotify, debouncing, and automatic snapshots -- **Save Command**: Complete integration with workstreams and oplog -- **Infrastructure**: PID file management, signal handling, transaction support -- **Testing**: All existing tests pass, binaries build successfully - -The implementation provides a solid foundation for transparent versioning in Onyx. +33. **Add workstream validation** + - Validate workstream names (no special chars) + - Check for uncommitted changes before switch + - Prevent duplicate workstream names diff --git a/notes/future.md b/notes/future.md index 00e1c3d..68cf209 100644 --- a/notes/future.md +++ b/notes/future.md @@ -1,61 +1,3 @@ -## 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 - ## Milestone 4: Synchronization and Remote Interaction ### Rebase Engine