Add job_schedule_mark_completed_v1 and job_run_*_v2 wrappers to update last_run_at, next_run_at, and clear locks on both success and failure.
Keep job_run_reputation_rollup signature stable by mapping window_key to job_key in-proc.
Alternatives considered: update next_run_at in job_claim_next (rejected; ERD mandates update on completion) and update schedule in app runner (rejected; DB is SSOT).
Consequences:
Positive outcomes: job_schedule rows now reflect completion cadence with jitter and lock cleanup per ERD.
Risks or trade-offs: if job_schedule_mark_completed_v1 fails, job errors are surfaced as schedule update failures.