…6084)
## Summary
Two new safety nets so the impl pipeline doesn't leave PRs and issues
silently stuck when a step crashes or times out.
- **`impl-review-retry.yml`** — listener that re-dispatches
`impl-review.yml` exactly once when a PR is labeled `ai-review-failed`.
Bounded by an `ai-review-rescued` marker so we never loop.
- **`watchdog-stuck-jobs.yml`** — cron every 6h (also manual
`workflow_dispatch` with `stale_hours` and `dry_run` inputs). Catches
three failure modes today's regular workflows miss:
1. PRs with `ai-review-failed` (acts as listener safety net).
2. PRs with `ai-attempt-N` + `quality:*` but **no**
`ai-approved`/`ai-rejected` after `stale_hours` — repair handoff crashed
(e.g. PR #6002 today: altair attempt-1 died, PR sat for 16 h with no
further action).
3. spec-ready issues with `generate:<lib>` or `impl:<lib>:failed` and no
open PR for that (spec, lib) pair (e.g. #5237 plotnine failed; #5240
plotnine never generated).
Per-cause retries are bounded by marker labels (`ai-review-rescued`,
`watchdog:repair-rescued-<N>`, `watchdog:retried-<lib>`); when a marker
is already present, the watchdog emits a `::warning::` instead of
dispatching, so a truly stuck case escalates to a human rather than
looping.
## Test plan
- [ ] CI green on this PR
- [ ] Run `Watchdog: Stuck Jobs` manually with `dry_run=true` once
merged → confirm it logs the three open hangers (PR #5997, PR #6002,
plus any leftover) without dispatching
- [ ] Run again with `dry_run=false` if the dry-run looked sane
- [ ] Verify `impl-review-retry.yml` listener fires the next time a PR
is labeled `ai-review-failed` (will happen organically the next time
review hits a transient blip)
- [ ] Confirm marker labels (`ai-review-rescued`,
`watchdog:repair-rescued-<N>`, `watchdog:retried-<lib>`) get
auto-created on first use
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Implementation:
histogram-2d- python/altairImplements the python/altair version of
histogram-2d.File:
plots/histogram-2d/implementations/python/altair.pyParent Issue: #2012
🤖 impl-generate workflow