docs: 错误 PR 回滚并默认新 session 派单

This commit is contained in:
Codex
2026-07-15 02:39:10 +02:00
parent 67480e4f1c
commit 8ff03058ce
4 changed files with 32 additions and 6 deletions
+4
View File
@@ -29,6 +29,10 @@ GitHub issue/PR 正式读写必须走 `bun scripts/cli.ts gh ...` 或 `trans gh:
- 不要把 Markdown 塞进 shell 参数。
- `gh pr create` 默认 Next 只给有界 `pr view``pr review-plan``pr preflight` 和 closeout status 下钻;不得默认提示 `preflight --full|--raw`、手工 CI/CD、mirror sync、PipelineRun 或 Argo refresh。
- PR review 先用 `review-plan` 建立文件索引,只对需要审查的文件执行 `pr diff --file`,不得机械下钻每个文件。
- 发现整个 PR 的授权目标、架构方向、data flow 或 source of truth 错误时,禁止在错误 PR 上继续补丁:
- 未合并 PR 通过受控入口关闭,停止旧 writer,并从最新目标分支新建 PR;
- 已合并 PR 先用独立 PR 精确 revert 原 PR,回滚合并后再开始正确实现;
- 回滚 PR 与正确实现 PR 必须分离,完整流程见 [references/pull-requests.md](references/pull-requests.md)。
- PR merge 只走 guarded `gh pr merge`;它内建 readiness/preflight,普通已审 PR 不先机械执行独立 `pr preflight`。主代理按 `$unidesk-subagent` 完成 review 和 merge 授权判断后执行;只有确认 ancestry 可丢弃时才显式 `--squash`
- 功能、skill、MDTODO 报告和完成状态在 merge 前已齐备时,必须进入同一个 PR。禁止仅为补写 merge SHA、`mergedAt`、branch deletion 或重复 closeout 再开文档 PR;这些事实由 GitHub PR 和 `gh pr merge` 默认摘要保存。
- 成功 merge 后默认摘要已披露 `mergeCommit``mergedAt`,不再机械执行 `pr view`。只有输出缺字段、merge 后出现新运行证据,或需要定点排障时才继续查询;只有用户明确要求把 merge 后新证据写回 Git 时,才创建第二个 closeout PR。
@@ -16,6 +16,11 @@ PR 工作必须使用受控 UniDesk GitHub 命令:
- 主代理按 `$unidesk-subagent` 完成 review 和 merge 授权判断后使用 guarded `pr merge`
- 不得把 `pr create` Next 限制误解成“PR 永远不能人工受控合并”。
- `pr merge --merge` 默认删除已合并的同 repo head branch,清理匹配且干净的本地 `.worktree`,并快进位于 PR base branch 的本地主工作区。
- 整个 PR 的授权目标、架构方向、data flow 或 source of truth 被判定错误时:
- 未合并:通过受控 GitHub 入口关闭 PR,停止旧 writer,保留 PR/commit 作为证据;从最新目标分支创建新分支、worktree 和 PR,禁止在错误 head 上继续提交纠偏补丁;
- 已合并:从包含该 merge 的最新目标分支创建独立 revert PR,只精确反向原 PR;先 guarded merge 回滚,再从恢复后的目标分支创建正确实现 PR;
- 禁止把回滚和新实现混入同一 PR,也禁止用 reset、force push、覆盖式 checkout 或人工 runtime patch 冒充回滚;
- 局部实现缺陷仍可在原未合并 PR 修正,方向性判定必须由用户最新目标、适用 SPEC 和 current/desired data flow 支撑。
- `pr merge --merge --sync-node JD01` 在支持时额外执行映射节点 source-workspace sync;当前用于 HWLAB `v0.3`
- 只有明确需要保留合并后状态时才使用 `--keep-branch``--skip-local-closeout`
- 只有 ancestry 和语义吸收都明确安全时才使用 squash。
+12 -4
View File
@@ -21,12 +21,20 @@ description: UniDesk 主代理调度子代理的必读技能。用户提到子
- 涉及事件、投影、实时、回放或持久化的派单,主代理必须在子 issue 中先写出 current data flow 和 desired data flow;两者存在架构变化时,先更新长期 SPEC 并取得用户明确授权,再允许实施。
- 新增测试只能验证已经授权的合同,不能用测试通过把未经授权的架构变化、迁移依赖或新 authority 合法化。
- 主代理审核顺序固定为:先比较用户最新目标、适用 SPEC 和 current/desired data flow,再审核代码内部一致性、测试和实现质量;后者通过不能覆盖前者偏离。
- 发现整个 PR 的授权目标、架构方向、data flow 或 source of truth 错误时,禁止在该 PR 上继续补丁:
- 未合并 PR 直接关闭并停止其 writer,从最新目标分支创建新分支、新 worktree 和新 PR
- 已合并 PR 先创建只做精确回滚的独立 revert PR,合并回滚后再从恢复后的目标分支开始正确实现;
- 局部实现缺陷不冒充整 PR 方向错误;判定依据必须是用户最新目标、适用 SPEC 和 current/desired data flow。
- 执行型和调研型委派必须使用 AgentRun `Artificer`
- 只有用户明确指定原生子代理,或 Artificer 经有界 readiness、最短真实派单或 typed failure 证明确实不可用时,才允许改用原生子代理;
- Artificer 的 `create task``apply``dispatch` 必须以下文“子 issue + MDTODO”登记为 fail-closed 前置;禁止先创建 task 或派单再补登记;
- 原生子代理和 Artificer 每次派单前都必须已有对应 MDTODO ITEM 或 SUBITEM;派单 prompt 与最终报告必须写明同一个 MDTODO ID;
- 新执行任务和 review 返工默认创建新的 task/session
- 除非用户在当前请求中明确要求继续、恢复或复用指定 session,禁止用 `agentrun send`、return 或 turn 把任务派给已有 session
- 旧 session 只作为只读上下文和证据来源,新 session 通过 issue、PR、MDTODO 和 commit 接续;
- 新 writer 开始前必须确认旧 writer 已终态,禁止两个 session 并发写同一 worktree。
- Artificer 协调状态只复用 MDTODO 与 AgentRun 已有的 task/run/command/session 资源:
- 普通派单、续、重试和 closeout 不得另建锁、租约、证明链、第二状态库或配套围栏;
- 普通派单、新 session 接续、重试和 closeout 不得另建锁、租约、证明链、第二状态库或配套围栏;
- 审查证据只保留 issue/PR/commit、验证摘要和必要下钻链接,不复制无界日志或构造额外实证体系;
- 只有直接保护真实业务资源、不可逆操作或明确损害风险时才允许最小 guard,且只覆盖实际风险窗口并在风险解除后立即释放;
- Artificer 的 `create task` 外层入口:
@@ -42,10 +50,10 @@ description: UniDesk 主代理调度子代理的必读技能。用户提到子
- 只允许由 UniDesk owning YAML 将 `/root/.codex/auth.json.pika``/root/.codex/config.toml.pika` 投影为 `gpt-pika` SecretRef
- 任务 prompt、task payload、日志和 issue 不携带 credential value
- 模型或 reasoning override 不能切换 provider/SecretRef
- 只有 Artificer 已通过有界 readiness最短真实派单或同 session 续跑证据,才判定为可用;单个业务任务失败必须先按 typed reason 判断,不能直接宣告 Artificer 不可用;
- 只有 Artificer 已通过有界 readiness最短真实 session 派单证据,才判定为可用;单个业务任务失败必须先按 typed reason 判断,不能直接宣告 Artificer 不可用;
- Artificer 禁止递归修复自身:
- 影响派单、AipodSpec、provider/model、credential 投影、session/workspace、Runner、AgentRun runtime 或其 CI/CD 可用性的故障,调查与实现必须交给原生子代理;
- Artificer 只能在修复自动上线后作为被测对象,执行最短 canary、原 session 续跑或业务验收;
- Artificer 只能在修复自动上线后作为被测对象,执行最短 session canary 或业务验收;
- 用户只说“子代理”“并行代理”或“派代理”时,不构成原生子代理例外,仍必须使用 Artificer;
- 主代理不得因为方便、速度、空闲并发槽、已有原生 worktree、历史习惯或预计任务较短而自行降级到原生子代理;管理性、决策性工作由主代理直接完成,不构成原生子代理例外;
- Artificer 已被证明确实不可用时,先创建独立 issue 和泛化问题域 MDTODO,再派一个原生子代理修复 Artificer;只有与故障修复解耦且用户明确要求继续的紧急业务任务,才允许临时使用原生子代理,并必须在 Artificer 恢复后交接;不得把临时 fallback 固化为长期调度入口;
@@ -70,7 +78,7 @@ description: UniDesk 主代理调度子代理的必读技能。用户提到子
- 子代理产出的审核默认由主代理直接完成:
- 用户允许子代理实施、要求并行或启用多轮审查,不等于允许调度审核子代理;
- 只有用户明确要求子代理审核、独立审核代理或多代理交叉审核时,才允许派发审核型子代理;
- 主代理发现问题后,直接形成纠偏要求并由原执行 session 续跑或在原任务边界内修复,不新增审核代理
- 主代理发现问题后,直接形成纠偏要求;实现返工默认派给新的 task/session,不新增审核代理,也不把返工 send 给原执行 session
- 管理性、决策性文档由主代理直接完成,不把决策权或治理写入外包给子代理:
- 主代理负责 `AGENTS.md`、skill 核心规则、长期 reference 规范、架构决策、主 issue anchor/closeout,以及 MDTODO FILE 的领域划分、ITEM 结构和状态治理;
- 子代理可以在已明确的 issue、MDTODO ITEM 和验收边界内独立调研,并编写对应任务报告、验证记录、实现说明和证据附件;
@@ -60,7 +60,11 @@
- 再使用 `$mdtodo-edit` 在泛化问题域 MDTODO 中创建或更新 ITEM/SUBITEM、登记子 issue 链接并标记进行中;
- 只有上述写入成功后,才允许 AgentRun `create task``apply``dispatch`
- 缺少 MDTODO FILE、任务项、进行中状态或子 issue 链接时不得派单,派单后补写不算合规。
- 派单后的协调状态直接复用 MDTODO 与 AgentRun task/run/command/session;普通续、重试和 closeout 不新增锁、租约、第二状态库、证明链或围栏。证据保持为有界摘要与稳定链接;只有直接保护业务资源、不可逆操作或明确损害风险的最小 guard 才属于例外。
- 派单后的协调状态直接复用 MDTODO 与 AgentRun task/run/command/session;普通新 session 接续、重试和 closeout 不新增锁、租约、第二状态库、证明链或围栏。证据保持为有界摘要与稳定链接;只有直接保护业务资源、不可逆操作或明确损害风险的最小 guard 才属于例外。
- 执行派单和 review 返工默认创建新 task/session
- 用户未在当前请求中明确要求继续、恢复或复用指定 session 时,不得用 `agentrun send`、return 或 turn 触发已有 session
- 新 session 从子 issue、MDTODO、PR、commit 和旧 session 的只读结果接续,不复制无界上下文;
- 复用原 worktree 前必须确认旧 writer 已终态,避免两个 session 并发写入。
- 主 issue 评论区由主代理独占维护:只写主线 anchor、阶段汇总、调度决策、已采纳结论、下一批边界和最终 closeout。子代理不得直接在主 issue 评论区堆过程、日志、单步证据或 post-task 反馈;需要让主线可见时,由主代理在主 issue 引用子 issue/PR/comment 链接。
- 主代理派发执行型子代理前必须先创建子 issue,不能把主要任务正文直接塞进 subagent prompt。子 issue 标题应能反映父 issue、运行面/模块和子任务;正文必须引用父 issue、目标分支/worktree、允许范围、禁止范围、验收入口、模型/思考等级选择理由和当前接续链接。子代理的调查、单步证据、阻塞、post-task 和后续接力评论都写在自己的子 issue 或关联 PR 中。
- 子代理 prompt 只传子 issue 链接、模型要求和“不写父 issue 评论区”等极短边界;不要在 prompt 里复述长任务、历史结论、日志或完整证据。主代理通过观察子 issue 评论区跟踪进度。
@@ -80,6 +84,11 @@
## PR 工作流
- 子代理 PR 应小而可审:一个根因、一个模块边界、一个目标 issue;跨模块架构 PR 必须在 body 中写明为什么不是局部修补。
- 主代理一旦确认整个 PR 的授权目标、架构方向、data flow 或 source of truth 错误,不得要求原 PR 继续修补:
- PR 未合并时,先关闭 PR 并停止旧 writer;保留有界证据后,从最新目标分支创建新分支、新 worktree、新 task/session 和新 PR
- PR 已合并时,先创建只包含该 PR 精确反向变更的 revert PR;回滚合并并恢复目标分支后,再创建正确实现 PR;
- 不在同一个 PR 中混合“回滚错误架构”和“实现新架构”,避免无法独立验证恢复基线;
- 只有局部实现缺陷时才在原 PR 内修正,不能把方向性错误降级成普通 review comment。
- 主代理本人 review
- 先看架构约束和倒退风险,再看实现细节;
- 重点检查是否重新引入旧 authority、并行请求源、裸 API 绕过、隐藏默认、阈值硬编码或降低探针能力;
@@ -109,7 +118,7 @@ Prompt 至少包含以下字段,按任务裁剪:
4. 计算当前可安全并发窗口并同时派发全部已就绪的低耦合子任务;共享契约先派一个基线任务。
- Artificer 的 `create task``apply``dispatch` 均只能发生在 MDTODO 登记之后。
5. 轮询子代理结果:子 issue comment、PR、验证摘要、阻塞;任一任务终态或依赖变化后立即重新计算窗口并补派,不能退化为长期单任务等待。
6. 对每个 PR 做架构 review、bounded diff 和必要本地验证;只有定点排障时单独执行 preflight,正常收口直接使用内建 readiness 的 guarded merge。
6. 对每个 PR 做架构 review、bounded diff 和必要本地验证;方向错误时按“关闭或精确 revert 后重建”处理,只有局部实现缺陷才进入新 session 返工;只有定点排障时单独执行 preflight,正常收口直接使用内建 readiness 的 guarded merge。
7. 按依赖顺序合并;合并后同步目标 worktree。
8. 触发受控 CI/CD 或让明确授权的子代理上线;主代理核对 closeout。
9. 用原入口复测;把剩余问题拆到新 issue 或追加既有 issue。