# GitHub Pull Request

PR 工作必须使用受控 UniDesk GitHub 命令：

- review 前先用 `pr review-plan` 建立 changed-file 索引，只对需要审查的文件使用 `pr diff --file` 和有界 hunk 下钻；不得逐文件机械展开。
- 人工完整 PR 正文使用 `trans gh:/owner/repo/pr/<number> cat`；定点查找使用同一路由的 `rg <pattern>`。
- `pr view <number> --json body,...`、`--full` 和 `--raw` 只用于显式机器结构化披露；正文只在 `.data.pullRequest.body` 输出一次。
- `pr create` 默认 Next 只给有界 observe/review/preflight/status：
  - `pr view`；
  - `pr review-plan`；
  - `pr preflight`；
  - 显式 closeout 字段 status。
  默认不得提示 `preflight --full|--raw`、手工 CI/CD、mirror sync、创建 PipelineRun 或 Argo refresh。
- `pr preflight` 是可选只读诊断；`pr merge` 内部会自行执行 preflight。
- 主代理受控合并仍然允许：
  - 主代理按 `$unidesk-subagent` 完成 review 和 merge 授权判断后使用 guarded `pr merge`；
  - 不得把 `pr create` Next 限制误解成“PR 永远不能人工受控合并”。
- `pr merge --merge` 的分支处理规则：
  - 默认保留已合并的远端和本地 head branch 状态；
  - 以 `branch-preserved` 披露未删除原因；
  - 只有确认 head 是可删除的临时分支时才显式使用 `--delete-branch`；
  - 显式删除会清理 Git 已登记、分支精确匹配、非主 worktree 且状态干净的本地 worktree，不按目录名称限制；
  - 本地 closeout 仍会快进位于 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` 保留为兼容的显式声明；只有明确需要保留本地 worktree 状态时才使用 `--skip-local-closeout`。
- 只有 ancestry 和语义吸收都明确安全时才使用 squash。
- 功能实现和 skill 在 merge 前用一个 PR 收口；TaskTree ExecutionReport 不作为仓库文件提交。遗留 MDTODO 按 `$unidesk-tasktree` 迁移。
- merge commit 与合并时间由 GitHub PR 事实和 `gh pr merge` 默认摘要保存，不要求回写 TaskTree。成功合并后不机械执行 `pr view`；只有默认输出缺少必要字段或需要定点排障时才查询。
- 只有 merge 后才产生新的运行面证据，并且用户明确要求将该证据写回 Git 时，第二个 closeout PR 才合理。

同一 PR 的 closeout 应在 merge 前写明 source branch、验证证据和残余风险。
