Adds four new test groups to tests/test_scheduler.py:
- TestTimezone: asserts AsyncIOScheduler is constructed with Europe/Bucharest.
- TestShellKind: 16 cases covering add_shell_job validation (duplicate name
across claude/shell, invalid cron, empty/non-list/non-string command,
bad report_on, bad timeout bounds/type, empty channel, custom report_on
and timeout pass-through).
- TestShellExecute: 14 cases covering the report_on contract:
- exit 0 + marker N>0 → forwards stdout
- exit 0 + marker N==0 → silent
- exit 0 + no marker → silent + warning
- report_on=always and =never variants
- non-zero exit reports stderr even when report_on='never'
- TimeoutExpired and launch exceptions report '[cron:X] Error: ...'
- per-job timeout passed to subprocess.run; default 300 when None
- subprocess.run receives the job's command list verbatim
- stdout trimmed to 1500 ch; stderr trimmed to 500 ch
- TestBackwardCompat: a jobs.json entry without a 'kind' field dispatches
to _execute_claude_job (never to _execute_shell_job); the existing Claude
add_job/run_job round-trip still works with the old CLI invocation.
- TestMarkerRegex: parametrised positive/negative cases for _MARKER_RE.