Survey the open PR queue and assign each PR a disposition — backed by code, tests, and checks, never by title — testing real mergeability against the actual release branch (often local-only, e.g. <release-branch>), not the main-based GitHub flag.
This is read-and-recommend. You do NOT merge, close, tag, or publish. You surface evidence and a proposed disposition; the maintainer approves.
-
Inventory the queue. One call, structured:
gh pr list --repo Hmbown/CodeWhale --state open \
--json number,title,author,headRefName,baseRefName,isDraft,mergeStateStatus,statusCheckRollup
Note mergeStateStatus (CLEAN / BLOCKED / DIRTY / UNKNOWN) but treat it as a hint only — it is computed against main, and the real landing target is usually a different branch.
-
Identify the real landing branch. The release head is frequently local-only:
git branch --list 'codex/v0.8*' 'codex/v0.9*'
git log --oneline -1 <release-branch>
Use that ref, not main, for every mergeability test below.
-
Read each candidate from code, not title. For every non-trivial PR:
gh pr view <N> --repo Hmbown/CodeWhale \
--json files,additions,deletions,statusCheckRollup,body,comments
gh pr diff <N> --repo Hmbown/CodeWhale
Read the diff. A "fix(exec): ..." can be a no-op or a regression; a "chore" can be the real fix. Judge the change, the tests it adds, and any review comments.
-
Decode check failures — distinguish trivial from real. In statusCheckRollup, find each conclusion: FAILURE and read its job. CodeWhale's CI jobs are Lint, Test (ubuntu-latest|macos-latest|windows-latest), Version drift, gate (Contribution gate), npm wrapper smoke, Mobile runtime smoke, Documentation, GitGuardian Security Checks.
- A
Lint failure that is only cargo fmt drift is trivial — harvestable, fix on landing with cargo fmt --all.
- A failing
Test (...) or clippy under Lint is real — read the log before trusting it.
Version drift failing on a community PR is expected (they bumped, or didn't); not a blocker for harvest.
cargo fmt --all -- --check && cargo clippy --workspace --all-targets
-
Test-merge against the real release head. The mergeStateStatus flag lies for local branches. Probe the actual merge:
git merge-tree --write-tree --messages <release-branch> origin/pr/<N> # if PR ref is fetched
git merge-tree --write-tree --messages <release-branch> <pr-head-sha>
Exit 0 and no CONFLICT lines → clean against the release branch (DIRECT-MERGE candidate even when GitHub shows BLOCKED/DIRTY). Conflicts printed → HARVEST or DEFER. This is read-only; it writes objects to the object store, not to any branch or working tree.
-
Assign a disposition with required credit. Per PR, recommend exactly one:
-
Report, don't act. Output a compact table: PR | author | landing-branch verdict | check summary | disposition | credit line. Stop there for maintainer approval.