author=app/dependabot, checks pending | In flight — dependabot-auto-merge.yml squash-merges it as soon as Run Tests succeeds on its current head (main has no required checks on purpose: a required check would also reject the release workflow's push). Say nothing unless it has sat for more than a day. |
author=app/dependabot, Run Tests green, still open | The merge step skipped it: conflicts with main (merge=DIRTY, wait for Dependabot's rebase or resolve it by hand and push — the next green run merges it), a draft, or a push newer than the run. Needs a human only if it stays that way. Red Run Tests on it → read the failure first. |
author=app/github-actions, branch automated/npm-audit-fix | The daily Audit Fix PR. Run Tests never runs on it (opened with GITHUB_TOKEN); the unit tests ran inside the workflow before it opened, so no checks on it is normal (merge=UNSTABLE or CLEAN; BLOCKED if Run Tests is ever made required, which then needs an admin merge). Needs you: read the lockfile diff and merge. It re-opens or updates itself daily until merged. |
| author is not Tim and not a bot | Contributor PR. Review per CONTRIBUTING.md: ask for specific changes if needed, then merge as submitted — never cherry-pick or trim it on their behalf. Say how long it has waited. |
e2e=PENDING (or -) with no e2e-approved label, author not a member | The E2E gate is waiting: either Claude triage is still running, or it declined and a maintainer must add the e2e-approved label to run the PR's code on the self-hosted runner. A new push drops the label again. |
e2e=FAILURE | Either the gate's Claude triage declined the PR (the gate's PR comment says so; a maintainer overrides with e2e-approved) or the suite is red on the self-hosted runner. Read the status link to tell which. For a red suite, check the log before blaming the change — some specs are order-dependent or scene-drift flaky (docs/dev/TESTING.md); a standalone rerun is the first step. |
e2e=ERROR | The gate itself crashed (triage error), so nothing ran. A maintainer adds e2e-approved or the author re-pushes to retry. |
checks_failed non-empty | Red CI — name the failing check(s) (Run Tests, Check Translations, CodeQL, …). |
merge=DIRTY (or CONFLICTING) | Conflicts with main — needs a rebase. A contributor's PR: ask them; ours: offer to do it. |
draft=true, depends_on=#N(MERGED) | Stacked PR whose base has landed. It should be rebased onto main and marked ready (the author's job for a fork; ours if it's our branch). Offer the nudge or the rebase. |
draft=true, depends_on=#N(OPEN) | Waiting on #N — no action. |
draft=true, no dependency | Work in progress — no action unless it's older than a week, then ask whether it's abandoned. |
merge=BLOCKED, checks green | Waiting on a required review/approval. |
ready, green, merge=CLEAN, author Tim or a contributor | Green but unmerged — waiting on Tim's review/merge. After it lands, /release is the usual next step. |
checks_pending > 0, or merge=UNKNOWN on a fresh push | In flight — not yet actionable. |