feat(events): add mergify events, a timeline over the activity log - #1760
Conversation
|
This pull request is part of a Mergify stack:
|
Merge Protections🔴 2 of 7 protections blocking · waiting on 👀 reviews
🔴 👀 Review RequirementsWaiting for
This rule is failing.
🔴 🔎 ReviewsWaiting for
This rule is failing.
Show 5 satisfied protections🟢 ⛓️ Depends-On RequirementsRequirement based on the presence of
🟢 🤖 Continuous Integration
🟢 Enforce conventional commitMake sure that we follow https://www.conventionalcommits.org/en/v1.0.0/
🟢 📕 PR description
🟢 🚦 Auto-queueWhen all merge protections are satisfied, this pull request will be queued automatically. |
2538e85 to
c4884b2
Compare
b8c7237 to
263ea5e
Compare
Revision history
|
c4884b2 to
6bacff8
Compare
|
A predecessor in this stack was just merged, but I couldn't auto-rebase this PR: there's a conflict that needs manual resolution. Conflict in: Resolve with |
|
@jd this pull request is now in conflict 😩 |
The activity log carries ~45 event types — the action.queue.* family,
the workflow actions, ci_insights.*, command.*, queue pauses,
scheduled freezes — and almost none of it was reachable from the CLI,
so agents hand-rolled curl against a contract they did not know.
Add `events` as a new top-level noun over the shared client:
mergify events # whole repo, last 24h
mergify events --pr 1740 --since 7d
mergify events --type action.queue.leave --type command.queue
mergify events --pr 1740 --json # raw events, newest first
mergify events --limit 20 # newest 20, and the header says so
One command over a filter covers every type; there is deliberately no
command per event type. Two details carry the lesson #1747 taught:
- **The header always states the window** (`PR #1740 · 6 events ·
2026-07-29 21:00 → 2026-07-30 21:00 UTC`), so an empty result reads
as "nothing in the last 24h" and never as "nothing ever" — that
ambiguity is the bug this removes. The empty case names the range
and the retention: `No events for PR #1740 between <from> and <to>
UTC.` / `Retention is 90 days; try --since 90d.` (the hint is
omitted when the query already covered the full retention).
- **`--since` cannot express a window the API would reject**: the
duration parser enforces the 93-day cap as a usage error carrying
the fix, and the 24h default is applied by the CLI and stated, not
inherited silently from the API.
The human timeline reads oldest-first with a dim date row wherever
the calendar date changes, and a best-effort summary per line
(queue name, draft PR number, abort/dequeue codes, merged, command
author) that degrades to nothing on types this CLI has never seen.
`--json` emits one document echoing the query (`repository`,
`pull_request`, `received_from`, `received_to`) plus `size` and the
raw events newest-first, unknown fields intact.
Verified against the live API on Mergifyio/mergify-cli: the full
queue lifecycle of #1747 (enter → checks_start → checks_end → leave
merged), a 30-day repo-wide query paginating to completion (806
events over 9 pages, newest-first), the --type filter, and the empty
case naming its window.
Docs: README command list, a new `mergify-events` agent skill, the
`mergify-merge-queue` skill now routes "whole lifecycle" questions to
`mergify events` instead of curl, and AGENTS.md maps the new group.
Fixes MRGFY-8363.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Change-Id: I3dd37c3d0539d8208755e12d7deb4d2030753dd5
263ea5e to
fdda9fe
Compare
6bacff8 to
b2faf78
Compare
|
Rebased onto The base of this stack, #1758, merged this morning as
|
fdda9fe to
9a87987
Compare
The activity log carries ~45 event types — the action.queue.* family,
the workflow actions, ci_insights., command., queue pauses,
scheduled freezes — and almost none of it was reachable from the CLI,
so agents hand-rolled curl against a contract they did not know.
Add
eventsas a new top-level noun over the shared client:One command over a filter covers every type; there is deliberately no
command per event type. Two details carry the lesson #1747 taught:
PR #1740 · 6 events · 2026-07-29 21:00 → 2026-07-30 21:00 UTC), so an empty result readsas "nothing in the last 24h" and never as "nothing ever" — that
ambiguity is the bug this removes. The empty case names the range
and the retention:
No events for PR #1740 between <from> and <to> UTC./Retention is 90 days; try --since 90d.(the hint isomitted when the query already covered the full retention).
--sincecannot express a window the API would reject: theduration parser enforces the 93-day cap as a usage error carrying
the fix, and the 24h default is applied by the CLI and stated, not
inherited silently from the API.
The human timeline reads oldest-first with a dim date row wherever
the calendar date changes, and a best-effort summary per line
(queue name, draft PR number, abort/dequeue codes, merged, command
author) that degrades to nothing on types this CLI has never seen.
--jsonemits one document echoing the query (repository,pull_request,received_from,received_to) plussizeand theraw events newest-first, unknown fields intact.
Verified against the live API on Mergifyio/mergify-cli: the full
queue lifecycle of #1747 (enter → checks_start → checks_end → leave
merged), a 30-day repo-wide query paginating to completion (806
events over 9 pages, newest-first), the --type filter, and the empty
case naming its window.
Docs: README command list, a new
mergify-eventsagent skill, themergify-merge-queueskill now routes "whole lifecycle" questions tomergify eventsinstead of curl, and AGENTS.md maps the new group.Fixes MRGFY-8363.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Depends-On: #1759