docs(agent): let a scheduled run merge behind an independent review #202
@@ -133,10 +133,71 @@ status and `GET /api/v1/repos/yonlu/yellowjacket/actions/jobs/<id>/logs` for
|
|||||||
the log — and fix it. Two consecutive failed CI runs on the same cause: stop,
|
the log — and fix it. Two consecutive failed CI runs on the same cause: stop,
|
||||||
comment what you know on the PR, and leave it for a human.
|
comment what you know on the PR, and leave it for a human.
|
||||||
|
|
||||||
**Do not merge.** Comment on the issue linking the PR, leave
|
**Do not merge, and do not review your own work.** Comment on the issue
|
||||||
`Status/In Progress` on, and end the run.
|
linking the PR, leave `Status/In Progress` on, and end the run. Whether
|
||||||
|
this merges is decided by a reviewer that did not write it — see below.
|
||||||
|
A CI run is not a review: it proves the tests you wrote pass, which is
|
||||||
|
exactly the thing an author is worst placed to judge.
|
||||||
|
|
||||||
## Finally
|
## Finally
|
||||||
|
|
||||||
Report in three lines: which issue you took, what state it is in
|
Report in three lines: which issue you took, what state it is in
|
||||||
(PR open / CI green / stopped and why), and any issues you filed.
|
(PR open / CI green / stopped and why), and any issues you filed.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# The merge gate
|
||||||
|
|
||||||
|
This half is **not** run by the author. It is run against a PR by
|
||||||
|
someone who has not seen the branch before, and it decides whether the
|
||||||
|
work lands on its own or waits for a human.
|
||||||
|
|
||||||
|
A push to `main` publishes nothing here — `release.yml` is
|
||||||
|
`workflow_dispatch` only and all four publishers key on `v*` tags — so
|
||||||
|
the cost of a wrong merge is a bad commit on `main` and the time to
|
||||||
|
revert it. That is the whole reason this gate can exist. If that ever
|
||||||
|
changes, this section is void.
|
||||||
|
|
||||||
|
**Merge only when every one of these is true.** Any single no means
|
||||||
|
leave it open.
|
||||||
|
|
||||||
|
1. An independent review of the diff returns **MERGE** or **MERGE WITH
|
||||||
|
NITS**. `CHANGES NEEDED`, or a review that could not reach a verdict,
|
||||||
|
means a human looks.
|
||||||
|
2. `CI / check (pull_request)` **and** `CI / e2e (pull_request)` are
|
||||||
|
`success` on the PR's current head. Ignore the `(push)` contexts —
|
||||||
|
they are `skipped` by design and Gitea folds `skipped` into a
|
||||||
|
combined state of `pending` that never clears.
|
||||||
|
3. The PR is mergeable with no conflicts, rebased onto current `main`.
|
||||||
|
4. The diff touches **none** of: `.gitea/workflows/`, `.releaserc.yml`,
|
||||||
|
`packaging/`, `build/`, `scripts/gitea-release.sh`,
|
||||||
|
`backend/database/sql/schemas/`, `backend/database/staleshape*.go`,
|
||||||
|
`go.mod`, `go.sum`. These either publish to somewhere a mistake
|
||||||
|
cannot be taken back from, or can destroy a database that a user
|
||||||
|
cannot rebuild.
|
||||||
|
5. The issue is `Kind/Bug`, `Kind/Testing`, `Kind/Documentation` or
|
||||||
|
`Kind/Enhancement`. **A `Kind/Feature` is a design decision and is
|
||||||
|
never auto-merged**, however green it is.
|
||||||
|
6. The diff is under ~600 changed lines across under ~15 files. Past
|
||||||
|
that, "a reviewer read it" stops being a claim anyone should take on
|
||||||
|
trust.
|
||||||
|
7. The PR does not claim to have verified something no tier here can
|
||||||
|
see. A change whose evidence would have to come from a physical
|
||||||
|
device is reported, not merged.
|
||||||
|
|
||||||
|
**When it merges**, use `{"Do":"merge"}` on
|
||||||
|
`POST /api/v1/repos/yonlu/yellowjacket/pulls/<n>/merge`. Then **check
|
||||||
|
the issue actually closed** — a squash or an edited merge message drops
|
||||||
|
the `Closes` footer — and close it by hand with a comment naming the
|
||||||
|
commit if it did not. `unclaim.yml` strips `Status/In Progress` on
|
||||||
|
close; if the label is still there a minute later, strip it yourself.
|
||||||
|
|
||||||
|
**When it does not merge**, say so on the PR in one paragraph: which
|
||||||
|
condition failed and what would satisfy it. Leave the PR open, leave
|
||||||
|
the label on, and file the review's substantive findings as issues so
|
||||||
|
they are searchable rather than buried in a PR comment.
|
||||||
|
|
||||||
|
**A nit is not a blocker, and it is not free either.** A `MERGE WITH
|
||||||
|
NITS` merges, and each nit worth keeping becomes an issue. Do not fix
|
||||||
|
nits on the branch: that is a second author pass with no second review,
|
||||||
|
which is the thing this gate exists to prevent.
|
||||||
|
|||||||
Reference in New Issue
Block a user