From 091bb205499b19c358f47ba869f0854d445d335f Mon Sep 17 00:00:00 2001 From: EMRG Evolution Date: Wed, 12 Aug 2026 19:44:42 +0800 Subject: [PATCH] emrg: document fork-PR conflict CI unblock path in evolution prompt (#716 lesson) --- emrg/server/evolution_prompt.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/emrg/server/evolution_prompt.md b/emrg/server/evolution_prompt.md index 0dcf28c..b7d4a8c 100644 --- a/emrg/server/evolution_prompt.md +++ b/emrg/server/evolution_prompt.md @@ -142,6 +142,7 @@ cd {{ source_dir }} && gh pr list -R {{ owner }}/{{ repo }} --limit 20 - **⚡ Before posting any LGTM, confirm the PR has CI checks; if none reported, re-trigger** (#644 lesson: the PR's push event can be dropped — branch had zero checks while both local runs were green and a parallel cycle had already LGTM'd; CI re-validation was only caught by checking `gh pr checks `): - `gh pr checks -R {{ owner }}/{{ repo }}` → "no checks reported" means the push event was lost, NOT that CI passed - Re-trigger: `gh workflow run test.yml --ref ` (workflow_dispatch, #527) or `scripts/re-trigger-ci.sh ` (#529), then wait for the run to complete before LGTMing + - **⚠️ A CONFLICTING fork PR also gets zero CI checks** (#716 lesson: `mergeable: CONFLICTING` / `mergeable_state: dirty` → GitHub refuses to run CI for a dirty PR; `gh workflow run` cannot target fork refs, close/reopen does NOT re-fire checks for dirty PRs). Unblock path: check `maintainer_can_modify: true`, fetch `refs/pull/N/head`, create a local branch, `git merge master`, resolve conflicts, `git push :` — the `pull_request` synchronize event then fires CI. Post a comment explaining the maintainer push. Never ask the author to rebase blindly when you can resolve the conflict yourself as Committer. - Local verification (pytest + npm test) is necessary but NOT sufficient — CI is the only place the actionlint gate (#444) and the full doc-count guard (#511) run - Check merge conditions: does the PR's comment history already have 3 consecutive ✅ from different cycles with no ❌ in between? - ⚠️ Query comments with the REST API (GraphQL needs `read:org` scope, often missing from the token): @@ -340,6 +341,7 @@ When reading rants, follow these rules: > - Test workflow manual dispatch (#527 test.yml 加 workflow_dispatch 触发:push 事件被丢/CI 队列故障时 `gh workflow run test.yml --ref ` 手动重触发,替代空 commit 重触发(空 commit 污染 git 历史且 push 管线若坏同样无效);actionlint gate 已验) ✅ > - CI re-trigger one-click script (#529 scripts/re-trigger-ci.sh [branch]:宿主侧一键 dispatch 重触发(默认当前分支,set -euo pipefail),替代手记 gh workflow run 命令/空 commit;Agent.md CI 段已文档化) ✅ > - CI-check pre-LGTM gate (#645 #644 教训:PR push 事件可被丢弃——branch 零 checks 而本地双跑绿 + 并行周期已 LGTM,`gh pr checks ` 才暴露;LGTM 前必须确认 CI checks 存在,无则 workflow_dispatch 重触发(#527/#529)等成功后再说;本地验证必要但不充分——actionlint gate #444 + doc-count guard #511 只在 CI 跑) ✅ +> - Fork-PR conflict CI unblock (#716 教训:**冲突中的 fork PR 零 CI checks**——`mergeable: CONFLICTING`/`mergeable_state: dirty` 时 GitHub 拒跑 CI,close/reopen 与 workflow_dispatch(无法 target fork ref)均无效;唯一解=maintainer push:`maintainer_can_modify:true` → fetch `refs/pull/N/head` → 本地 merge master 解冲突 → push 到 fork 分支 → `pull_request` synchronize 触发 CI;Committer 可直接代解冲突,不必等作者反复 rebase) ✅ > - saturation halt auto-resume (#531 scheduler _saturation_halt_active:停机(≥30 空循环)后 scheduled run 全 skip → handler 无法自检 HEAD 变化,只有手动 /trigger 能恢复;_remote_advanced 用 git ls-remote 对比 origin/master,上游推进即自动恢复+计数清零;+4 测试正反两态/边界/无 git 仓库不崩) ✅ > - README MANIFESTO intro anglicized (#533 README.md 行 25 MANIFESTO 中文引言→英文;MANIFESTO.md 零改动(宿主方案 C);行 16 语言切换器 + 行 71 `卸载 EMRG.app` 专有名词保留) ✅ > - README core-differentiator front (#534 特性表第 1 行=自进化、同质化(TUI/daemon/并行/vim)合并 ≤2 行、GUI 描述去版本史 ≤3 行、演化章节前置 Quick Start 前 + Real example 保留;README.md/README.cn.md 同步) ✅