docs: 强制固定 worktree 语义合并
Pipelines as Code CI / hwlab-web-probe-sentinel-nc01- Success
Pipelines as Code CI / platform-infra-gitea-nc01- Success
Pipelines as Code CI / unidesk-host- Success

This commit is contained in:
Codex
2026-07-16 15:33:01 +02:00
parent 66501533dd
commit 63d16f133e
2 changed files with 39 additions and 10 deletions
+7 -4
View File
@@ -8,11 +8,14 @@
## P0: 主 worktree 同步提交第一原则
- P0: 固定主/目标 worktree 落后 remote 时,必须按顺序处理:
- P0: 固定主/目标 worktree remote 不一致时,必须按顺序处理:
-`git stash push -u` 保存全部脏改,包括 untracked;
-`git pull --ff-only` 快进到最新 remote
-`git stash apply` 恢复并按语义合并
- 先直接提交主工作区恢复出的并行改动,再继续后续任务
-`git fetch`新 remote
- 仅落后时`git pull --ff-only` 快进
- 分叉时必须把 remote 分支语义合并到固定 worktree,逐项解决冲突并保留双方有效语义
-`git stash apply` 恢复并继续按语义解决冲突或重复内容;
- 先提交并推送语义合并及主工作区恢复出的并行改动,再继续后续任务;
- 禁止绕过未对齐的固定 worktree,改用干净 anchor 或新任务 worktree 继续;
- 禁止用 reset、drop 或覆盖式 checkout 丢弃并行改动。
## P0: 损害预防与文档治理
+32 -6
View File
@@ -96,15 +96,41 @@ Tracked source, YAML and scripts belong to the selected checkout; operator crede
When diagnosing a missing worktree file, first classify ownership. A tracked file is repaired through remote/base synchronization; an ephemeral test fixture uses an explicit temporary directory; durable local credentials or state move to the canonical owner-level root and are referenced absolutely. Never repair the latter by copying secrets/state into every worktree, silently falling back to the current directory, embedding values in Git, or maintaining divergent per-worktree data. A migration must preserve existing contents, keep the canonical directories owner-only, verify the resolved symlink target and data size, and leave the main-repo compatibility symlink in place.
开始使用任何固定主/目标 worktree 时,如果发现它落后 remote/base,必须先完成 source-truth 同步再继续分析或创建任务 worktree:若工作区有脏改,先用 `git stash push -u` 保存当前脏改(包括 untracked),再执行 `git pull --ff-only <remote> <branch>` 快进,随后 `git stash apply` 并按快进后的语义合并冲突或重复内容;若工作区 clean,则直接 `git pull --ff-only`。这个 stash 是保护并行修改以便固定主 repo 回到最新 source truth,不是清理、丢弃或隐式接管并行任务;apply 后只提交当前任务明确相关的文件,其他并行修改继续保留原状。不得在落后的固定 worktree 上继续源码分析、创建任务分支、修改代码或给 issue 写基于旧源码的结论。
固定 worktree 对齐 remote 是硬前置,不是建议项。`git status` clean、运行面 healthy、CI/CD snapshot 对齐或历史 PipelineRun 通过,都不能替代固定工作区自身的 remote/base 对齐检查;只要 HEAD 与声明 remote/base 不一致、`remoteUpToDate=false`、ahead/behind/diverged 或受控 source-workspace 状态返回 not-ready,就必须先修复固定工作区或改用从最新 remote/base 创建的干净 anchor。禁止从未对齐的固定 worktree 创建任务 worktree、开测试 PR、运行 repo 内验证或写 closeout 结论。
所有源码、配置、部署脚本和运行面修复都必须在从最新 remote/base 创建的独立 `.worktree/<task>` 中完成;固定主 worktree 不直接承载代码修改。`.worktreecopy` 只能声明可复制的本地文件路径模式,支持空行、注释、glob 和 `!pattern` 排除/重包含语义,不得写入 secret 值;复制结果默认不覆盖目标文件,只有显式 `--overwrite-local` 才允许覆盖。PR 合并或等价集成进入 remote base 后,应及时回到对应固定主 worktree 执行 `git fetch``git pull --ff-only`,让下一轮 source-truth 预检、web-probe 复核、issue closeout 和新任务 worktree 都从已合并的最新源码开始。若固定主 worktree 因并行脏改不能安全快进,保留脏改并改用干净的最新 remote/base worktree 继续,不能 reset、checkout 或删除他人修改。
- 固定主/目标 worktree 的同步前置:
- 只要 HEAD 与 remote/base 不一致,就必须先同步再继续分析或创建任务 worktree;
- 先用 `git stash push -u` 保存全部脏改,包括 untracked;
- 再用 `git fetch` 刷新 remote
- 仅落后时执行 `git pull --ff-only <remote> <branch>`
- 分叉时把 remote 分支 merge 到固定 worktree
- 逐项解决冲突并保留双方仍有效的语义;
- 执行 `git stash apply` 后继续处理冲突或重复内容;
- 把语义合并及恢复出的并行改动提交、推送到 remote/base。
- stash 与损害预防:
- stash 只用于保护并行修改;
- 禁止把 stash 用作清理、丢弃或隐式接管并行任务;
- 禁止使用 reset、drop 或覆盖式 checkout
- 禁止改用干净 anchor 或新任务 worktree 绕过固定 worktree 的语义合并。
- 固定 worktree 对齐判定:
- 对齐 remote 是硬前置,不是建议项;
- `git status` clean、运行面 healthy、CI/CD snapshot 对齐或历史 PipelineRun 通过都不能替代该检查;
- `remoteUpToDate=false`、ahead/behind/diverged 或 source-workspace not-ready 都必须先完成语义合并、提交和推送;
- 未对齐时禁止创建或继续任务 worktree、开测试 PR、运行 repo 内验证或写 closeout 结论。
- 任务 worktree 边界:
- 源码、配置、部署脚本和运行面修复必须在从最新 remote/base 创建的独立 `.worktree/<task>` 中完成;
- 固定主 worktree 不直接承载代码修改;
- `.worktreecopy` 只声明可复制的本地文件路径模式,不得写入 secret 值;
- 复制默认不覆盖目标文件,只有显式 `--overwrite-local` 才允许覆盖;
- PR 合并或等价集成进入 remote base 后,立即回到固定主 worktree 执行 fast-forward 或语义合并;
- 固定主 worktree 有并行脏改或分叉时仍必须先 stash、语义合并、恢复、提交并推送。
任务 worktree 清理前必须做语义合并核查。最低要求是:worktree clean;相关提交已经是 `origin/master` 祖先,或 `git log --left-right --cherry-pick <worktree-head>...origin/master` 没有 left-only 未吸收 patch;必要时再核对关键文件 diff、PR merge commit、issue closeout 和运行面验证是否对应最新 `master`。只有确认当前任务语义已经进入 `master` 或被更新实现等价替代后,才允许 `git worktree remove <path>`;不得只因为分支落后、PR 已关闭、文件看起来相似或本地空间紧张就删除。若发现未提交文件、未推送提交、left-only patch 或语义不确定,先把应保留内容提交/合并/推送到 `master`,或记录阻塞并保留 worktree。
文档治理是固定主 repo 保护规则的轻量例外。单纯文档、`AGENTS.md``docs/reference/*.md`、skill 规则、runbook、过程文档蒸馏和其他长期参考收敛不需要创建新 `.worktree` 或短生命周期 PR;应在当前主 worktree 按上面的 stash-if-dirty + `git pull --ff-only` 对齐最新 remote 后再直接修改、做最小语法/diff 检查、提交并 push。该例外只覆盖文档/规则本身,不得夹带源码、配置、部署、运行面或 issue lifecycle 写操作;若主 worktree 已有并行文档修改,只提交本次明确相关文件,不能 reset、drop stash 或顺手合并他人修改。
- 文档治理轻量例外:
- 单纯文档、`AGENTS.md``docs/reference/*.md`、skill、runbook 和过程文档蒸馏不要求新建任务 worktree;
- 仍须先完成 stash、fast-forward 或语义合并、恢复、提交和推送;
- 该例外不得夹带源码、配置、部署、运行面或 issue lifecycle 写操作;
- 主 worktree 有并行文档修改时,只提交本次明确相关文件;
- 禁止 reset、drop stash 或顺手删除他人修改。
允许不创建新 `.worktree` 的场景包括 P1 只读探测、运行面临时热补、上述文档/skill/长期参考轻量修改,或目标项目长期参考明确声明的直接修改例外。例外必须能解释为什么不会污染 fixed repo source truth,并且不得触碰无关并行修改;一旦需要写源码、配置、issue closeout、部署脚本、验收产物或其他高风险交付记录,立即切回独立 `.worktree`