Surfaced during PR #596 blind review (architect-F1).
Problem: CronCreate auto-expires recurring crons after 7 days (per platform schema). The wake mechanism's design relies on CronList-then-arm idempotency at workflow-start to re-arm post-expiry. This works as long as workflow commands run periodically.
Failure window: a session sits idle (no workflow commands invoked) for >7 days AND the cron expires. Wake mechanism is silently disabled until the next workflow command. Practical impact bounded — fully idle user isn't sending messages anyway.
Why deferred: fix is operationally complex relative to bounded impact. Cron-self-extension is impossible (the cron is the thing expiring). ScheduleWakeup-at-6.5d adds yet another state surface. Workflow-start age check doesn't help passive sessions.
Suggested fix scope: detect cron expiry on next workflow-start via CronList empty + STATE_FILE.armed_at >6d → trigger re-arm path. Edge case; defer until reachable.
Originating review: docs/review/591-blind-architect.md F1.
Surfaced during PR #596 blind review (architect-F1).
Problem: CronCreate auto-expires recurring crons after 7 days (per platform schema). The wake mechanism's design relies on CronList-then-arm idempotency at workflow-start to re-arm post-expiry. This works as long as workflow commands run periodically.
Failure window: a session sits idle (no workflow commands invoked) for >7 days AND the cron expires. Wake mechanism is silently disabled until the next workflow command. Practical impact bounded — fully idle user isn't sending messages anyway.
Why deferred: fix is operationally complex relative to bounded impact. Cron-self-extension is impossible (the cron is the thing expiring). ScheduleWakeup-at-6.5d adds yet another state surface. Workflow-start age check doesn't help passive sessions.
Suggested fix scope: detect cron expiry on next workflow-start via
CronListempty +STATE_FILE.armed_at>6d → trigger re-arm path. Edge case; defer until reachable.Originating review: docs/review/591-blind-architect.md F1.