
OrzMC
A Paper server management plugin with multi-platform bot control via EasyBot.
Список изменений
milestone: 批次收尾全量合入 main(bind 修复 + D11 UX + AGENTS 流程修订) (#320)
- ci(governance): 里程碑 PR(develop→main)CI 绿后自动 squash 合并并触发发布 (#280)
里程碑发布闭环:auto-merge-milestone.yml 在 base=main head=develop 的 PR 开启/更新时 enable auto-merge(squash)——分支保护的 CI 门禁(build+folia-smoke) 通过后 GitHub 自动合并 → push main → publish.yml 自动发 beta;无需人工点合并。 非 develop→main 的 main PR(热修复/纯文档)不受影响。AGENTS 发布规则同步。
- fix(governance): 里程碑自动合并改轮询合并+授权标签;修复 publish.yml paths-ignore 缩进 (#284)
- auto-merge-milestone.yml:native auto-merge 在 PR BLOCKED 时 enable 静默失败(#281 实测), 改为带 milestone:auto-merge 标签时轮询至 mergeable(必选检查失败即中止)→ gh pr merge --squash 自动合并
- publish.yml:#279 误把 paths-ignore 缩进到 branches 块内致 push 过滤失效(任意分支 push 触发且 0s 失败), 修正为同级(此前 #279 后无 beta 实为 workflow 解析失败,非 paths-ignore 生效)
- 新增仓库标签 milestone:auto-merge(owner 打标签授权自动合并)
- fix(ci): milestone auto-merge 读标签补 issues:read 权限并直读 issues API (#286)
GITHUB_TOKEN 默认无 issues 读权限:gh pr view --json labels 底层 issues API 被拒→ 标签检测恒空→跳过(labeled run 实测 15:41/15:42 均 skip)。 补 issues: read 权限 + 改走 gh api repos/{owner}/{repo}/issues/{n}/labels。
- fix(ci): milestone auto-merge 状态机硬化——瞬时 UNKNOWN/BLOCKED 重试而非失败 (#287)
synchronize 刚触发瞬间 gh pr view 读不到合并状态(15:50 run 7s 即失败), UNKNOWN 被当终态 exit 1。改为:UNKNOWN/BLOCKED/DRAFT/BEHIND/UNSTABLE 一律 sleep 重试 (必选检查失败已由 gh pr checks 单独拦截),仅 CONFLICTING/DIRTY 等中止;MERGED 视为成功。
- fix(ci): milestone auto-merge 补 issues:read 权限 + 直读 issues API 读标签 (#288)
develop 现网 workflow 缺失该补丁(#286 因本地分支错乱实际未带上):GITHUB_TOKEN 默认 无 issues 读权限,gh pr view --json labels 底层被拒→标签恒空→poller 恒跳过(15:41/15:42/15:55 run 均实测)。 补 issues: read + 改走 gh api repos/{owner}/{repo}/issues/{n}/labels。
- fix(ci): milestone auto-merge 自锁修复——UNSTABLE 亦可合并 (#289)
poller 自身 job 作为非必选 check 运行时 GitHub 对 PR 报 UNSTABLE(必选已绿), poller 只认 CLEAN → 永不合并直至超时(16:03 run 实测 3m+ 空转)。 改 CLEAN|UNSTABLE 均尝试合并;必选检查失败仍由 gh pr checks 先行拦截。
- ci(governance): 弃用轮询自动合并,改 GitHub 原生 auto-merge (#290)
owner 指出应通过仓库配置 + 原生 auto-merge 实现「PR 通过 CI 后自动合并」, 而非在 CI 工作流里写轮询脚本(存在自锁:poller job 自身为非必选 check 使 mergeState 停在 UNSTABLE 永不 CLEAN 等坑)。删除 auto-merge-milestone.yml;流程改为: 里程碑 PR(base=main, head=develop)上一次性 gh pr merge --auto --squash(或 UI Enable auto-merge),GitHub 原生在分支保护要求的 CI 绿后自动合并触发发布。AGENTS 同步。
-
docs(changelog): 发布流程验证注记(auto-merge 探针,纯文档) (#292)
-
ci(governance): develop 对齐 main——删除轮询 workflow + AGENTS 原生 auto-merge 措辞 (#294)
#290 曾因本地脏工作区把错误树合入 develop(轮询 workflow 仍在、AGENTS 旧措辞)。 main(#281 快照)内容正确(无轮询文件、AGENTS v2)。本 PR 以 main 为基准对齐 develop: 删除 auto-merge-milestone.yml + AGENTS 里程碑段落恢复 GitHub 原生 auto-merge 描述。
- docs(agents): 新增「开发工作流与发布」定稿章节,收敛分支模型重复叙述 (#296)
把 feature/bugfix/hotfix/里程碑/正式发版五场景流程+门禁+铁律整理为单一权威章节 (AGENTS 单一事实源);版本号与发布规则改为短版本语义+指针;多 AI 协作 #3 分支模型 改为指针引用,消除三处重复/漂移。含 #286/#290 脏工作区污染教训与 native auto-merge 用法。
- docs(agents): 补「main→develop 反向同步」流程到开发工作流章节 (#297)
main 有独立提交(hotfix/文档直合)时须反向 PR 同步进 develop,保持 develop ⊇ main, 避免里程碑因两侧同文件各自演进冲突(#293 教训)。含步骤、时机建议与「空 PR=已同步」信号。
- feat(ci): main→develop 反向同步自动化(事件驱动 + 原生 auto-merge) (#298)
main 有独立提交(hotfix/文档直合/tag bump)后需人工开反向 PR 同步,费时易漏。 新增 main-develop-sync.yml:push main → 比较两分支内容,main 确有领先内容 → 自动开反向 PR (head=main base=develop)+ enable 原生 auto-merge(squash)→ CI 绿自动合入 develop; 里程碑后内容一致 → 自动跳过(无空 PR);冲突 → 不开 auto-merge 留人工。 auto-merge 用 secrets.BOT_PAT(Actions GITHUB_TOKEN 无法 enable,实测)。 AGENTS 反向同步小节改为自动化说明 + 人工兜底步骤。
-
chore(sync): 历史欠账消解——main 并回 develop (#301)
-
ci(governance): 里程碑自动合并闭环 + publish 过滤修正(dry-run 端到端验证) (#281)
-
ci(governance): 里程碑 PR(develop→main)CI 绿后自动 squash 合并并触发发布 (#280)
里程碑发布闭环:auto-merge-milestone.yml 在 base=main head=develop 的 PR 开启/更新时 enable auto-merge(squash)——分支保护的 CI 门禁(build+folia-smoke) 通过后 GitHub 自动合并 → push main → publish.yml 自动发 beta;无需人工点合并。 非 develop→main 的 main PR(热修复/纯文档)不受影响。AGENTS 发布规则同步。
- fix(governance): 里程碑自动合并改轮询合并+授权标签;修复 publish.yml paths-ignore 缩进 (#284)
- auto-merge-milestone.yml:native auto-merge 在 PR BLOCKED 时 enable 静默失败(#281 实测), 改为带 milestone:auto-merge 标签时轮询至 mergeable(必选检查失败即中止)→ gh pr merge --squash 自动合并
- publish.yml:#279 误把 paths-ignore 缩进到 branches 块内致 push 过滤失效(任意分支 push 触发且 0s 失败), 修正为同级(此前 #279 后无 beta 实为 workflow 解析失败,非 paths-ignore 生效)
- 新增仓库标签 milestone:auto-merge(owner 打标签授权自动合并)
- fix(ci): milestone auto-merge 读标签补 issues:read 权限并直读 issues API (#286)
GITHUB_TOKEN 默认无 issues 读权限:gh pr view --json labels 底层 issues API 被拒→ 标签检测恒空→跳过(labeled run 实测 15:41/15:42 均 skip)。 补 issues: read 权限 + 改走 gh api repos/{owner}/{repo}/issues/{n}/labels。
- fix(ci): milestone auto-merge 状态机硬化——瞬时 UNKNOWN/BLOCKED 重试而非失败 (#287)
synchronize 刚触发瞬间 gh pr view 读不到合并状态(15:50 run 7s 即失败), UNKNOWN 被当终态 exit 1。改为:UNKNOWN/BLOCKED/DRAFT/BEHIND/UNSTABLE 一律 sleep 重试 (必选检查失败已由 gh pr checks 单独拦截),仅 CONFLICTING/DIRTY 等中止;MERGED 视为成功。
- fix(ci): milestone auto-merge 补 issues:read 权限 + 直读 issues API 读标签 (#288)
develop 现网 workflow 缺失该补丁(#286 因本地分支错乱实际未带上):GITHUB_TOKEN 默认 无 issues 读权限,gh pr view --json labels 底层被拒→标签恒空→poller 恒跳过(15:41/15:42/15:55 run 均实测)。 补 issues: read + 改走 gh api repos/{owner}/{repo}/issues/{n}/labels。
- fix(ci): milestone auto-merge 自锁修复——UNSTABLE 亦可合并 (#289)
poller 自身 job 作为非必选 check 运行时 GitHub 对 PR 报 UNSTABLE(必选已绿), poller 只认 CLEAN → 永不合并直至超时(16:03 run 实测 3m+ 空转)。 改 CLEAN|UNSTABLE 均尝试合并;必选检查失败仍由 gh pr checks 先行拦截。
- ci(governance): 弃用轮询自动合并,改 GitHub 原生 auto-merge (#290)
owner 指出应通过仓库配置 + 原生 auto-merge 实现「PR 通过 CI 后自动合并」, 而非在 CI 工作流里写轮询脚本(存在自锁:poller job 自身为非必选 check 使 mergeState 停在 UNSTABLE 永不 CLEAN 等坑)。删除 auto-merge-milestone.yml;流程改为: 里程碑 PR(base=main, head=develop)上一次性 gh pr merge --auto --squash(或 UI Enable auto-merge),GitHub 原生在分支保护要求的 CI 绿后自动合并触发发布。AGENTS 同步。
- docs(im): §2.6 验证状态补注——三类会话真机验收闭环(管理群/玩家群/私聊) (#278)
2026-09-04 补验完成:管理群(上行问答+管理指令 fail-closed)、玩家群(PUBLIC 广播收到 「启动完成」通知)、管理员私聊(下行 test + 绑定后 $l 问答回复);三类绑定跨重启持久化验证通过
-
docs(changelog): 发布流程验证注记 + 治理对齐收尾(里程碑 auto-merge 演示,纯文档不发版) (#295)
-
ci(governance): 里程碑 PR(develop→main)CI 绿后自动 squash 合并并触发发布 (#280)
里程碑发布闭环:auto-merge-milestone.yml 在 base=main head=develop 的 PR 开启/更新时 enable auto-merge(squash)——分支保护的 CI 门禁(build+folia-smoke) 通过后 GitHub 自动合并 → push main → publish.yml 自动发 beta;无需人工点合并。 非 develop→main 的 main PR(热修复/纯文档)不受影响。AGENTS 发布规则同步。
- fix(governance): 里程碑自动合并改轮询合并+授权标签;修复 publish.yml paths-ignore 缩进 (#284)
- auto-merge-milestone.yml:native auto-merge 在 PR BLOCKED 时 enable 静默失败(#281 实测), 改为带 milestone:auto-merge 标签时轮询至 mergeable(必选检查失败即中止)→ gh pr merge --squash 自动合并
- publish.yml:#279 误把 paths-ignore 缩进到 branches 块内致 push 过滤失效(任意分支 push 触发且 0s 失败), 修正为同级(此前 #279 后无 beta 实为 workflow 解析失败,非 paths-ignore 生效)
- 新增仓库标签 milestone:auto-merge(owner 打标签授权自动合并)
- fix(ci): milestone auto-merge 读标签补 issues:read 权限并直读 issues API (#286)
GITHUB_TOKEN 默认无 issues 读权限:gh pr view --json labels 底层 issues API 被拒→ 标签检测恒空→跳过(labeled run 实测 15:41/15:42 均 skip)。 补 issues: read 权限 + 改走 gh api repos/{owner}/{repo}/issues/{n}/labels。
- fix(ci): milestone auto-merge 状态机硬化——瞬时 UNKNOWN/BLOCKED 重试而非失败 (#287)
synchronize 刚触发瞬间 gh pr view 读不到合并状态(15:50 run 7s 即失败), UNKNOWN 被当终态 exit 1。改为:UNKNOWN/BLOCKED/DRAFT/BEHIND/UNSTABLE 一律 sleep 重试 (必选检查失败已由 gh pr checks 单独拦截),仅 CONFLICTING/DIRTY 等中止;MERGED 视为成功。
- fix(ci): milestone auto-merge 补 issues:read 权限 + 直读 issues API 读标签 (#288)
develop 现网 workflow 缺失该补丁(#286 因本地分支错乱实际未带上):GITHUB_TOKEN 默认 无 issues 读权限,gh pr view --json labels 底层被拒→标签恒空→poller 恒跳过(15:41/15:42/15:55 run 均实测)。 补 issues: read + 改走 gh api repos/{owner}/{repo}/issues/{n}/labels。
- fix(ci): milestone auto-merge 自锁修复——UNSTABLE 亦可合并 (#289)
poller 自身 job 作为非必选 check 运行时 GitHub 对 PR 报 UNSTABLE(必选已绿), poller 只认 CLEAN → 永不合并直至超时(16:03 run 实测 3m+ 空转)。 改 CLEAN|UNSTABLE 均尝试合并;必选检查失败仍由 gh pr checks 先行拦截。
- ci(governance): 弃用轮询自动合并,改 GitHub 原生 auto-merge (#290)
owner 指出应通过仓库配置 + 原生 auto-merge 实现「PR 通过 CI 后自动合并」, 而非在 CI 工作流里写轮询脚本(存在自锁:poller job 自身为非必选 check 使 mergeState 停在 UNSTABLE 永不 CLEAN 等坑)。删除 auto-merge-milestone.yml;流程改为: 里程碑 PR(base=main, head=develop)上一次性 gh pr merge --auto --squash(或 UI Enable auto-merge),GitHub 原生在分支保护要求的 CI 绿后自动合并触发发布。AGENTS 同步。
-
docs(changelog): 发布流程验证注记(auto-merge 探针,纯文档) (#292)
-
ci(governance): develop 对齐 main——删除轮询 workflow + AGENTS 原生 auto-merge 措辞 (#294)
#290 曾因本地脏工作区把错误树合入 develop(轮询 workflow 仍在、AGENTS 旧措辞)。 main(#281 快照)内容正确(无轮询文件、AGENTS v2)。本 PR 以 main 为基准对齐 develop: 删除 auto-merge-milestone.yml + AGENTS 里程碑段落恢复 GitHub 原生 auto-merge 描述。
-
docs: 反向同步自动化探针文件(验证 main→develop 自动同步链路) (#299)
-
chore(sync): main → develop 自动同步 (#303)
-
ci(governance): 里程碑自动合并闭环 + publish 过滤修正(dry-run 端到端验证) (#281)
-
ci(governance): 里程碑 PR(develop→main)CI 绿后自动 squash 合并并触发发布 (#280)
里程碑发布闭环:auto-merge-milestone.yml 在 base=main head=develop 的 PR 开启/更新时 enable auto-merge(squash)——分支保护的 CI 门禁(build+folia-smoke) 通过后 GitHub 自动合并 → push main → publish.yml 自动发 beta;无需人工点合并。 非 develop→main 的 main PR(热修复/纯文档)不受影响。AGENTS 发布规则同步。
- fix(governance): 里程碑自动合并改轮询合并+授权标签;修复 publish.yml paths-ignore 缩进 (#284)
- auto-merge-milestone.yml:native auto-merge 在 PR BLOCKED 时 enable 静默失败(#281 实测), 改为带 milestone:auto-merge 标签时轮询至 mergeable(必选检查失败即中止)→ gh pr merge --squash 自动合并
- publish.yml:#279 误把 paths-ignore 缩进到 branches 块内致 push 过滤失效(任意分支 push 触发且 0s 失败), 修正为同级(此前 #279 后无 beta 实为 workflow 解析失败,非 paths-ignore 生效)
- 新增仓库标签 milestone:auto-merge(owner 打标签授权自动合并)
- fix(ci): milestone auto-merge 读标签补 issues:read 权限并直读 issues API (#286)
GITHUB_TOKEN 默认无 issues 读权限:gh pr view --json labels 底层 issues API 被拒→ 标签检测恒空→跳过(labeled run 实测 15:41/15:42 均 skip)。 补 issues: read 权限 + 改走 gh api repos/{owner}/{repo}/issues/{n}/labels。
- fix(ci): milestone auto-merge 状态机硬化——瞬时 UNKNOWN/BLOCKED 重试而非失败 (#287)
synchronize 刚触发瞬间 gh pr view 读不到合并状态(15:50 run 7s 即失败), UNKNOWN 被当终态 exit 1。改为:UNKNOWN/BLOCKED/DRAFT/BEHIND/UNSTABLE 一律 sleep 重试 (必选检查失败已由 gh pr checks 单独拦截),仅 CONFLICTING/DIRTY 等中止;MERGED 视为成功。
- fix(ci): milestone auto-merge 补 issues:read 权限 + 直读 issues API 读标签 (#288)
develop 现网 workflow 缺失该补丁(#286 因本地分支错乱实际未带上):GITHUB_TOKEN 默认 无 issues 读权限,gh pr view --json labels 底层被拒→标签恒空→poller 恒跳过(15:41/15:42/15:55 run 均实测)。 补 issues: read + 改走 gh api repos/{owner}/{repo}/issues/{n}/labels。
- fix(ci): milestone auto-merge 自锁修复——UNSTABLE 亦可合并 (#289)
poller 自身 job 作为非必选 check 运行时 GitHub 对 PR 报 UNSTABLE(必选已绿), poller 只认 CLEAN → 永不合并直至超时(16:03 run 实测 3m+ 空转)。 改 CLEAN|UNSTABLE 均尝试合并;必选检查失败仍由 gh pr checks 先行拦截。
- ci(governance): 弃用轮询自动合并,改 GitHub 原生 auto-merge (#290)
owner 指出应通过仓库配置 + 原生 auto-merge 实现「PR 通过 CI 后自动合并」, 而非在 CI 工作流里写轮询脚本(存在自锁:poller job 自身为非必选 check 使 mergeState 停在 UNSTABLE 永不 CLEAN 等坑)。删除 auto-merge-milestone.yml;流程改为: 里程碑 PR(base=main, head=develop)上一次性 gh pr merge --auto --squash(或 UI Enable auto-merge),GitHub 原生在分支保护要求的 CI 绿后自动合并触发发布。AGENTS 同步。
- docs(im): §2.6 验证状态补注——三类会话真机验收闭环(管理群/玩家群/私聊) (#278)
2026-09-04 补验完成:管理群(上行问答+管理指令 fail-closed)、玩家群(PUBLIC 广播收到 「启动完成」通知)、管理员私聊(下行 test + 绑定后 $l 问答回复);三类绑定跨重启持久化验证通过
-
docs(changelog): 发布流程验证注记 + 治理对齐收尾(里程碑 auto-merge 演示,纯文档不发版) (#295)
-
ci(governance): 里程碑 PR(develop→main)CI 绿后自动 squash 合并并触发发布 (#280)
里程碑发布闭环:auto-merge-milestone.yml 在 base=main head=develop 的 PR 开启/更新时 enable auto-merge(squash)——分支保护的 CI 门禁(build+folia-smoke) 通过后 GitHub 自动合并 → push main → publish.yml 自动发 beta;无需人工点合并。 非 develop→main 的 main PR(热修复/纯文档)不受影响。AGENTS 发布规则同步。
- fix(governance): 里程碑自动合并改轮询合并+授权标签;修复 publish.yml paths-ignore 缩进 (#284)
- auto-merge-milestone.yml:native auto-merge 在 PR BLOCKED 时 enable 静默失败(#281 实测), 改为带 milestone:auto-merge 标签时轮询至 mergeable(必选检查失败即中止)→ gh pr merge --squash 自动合并
- publish.yml:#279 误把 paths-ignore 缩进到 branches 块内致 push 过滤失效(任意分支 push 触发且 0s 失败), 修正为同级(此前 #279 后无 beta 实为 workflow 解析失败,非 paths-ignore 生效)
- 新增仓库标签 milestone:auto-merge(owner 打标签授权自动合并)
- fix(ci): milestone auto-merge 读标签补 issues:read 权限并直读 issues API (#286)
GITHUB_TOKEN 默认无 issues 读权限:gh pr view --json labels 底层 issues API 被拒→ 标签检测恒空→跳过(labeled run 实测 15:41/15:42 均 skip)。 补 issues: read 权限 + 改走 gh api repos/{owner}/{repo}/issues/{n}/labels。
- fix(ci): milestone auto-merge 状态机硬化——瞬时 UNKNOWN/BLOCKED 重试而非失败 (#287)
synchronize 刚触发瞬间 gh pr view 读不到合并状态(15:50 run 7s 即失败), UNKNOWN 被当终态 exit 1。改为:UNKNOWN/BLOCKED/DRAFT/BEHIND/UNSTABLE 一律 sleep 重试 (必选检查失败已由 gh pr checks 单独拦截),仅 CONFLICTING/DIRTY 等中止;MERGED 视为成功。
- fix(ci): milestone auto-merge 补 issues:read 权限 + 直读 issues API 读标签 (#288)
develop 现网 workflow 缺失该补丁(#286 因本地分支错乱实际未带上):GITHUB_TOKEN 默认 无 issues 读权限,gh pr view --json labels 底层被拒→标签恒空→poller 恒跳过(15:41/15:42/15:55 run 均实测)。 补 issues: read + 改走 gh api repos/{owner}/{repo}/issues/{n}/labels。
- fix(ci): milestone auto-merge 自锁修复——UNSTABLE 亦可合并 (#289)
poller 自身 job 作为非必选 check 运行时 GitHub 对 PR 报 UNSTABLE(必选已绿), poller 只认 CLEAN → 永不合并直至超时(16:03 run 实测 3m+ 空转)。 改 CLEAN|UNSTABLE 均尝试合并;必选检查失败仍由 gh pr checks 先行拦截。
- ci(governance): 弃用轮询自动合并,改 GitHub 原生 auto-merge (#290)
owner 指出应通过仓库配置 + 原生 auto-merge 实现「PR 通过 CI 后自动合并」, 而非在 CI 工作流里写轮询脚本(存在自锁:poller job 自身为非必选 check 使 mergeState 停在 UNSTABLE 永不 CLEAN 等坑)。删除 auto-merge-milestone.yml;流程改为: 里程碑 PR(base=main, head=develop)上一次性 gh pr merge --auto --squash(或 UI Enable auto-merge),GitHub 原生在分支保护要求的 CI 绿后自动合并触发发布。AGENTS 同步。
-
docs(changelog): 发布流程验证注记(auto-merge 探针,纯文档) (#292)
-
ci(governance): develop 对齐 main——删除轮询 workflow + AGENTS 原生 auto-merge 措辞 (#294)
#290 曾因本地脏工作区把错误树合入 develop(轮询 workflow 仍在、AGENTS 旧措辞)。 main(#281 快照)内容正确(无轮询文件、AGENTS v2)。本 PR 以 main 为基准对齐 develop: 删除 auto-merge-milestone.yml + AGENTS 里程碑段落恢复 GitHub 原生 auto-merge 描述。
-
docs: 反向同步自动化探针文件(验证 main→develop 自动同步链路) (#299)
-
ci(governance): 里程碑——开发工作流定稿 + main→develop 自动同步 (#302)
-
ci(governance): 里程碑 PR(develop→main)CI 绿后自动 squash 合并并触发发布 (#280)
里程碑发布闭环:auto-merge-milestone.yml 在 base=main head=develop 的 PR 开启/更新时 enable auto-merge(squash)——分支保护的 CI 门禁(build+folia-smoke) 通过后 GitHub 自动合并 → push main → publish.yml 自动发 beta;无需人工点合并。 非 develop→main 的 main PR(热修复/纯文档)不受影响。AGENTS 发布规则同步。
- fix(governance): 里程碑自动合并改轮询合并+授权标签;修复 publish.yml paths-ignore 缩进 (#284)
- auto-merge-milestone.yml:native auto-merge 在 PR BLOCKED 时 enable 静默失败(#281 实测), 改为带 milestone:auto-merge 标签时轮询至 mergeable(必选检查失败即中止)→ gh pr merge --squash 自动合并
- publish.yml:#279 误把 paths-ignore 缩进到 branches 块内致 push 过滤失效(任意分支 push 触发且 0s 失败), 修正为同级(此前 #279 后无 beta 实为 workflow 解析失败,非 paths-ignore 生效)
- 新增仓库标签 milestone:auto-merge(owner 打标签授权自动合并)
- fix(ci): milestone auto-merge 读标签补 issues:read 权限并直读 issues API (#286)
GITHUB_TOKEN 默认无 issues 读权限:gh pr view --json labels 底层 issues API 被拒→ 标签检测恒空→跳过(labeled run 实测 15:41/15:42 均 skip)。 补 issues: read 权限 + 改走 gh api repos/{owner}/{repo}/issues/{n}/labels。
- fix(ci): milestone auto-merge 状态机硬化——瞬时 UNKNOWN/BLOCKED 重试而非失败 (#287)
synchronize 刚触发瞬间 gh pr view 读不到合并状态(15:50 run 7s 即失败), UNKNOWN 被当终态 exit 1。改为:UNKNOWN/BLOCKED/DRAFT/BEHIND/UNSTABLE 一律 sleep 重试 (必选检查失败已由 gh pr checks 单独拦截),仅 CONFLICTING/DIRTY 等中止;MERGED 视为成功。
- fix(ci): milestone auto-merge 补 issues:read 权限 + 直读 issues API 读标签 (#288)
develop 现网 workflow 缺失该补丁(#286 因本地分支错乱实际未带上):GITHUB_TOKEN 默认 无 issues 读权限,gh pr view --json labels 底层被拒→标签恒空→poller 恒跳过(15:41/15:42/15:55 run 均实测)。 补 issues: read + 改走 gh api repos/{owner}/{repo}/issues/{n}/labels。
- fix(ci): milestone auto-merge 自锁修复——UNSTABLE 亦可合并 (#289)
poller 自身 job 作为非必选 check 运行时 GitHub 对 PR 报 UNSTABLE(必选已绿), poller 只认 CLEAN → 永不合并直至超时(16:03 run 实测 3m+ 空转)。 改 CLEAN|UNSTABLE 均尝试合并;必选检查失败仍由 gh pr checks 先行拦截。
- ci(governance): 弃用轮询自动合并,改 GitHub 原生 auto-merge (#290)
owner 指出应通过仓库配置 + 原生 auto-merge 实现「PR 通过 CI 后自动合并」, 而非在 CI 工作流里写轮询脚本(存在自锁:poller job 自身为非必选 check 使 mergeState 停在 UNSTABLE 永不 CLEAN 等坑)。删除 auto-merge-milestone.yml;流程改为: 里程碑 PR(base=main, head=develop)上一次性 gh pr merge --auto --squash(或 UI Enable auto-merge),GitHub 原生在分支保护要求的 CI 绿后自动合并触发发布。AGENTS 同步。
-
docs(changelog): 发布流程验证注记(auto-merge 探针,纯文档) (#292)
-
ci(governance): develop 对齐 main——删除轮询 workflow + AGENTS 原生 auto-merge 措辞 (#294)
#290 曾因本地脏工作区把错误树合入 develop(轮询 workflow 仍在、AGENTS 旧措辞)。 main(#281 快照)内容正确(无轮询文件、AGENTS v2)。本 PR 以 main 为基准对齐 develop: 删除 auto-merge-milestone.yml + AGENTS 里程碑段落恢复 GitHub 原生 auto-merge 描述。
- docs(agents): 新增「开发工作流与发布」定稿章节,收敛分支模型重复叙述 (#296)
把 feature/bugfix/hotfix/里程碑/正式发版五场景流程+门禁+铁律整理为单一权威章节 (AGENTS 单一事实源);版本号与发布规则改为短版本语义+指针;多 AI 协作 #3 分支模型 改为指针引用,消除三处重复/漂移。含 #286/#290 脏工作区污染教训与 native auto-merge 用法。
- docs(agents): 补「main→develop 反向同步」流程到开发工作流章节 (#297)
main 有独立提交(hotfix/文档直合)时须反向 PR 同步进 develop,保持 develop ⊇ main, 避免里程碑因两侧同文件各自演进冲突(#293 教训)。含步骤、时机建议与「空 PR=已同步」信号。
- feat(ci): main→develop 反向同步自动化(事件驱动 + 原生 auto-merge) (#298)
main 有独立提交(hotfix/文档直合/tag bump)后需人工开反向 PR 同步,费时易漏。 新增 main-develop-sync.yml:push main → 比较两分支内容,main 确有领先内容 → 自动开反向 PR (head=main base=develop)+ enable 原生 auto-merge(squash)→ CI 绿自动合入 develop; 里程碑后内容一致 → 自动跳过(无空 PR);冲突 → 不开 auto-merge 留人工。 auto-merge 用 secrets.BOT_PAT(Actions GITHUB_TOKEN 无法 enable,实测)。 AGENTS 反向同步小节改为自动化说明 + 人工兜底步骤。
-
chore(sync): 历史欠账消解——main 并回 develop (#301)
-
ci(governance): 里程碑自动合并闭环 + publish 过滤修正(dry-run 端到端验证) (#281)
-
ci(governance): 里程碑 PR(develop→main)CI 绿后自动 squash 合并并触发发布 (#280)
里程碑发布闭环:auto-merge-milestone.yml 在 base=main head=develop 的 PR 开启/更新时 enable auto-merge(squash)——分支保护的 CI 门禁(build+folia-smoke) 通过后 GitHub 自动合并 → push main → publish.yml 自动发 beta;无需人工点合并。 非 develop→main 的 main PR(热修复/纯文档)不受影响。AGENTS 发布规则同步。
- fix(governance): 里程碑自动合并改轮询合并+授权标签;修复 publish.yml paths-ignore 缩进 (#284)
- auto-merge-milestone.yml:native auto-merge 在 PR BLOCKED 时 enable 静默失败(#281 实测), 改为带 milestone:auto-merge 标签时轮询至 mergeable(必选检查失败即中止)→ gh pr merge --squash 自动合并
- publish.yml:#279 误把 paths-ignore 缩进到 branches 块内致 push 过滤失效(任意分支 push 触发且 0s 失败), 修正为同级(此前 #279 后无 beta 实为 workflow 解析失败,非 paths-ignore 生效)
- 新增仓库标签 milestone:auto-merge(owner 打标签授权自动合并)
- fix(ci): milestone auto-merge 读标签补 issues:read 权限并直读 issues API (#286)
GITHUB_TOKEN 默认无 issues 读权限:gh pr view --json labels 底层 issues API 被拒→ 标签检测恒空→跳过(labeled run 实测 15:41/15:42 均 skip)。 补 issues: read 权限 + 改走 gh api repos/{owner}/{repo}/issues/{n}/labels。
- fix(ci): milestone auto-merge 状态机硬化——瞬时 UNKNOWN/BLOCKED 重试而非失败 (#287)
synchronize 刚触发瞬间 gh pr view 读不到合并状态(15:50 run 7s 即失败), UNKNOWN 被当终态 exit 1。改为:UNKNOWN/BLOCKED/DRAFT/BEHIND/UNSTABLE 一律 sleep 重试 (必选检查失败已由 gh pr checks 单独拦截),仅 CONFLICTING/DIRTY 等中止;MERGED 视为成功。
- fix(ci): milestone auto-merge 补 issues:read 权限 + 直读 issues API 读标签 (#288)
develop 现网 workflow 缺失该补丁(#286 因本地分支错乱实际未带上):GITHUB_TOKEN 默认 无 issues 读权限,gh pr view --json labels 底层被拒→标签恒空→poller 恒跳过(15:41/15:42/15:55 run 均实测)。 补 issues: read + 改走 gh api repos/{owner}/{repo}/issues/{n}/labels。
- fix(ci): milestone auto-merge 自锁修复——UNSTABLE 亦可合并 (#289)
poller 自身 job 作为非必选 check 运行时 GitHub 对 PR 报 UNSTABLE(必选已绿), poller 只认 CLEAN → 永不合并直至超时(16:03 run 实测 3m+ 空转)。 改 CLEAN|UNSTABLE 均尝试合并;必选检查失败仍由 gh pr checks 先行拦截。
- ci(governance): 弃用轮询自动合并,改 GitHub 原生 auto-merge (#290)
owner 指出应通过仓库配置 + 原生 auto-merge 实现「PR 通过 CI 后自动合并」, 而非在 CI 工作流里写轮询脚本(存在自锁:poller job 自身为非必选 check 使 mergeState 停在 UNSTABLE 永不 CLEAN 等坑)。删除 auto-merge-milestone.yml;流程改为: 里程碑 PR(base=main, head=develop)上一次性 gh pr merge --auto --squash(或 UI Enable auto-merge),GitHub 原生在分支保护要求的 CI 绿后自动合并触发发布。AGENTS 同步。
- docs(im): §2.6 验证状态补注——三类会话真机验收闭环(管理群/玩家群/私聊) (#278)
2026-09-04 补验完成:管理群(上行问答+管理指令 fail-closed)、玩家群(PUBLIC 广播收到 「启动完成」通知)、管理员私聊(下行 test + 绑定后 $l 问答回复);三类绑定跨重启持久化验证通过
-
docs(changelog): 发布流程验证注记 + 治理对齐收尾(里程碑 auto-merge 演示,纯文档不发版) (#295)
-
ci(governance): 里程碑 PR(develop→main)CI 绿后自动 squash 合并并触发发布 (#280)
里程碑发布闭环:auto-merge-milestone.yml 在 base=main head=develop 的 PR 开启/更新时 enable auto-merge(squash)——分支保护的 CI 门禁(build+folia-smoke) 通过后 GitHub 自动合并 → push main → publish.yml 自动发 beta;无需人工点合并。 非 develop→main 的 main PR(热修复/纯文档)不受影响。AGENTS 发布规则同步。
- fix(governance): 里程碑自动合并改轮询合并+授权标签;修复 publish.yml paths-ignore 缩进 (#284)
- auto-merge-milestone.yml:native auto-merge 在 PR BLOCKED 时 enable 静默失败(#281 实测), 改为带 milestone:auto-merge 标签时轮询至 mergeable(必选检查失败即中止)→ gh pr merge --squash 自动合并
- publish.yml:#279 误把 paths-ignore 缩进到 branches 块内致 push 过滤失效(任意分支 push 触发且 0s 失败), 修正为同级(此前 #279 后无 beta 实为 workflow 解析失败,非 paths-ignore 生效)
- 新增仓库标签 milestone:auto-merge(owner 打标签授权自动合并)
- fix(ci): milestone auto-merge 读标签补 issues:read 权限并直读 issues API (#286)
GITHUB_TOKEN 默认无 issues 读权限:gh pr view --json labels 底层 issues API 被拒→ 标签检测恒空→跳过(labeled run 实测 15:41/15:42 均 skip)。 补 issues: read 权限 + 改走 gh api repos/{owner}/{repo}/issues/{n}/labels。
- fix(ci): milestone auto-merge 状态机硬化——瞬时 UNKNOWN/BLOCKED 重试而非失败 (#287)
synchronize 刚触发瞬间 gh pr view 读不到合并状态(15:50 run 7s 即失败), UNKNOWN 被当终态 exit 1。改为:UNKNOWN/BLOCKED/DRAFT/BEHIND/UNSTABLE 一律 sleep 重试 (必选检查失败已由 gh pr checks 单独拦截),仅 CONFLICTING/DIRTY 等中止;MERGED 视为成功。
- fix(ci): milestone auto-merge 补 issues:read 权限 + 直读 issues API 读标签 (#288)
develop 现网 workflow 缺失该补丁(#286 因本地分支错乱实际未带上):GITHUB_TOKEN 默认 无 issues 读权限,gh pr view --json labels 底层被拒→标签恒空→poller 恒跳过(15:41/15:42/15:55 run 均实测)。 补 issues: read + 改走 gh api repos/{owner}/{repo}/issues/{n}/labels。
- fix(ci): milestone auto-merge 自锁修复——UNSTABLE 亦可合并 (#289)
poller 自身 job 作为非必选 check 运行时 GitHub 对 PR 报 UNSTABLE(必选已绿), poller 只认 CLEAN → 永不合并直至超时(16:03 run 实测 3m+ 空转)。 改 CLEAN|UNSTABLE 均尝试合并;必选检查失败仍由 gh pr checks 先行拦截。
- ci(governance): 弃用轮询自动合并,改 GitHub 原生 auto-merge (#290)
owner 指出应通过仓库配置 + 原生 auto-merge 实现「PR 通过 CI 后自动合并」, 而非在 CI 工作流里写轮询脚本(存在自锁:poller job 自身为非必选 check 使 mergeState 停在 UNSTABLE 永不 CLEAN 等坑)。删除 auto-merge-milestone.yml;流程改为: 里程碑 PR(base=main, head=develop)上一次性 gh pr merge --auto --squash(或 UI Enable auto-merge),GitHub 原生在分支保护要求的 CI 绿后自动合并触发发布。AGENTS 同步。
-
docs(changelog): 发布流程验证注记(auto-merge 探针,纯文档) (#292)
-
ci(governance): develop 对齐 main——删除轮询 workflow + AGENTS 原生 auto-merge 措辞 (#294)
#290 曾因本地脏工作区把错误树合入 develop(轮询 workflow 仍在、AGENTS 旧措辞)。 main(#281 快照)内容正确(无轮询文件、AGENTS v2)。本 PR 以 main 为基准对齐 develop: 删除 auto-merge-milestone.yml + AGENTS 里程碑段落恢复 GitHub 原生 auto-merge 描述。
-
docs: 反向同步自动化探针文件(验证 main→develop 自动同步链路) (#299)
-
docs: 反向同步自动化二次探针(全自动链路验证) (#304)
-
feat(im): F1 builtin 装配泛化——BuiltinImDriver 多平台槽(批次4 前置) (#305)
QQ 单平台硬编码(qqPlatform/currentQqConfig/platformFactory)泛化为 PlatformSlot 列表:
每平台一个生命周期槽(读 platforms.
- feat(im): F2 飞书 HTTP 层——FeishuApiClient + FeishuSender(批次4) (#306)
协议参照 EasyBot easybot-adapter-feishu lib.rs + 官方 SDK larksuite-oapi-sdk-rs 0.3.11:
- FeishuApiClient:tenant_access_token 换发(POST /auth/v3/tenant_access_token/internal)、 WS 长连接端点引导(POST {domain}/callback/ws/endpoint,AppID/AppSecret 直换,解析 ClientConfig PingInterval 等,默认 120s)、群角色查询(GET /im/v1/chats/{id} → owner_id + user_manager_id_list,ChatRoles.isOwnerOrManager 供入站 admin 判定)
- FeishuSender:POST /im/v1/messages?receive_id_type=chat_id,content 为 JSON 字符串 ({"text":...},勿双编码);飞书 API 恒 HTTP 200+业务 code——成功判定 = 2xx 且 code==0; token 失效(401/99991663/99991665/20013/20005)→ 强制重换一次并重试一次(D7 鉴权层重试) 单测 15 例(MockWebServer:请求体/鉴权头/错误分类/角色判定/content 编码/token 重换)。
- feat(im): F3a 飞书 protobuf 帧编解码器 FeishuFrame(批次4) (#307)
飞书长连接 WS 为二进制 protobuf 帧(非文本 JSON)——手写最小 proto2 wire format 编解码(零依赖,对照官方 SDK proto/ws.proto + src/ws.rs):
- Frame{SeqID=1 u64, LogID=2 u64, service=3, method=4, headers=5 repeated{key,value}, payload_encoding=6, payload_type=7, payload=8, LogIDNew=9};未知字段按 wire type 跳过(向前兼容)
- 工厂:ping(客户端心跳,service=service_id)/ pong(服务端 ping 回显 seq/log/service)/ eventAck(事件处理后回 ACK:回显 + biz_rt 头 + code JSON payload) 单测 8 例:ping/pong/event/ack 往返、字段保持、未知字段跳过、截断拒绝。F3b WS 网关复用。
- feat(im): F3b 飞书长连接 WS 网关 + ReconnectingGateway 二进制帧支持(批次4) (#308)
ReconnectingGateway 增量二进制支持(QQ 文本路径零影响,现有测试全绿):
- 心跳重构为 HeartbeatPump(文本/二进制两实现),新增 configureHeartbeatBytes(飞书 protobuf ping)
- 新增 onMessage(ByteBuffer) 钩子 → onGatewayPayload(byte[])(默认空,文本平台不覆写)+ sendBytes
- 静默看门狗对二进制入站同样生效
FeishuGatewayClient(继承骨架,复用量连/看门狗):
- resolveEndpoint 每次重连经 FeishuApiClient.fetchWsEndpoint 引导(失败返回 null → 骨架退避)
- onGatewayOpen 按引导 PingInterval(缺省 120s)发二进制 ping(service=URL service_id 参数,缺省 0)
- 帧分发:CONTROL ping → 回 pong(回显 seq/log/service);DATA event → 透传 FeishuEventSink 后回 ACK(code 200 停推 / 处理异常 500 平台重推,防重复靠 F4 事件去重) TestWsServer 增二进制帧收发(receivedBinary/sendBinary)。 单测 5 例(端点引导→心跳 ping/service 解析/pong 回显/事件透传+ACK 200/异常 ACK 500/引导失败退避)。
- feat(im): F4a 飞书入站归一 + 处理器 + 角色判定(批次4) (#309)
FeishuInboundMessage(归一模型:chatType group/user + chat_id oc_* + target feishu:...)
- FeishuInboundParser(事件 v2 信封 → im.message.receive_v1 → 文本消息;content 为 JSON 字符串 需解 {text:..};非 text/媒体丢弃 D6;chat_type p2p→user;sender open_id 回退 user_id)
- FeishuAdminResolver(角色判定接口——飞书事件无角色,需查 chats API)
- FeishuRoleResolver(实现:单聊恒非管理;cache TTL 30s/容量 10k;并发单飞 inflight; token 失效 onAuthFailure 重换一次;supplyAsync 后台执行不阻塞 WS/服务器线程)
- FeishuReplySink + FeishuInboundProcessor(R4 源过滤 user-only / R6 限频 100/s / fail-closed 会话门槛 D11 / R12 双 runSync 编排:门槛在 WS 线程,角色异步回后再进 服务器线程命令层,绝不阻塞服务器线程等网络——对齐 AGENTS Folia 红线)
- feat(im): F4b 飞书 Adapter 装配——FeishuBuiltinAdapter + BuiltinImDriver/Provider 挂载(批次4) (#310)
FeishuPlatformConfig(im.yml platforms.feishu,app_id cli_+app_secret,usable 判定)
- FeishuBuiltinAdapter(组合根:RefreshableTokenProvider(fetch=tenant token) + FeishuSender +
FeishuInboundProcessor(FeishuRoleResolver) + FeishuGatewayClient,健康 key builtin.feishu,
HealthListener 桥接连接状态;target feishu:
:<chat_id> 解析出站) - BuiltinImDriver 生产构造注册 feishu 槽(会话绑定实时读,reconcile 与 QQ 并行独立)
- BotMessageServiceProvider:builtin 后端可用判定改为「QQ 或飞书任一 usable」
- im.yml schema 增 feishu 段(enabled/app_id/app_secret) 测试:FeishuPlatformConfig 3 例、Provider 增飞书可用选 builtin 1 例。
- fix(im): 飞书 @ 消息命令不响应——剥离 @_user_N 占位符 (#311)
实测根因:飞书把 @机器人/@成员在 text 消息 content 中转为 @_user_N 占位符 (如 "@_user_1 $h"),命令层要求 $ 前缀 → @ 消息无法识别(普通 $h 正常)。 修复:FeishuInboundParser 解出 text 后剥离 @user\d+ 占位符再 trim(纯 @ 无文本 → 空丢弃),句中 @ 剥离两侧文本保留。 单测 3 例:@ 前缀命令可解析/纯 @ 丢弃/句中 @ 保留两侧。
- docs(features): 新增 §2.7 飞书 builtin 接入操作手册(真机验收版)+ Provider 启用日志多平台化 (#312)
对齐 QQ §2.6 手册结构补飞书接入全流程(真机验收 2026-09-05,三类会话闭环):
- §0 与 QQ 差异速览(企业自建应用/tenant token/长连接 WS/chat_id 会话值/角色查 API)
- 阶段 A 平台侧:企业自建应用创建、凭据、权限清单(含 im:chat 角色判定必需与 im:message.group_msg 敏感权限)、事件订阅长连接方式、拉应用进群
- 阶段 B 配置(im.yml platforms.feishu)+ 期望日志;阶段 C chat_id 发现与绑定(含单聊 需先在私聊窗口发消息触发发现);阶段 D 验收清单(含 @ 命令、管理指令、下行、通知)
- 常见问题真机踩坑表(收不到群事件→长连接方式/敏感权限;@ 占位符已修复等)+ 出站域名 R11
- §2.1/§2.6 同步:builtin 改述 QQ+飞书已落地、QQ 手册加 §2.7 跳转
顺带修正文档-代码漂移:Provider 启用日志原为 QQ 专用文案(F4b 已删),现恢复为 列出实际可用平台(可用平台:qq / qq, feishu / feishu),QQ 手册 B4 期望同步更新。
- fix(im): /config im bind|test 参数多空格解析失败——greedyString+split 归一空白 (#315)
真机发现:bind 参数间多个空格(或前导/尾随空格)报参数解析错误。 根因:mojang Brigadier word() 链不跳空白,多空格即 PARSE ERROR(单空格正常)。
修复:bind/test 子树由逐参数 word 链改为整段 greedyString 收下 + 服务端 split('\s+') 归一——多空格/前导/尾随/tab 均免疫;test 用 split limit=4 保留自由文本(text)内部空格;缺参数时输出用法提示。
新增 ImCommandRegistrarTest 9 例:用真实 CommandDispatcher 解析多空格/tab/ 前后空白/QQ OpenID 形态/缺参不调用服务/文本保真,验证整条执行链路。
- feat(im): D11 未绑定候选提示直接给可复制 bind 命令(UX) (#316)
收到未绑定会话消息时,控制台日志与 /config im status 候选区此前只给 target(如 qq:group:F73A...),管理员还需自行拼接完整 bind 命令,不直观。
改进:ImDiscoveryCandidates.bindCommands(target) 从 target 反解 platform/chatType/chatId,生成可直接整行复制执行的完整命令(命令行纯净 无注释,防复制破坏解析)——群会话给 admin_group/player_group 两条建议、 私聊给 admin_dm 一条;角色含义由展示区标题说明。QQ/飞书 logUnbound 日志 与 status 候选区均带命令;绑定后自动从候选清除提示。
测试:ImDiscoveryCandidatesTest(反解边界/命令纯净性 8 例)、QqInboundProcessorTest 新增日志文案用例、ImAdminServiceTest status 候选断言补命令。
- docs(agents): 铁律增补「未提交改动严禁跨分支操作」防吞改动规则 (#317)
#315/#316 三次吞改动教训:改完未 commit 就 checkout/reset,工作区被 reset --hard 静默清掉。根因是旧版「动分支前先 reset 基线」铁律诱导了 危险多步操作(先切基线→reset→再建分支)。
新铁律:
- 每完成修改验证绿后立即 commit,不带未提交改动跨命令;
- 开新 PR 分支严禁先切基线再 reset——一步完成 git fetch origin <基线> && git checkout -b <分支> origin/<基线>;
- reset --hard 仅用于对齐本地基线,执行前强制检查工作区干净 (git status --porcelain 非空即停);
- 需保留改动的切分支用 stash push -u/pop,禁止 reset 丢弃;
- 分支操作后核验 git diff origin/<基线> --stat 二次确认改动完整。
- docs(agents): 流程修订 A-C+E——fetch 引用新鲜度自检/同步冲突判定/收尾惯例/文档通道统一 (#318)
基于实际开发复盘(#314/#315/#316 系列教训)的 AGENTS.md 修订:
A. 动分支前置:refspec 只含 main 是 fetch 竞态/BEHIND 误判根源——新增自检 步骤(git config 应含 +refs/heads/*:...,克隆/换机必查)+ 统一改用 'git fetch origin --prune' 全量刷新(替换三处裸 'git fetch origin <分支>')。
B. 反向同步 PR 冲突人工判定清单(#314 误报 CONFLICTING 教训):先 fetch --prune → diff 空=内容一致可关 → merge-tree 实测 0 冲突=GitHub 历史拓扑误报 → 真实冲突才取 develop 优先人工合并。杜绝误伤。
C. 合并后收尾惯例:删本地分支 → fetch --prune 清理 stale tracking → 基线同步(reset 前跑守卫)→ 清理孤儿实验分支。
E. 纯文档/CI 改动通道统一:默认走 develop(直合 main 触发反向同步空转, #314 教训),仅 owner 特批紧急文档直合 main;版本规则一节同步措辞。
