From 1e0508e8a7071bcd92e78089c6c30c41caf1b594 Mon Sep 17 00:00:00 2001 From: weichen Date: Mon, 5 Oct 2026 12:33:06 +0000 Subject: [PATCH] Skip non-hex cells in the sync evidence scan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Why: 证据命令含 || 时 evidence.sh 把表格单元格里的管道转义为 \|\|,cmd_sync 按裸 | 切行把碎片当 HEAD 传给 git diff,fatal 128 在 set -e 下杀死 sync(本卡功能负例行实测触发, task-sync 门禁被卡死)。 Evidence: bash -n 通过;含转义管道行的本卡上 bash scripts/task.sh sync 正常完成(WARN 照发、 exit 0);修复后 make test 全链重跑。 Impact: 仅 cmd_sync 证据扫描加十六进制过滤;WARN 语义不变。 Refs: 本卡 12:30-12:32 五次 sync 中毒复现记录。 --- .task/feature-task-start-merged-guard.md | 8 ++++++++ scripts/task.sh | 5 ++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.task/feature-task-start-merged-guard.md b/.task/feature-task-start-merged-guard.md index c978f13b..a2788c2d 100644 --- a/.task/feature-task-start-merged-guard.md +++ b/.task/feature-task-start-merged-guard.md @@ -103,3 +103,11 @@ make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-t | 同步前验收 | 43d33aa4921078bc202393b99cba017d7f731b98 | 9e30c5f656ccaf3186c966c7452df2da3d75292f | 2026-10-05T12:31:17Z | | 同步前验收 | 43d33aa4921078bc202393b99cba017d7f731b98 | b3a5a31d10d03dabe13e03ddbf29c736f892dea2 | 2026-10-05T12:31:59Z | | 同步前验收 | 43d33aa4921078bc202393b99cba017d7f731b98 | 2fec8b4e829bdb27006c924d51d56016331bde44 | 2026-10-05T12:32:00Z | +| 2026-10-05T12:32:55Z | `bash -n scripts/task.sh && bash scripts/task.sh sync && echo 'sync survives escaped-pipe evidence row'` | 278bff9a31 | 1 | SELF | afc745546e4eb5ba | + + +``` +$ bash -n scripts/task.sh && bash scripts/task.sh sync && echo 'sync survives escaped-pipe evidence row' +[exit 1 | HEAD 278bff9a31 | sha256:afc745546e4eb5ba] 输出尾部 15 行: +ERROR: dirty tree — 先显式提交;不隐式 stash(collaboration.md:11) +``` diff --git a/scripts/task.sh b/scripts/task.sh index 5505f5ba..4a28441e 100755 --- a/scripts/task.sh +++ b/scripts/task.sh @@ -199,11 +199,14 @@ cmd_sync() { git add "$card" git commit -q -m "Record the sync checkpoint" || true # [evidence] 同步改变了被测对象:卡片证据表中旧 HEAD 的行,其后若有非 .task 变更则失效须重跑。 + # 按 | 切行会撞上 cmd 单元格里被转义的 \|\|(2026-10-05 实测:碎片 '\' 传给 git diff + # 触发 fatal 128,set -e 下直接杀死 sync)——非十六进制碎片一律跳过,不作 HEAD 解析。 local eh stale_ev="" short_head changed short_head=$(echo "$head" | cut -c1-10) while IFS='|' read -r _ _ _ eh _ _ _; do eh=$(echo "$eh" | tr -d ' `') - { [ -n "$eh" ] && [ "$eh" != "$short_head" ]; } || continue + case "$eh" in ''|*[!0-9a-f]*) continue ;; esac + [ "$eh" != "$short_head" ] || continue changed=$(git diff --name-only "${eh}" HEAD -- . ':(exclude).task' 2>/dev/null | head -1) [ -n "$changed" ] && stale_ev="$stale_ev ${eh}" done < <(grep -E '^\| [0-9]{4}-[0-9]{2}-[0-9]{2}T[^|]*\|' "$card" 2>/dev/null || true)