Skip to content

Releases: kaxil/boring-cyborg

2026.04.22

22 Apr 23:58

Choose a tag to compare

Bug fix: first-contributor welcome comments firing on established contributors

The greetings bot was congratulating long-time members (ashb, shahar1, sryza, and others) on their "first merged pull request" in large repos. Root cause: lib/greetings.js counted prior PRs/issues via GitHub's Issues Search API, which returns severely truncated results for very large repos (apache/airflow has 35,912 merged PRs — the search index returned total_count: 0 for queries like is:pr is:merged author:ashb repo:apache/airflow). Latent since the June 2025 switch from paginated search to single-call total_count.

What changed

  • Dropped the search API entirely in lib/greetings.js.
  • Fast-path via author_association: MEMBER, OWNER, COLLABORATOR skip in every handler. CONTRIBUTOR skips for first-PR and first-issue, but not first-merge (GitHub may reflect post-merge state on pull_request.closed, so a genuine first merger can appear as CONTRIBUTOR there — falls through to the commit-history check).
  • Commit-history check via repos.listCommits: reads directly from the DB, not from search. The merge handler queries the repo's default branch (matching prior repo-wide semantics) and excludes the current PR's commits via pulls.listCommits + merge_commit_sha. per_page clamped to GitHub's documented max of 100.
  • Issue/PR history check via issues.listForRepo: catches users whose prior history is PRs that never merged (or issues for the issue handler). Filters client-side by pull_request != null so PR-only users still get their first-issue welcome and vice versa. Paginates up to 3 × 100 items to find a stale prior item buried after opposite-kind items.
  • Short-circuits for bot accounts (user.type === 'Bot') and the ghost deleted-user login.

Test coverage

Greetings test count grew from 18 to 37 (total suite: 110 tests, all passing).

Known edge cases (documented in code)

  • Rebase-merge strategy with multi-commit PRs: rebased SHAs don't match original PR commit SHAs, so the exclude-set may miss them.
  • User whose only prior merges were to non-default branches, now opening a default-branch PR.
  • User with >300 items of one kind before a stale opposite-kind item.

All narrower than the MEMBER false-positive this fixes.

Commits: 34d4862
Full Changelog: 2026.04.16...2026.04.22

2026.04.16

16 Apr 19:24

Choose a tag to compare

Changes since the previous deploy (12eac15).

What's Changed

  • Allow per-rule targetBranchFilter in labeler, reviewer, and issuelink by @potiuk in #112
  • Fix bugs and improve reviewer test coverage (55 → 84 tests)
  • Fix err.code vs err.status in reviewer, add pagination, filter existing reviewers
  • Add GitHub Actions workflow to deploy to Heroku on release
  • Add release and deployment docs to CONTRIBUTING.md

Full Changelog: 12eac15...2026.04.16