Fix working set IDs to match display order

BREAKING CHANGE: BuildWorkingSet() now accepts []*Task instead of *Filter

Problem:
- Working set IDs were assigned based on database query order (unsorted)
- Reports displayed tasks in sorted order (by urgency)
- Result: IDs didn't match displayed task positions (ID 1 wasn't first task)

Solution:
- Changed BuildWorkingSet() to accept pre-sorted task slice
- Reports now pass sorted tasks to BuildWorkingSet()
- IDs are assigned sequentially to match display order (1, 2, 3...)

Behavior:
- Reports rebuild working set on every execution with fresh IDs
- Task operations (done, modify, info) use saved working set IDs
- After completing a task, re-running report renumbers remaining tasks

Example:
  Before:  opal list shows ID 1 = low urgency task (wrong)
  After:   opal list shows ID 1 = highest urgency task (correct)

Tested scenarios:
✓ List report: IDs 1-N match urgency order
✓ Next report: IDs 1-5 match top urgent tasks
✓ Task completion: IDs renumber correctly after removal
✓ Multiple operations: Use saved working set (correct behavior)
✓ Different reports: Each builds own sequential IDs
This commit is contained in:
2026-01-06 14:54:01 +01:00
parent 8f6db4672a
commit 5b660c3c1c
4 changed files with 36 additions and 18 deletions
+6 -2
View File
@@ -50,8 +50,12 @@ func modifyTasks(filterArgs, modifierArgs []string) error {
// Load working set for ID resolution
ws, err := engine.LoadWorkingSet()
if err != nil {
// If no working set exists yet, build one
ws, err = engine.BuildWorkingSet(filter)
// If no working set exists yet, build one from filtered tasks
tasks, err := engine.GetTasks(filter)
if err != nil {
return fmt.Errorf("failed to get tasks: %w", err)
}
ws, err = engine.BuildWorkingSet(tasks)
if err != nil {
return fmt.Errorf("failed to build working set: %w", err)
}