Implements all three acceptance criteria from #1096:
1. **Prevention** — `nexus/cron_heartbeat.py` gives every cron job a
one-liner to write `/var/run/bezalel/heartbeats/<job>.last` on
completion (atomic write, fallback to `~/.bezalel/heartbeats/`).
`nexus_watchdog.py` now writes its own heartbeat after each check.
2. **Detection** — `bin/check_cron_heartbeats.py` is a meta-heartbeat
checker (run every 15 min via cron) that scans all `.last` files and
creates/updates/closes a Gitea alert issue if any job has been silent
for > 2× its declared interval.
3. **Correction** — `bin/night_watch.py` generates the nightly Bezalel
report and now includes a **Heartbeat Panel** table so stale jobs
appear in the morning brief.
28 new tests; all 50 tests pass (28 new + 22 existing watchdog tests).
Fixes#1096
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>