diff --git a/.gitignore b/.gitignore index ac9f4fc6..9904bfc5 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,6 @@ runtime/ # 运行时环境文件(含密钥,不入库;svc-envfile 任务约定) .env.dev + +# ZCode CLI 会话生成的工具忽略文件(内容镜像 .gitignore,工具自动维护,不入库) +.zcodeignore diff --git a/.task/feature-duplication-lesson-records.md b/.task/feature-duplication-lesson-records.md index 410a912d..ff6e3d59 100644 --- a/.task/feature-duplication-lesson-records.md +++ b/.task/feature-duplication-lesson-records.md @@ -44,3 +44,5 @@ | 同步前验收 | 7db242792a1561b2aad7877278d42f249369c2b9 | 314de91df3755cae006f5ced777eb71d0baa92b1 | 2026-09-30T14:29:40Z | | 同步前验收 | ffda6d33eabb23c9be5bac221529367d771c5f7b | ac8db54ecb8ddc1e077bfec772a1665d3c2d753a | 2026-09-30T15:22:40Z | | 同步前验收 | 7fab8feaf7b454fda4b85fd01fb6ad179496dfcd | aecaa52e6bca27c072cd89b295a75c8a4ea744aa | 2026-09-30T15:28:27Z | +| 同步前验收 | 425c6e63f22fff0d200cfcbebd764fe0ed46c637 | b46d8905297dcb0d66ef4855f6ec026391cb4679 | 2026-09-30T16:01:38Z | +| 同步前验收 | 03dc518eec70eccdc88a1c4f0e525e29bbd2a556 | a552939497cf7f5d8e0b2a9b19a2e9d110000bbd | 2026-09-30T16:03:44Z | diff --git a/.task/fix-task-finish-close-followups.md b/.task/fix-task-finish-close-followups.md new file mode 100644 index 00000000..a9367979 --- /dev/null +++ b/.task/fix-task-finish-close-followups.md @@ -0,0 +1,26 @@ +# fix/task-finish-close-followups 任务卡 + +任务主记录:;状态:进行中;owner:weichen + +## 基线与授权 + +- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= bb1bf06aec6d3f848ce6a1ca291c6ef6dc4da4ab +- 工作区:/home/weichen/projects/Agent-System-Dev-wt-fix-task-finish-close-followups(worktree);分支:fix/task-finish-close-followups +- 授权与交付终点:修复 task-finish 对共享子模块配置的污染并完成配套文档/忽略项收敛;终点为 PR 合入 main 后回收 worktree。 + +## 目标与非目标 + +- 目标:①`cmd_finish` 去掉 `submodule deinit --all`——submodule url 配置在共享 `.git/config`,deinit 会把其他检出/worktree 的子模块一并标成未初始化(工作区清理本就走 rm -rf + prune,deinit 无实际作用);②AGENTS.md 任务卡闭合描述与实测对齐(ff-only pull 同样触发 post-merge 钩子;钩子内 close 扫不到远端新合卡,需手动兜底);③`.gitignore` 增加 `.zcodeignore`(ZCode CLI 会话产物,不入库)。 +- 非目标:close 默认 web_base 改 git-home——由并行 PR #73 完成,本卡撤回该项;不改 start 落点(PR #69 已修);不改 precheck 判脏口径。 + +## 同步记录 + +| 节点 | sync_base_sha | tested_head_sha | checked_at | +|---|---|---|---| +| 启动 | bb1bf06aec6d3f848ce6a1ca291c6ef6dc4da4ab | bb1bf06aec6d3f848ce6a1ca291c6ef6dc4da4ab | 2026-09-30T15:46:04Z | + +## 结果与验证 + +- 结果:`cmd_finish` 删除 deinit 行并留注释说明共享 config 污染机理;AGENTS.md 闭合路径句改写;`.gitignore` 追加 `.zcodeignore`。bug 期间被并行会话现场复现:其 task-finish 后主检出 `submodule.*.url` 配置归零(uninit=12),本卡验证前已用 make sync 恢复。 +- 验证:`bash -n` 通过;abandon 冒烟——修复版脚本 start→FORCE_ABANDON=1 finish 一条假任务,断言共享 `submodule.*.url` 计数 12→12(修复前会归 0)、主检出 `submodule status --recursive` uninit=0、smoke worktree/分支全部回收;顺带证实 inline close 能兜底闭合并行会话漏闭合的卡(feature-gitea-access-facts,经 feature/card-close-20260930-155017Z 分支)。 +- 影响与剩余项:无剩余项;HTTPS API 与 SSH 在收尾阶段出现家服隧道整体瞬断,推送与 PR 推进待通道恢复后完成。 diff --git a/AGENTS.md b/AGENTS.md index 839c95a6..bc0cb36b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -15,9 +15,10 @@ 当前目录当 worktree 回收——在主检出运行会误删主检出,已加防护);放弃未合入 工作用 `make task-finish ABANDON="--abandon <原因>"` 并记录原因。 - **任务卡闭合(防欠账)**:分支合入 main 后,其任务卡须回填"已完成"+主记录 PR 链接并 - 归档至 `.task/archive/`。自动路径:`make task-finish` 收尾触发、主检出 merge 型 pull 触发 - post-merge 钩子(ff-only 不触发,由前两者兜底);手动为 `make task-close`(主检出运行→建 - `feature/card-close-*` 分支+PR,任务分支内加 `FOLD=--fold` 随当前 PR 合入)。 + 归档至 `.task/archive/`。自动路径:`make task-finish` 收尾触发、主检出 pull 触发 post-merge + 钩子(实测 ff-only pull 也触发);钩子内 close 只扫主检出本地 `.task/`,远端刚合入的卡片 + 要等 pull 完成才能被看到,扫不到时由手动 `make task-close` 兜底。手动闭合在主检出运行→建 + `feature/card-close-*` 分支+PR,任务分支内加 `FOLD=--fold` 随当前 PR 合入。 precheck 的 `[cards]` 行报告欠账,验收前应清零;闭合 PR 由所有者合入。 ## 提交与 PR diff --git a/scripts/task.sh b/scripts/task.sh index 2240b3a1..0c7c85f6 100755 --- a/scripts/task.sh +++ b/scripts/task.sh @@ -268,9 +268,9 @@ cmd_finish() { git merge-base --is-ancestor "$head" "origin/${TARGET_BRANCH}" || die "分支未合入 origin/${TARGET_BRANCH}——先走 PR 合入;放弃则用 --abandon " echo "[verified] ${branch} 已包含于 origin/${TARGET_BRANCH};成果已落盘" fi - git submodule deinit --all -f >/dev/null 2>&1 || true - # git 对含 gitlink 的 worktree 无条件拒绝 remove(查索引,与 deinit 无关): - # 已验证合入且子模块已 deinit 后,直接清目录并 prune。 + # git 对含 gitlink 的 worktree 无条件拒绝 remove(查索引),回收走 rm -rf + prune。 + # 此处不得跑 submodule deinit:submodule..url 写在共享的 .git/config 里,deinit + # 会把其他检出/worktree 的子模块一并标成未初始化(2026-09-30 实测 finish 后主检出 uninit=12)。 git -C "$mainrepo" worktree remove "$PWD" 2>/dev/null || { rm -rf "$PWD"; git -C "$mainrepo" worktree prune; } git -C "$mainrepo" branch -d "$branch" 2>/dev/null || git -C "$mainrepo" branch -D "$branch" git -C "$mainrepo" worktree prune