CI / build (push) Has been cancelled
- Archive 79 completed framework-dev tasks from tasks/ -> tasks/complete/ - status.py: add --cleanup-done and --install-cleanup-schedule commands - Add scripts/automaton-cleanup.sh for periodic task archiving - Dashboard: rename 'Background' tab -> 'Agent', 'Cleanup' agent -> 'Completed Task Archiver', remove redundant group headers and pill badges, dim inactive agent placeholders - .rules.md: add Self-Documenting UI Names rule - New tests: test_cleanup_done.py, expanded test_app.py and test_task.py
2.0 KiB
2.0 KiB
Implementation: fix-stale-task-mtime-proxy
Bug
--can-edit used .state file mtime as a proxy for "last edit activity" to detect stale tasks. But .state is modified by phase transitions, not by actual editing. A task in implement phase for 30+ minutes would be flagged as stale even if the developer was actively editing files the whole time, because .state mtime only reflects the last phase transition.
Fix
- Added
_get_edit_timestamp()— reads.state.lasteditmtime if it exists, falls back to.statemtime for backward compatibility - Added
_touch_lastedit()— creates/updates.state.lasteditfile --can-editnow calls_touch_lastedit()on ALLOWED responses (both project-level and task-level paths), recording actual edit activity- Staleness check uses
_get_edit_timestamp()instead of raw.statemtime - Added
.state.lastedittoNON_ARTIFACT_FILESso it's not treated as a phase artifact --same-sessionuses_get_edit_timestamp()for consistent activity tracking--touchcommand now touches.state.lasteditinstead of.state- Added staleness check to the single-task
--can-edit --taskpath (previously only project-level--can-editchecked staleness)
Files Changed
scripts/status.py: Added_get_edit_timestamp(),_touch_lastedit(), updatedcmd_can_edit(),cmd_same_session(),cmd_touch(),NON_ARTIFACT_FILEStests/test_status.py: AddedTestStateLastEditclass with 5 tests andTestTestPlanPhaseMappingclass
Tests
test_can_edit_creates_lastedit_on_allowed: Verifies.state.lasteditis created on ALLOWEDtest_can_edit_creates_lastedit_with_file_scope: Same for file-scoped can-edittest_stale_uses_lastedit_not_state_mtime: Old.state+ recent.state.lastedit→ not staletest_stale_when_lastedit_old: Recent.state+ old.state.lastedit→ staletest_falls_back_to_state_mtime_without_lastedit: No.state.lastedit→ falls back to.statemtime- All 249 tests pass