Activity recaps should skip Cron run sessions
Problem
The Activity recap service currently admits Cron job/run session keys into the model-generated conversation recap queue. Cron executions already have scheduler-owned Activity summaries, so viewing Activity can trigger redundant utility-model work and can replace the scheduler's concise run state with a conversation-style recap.
The merged recap design in #147383 excludes non-conversation work such as subagents and heartbeats, but current createSessionActivitySummaries().ensure() does not reject Cron session keys.
Reproduction
- Create a stored session whose key is shaped like
agent:main:cron:<job>:run:<run>. - Configure a utility model and request an Activity summary for that row.
- Observe that the recap service admits the row and schedules model completion.
Expected behavior
Cron job and Cron run rows retain their existing scheduler-owned Activity summary and do not invoke the conversation recap model. Direct, group, channel, Web, Mail, Slack, and other conversation sessions remain eligible.
Acceptance criteria
- Cron job/run session keys are rejected before recap model preparation or completion.
- The returned Activity recap projection is unavailable for that request.
- Existing conversation recap behavior is unchanged.
- A focused regression test covers a canonical Cron run key.
Discovered while assessing the downstream 0186-0201 Activity recap carry against merged #147441, #147837, and #147901.
Source: openclaw/openclaw