From 7dbb5f97a647cfbf6f70843dee8a8aa808520c64 Mon Sep 17 00:00:00 2001 From: weichen Date: Wed, 30 Sep 2026 15:46:04 +0000 Subject: [PATCH 1/4] Record the task card for fix-task-finish-close-followups --- .task/fix-task-finish-close-followups.md | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .task/fix-task-finish-close-followups.md diff --git a/.task/fix-task-finish-close-followups.md b/.task/fix-task-finish-close-followups.md new file mode 100644 index 00000000..63ac4a11 --- /dev/null +++ b/.task/fix-task-finish-close-followups.md @@ -0,0 +1,25 @@ +# 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 +- 授权与交付终点:<本次允许的动作与终点;未授权事项写明> + +## 目标与非目标 + +<预期结果、受影响入口/模块/契约;明确不做什么。> + +## 同步记录 + +| 节点 | sync_base_sha | tested_head_sha | checked_at | +|---|---|---|---| +| 启动 | bb1bf06aec6d3f848ce6a1ca291c6ef6dc4da4ab | bb1bf06aec6d3f848ce6a1ca291c6ef6dc4da4ab | 2026-09-30T15:46:04Z | + +## 结果与验证(完成后填写) + +- 结果: +- 验证: +- 影响与剩余项: From c61920a8dc192ae0942f240d27a1fb485768483c Mon Sep 17 00:00:00 2001 From: weichen Date: Wed, 30 Sep 2026 16:00:31 +0000 Subject: [PATCH 2/4] Stop task-finish from uninitializing shared submodule config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Why: cmd_finish ran git submodule deinit --all, but submodule..url entries live in the shared .git/config — finishing any task silently marked every other checkout and worktree uninitialized (observed twice on 2026-09-30: main checkout uninit=12 after each finish; a parallel session hit it minutes before this fix landed). The deinit serves no purpose: worktree removal with gitlinks is refused regardless, so cleanup already goes through rm -rf + prune. Also aligns AGENTS.md with observed hook behavior (post-merge fires on ff-only pulls too, and its inline close cannot see cards merged remotely until they are pulled), and ignores the ZCode-generated .zcodeignore that tripped the BUSY gate in every session. Evidence: bash -n clean; abandon-path smoke of the patched script — start + FORCE_ABANDON=1 finish of a throwaway branch left shared submodule url config at 12 entries (pre-fix: 0), main checkout submodule status uninit=0, smoke worktree and branch fully recycled; the smoke close also backfilled a parallel session card left open (gitea-access-facts) via a card-close branch, proving the fallback path. Impact: scripts/task.sh cmd_finish only (removes one line, updates comment), AGENTS.md card-close paragraph, .gitignore one entry. No product or gitlink change; make test not applicable (repo-level tooling/docs only). web_base default fix intentionally withdrawn from this PR — landed via parallel PR #73. Refs: .task/fix-task-finish-close-followups.md --- .gitignore | 3 +++ .task/fix-task-finish-close-followups.md | 13 +++++++------ AGENTS.md | 7 ++++--- scripts/task.sh | 6 +++--- 4 files changed, 17 insertions(+), 12 deletions(-) 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/fix-task-finish-close-followups.md b/.task/fix-task-finish-close-followups.md index 63ac4a11..a9367979 100644 --- a/.task/fix-task-finish-close-followups.md +++ b/.task/fix-task-finish-close-followups.md @@ -6,11 +6,12 @@ - 权威仓: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 判脏口径。 ## 同步记录 @@ -18,8 +19,8 @@ |---|---|---|---| | 启动 | 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 cdedc04f..6d30b3fa 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 f9eadd84..de117280 100755 --- a/scripts/task.sh +++ b/scripts/task.sh @@ -267,9 +267,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 From e6cee503a20d25aa9a9edd42c5893c06d2879a1c Mon Sep 17 00:00:00 2001 From: weichen Date: Wed, 30 Sep 2026 16:01:38 +0000 Subject: [PATCH 3/4] Record the sync checkpoint --- .task/feature-duplication-lesson-records.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.task/feature-duplication-lesson-records.md b/.task/feature-duplication-lesson-records.md index 410a912d..50e18ec4 100644 --- a/.task/feature-duplication-lesson-records.md +++ b/.task/feature-duplication-lesson-records.md @@ -44,3 +44,4 @@ | 同步前验收 | 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 | From 9bb0af593c406ab22a01718844e53a03b1d55c15 Mon Sep 17 00:00:00 2001 From: weichen Date: Wed, 30 Sep 2026 16:03:44 +0000 Subject: [PATCH 4/4] Record the sync checkpoint --- .task/feature-duplication-lesson-records.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.task/feature-duplication-lesson-records.md b/.task/feature-duplication-lesson-records.md index 50e18ec4..ff6e3d59 100644 --- a/.task/feature-duplication-lesson-records.md +++ b/.task/feature-duplication-lesson-records.md @@ -45,3 +45,4 @@ | 同步前验收 | 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 |