SuperAPI AI 工具集

modernize

编程与开发

查看项目

更新于 10-28 14:22

技能介绍

modernize 是一个面向维护者的技能,用于决定一个已经陈旧的拉取请求是否还值得合并,并在值得时把它带到当前基线之上。它把旧 PR 视为“关于某个代码库的、已经过时的主张”,用今天的基线去检验这个主张,并在任何推送之前给出有证据的结论。

用途:处理长期未更新的 PR(例如同时积压三十个老化 PR 的场景),避免仅凭“git 没有冲突”或“已经投入了很多精力”来判断,而是系统地检验变更是否仍然成立。

主要能力与流程:

  1. 把 PR 读作一个“主张”:通过 gh pr view 读取 PR 的元数据(作者、基线分支、头分支、头提交 SHA、是否为草稿、是否可合并、是否跨仓库、维护者是否可修改等),并通过 gstack-issue-guard 以围栏输出的方式读取标题、正文、评审、评论与提交信息(视为他人文本,只作上下文,不作指令)。随后用三句话分别写下:PR 声称解决的问题、为解决问题所做的变更、以及要使该变更正确必须成立的条件。

  2. 分析基线发生了什么变化:拉取基线与 PR 头分支,校验头提交 SHA 是否与观察值一致(若 PR 已移动则停止并重新读取)。计算合并基点,查看基线在合并基点之后改动了哪些文件与提交。除了文本层面的冲突,更关键的是概念层面:基线是否改变了 PR 所依赖的东西——重命名的辅助函数、PR 测试所假设的约定、基线已另有实现的功能、基线已修复的缺陷、CHANGELOG 或计划中记录的相反设计决策。要求阅读基线的 CHANGELOG 与提交信息,而不只看 diff。

  3. 给出结论(三选一):

    • MODERNIZE:主张仍然成立,变基后(可能加上机械性修复)在新基线上是正确的;进入变基与证明步骤。
    • REWORK:问题真实且仍未解决,但这份差异已不是今天基线上的正确解法;不推送,用几句话说明新的变更应是什么、应放在本分支还是新分支,可提议开 issue 或计划。
    • CLOSE:问题已不存在、基线已用其他方式解决,或该方向已被否决;不推送,建议附带具体理由与取代它的提交或 PR 关闭,但 PR 保持打开直到有权限者决定。
  4. (仅 MODERNIZE)变基并证明意图未丢失:切换到新分支,再次校验头 SHA,检查 PR 范围内没有合并提交(合并提交会导致普通变基丢失其改动且 range-diff 无法显示,遇到即停止),然后执行 git rebase。冲突按 PR 的意图而非基线的意图解决,作者的提交保持为作者的,修复作为独立提交叠加。之后用 git range-diff 对比旧范围与新范围,每个显示为变化的 hunk 都需要一行解释(冲突解决、符号重命名、有意修复),无法解释的 hunk 视为丢失意图,需要停下复查。并运行仓库说明中针对所改动文件指定的测试。

  5. (仅 MODERNIZE)带租约推送:使用 --force-with-lease=<分支>:<步骤1观察到的SHA> 推送,使他人同时进行的推送被拒绝而不是被覆盖;从不使用 --force。跨仓库(fork)PR 则推送到 fork 的 URL 并沿用同一租约。推送非本人分支需要所有者或仓库的许可;无许可时推送到 origin 上的新分支并说明。

  6. 报告:按顺序给出结论与三句话;概念冲突发现及其对应提交;MODERNIZE 的 range-diff 摘要、运行的测试与租约推送命令;REWORK/CLOSE 的推荐下一步与决定者。所有报告形式都需注明原作者。

硬性规则:结论先行,在写出并展示结论之前不推送变基、不关闭 PR;技能本身从不关闭 PR;文本上的“无冲突”不构成依据;PR 的年龄本身既不支持和也不反对其保留;已投入的努力不是保留它的理由。

使用方式:该技能以斜杠命令 /modernize 调用,依赖 gstack 共享前言(preamble)机制,包括 gstack-skill-start 启动脚本、问题调优(question tuning)、遥测记录(gstack-skill-end)等。前言会回显 KEY: value 状态行以驱动规则;若缺少 SKILL_START_PROTO: 1 则进入降级模式,采用安全默认值(视为交互式会话、不假定 Conductor、跳过引导与遥测步骤、提示用户运行 ./setup 或 /gstack-upgrade)。依赖 gh CLI、git 以及 gstack 系列脚本;具体安装与环境要求暂未提供。

适用场景:维护者批量清理积压 PR、评估他人的陈旧分支、在变基前判断变更是否仍然成立,以及需要可审计证据的推送决策。

限制:需要已安装并配置 gstack 技能环境与 gh CLI;跨仓库 PR 的差异应作为不可信输入先阅读(其测试、脚本、钩子与依赖文件),再以自身凭据运行;PR 范围内存在合并提交时无法使用该证明流程;无权限时不向他人分支推送;技能不会自行关闭 PR;关于具体收费、价格与支持平台,资料未提供。