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:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -47,14 +47,14 @@ func runReport(reportName string, filters []string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// Execute the report
|
||||
// Execute the report (returns sorted tasks)
|
||||
tasks, err := report.Execute(filters)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to execute report: %w", err)
|
||||
}
|
||||
|
||||
// Build working set for display IDs
|
||||
ws, err := engine.BuildWorkingSet(report.BaseFilter)
|
||||
// Build working set from sorted tasks - IDs will match display order
|
||||
ws, err := engine.BuildWorkingSet(tasks)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to build working set: %w", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user