Skip to content

fix(tasks): prune finished task history#138

Draft
attid wants to merge 1 commit into
PleasePrompto:mainfrom
attid:fix/task-retention-cleanup
Draft

fix(tasks): prune finished task history#138
attid wants to merge 1 commit into
PleasePrompto:mainfrom
attid:fix/task-retention-cleanup

Conversation

@attid

@attid attid commented May 19, 2026

Copy link
Copy Markdown
Contributor

Summary

Add automatic retention cleanup for finished background tasks.

Why

Finished task entries (done, failed, cancelled) were retained indefinitely unless a user manually pressed cleanup in /tasks. Since each entry persists the full original_prompt, old finished tasks can make tasks.json grow without bound.

Changes

  • Add tasks.finished_retention_hours with a default of 168 hours.
  • Add tasks.finished_keep_last with a default of 100 finished tasks.
  • Add registry retention cleanup that removes finished entries and their task folders by age and count.
  • Keep running and waiting tasks protected from retention cleanup.
  • Run task maintenance immediately when the maintenance loop starts, then every 5 hours.

Validation

  • uv run pytest tests/tasks tests/test_config.py tests/config -q
  • uv run ruff check ductor_bot/config.py ductor_bot/tasks/registry.py ductor_bot/tasks/hub.py tests/tasks/test_registry.py tests/tasks/test_hub.py
  • uv run mypy ductor_bot

@PleasePrompto

Copy link
Copy Markdown
Owner

Thanks — the core logic here is solid: the retention pruning can't touch running/waiting tasks, the age+count criteria merge cleanly, and the hub maintenance test is well built. A few things before un-drafting:

  1. Consolidate cleanup_old (tasks/registry.py): it has no production caller (only its own tests) and overlaps with the new cleanup_finished_retention. Please either remove it (incl. TestCleanupOld) or fold the new logic into it — two parallel age-pruning methods is exactly the kind of dead code this repo's conventions forbid.
  2. config.example.json: add finished_retention_hours / finished_keep_last to the tasks block (the other fields are all listed there).
  3. Docs: docs/config.md (TasksConfig table) and docs/modules/tasks.md need the new fields; the "orphan cleanup runs every 5 hours" note should also mention the maintenance pass now runs immediately at startup.
  4. Optional but nice: a test for the age×count interaction (young task evicted by keep_last) and the <=0 noop path.

Happy to merge once those are in. 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants