diff --git a/.task/archive/fix-close-pr-retry.md b/.task/archive/fix-close-pr-retry.md new file mode 100644 index 00000000..02d8fcfc --- /dev/null +++ b/.task/archive/fix-close-pr-retry.md @@ -0,0 +1,32 @@ +# fix/close-pr-retry 任务卡 + +任务主记录:PR #86 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/86(merge 432f0d2eeb);状态:已完成(回填);owner:weichen + +## 基线与授权 + +- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 0b0540e2d251ed6bee77e63fb1ed174dda3ddd41 +- 工作区:/home/weichen/projects/Agent-System-Dev-wt-fix-close-pr-retry(worktree);分支:fix/close-pr-retry +- 授权与交付终点:用户 2026-09-30 授权修复 task.sh close 建 PR 静默失败问题(此前观察项)。终点:PR 合入 main。未授权:改 task.sh 其它命令、改 post-merge 钩子、改兄弟仓脚本。 + +## 目标与非目标 + +- 目标:`cmd_close` 的 PR 创建从单发 curl(`2>/dev/null || true` 静默吞错)改为:退避重试 4 次(间隔 3/6/9s)、每次失败信息可见(stderr)、终局失败时按 head 分支 GET open PR 兜底查回(覆盖 post-merge 钩子与手动 close 并发导致 PR 已存在的场景)、全部落空时保留既有 `[next]` 人工提示。 +- 非目标:不改 precheck/start/sync/finish 的行为;不改卡片闭合的合入权归属(仍所有者);不给 close 加自动合入。 + +## 同步记录 + +| 节点 | sync_base_sha | tested_head_sha | checked_at | +|---|---|---|---| +| 启动 | 0b0540e2d251ed6bee77e63fb1ed174dda3ddd41 | 0b0540e2d251ed6bee77e63fb1ed174dda3ddd41 | 2026-09-30T16:41:35Z | + +## 结果与验证 + +- 结果:cmd_close PR 创建重试化:4 次退避重试 + stderr 可见 + 终局按 head 查回已存在 PR + 既有 [next] 提示兜底。post-merge 钩子与 task-finish 自动闭合同路径受益(同一函数)。 +- 验证:`bash -n` 通过;行为验证用桩服务器三模式(代码块由 sed 从真实文件逐字提取、在 worktree 分支上下文运行)——①ok:POST 201 → 首发即回收 `http://stub/pr/1`;②exists:POST 恒 500 模拟"PR 已存在"竞态 → 4 次重试后 GET `?state=open` 按 head 查回 `http://stub/pr/9`;③fail:真实 git-panel(TLS 失效主机)→ 4 次重试均可见 `建 PR 第 N 次未成功` → pr_url 空 → 走 [next] 人工提示分支。三轮合计行为与设计一致。 +- 影响与剩余项:本次未产生真实卡片可作端到端样本(无已合入未闭合卡),闭环等下次真实 card-close 时由钩子自然验证。剩余项:无。 + +## 闭合记录(card-autoclose 回填) + +- 依据:merge 432f0d2eeb13203fd124b03092f7a1dae5f180df(PR #86)已包含于 origin/main,分支成果已落盘;本段为合入后回填。 +- 合并主题:Merge pull request 'Retry card-close PR creation instead of failing silently' (#86) from fix/close-pr-retry into main +- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。 diff --git a/.task/archive/fix-dep-vuln-bumps.md b/.task/archive/fix-dep-vuln-bumps.md new file mode 100644 index 00000000..d1f734ae --- /dev/null +++ b/.task/archive/fix-dep-vuln-bumps.md @@ -0,0 +1,44 @@ +# fix/dep-vuln-bumps 任务卡 + +任务主记录:PR #88 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/88(merge 0a6ef8b986);状态:已完成(回填);owner:weichen + +## 基线与授权 + +- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 0b0540e2d251ed6bee77e63fb1ed174dda3ddd41 +- 工作区:/home/weichen/projects/Agent-System-Dev-wt-fix-dep-vuln-bumps(worktree);分支:fix/dep-vuln-bumps +- 授权与交付终点:落地依赖 CVE 清单中所有可达/可修项——backend 升 pgx 与 x/text、frontend/ui 升 vitest,并经组合验证后钉入三个 gitlink;终点为四个子仓 PR + Dev gitlink PR 全部合入后回收 worktree。 +- 权威依据:2026-09-30 govulncheck(backend 2 条可达:GO-2026-5004、GO-2026-5970)与 npm audit(frontend/ui 各 2 条 moderate:GHSA-82fw-gwwq-j7x9)。 + +## 目标与非目标 + +- 目标:backend `golang.org/x/text v0.24.0→v0.39.0`、`github.com/jackc/pgx/v5 v5.7.6→v5.9.2`(两条可达漏洞归零);frontend/ui `vitest`+`@vitest/mocker` →`4.1.11`(GHSA-82fw-gwwq-j7x9 修复首版);Dev 钉入三仓新 main。 +- 非目标:不处理 govulncheck 报的 20 条 module 级不可达项与 2 条 import 级不可达项(信息性,工具确认代码未调用);不升 vitest 到 5.x(保守取修复边界版)。 +- <本次允许的动作与终点;未授权事项写明> + +## 目标与非目标 + +<预期结果、受影响入口/模块/契约;明确不做什么。> + +## 同步记录 + +| 节点 | sync_base_sha | tested_head_sha | checked_at | +|---|---|---|---| +| 启动 | 0b0540e2d251ed6bee77e63fb1ed174dda3ddd41 | 0b0540e2d251ed6bee77e63fb1ed174dda3ddd41 | 2026-09-30T16:43:31Z | + +## 结果与验证 + +- 结果: +- 验证: +- 影响与剩余项: + +## 结果与验证 + +- 结果:backend PR #23(260dcc2,main=41cebd3)、frontend PR #19(a61bd70,main=af03854)、ui PR #18(780cc11,main=daf73be)全部合入;Dev 钉入三 gitlink。 +- 验证:backend `go build`+`go test -count=1 ./...` 绿且 govulncheck 复核"affected by 0 vulnerabilities"(原 2);frontend/ui `npm audit` "found 0 vulnerabilities"(原各 2),vitest 套件 33/33 与 37/37 绿(ui 曾被管道截断摘要,已单独补验 exit 0);Dev `make test` 全链 exit 0。 +- 影响与剩余项:均为依赖版本升级(backend 生产依赖 2 个、前端 devDependency 1 个);剩余项为 20 条不可达 module 级通告(信息性,随 routine 升级自然消化),无阻断项。 + +## 闭合记录(card-autoclose 回填) + +- 依据:merge 0a6ef8b986c629889133a62252212554cca3ed39(PR #88)已包含于 origin/main,分支成果已落盘;本段为合入后回填。 +- 合并主题:Merge pull request 'Pin backend, frontend, and ui gitlinks past reachable security advisories' (#88) from fix/dep-vuln-bumps into main +- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。 diff --git a/.task/feature-duplication-lesson-records.md b/.task/feature-duplication-lesson-records.md index 43cf820c..6e4925a2 100644 --- a/.task/feature-duplication-lesson-records.md +++ b/.task/feature-duplication-lesson-records.md @@ -48,3 +48,5 @@ | 同步前验收 | 03dc518eec70eccdc88a1c4f0e525e29bbd2a556 | a552939497cf7f5d8e0b2a9b19a2e9d110000bbd | 2026-09-30T16:03:44Z | | 同步前验收 | ab3cae07b5854ee71c9dd36b226cabd0f778d48d | c5ed9444a6f6b3ae9be9336c360a1d09204d9491 | 2026-09-30T16:06:01Z | | 同步前验收 | a612361b98879f4679cab503035e2111c593bf9b | 290b9bbd26077ae4320783d3b24b6cef0c2e6e05 | 2026-09-30T16:38:22Z | +| 同步前验收 | 0b0540e2d251ed6bee77e63fb1ed174dda3ddd41 | 888aa9471c0a6f6917eef1d4801e87b5c411cf6a | 2026-09-30T16:47:54Z | +| 同步前验收 | 9f2a7fb4b806bb63f43c3ee759bdbb1ab1f97720 | 21a92441dce7787b8c3eaeaf731aad9a58215836 | 2026-09-30T16:49:57Z | diff --git a/modules/backend b/modules/backend index 1c4b1986..076abfe1 160000 --- a/modules/backend +++ b/modules/backend @@ -1 +1 @@ -Subproject commit 1c4b198603c3ddeccb9e5502886a1f35bf70a3ae +Subproject commit 076abfe11a3ad5b9d7c40da2e47a9c5bd0139dfc diff --git a/modules/frontend b/modules/frontend index b329de3b..6752b788 160000 --- a/modules/frontend +++ b/modules/frontend @@ -1 +1 @@ -Subproject commit b329de3bf55a86f3173142e967ad9f575cee936a +Subproject commit 6752b788b9557abbaa4e63aac568fa1697877d2a diff --git a/modules/ui b/modules/ui index 97503953..efd87f97 160000 --- a/modules/ui +++ b/modules/ui @@ -1 +1 @@ -Subproject commit 9750395382ff482c4daec12ddd9a86970dadfb97 +Subproject commit efd87f9766b2c55b7a2c165e97de74f4e3845347 diff --git a/scripts/task.sh b/scripts/task.sh index 0c7c85f6..02cd67c6 100755 --- a/scripts/task.sh +++ b/scripts/task.sh @@ -231,11 +231,26 @@ EOF local headbr pr_url="" headbr=$(git rev-parse --abbrev-ref HEAD) if [ -n "${GITEA_TOKEN:-}" ]; then - local resp - resp=$(curl -sS -X POST -H "Authorization: token ${GITEA_TOKEN}" -H 'Content-Type: application/json' \ - "${web_base}/api/v1/repos/${owner}/${repo}/pulls" \ - -d "{\"head\":\"${headbr}\",\"base\":\"${TARGET_BRANCH}\",\"title\":\"Close merged task cards (${headbr})\",\"body\":\"Auto-generated by task.sh close; see commit message for evidence.\"}" 2>/dev/null || true) - pr_url=$(printf '%s' "$resp" | python3 -c 'import json,sys; print(json.load(sys.stdin).get("html_url",""))' 2>/dev/null || true) + # HTTPS 面偶发 broken pipe / 超时(AGENTS.md 访问事实节),单发 curl 会让 PR 静默 + # 缺失(闭合分支推了、PR 没建,2026-09-30 三次踩中):退避重试 + 失败可见 + 终局 + # 按 head 查回可能已存在的 PR(post-merge 钩子与手动 close 并发时 PR 会重复请求)。 + local resp attempt api="${web_base}/api/v1/repos/${owner}/${repo}/pulls" + for attempt in 1 2 3 4; do + resp=$(curl -sS -m 25 -X POST -H "Authorization: token ${GITEA_TOKEN}" -H 'Content-Type: application/json' \ + "$api" \ + -d "{\"head\":\"${headbr}\",\"base\":\"${TARGET_BRANCH}\",\"title\":\"Close merged task cards (${headbr})\",\"body\":\"Auto-generated by task.sh close; see commit message for evidence.\"}" 2>&1) || resp="" + pr_url=$(printf '%s' "$resp" | python3 -c 'import json,sys; d=json.load(sys.stdin); print(d.get("html_url","") if isinstance(d,dict) else "")' 2>/dev/null || true) + [ -n "$pr_url" ] && break + echo "[close] 建 PR 第 ${attempt} 次未成功${resp:+($(printf '%s' "$resp" | head -c 120))},退避重试" >&2 + [ "$attempt" = 4 ] || sleep $((attempt * 3)) + done + if [ -z "$pr_url" ]; then + resp=$(curl -sS -m 25 -H "Authorization: token ${GITEA_TOKEN}" "$api?state=open" 2>/dev/null || true) + pr_url=$(printf '%s' "$resp" | python3 -c 'import json,sys +for p in json.load(sys.stdin): + if p["head"]["ref"] == sys.argv[1]: + print(p["html_url"]); break' "$headbr" 2>/dev/null || true) + fi fi if [ -n "$newbranch" ]; then git checkout -q "${TARGET_BRANCH}"; fi if [ -n "$pr_url" ]; then