Detect squash-merged PRs when closing task cards #544

Merged
weichen merged 12 commits from feature/card-merge-squash-detect into main 2026-10-14 09:00:43 +00:00
Owner

修复 task-close/precheck 对 squash 落地 PR 的任务卡漏检(真实案例 #457,经 PR #541 手动闭合)。

  • Why: card_merge 只认 "Merge … from into main" 合并提交;squash 落地且 head 分支已删时(ref 变 pull 引用、原名仅在 head.label),任务卡永远留在 .task/ 根目录且工具不报欠账。
  • Evidence: card_merge 改为 sha|subject|pr 三段并新增 card_merge_squash 兜底(Gitea API 按 head.ref/label 匹配 merged PR,merge_commit_sha 须为 origin/main 祖先方可采信;GITEA_TOKEN 缺省时维持旧行为);precheck [cards] 收敛到同一判定。真实 Gitea 探针对 feature/svc-pidcheck-leak 返回 226a4af157|457;stub 回归覆盖 squash 落地/诱饵跳过/sha 不在 main 拒绝;tests.test_task 全量 62 例绿;治理套件同步后 HEAD 复录绿(卡片证据表,含 3 轮宿主机间歇红的诚实记录与主检出对照收据)。任务卡:.task/feature-card-merge-squash-detect.md。GATE=本 PR CI。
  • Impact: scripts/task.sh(card_merge/card_merge_squash/close 循环/precheck cards 行)与 tests/test_task.py(+2 回归、_stub_gitea 夹具);既有 merge 提交闭合路径行为不变。
  • Refs: 用户 2026-10-14「把这个 bug 解决,然后将任务卡收尾并清理 worktree」。
修复 task-close/precheck 对 squash 落地 PR 的任务卡漏检(真实案例 #457,经 PR #541 手动闭合)。 - Why: card_merge 只认 "Merge … from <branch> into main" 合并提交;squash 落地且 head 分支已删时(ref 变 pull 引用、原名仅在 head.label),任务卡永远留在 .task/ 根目录且工具不报欠账。 - Evidence: card_merge 改为 sha|subject|pr 三段并新增 card_merge_squash 兜底(Gitea API 按 head.ref/label 匹配 merged PR,merge_commit_sha 须为 origin/main 祖先方可采信;GITEA_TOKEN 缺省时维持旧行为);precheck [cards] 收敛到同一判定。真实 Gitea 探针对 feature/svc-pidcheck-leak 返回 226a4af157|457;stub 回归覆盖 squash 落地/诱饵跳过/sha 不在 main 拒绝;tests.test_task 全量 62 例绿;治理套件同步后 HEAD 复录绿(卡片证据表,含 3 轮宿主机间歇红的诚实记录与主检出对照收据)。任务卡:.task/feature-card-merge-squash-detect.md。GATE=本 PR CI。 - Impact: scripts/task.sh(card_merge/card_merge_squash/close 循环/precheck cards 行)与 tests/test_task.py(+2 回归、_stub_gitea 夹具);既有 merge 提交闭合路径行为不变。 - Refs: 用户 2026-10-14「把这个 bug 解决,然后将任务卡收尾并清理 worktree」。
weichen added 9 commits 2026-10-14 08:34:41 +00:00
Why: establish the authorized task workspace and its initial baseline.

Evidence: preserved precheck receipt in .task/feature-card-merge-squash-detect.md; R0=d23fb4363dcc0a206e71e47f9cd23a644c7e1c70.

Impact: task metadata only; the feature workspace starts at d23fb4363d.

Refs: .task/feature-card-merge-squash-detect.md
Why: card_merge only recognized "Merge ... from <branch> into main"
merge commits, so a PR landed as a squash (real case: #457) left its
task card in .task/ forever; task-close reported nothing to close and
precheck showed no debt. Closing required a manual backfill (PR #541).

Evidence: card_merge now returns sha|subject|pr and falls back to a
Gitea API lookup by head ref or label (deleted branches keep the
original name only in label), gated by merge_commit_sha ancestry in
origin/main; precheck [cards] reuses card_merge so both surfaces agree.
Live probe against production Gitea returns 226a4af15791|Reset
per-service runtime state in svc.sh env_config|457 for
feature/svc-pidcheck-leak; stub-server tests cover squash landing,
decoy skip and the not-on-main refusal; full governance suite follows
in-card evidence.

Impact: scripts/task.sh close and precheck detect squash-merged cards
when GITEA_TOKEN is set (merge-commit path unchanged without token);
tests/test_task.py adds two regressions; no protocol change for
existing merge-commit closures beyond the appended pr field.

Refs: card-merge-misses-squash-merges (memory); PR #541 manual closure.
Why: include the current integration baseline before verification.

Evidence: fetched origin/main=11aa76a3bc1c5047791f9a2de154e451634b6567.

Impact: integrate upstream changes without rewriting task history.

Refs: task-sync
Why: bind the task validation checkpoint to the integration baseline.

Evidence: SELF recursive component checks; sync_base=11aa76a3bc1c5047791f9a2de154e451634b6567; before_record=e579783cd35b36ecbf258809f05392de21fd960f.

Impact: task metadata only.

Refs: .task/feature-card-merge-squash-detect.md
Correct the evidence interpretation after the green rerun
ci / test (pull_request) Successful in 12m55s
ci / test-pg (pull_request) Successful in 10m49s
ci / svc-realcombo (pull_request) Successful in 2m56s
15b2defd76
weichen added 1 commit 2026-10-14 08:34:42 +00:00
Correct the evidence interpretation after the green rerun
ci / test (pull_request) Successful in 12m55s
ci / test-pg (pull_request) Successful in 10m49s
ci / svc-realcombo (pull_request) Successful in 2m56s
15b2defd76
weichen added 3 commits 2026-10-14 08:49:40 +00:00
Why: include the current integration baseline before verification.

Evidence: fetched origin/main=7e9ebdea5055a63c713ccc0fb1f938ffe35a6b9d.

Impact: integrate upstream changes without rewriting task history.

Refs: task-sync
Why: bind the task validation checkpoint to the integration baseline.

Evidence: SELF recursive component checks; sync_base=7e9ebdea5055a63c713ccc0fb1f938ffe35a6b9d; before_record=b6a070265733b0995a2724e1d600e914c21200ef.

Impact: task metadata only.

Refs: .task/feature-card-merge-squash-detect.md
Record task-sync evidence after the rebase onto latest main
ci / svc-realcombo (pull_request) Successful in 1m50s
ci / test (pull_request) Successful in 9m1s
ci / test-pg (pull_request) Successful in 10m31s
b926c701f2
weichen merged commit 2dbe11c5d9 into main 2026-10-14 09:00:43 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: weichen/Agent-System-Dev#544