CI / build (push) Has been cancelled
Batch 1 (High severity): - Bug 1: --audit cat3 now checks .automaton/tasks/ paths - Bug 4: Verdict PASS/FAIL uses structured ## Status: line parsing - Bug 5: register-guards.sh checks .json/.jsonc, writes plugin key, strips comments - Bug 7: --can-edit/--scope-check path prefix uses os.sep boundary Batch 2 (Medium/Low severity): - Bug 2: migrate-project.sh find command parentheses for -prune binding - Bug 3: vram_detect model prefix matching with known-suffix whitelist - Bug 6: dashboard reads .state file before artifact heuristic fallback - Bug 8: removed wildcard CORS, added security headers (nosniff, DENY) - Bug 9: stale-task detection uses .state.lastedit instead of .state mtime - Bug 10: TEST_PLAN.md maps to test_design (was implement) 249 tests pass (up from 235). All 10 tasks driven through full workflow to completion.
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