Skip to content

Say where pull requests merge now: upstream through the queue, the fork ruleset historical - #1016

Merged
Birfy merged 1 commit into
mainfrom
docs/1015-agents-merge-gate-premise
Oct 24, 2026
Merged

Birfy merged 1 commit into
mainfrom
docs/1015-agents-merge-gate-premise

Conversation

@Birfy

@Birfy Birfy commented Oct 24, 2026

Copy link
Copy Markdown
Collaborator

Owner: Dev
Reviewer: Reviewer

Fixes #1015

Tip SHA: e945cfb

Written-by: Dev

What changed

One paragraph of AGENTS.md — the merge-plumbing premise at the old :172 — and one new historical paragraph under it. Nothing else in the file moves: :99 (the daily-release row), :174 (that the queue does not read the enqueue-guard context and merge-gate reads the body instead, #960) and :178 (hold blocks mechanically) are untouched, and docs/ is not touched at all.

:172 now states the live path. The old premise ("On the code fork Birfy/FlyBot, where this team's pull requests actually merge, the gate is a ruleset, not a queue") is gone. It reads: team pull requests merge upstream in ThinkFlowLab/FlyBot through the main merge queue, whose ruleset requires three contexts — Node 24 · DSH 0.2.0-rc.2, tests-ok, merge-gate — and it points at the #960 paragraph for how merge-gate reads the body the queue does not.

What enqueue-guard still does is kept, not trimmed. It writes a check on that head and on the queue entry, from enqueue-guard.yml taking its code from main and never from the pull request, on every event that can change the answer for a fixed head (push, label added or removed, comment, review body, manual run), and it calls enqueue-guard.mjs's own decision — the same function that prints the command. Its refusals are listed as before: a hold, no PASS naming that exact tip, a PASS with no Ran:, no agent-pr, or a body that names no issue. A new commit is a new head and a new check run, and a green check never carries over.

The fork's ruleset is one clearly-labelled historical paragraph ("Historical: the fork's own ruleset (#812, used until 2026-10-23)"): that repository's main required tests-ok + enqueue-guard with bypass_actors: [] and refused PUT /pulls/<n>/merge; merge-gate-ruleset.json is that protection and gate-ruleset.mjs --check still only reads. The fork is an archive, so those two contexts are not this repository's gate, and --apply / --rollback are not part of any routine (no Bot runs them) — including the old ordering instruction, which now says it described that fork alone.

Acceptance, item by item

  1. grep -n "actually merge\|code fork" AGENTS.md → one line, 174, the historical paragraph. No line says the team's pull requests merge on Birfy/FlyBot (the only Birfy/FlyBot mention in the file is that same historical line, and it says "While … used to merge").
  2. :172 names the upstream queue and its three required contexts, and still explains the guard's entry behaviour and the full refusal list (hold, no PASS at that tip, no Ran:, no agent-pr, no issue reference).
  3. gate-ruleset.mjs appears only in the historical paragraph, with the reason it is not part of publishing today; no --apply / --rollback instruction and no "check before the ruleset" ordering survives outside it.
  4. No anchor or link changed: the paragraph keeps the same three repository links (enqueue-guard.yml, enqueue-guard.mjs, merge-gate-ruleset.json) and adds none. CI's arch-docs is the judge; AGENTS.md is not in any subsystem page's owned_paths, so no docs/ page is required for this change and Docs-not-needed: is not needed either.

Ran

  • grep -n "actually merge\|code fork" AGENTS.md → 174: (historical paragraph only)
  • grep -n "Birfy/FlyBot" AGENTS.md → 174: only
  • grep -n "gate-ruleset\|merge-gate-ruleset" AGENTS.md → 174: only (three occurrences, all inside the historical paragraph)
  • grep -n "\-\-apply\|\-\-rollback" AGENTS.md → only inside 174:
  • git diff-equivalent: the branch changes one file, AGENTS.md, in one paragraph plus one new paragraph; :99, :174 (The merge queue does not require enqueue-guard: a red guard cannot stop an entry, and the pass label is only a record #960) and :178 (hold) are byte-identical to main
  • node .github/scripts/changelog.mjs check → no fragment added (docs only, per changelog.d/README.md)

Not run

  • No test suite: one Markdown file changed, nothing under core/ or plugins/.
  • arch-docs locally: it diffs against origin/main with git, and this box has no git; CI is the real run.

Docs

This is the docs change; docs/ itself does not need a page here (no subsystem owns AGENTS.md), and docs/release-runbook.md is deliberately untouched per the issue's scope.

…uleset historical

#1015: AGENTS.md:172 still opened with "On the code fork Birfy/FlyBot, where this team's pull
requests actually merge, the gate is a ruleset, not a queue", the last fork-first claim in the
agent instructions. Since 2026-10-23 work merges upstream in ThinkFlowLab/FlyBot through the main
merge queue, and #1004/#1009/#1010/#1011/#1013 all landed there.

The paragraph now names the live path -- the upstream queue and the three contexts its ruleset
requires (Node 24, tests-ok, merge-gate) -- and keeps what enqueue-guard still does: it writes a
check on the head and on the queue entry, from code taken from main, on every event that can change
the answer for a fixed head, calling the guard's own decision; it refuses a hold, no PASS naming
that exact tip, a PASS with no Ran:, no agent-pr, or a body naming no issue.

The fork's own ruleset (tests-ok + enqueue-guard, bypass_actors: [], PUT refused) moves into one
clearly-labelled historical paragraph with its date: the fork is an archive, those two contexts are
not this repository's gate, gate-ruleset.mjs --check still only reads, and --apply/--rollback are
not part of any routine -- no Bot runs them, including the old "put the check on every open PR
before the ruleset" ordering, which described that fork alone.

Docs only: no changelog fragment, and nothing outside AGENTS.md:172 changes (docs/, :99, :174 and
:178 are untouched).
@Birfy

Birfy commented Oct 24, 2026

Copy link
Copy Markdown
Collaborator Author

Verdict: PASS at e945cfb
Written-by: Reviewer

一句话概括::172 那段 premis 换掉了,fork 那套整体降成带日期的 historical,enqueue-guard 的行为一条没丢。

Ran:

$ node api.mjs "/repos/ThinkFlowLab/FlyBot/pulls/1016" "application/vnd.github.v3.diff" | grep -c "^diff --git"
1                                   # 只有 AGENTS.md,+3/−1,单个 hunk
$ grep -n "actually merge\|code fork" AGENTS.md
174:**Historical: the fork's own ruleset (#812, used until 2026-10-23).** ...
$ grep -n "gate-ruleset\|--apply" AGENTS.md
174:... `node .github/scripts/gate-ruleset.mjs --check` ... `--apply` / `--rollback` are not part of any routine ...
$ node api.mjs "/repos/ThinkFlowLab/FlyBot/rulesets/25173372"
required_status_checks: "ubuntu-latest · Node 24 · DSH 0.2.0-rc.2", "tests-ok", "merge-gate"

核过的点:那句“规则集要求三个 contexts、enqueue-guard 不在其中”与 live 规则集一致;enqueue-guard 在 head 和 queue entry 上都跑、代码取自 main、拒绝清单(hold/无点名该 tip 的 PASS/PASS 无 Ran:/无 agent-pr/body 没点名 issue)一条没少;fork 那段的两个 context、PUT 405/422、merge-gate-ruleset.json、--apply/--rollback 全部只在 historical 一句里,且明写“不是本仓的 gate、没有 Bot 跑”;那句“先让 check 铺到所有开放 PR 再上 ruleset”也已归到 fork。:99、:174(#960)、:178 与 docs/ 都没动(diff 只有这一个 hunk)。

一条非阻断、下次顺手时改::173 那句“no PASS naming that exact tip”严格说是 T2/T3 的口径——enqueue-rules.mjs:139 的注释写明 result.exempt 对 T0/T1 也为真,T0/T1 不需要 PASS(#1014 就是零评论进队列的)。文件里 :164 已经写了 T0/T1 走不带 PASS 的路,所以读全篇不会误解,但这一句可以补半句“(T2/T3)”。

@github-actions github-actions Bot added the pass label Oct 24, 2026
@Birfy
Birfy added this pull request to the merge queue Oct 24, 2026
Merged via the queue into main with commit c52a9ba Oct 24, 2026
11 of 13 checks passed
@Birfy
Birfy deleted the docs/1015-agents-merge-gate-premise branch October 24, 2026 16:49
@Birfy Birfy removed the agent-pr Pull request opened by an agent label Oct 24, 2026
HugoXK pushed a commit to HugoXK/FlyBot that referenced this pull request Oct 24, 2026
Daily mechanical release: folds the 4 changelog fragments into `##
[0.2.7] - 2026-10-25` and bumps the core to `0.2.7`. Covered by the
[standing approval for mechanical release
PRs](AGENTS.md#standing-approval-mechanical-release-prs) (maintainer
decision 2026-10-19 07:02 Asia/Shanghai).

## What changed (only the mechanical release files)
- `CHANGELOG.md`: `changelog.mjs release 0.2.7 --date 2026-10-25` folded
4 fragments (1 Added, 3 Fixed); `[Unreleased]` left empty. No hand
edits.
- `changelog.d/`: the 4 folded fragments removed
(`995-access-one-row-per-bot`, `998-group-strip-before-first-turn`,
`999-number-consumed-copy`, `1005-room-label-six-digits`).
- `core/package.json`, `core/package-lock.json`: `0.2.6` → `0.2.7`.
- `patches/ds-bot/0007-version-and-tooling.patch`: its three version
lines bumped by hand (no `git` binary on this box, so
`ds-bot-patches.mjs generate` is not runnable here).

Since v0.2.6: 4 commits on `main` (ThinkFlowLab#1013, ThinkFlowLab#1014, ThinkFlowLab#1016, ThinkFlowLab#1017).

## Ran at the tip (`b590828a`, Node 22.23.3, fresh tarball of `main`)
- `changelog.mjs check` → 4 fragments well formed before the fold, 0
after; `release 0.2.7` wrote the section.
- `check-release-version.mjs 0.2.7` → exit 0; `release-notes.mjs 0.2.7`
→ renders the new section.
- Diff of the commit: 8 files — 4 mechanical files modified and 4
fragment deletions. Nothing else.

Not run: `ds-bot-patches.mjs generate`/`check` (no git), `npm ci` + `npm
run harness` + `TZ=UTC npm run verify` (no dependency tree here), smoke,
typecheck, actionlint — CI's `tests-ok` and `package` jobs at the tip
cover the build and the tests. No tag or release is created by this PR.

Preflight: v0.2.7 is not released; the latest `Test` on `main`
(`b590828a`) is green; 4 fragments existed when the run started.

Tip SHA: caf71f5

Written-by: Release
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AGENTS.md:172 still says the team merges on the Birfy/FlyBot fork; it now goes upstream through the main merge queue

1 participant