needanything
Read-only sweep of everything that may be waiting on a human — open PRs (contributor PRs to review, Dependabot and Audit Fix bot PRs that didn't land, red CI, conflicts, the E2E gate waiting on an `e2
SKILL.md.claude/skills/needanything/SKILL.md
GitHubDoes anything need us?
Reference: CONTRIBUTING.md (contributor PRs, stacked drafts, "Depends on
#N"), docs/dev/RELEASE_PROCESS.md (the draft-only release workflow and the
Foundry package-release endpoint), deploy/e2e-runner/README.md and the
header comment of .github/workflows/e2e-gate.yml (who may run E2E), the
header comments of audit-fix.yml and dependabot-auto-merge.yml (what the
bot PRs expect). This skill is the checklist; those are the truth when the
two disagree.
Read-only. Report and recommend; never label, comment, close, merge,
rebase, delete a branch, or run a workflow as part of the check. The only
thing the scan changes is the remote-tracking refs (git fetch --prune); it
never touches a local branch, the working tree, or GitHub. Never
publish or promote a release — the maintainer does that by hand, always
(see the standing authorizations in CLAUDE.md). Offer the action and wait
for a yes.
Scan:
.claude/skills/needanything/scan.shAbout 20 seconds; one tab-separated line per item. It reads
foundryvtt-dcc/dcc, the lib repomoonloch/dcc-core-lib, the sibling modules (xcc, mcc-classes, dcc-crawl-classes, dcc-core-book — dcc-qol is deliberately skipped), and the local checkout.ghoutput is paged off withGH_PAGER=cat; the script sets it, so don't drop that if you edit it.Classify each open PR (section
OPEN PRS). There is no issue automation in this repo: every PR was opened by Tim, a contributor, or one of two bots.PR state Meaning / suggested action author=app/dependabot, checks pendingIn flight — dependabot-auto-merge.ymlsquash-merges it as soon asRun Testssucceeds 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 Testsgreen, still openThe 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. RedRun Testson it → read the failure first.author=app/github-actions, branchautomated/npm-audit-fixThe daily Audit Fix PR. Run Testsnever runs on it (opened withGITHUB_TOKEN); the unit tests ran inside the workflow before it opened, so no checks on it is normal (merge=UNSTABLEorCLEAN;BLOCKEDifRun Testsis 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 noe2e-approvedlabel, author not a memberThe E2E gate is waiting: either Claude triage is still running, or it declined and a maintainer must add the e2e-approvedlabel to run the PR's code on the self-hosted runner. A new push drops the label again.e2e=FAILUREEither 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=ERRORThe gate itself crashed (triage error), so nothing ran. A maintainer adds e2e-approvedor the author re-pushes to retry.checks_failednon-emptyRed CI — name the failing check(s) ( Run Tests,Check Translations,CodeQL, …).merge=DIRTY(orCONFLICTING)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 mainand 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 dependencyWork in progress — no action unless it's older than a week, then ask whether it's abandoned. merge=BLOCKED, checks greenWaiting on a required review/approval. ready, green, merge=CLEAN, author Tim or a contributorGreen but unmerged — waiting on Tim's review/merge. After it lands, /releaseis the usual next step.checks_pending > 0, ormerge=UNKNOWNon a fresh pushIn flight — not yet actionable. A PR updated in the last few minutes may still be settling; say so rather than calling it stuck.
Issues. There is no triage pipeline; the open issues are Tim's own backlog unless someone else shows up in them.
ISSUES AWAITING A REPLY— someone other than Tim spoke last (or opened it and nobody answered). Needs you: read the newest comments (gh issue view <n> --comments) and say what they're asking.BUG / FOUNDRY-API-CHANGE ISSUES— list these ahead of enhancements; afoundry-api-changeissue usually means a Foundry update broke something and players are seeing it.BACKLOG— the rest is available to pick up; give the count and the lowest number. Don't list them one by one.
Release state (section
RELEASE).draft_release=line → Needs you now: a draft is waiting to be published, and only the maintainer may publish it (CLAUDE.mdstanding authorizations). Offer to tidy its notes, never to promote it.unreleased_commits > 0and no draft → feature work sits onmainunreleased. Offer theversion.txtbump from/release(its own commit onmain, never inside a PR). CI-only or docs-only commits don't need a release; say so instead of offering one.bump_unreleased=yeswith no draft and noCreate GitHub Releaserun newer than the bump → the release workflow was skipped. A very large squash-merge can trip thepaths: version.txtfilter; recovery is a small whitespace push toversion.txtonmain, which needs Tim's go-ahead.Create GitHub Releasered → no draft was made; readgh run view <run> --log-failed.Foundry Website UpdateorUpdate Foundry Manifest Post-Releasered → a release was published but Foundry's registry never heard of it: in-app installs stay frozen on the previous version. Needs you now. Seedocs/dev/RELEASE_PROCESS.md§ Manifest URLs & the package-release endpoint.
Scheduled and push jobs on main (
NEWEST RUN PER WORKFLOW ON MAIN, plus onered_now=line per workflow whose newest run failed). Green → say nothing. Red:Run Testson main → main is red; name the commit.Audit Fix→ the daily audit either found an advisory with no in-range fix (left for a human) or the job itself broke atCreate or update fix PR; read the log and say which.Dependabot Updates→ Dependabot can't produce its bumps; a long red streak here means security updates silently stopped. Read the log, file an issue if none tracks it.CodeQL→ read the alert; usually a real finding or a config break.
Core lib (
CORE LIB).sync_due=yes(vendored behind the latest published lib release) → a/sync-core-libis due. Note whether the branch carries a temporary adapter workaround that the sync should remove.- Our own open lib PR → after it merges, the sync + workaround removal is the next step; a lib Dependabot PR with green checks is a one-click merge for Tim.
- Lib issues awaiting a reply → someone outside is asking; the lib is public and must stay free of book text, so check any answer for that.
Sibling modules (
SIBLING MODULES): open PRs and issues awaiting a reply in xcc, mcc-classes, dcc-crawl-classes and dcc-core-book. These are usually low priority; list them under Worth a look with the module name and age, and flag a module PR that depends on an unreleased DCC change.Local checkout (
LOCAL CHECKOUT): housekeeping, never urgent.dirty_filesonmain→ say what's uncommitted before anyone switches branches (Tim does his own git work in this checkout).fetch=failed→ the ahead/gone lines are stale; say so.branch=… [ahead N]→ unpushed commits; offer the push if the branch isn'tmain.gone_branches=→ local branches whose remote was deleted. PRs are squash-merged, sogit branch -drefuses them; before offeringgit branch -D, confirm each one's PR merged (gh pr list --head <branch> --state merged) and leave out any that didn't.- A worktree whose
PR: #N MERGED→ offerpnpm run work:finish.
Report, grouped, most urgent first — one line per item with the number, the reason, and the one next step:
Needs you now - Draft release v0.70.76 waiting 3h — publish it (yours to do) - PR #1094 — Audit Fix lockfile bump, no checks by design; review and merge - #1101 — reporter replied 2h ago with a repro; they're waiting on an answer Worth a look - Dependabot Updates red 6 runs in a row on main (Run Dependabot step) — no issue tracks it - mcc-classes #30 — PhDoom's sheet request, 632d without a reply - 8 local branches with a deleted remote (all merged PRs) to delete; worktree for #1075 can be finished In flight (no action) - PR #1102 — contributor PR, E2E gate triage runningIf nothing qualifies, say so in one line and give the counts checked (for example: "Nothing needs you — 1 open PR (bot, in flight), 0 issues awaiting a reply, 23 backlog issues, v0.70.75 published with nothing unreleased, main green, lib in sync."). Skip empty groups. Finish by offering the obvious next action (merge the audit-fix PR, run
/release, start/sync-core-lib, pick up the lowest-numbered backlog issue) and do it only on a yes.