Merge pull request 'Fix task worktree path derivation to anchor on the main checkout' (#69) from feature/task-start-rootfix into main
ci / test (push) Failing after 1m35s

This commit was merged in pull request #69.
This commit is contained in:
2026-09-30 15:32:24 +00:00
3 changed files with 33 additions and 2 deletions
@@ -43,3 +43,4 @@
| 同步前验收 | 22d14db80c31e4bcfa24411f847018f527b16a01 | 6cd8cf1d0d8c7b82cabe4ecbdf82b5cfd83e39fe | 2026-09-30T14:19:33Z |
| 同步前验收 | 7db242792a1561b2aad7877278d42f249369c2b9 | 314de91df3755cae006f5ced777eb71d0baa92b1 | 2026-09-30T14:29:40Z |
| 同步前验收 | ffda6d33eabb23c9be5bac221529367d771c5f7b | ac8db54ecb8ddc1e077bfec772a1665d3c2d753a | 2026-09-30T15:22:40Z |
| 同步前验收 | 7fab8feaf7b454fda4b85fd01fb6ad179496dfcd | aecaa52e6bca27c072cd89b295a75c8a4ea744aa | 2026-09-30T15:28:27Z |
+27
View File
@@ -0,0 +1,27 @@
# feature/task-start-rootfix 任务卡
任务主记录:<PR 链接,task-finish 时填写>;状态:进行中;owner:weichen
## 基线与授权
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= ffda6d33eabb23c9be5bac221529367d771c5f7b
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-task-start-rootfix(worktree);分支:feature/task-start-rootfix
- 授权与交付终点:修复 cmd_start 的 worktree 落点推算并验证;终点为 PR 合入 main 后回收 worktree。
## 目标与非目标
- 目标:`task.sh start` 的 worktree 落点从 `$PWD` 推算改为经 `git rev-parse --git-common-dir` 定位主检出,使从仓库子目录(或任务 worktree 内)运行时也落在主检出平级 `../Agent-System-Dev-wt-<slug>`;受影响入口仅 `cmd_start`。
- 非目标:不改 worktree 布局本身(维持平级散放,布局决策已定);不改 sync/close/finish;不引入对 `.gitignore` 的变更。
## 同步记录
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|---|---|---|---|
| 启动 | ffda6d33eabb23c9be5bac221529367d771c5f7b | ffda6d33eabb23c9be5bac221529367d771c5f7b | 2026-09-30T15:22:51Z |
| 同步前验收 | 7fab8feaf7 | aecaa52e6b | 2026-09-30T15:28:27Z |
## 结果与验证
- 结果:`cmd_start` 增设 `mainroot=$(dirname "$(cd "$(git rev-parse --git-common-dir)" && pwd)")`(与 `cmd_finish` 定位主检出同款惯用法),落点改为 `$(dirname "$mainroot")/$(basename "$mainroot")-wt-${slug}`;主检出根运行时路径与旧实现一致。
- 验证:`bash -n` 通过(shellcheck 未安装,跳过);冒烟 A——主检出 `scripts/` 子目录运行修复版 start,worktree 落在 `/home/weichen/projects/Agent-System-Dev-wt-feature-rootfix-smoke`(修复前形态 `scripts-wt-…` 已断言不存在);冒烟 B——主检出根目录运行,落点与现有惯例一致;smoke worktree/分支已全部清理,`git worktree list` 无残留。
- 影响与剩余项:无剩余项;pre-commit 的 Mimosa 钩子报 advisory(scanner_no_output,兼容策略放行),属环境侧扫描器无输出,非本次改动引入。
+5 -2
View File
@@ -63,10 +63,13 @@ cmd_start() {
[ "$(git status --porcelain | { grep -v '^.. \.zcode/' || true; } | wc -l)" -eq 0 ] || die "dirty tree — resolve first (precheck verdict BUSY)"
[ "$(git submodule status --recursive 2>/dev/null | { grep -cE '^\+|^U' || true; })" -eq 0 ] || die "submodule drift/conflict — resolve first (precheck verdict BUSY)"
git merge-base --is-ancestor "origin/${TARGET_BRANCH}" HEAD || die "local ${TARGET_BRANCH} behind origin — pull --ff-only first"
local rmain slug wt
local rmain slug wt mainroot
rmain=$(git rev-parse "origin/${TARGET_BRANCH}")
slug=$(echo "$name" | tr '/' '-')
wt="$(dirname "$(pwd)")/$(basename "$(pwd)")-wt-${slug}"
# 落点须为主检出的平级目录:$PWD 推算在子目录(或任务 worktree 内)运行时会算错,
# 改用 git-common-dir 的父目录定位主检出(与 cmd_finish 同款惯用法)。
mainroot=$(dirname "$(cd "$(git rev-parse --git-common-dir)" && pwd)")
wt="$(dirname "$mainroot")/$(basename "$mainroot")-wt-${slug}"
[ -e "$wt" ] && die "worktree path exists: $wt"
git worktree add -q "$wt" -b "$name" "$rmain"
(cd "$wt" && git submodule update --init --recursive >/dev/null 2>&1 || echo "[warn] submodule init incomplete in worktree")