## Summary
- `impl-merge.yml`'s completeness check fetched the PR branch, which `gh
pr merge --delete-branch` removes at the merge, so a re-dispatch for an
already-merged PR died on `couldn't find remote ref` before it could
reach the post-merge steps that "already merged → continue" exists for.
The check now validates against `origin/main` when the PR is merged
(where the squash put the files) and no longer tries to close a merged
PR when they are missing.
- Trigger: #11295 (2026-09-05 01:24 UTC) merged and then failed at
`Authenticate to GCP` 5 s later — images left in staging, metadata on
main pointing at production URLs, no `impl:echarts:done` label, no
Postgres sync. The manual re-dispatch failed with exactly this error.
- The `babysit-pipeline` skill gets the gotcha: how to recognise a
post-merge crash in the step list, re-dispatch instead of promoting by
hand, and compare landed pairs against production images every status
cycle.
## Plan
N/A
## Test plan
- [ ] Workflow YAML parses; the edited `run` block passes `bash -n`
- [ ] After merge: `gh workflow run impl-merge.yml -f pr_number=11295`
reaches "already merged — validating against origin/main", then
promotion, labels and sync succeed;
`gs://anyplot-images/plots/errorbar-asymmetric/javascript/echarts/plot-light.png`
exists and staging is empty
- [ ] `uv run python -m tools.changelog check --base origin/main` passes
- [ ] Unmerged path unchanged: a normal `ai-approved` merge still
validates against the PR branch
Known gap: `.github/workflows/` changes have no local verification loop;
the re-dispatch for #11295 after merge is the real test.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01LfPAdJKa4JWzvsEUQZUuhs
---------
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Implementation:
errorbar-asymmetric- javascript/echartsImplements the javascript/echarts version of
errorbar-asymmetric.File:
plots/errorbar-asymmetric/implementations/javascript/echarts.jsParent Issue: #2781
🤖 impl-generate workflow