diff --git a/.task/feature-evidence-driven-gates.md b/.task/feature-evidence-driven-gates.md index 733da3b8..f4523b67 100644 --- a/.task/feature-evidence-driven-gates.md +++ b/.task/feature-evidence-driven-gates.md @@ -104,3 +104,25 @@ make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature- [facts-verify] total=4 pass=4 fail=0 make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-evidence-driven-gates' ``` +| 2026-10-05T10:49:32Z | `make test` | 6518f6ed0a | 0 | SELF | 751ae7dccd018ce7 | + + +``` +$ make test +[exit 0 | HEAD 6518f6ed0a | sha256:751ae7dccd018ce7] 输出尾部 15 行: + ✓ test/card-anchor.test.tsx (4 tests) 91ms + ✓ test/file-preview.test.tsx (9 tests) 77ms + ✓ test/inline-confirm.test.tsx (7 tests) 94ms + ✓ test/capability.test.tsx (14 tests) 145ms + + Test Files 14 passed (14) + Tests 103 passed (103) + Start at 10:50:04 + Duration 612ms (transform 373ms, setup 0ms, import 1.36s, tests 874ms, environment 3.22s) + +knip unused exports 55 <= 55 +cd deps/agent-command && go vet ./... && go test -count=1 ./... +ok agent-command 0.002s +ok agent-command/conformance 0.002s +make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-evidence-driven-gates' +``` diff --git a/AGENTS.md b/AGENTS.md index 3860b148..b8165ff1 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -24,8 +24,8 @@ 允许的堆叠例外):任务卡显式记录父任务与父 PR;子分支命名 `/<父slug>-<子题>`, 不嵌 SHA;合入顺序固定父→子;父合入后子分支须 `make task-sync` 并入最新 main 并把 PR base 改回 main,方可声明可合入(分支保护要求 head 含 origin/main,未同步必被拦)。 -- **验收、请求审核、合入前**各运行一次 `make task-sync`;完成声明附 precheck、task-sync、 - 测试三段输出。 +- **验收、请求审核、合入前**各运行一次 `make task-sync`;完成声明的 precheck、task-sync、 + 测试三段输出由 `make evidence` 写入任务卡(见「证据与验证门禁」),不手抄。 - 合入后**在 worktree 内**运行 `make task-finish` 回收 worktree 与分支(脚本会把 当前目录当 worktree 回收——在主检出运行会误删主检出,已加防护);放弃未合入 工作用 `make task-finish ABANDON="--abandon <原因>"` 并记录原因。 diff --git a/scripts/task.sh b/scripts/task.sh index 073a4f60..8a31e3ab 100755 --- a/scripts/task.sh +++ b/scripts/task.sh @@ -189,14 +189,16 @@ cmd_sync() { printf '| 同步前验收 | %s | %s | %s |\n' "$base" "$head" "$(date -u +%FT%TZ)" >> "$card" git add "$card" git commit -q -m "Record the sync checkpoint" || true - # [evidence] 同步改变了被测对象:卡片证据表中旧 HEAD 的行自动失效,关键检查须重跑。 - local eh stale_ev="" short_head + # [evidence] 同步改变了被测对象:卡片证据表中旧 HEAD 的行,其后若有非 .task 变更则失效须重跑。 + 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" ] && stale_ev="$stale_ev $eh" + { [ -n "$eh" ] && [ "$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) - [ -n "$stale_ev" ] && echo "[evidence] WARN 证据表含旧被测 HEAD:$(echo $stale_ev | tr ' ' '\n' | sort -u | tr '\n' ' ')(≠ 当前 $short_head)——同步后关键检查须重跑并以 make evidence 重新写入" + [ -n "$stale_ev" ] && echo "[evidence] WARN 证据表被测 HEAD 落后且其后有非卡片变更:$(echo $stale_ev | tr ' ' '\n' | sort -u | tr '\n' ' ')(当前 $short_head)——关键检查须重跑并以 make evidence 重新写入" else echo "[warn] 找不到分支 ${branch} 的任务卡,同步记录未写入" >&2 fi