From aec5296759791ded2e2fca89273d7236b79d643c Mon Sep 17 00:00:00 2001 From: weichen Date: Thu, 1 Oct 2026 08:23:49 +0000 Subject: [PATCH 01/35] Close 1 merged task card(s) and archive them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Why: branches merged into main had left their task cards open; backfill status and archive to prevent bookkeeping debt. Evidence: feature-agent-professional-deliverables.md(PR#126) — merges verified via git log --merges against origin/main. Impact: .task/*.md moved to .task/archive/ with status backfilled; no code or submodule change. Refs: task.sh close (card-autoclose-r1) --- .../feature-agent-professional-deliverables.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) rename .task/{ => archive}/feature-agent-professional-deliverables.md (82%) diff --git a/.task/feature-agent-professional-deliverables.md b/.task/archive/feature-agent-professional-deliverables.md similarity index 82% rename from .task/feature-agent-professional-deliverables.md rename to .task/archive/feature-agent-professional-deliverables.md index c92bd890..599a110c 100644 --- a/.task/feature-agent-professional-deliverables.md +++ b/.task/archive/feature-agent-professional-deliverables.md @@ -1,6 +1,6 @@ # feature/agent-professional-deliverables 任务卡 -任务主记录:https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/126 ;状态:进行中;owner:weichen +任务主记录:https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/126 ;状态:已完成(回填);owner:weichen ## 基线与授权 @@ -28,3 +28,9 @@ - 影响与剩余项:Backend PR #38 已合入(merge 2079b2dfa851bd4cbe8f399a015126c842c441ec)。本分支推进 gitlink 到该提交。样例文档仍留在主检出 .tmp,不入库。工件卡片上的“设为默认模板”按钮仍不在本次范围。 | 同步前验收 | 6f7f4a0e7858c70261d7bbeb179f5eb59303f956 | 2e8b9face3542844319f4a545768b6cf04c126a5 | 2026-10-01T08:19:31Z | | 同步前验收 | 6f7f4a0e7858c70261d7bbeb179f5eb59303f956 | f41ad95b1c5c9d2c415a12a64ac1f1551cd7b6af | 2026-10-01T08:20:22Z | + +## 闭合记录(card-autoclose 回填) + +- 依据:merge 28174a67524849084823e16791d498c1dcdcb77a(PR #126)已包含于 origin/main,分支成果已落盘;本段为合入后回填。 +- 合并主题:Merge pull request 'Pin backend professional deliverable standards' (#126) from feature/agent-professional-deliverables into main +- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。 From 74e60df033c17e624af6ebafd11bc28d8919e9ef Mon Sep 17 00:00:00 2001 From: weichen Date: Thu, 1 Oct 2026 09:37:34 +0000 Subject: [PATCH 02/35] Close the deliverable quality system task card Why: The branch is already on main, and the card still said the work was in progress. Evidence: PR 128 merged as f8fefa0f888e8f5fd5207c9e97099e59935ff69b. Impact: The card is archived as completed. No product behavior changes. Refs: deliverable-quality-system Co-authored-by: Cursor --- .../feature-deliverable-quality-system.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) rename .task/{ => archive}/feature-deliverable-quality-system.md (60%) diff --git a/.task/feature-deliverable-quality-system.md b/.task/archive/feature-deliverable-quality-system.md similarity index 60% rename from .task/feature-deliverable-quality-system.md rename to .task/archive/feature-deliverable-quality-system.md index 06abbd8d..11d0bb2a 100644 --- a/.task/feature-deliverable-quality-system.md +++ b/.task/archive/feature-deliverable-quality-system.md @@ -1,6 +1,6 @@ # feature/deliverable-quality-system 任务卡 -任务主记录:;状态:进行中;owner:weichen +任务主记录:PR #128 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/128(merge f8fefa0f88);状态:已完成(回填);owner:weichen ## 基线与授权 @@ -18,8 +18,15 @@ |---|---|---|---| | 启动 | 28174a67524849084823e16791d498c1dcdcb77a | 28174a67524849084823e16791d498c1dcdcb77a | 2026-10-01T08:46:07Z | -## 结果与验证(完成后填写) +## 结果与验证 - 结果: - 验证: - 影响与剩余项: + +## 闭合记录(card-autoclose 回填) + +- 依据:merge f8fefa0f888e8f5fd5207c9e97099e59935ff69b(PR #128)已包含于 origin/main,分支成果已落盘;本段为合入后回填。 +- 合并主题:Pin the quality system and the squad entry +- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。 + From 0b57182ea76ec99564bb17de4f33ac414175032e Mon Sep 17 00:00:00 2001 From: weichen Date: Thu, 1 Oct 2026 10:34:51 +0000 Subject: [PATCH 03/35] Archive the native and squad upgrade task card Why: The merge subject did not match the auto-close pattern, so the card stayed open after the work landed. Evidence: PR 130 merge 26dfea7ed6 is on origin/main Impact: The card moves to .task/archive and is marked complete. Refs: feature/card-close-native-squad-full-upgrade Co-authored-by: Cursor --- .../{ => archive}/feature-native-squad-full-upgrade.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) rename .task/{ => archive}/feature-native-squad-full-upgrade.md (59%) diff --git a/.task/feature-native-squad-full-upgrade.md b/.task/archive/feature-native-squad-full-upgrade.md similarity index 59% rename from .task/feature-native-squad-full-upgrade.md rename to .task/archive/feature-native-squad-full-upgrade.md index cebc8c69..b5b25e1f 100644 --- a/.task/feature-native-squad-full-upgrade.md +++ b/.task/archive/feature-native-squad-full-upgrade.md @@ -1,6 +1,6 @@ # feature/native-squad-full-upgrade 任务卡 -任务主记录:;状态:进行中;owner:weichen +任务主记录:PR #130 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/130(merge 26dfea7ed6);状态:已完成(回填);owner:weichen ## 基线与授权 @@ -18,8 +18,14 @@ |---|---|---|---| | 启动 | f8fefa0f888e8f5fd5207c9e97099e59935ff69b | f8fefa0f888e8f5fd5207c9e97099e59935ff69b | 2026-10-01T10:05:00Z | -## 结果与验证(完成后填写) +## 结果与验证 - 结果: - 验证: - 影响与剩余项: + +## 闭合记录(card-autoclose 回填) + +- 依据:merge 26dfea7ed62575097f14fedf1b7713a77dedb66f(PR #130)已包含于 origin/main,分支成果已落盘;本段为合入后回填。 +- 合并主题:Pin the headless runtime and the orchestration platform +- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。 From 44415a35c2be98a966eea3c7bda5ed7984f768df Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 00:27:10 +0000 Subject: [PATCH 04/35] Record the task card for feature-agent-stack-r0-r1 --- .task/feature-agent-stack-r0-r1.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .task/feature-agent-stack-r0-r1.md diff --git a/.task/feature-agent-stack-r0-r1.md b/.task/feature-agent-stack-r0-r1.md new file mode 100644 index 00000000..030b1c92 --- /dev/null +++ b/.task/feature-agent-stack-r0-r1.md @@ -0,0 +1,25 @@ +# feature/agent-stack-r0-r1 任务卡 + +任务主记录:;状态:进行中;owner:weichen + +## 基线与授权 + +- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= f4aa0348d7f60e4dd5b6b222205a2c561465db8e +- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-stack-r0-r1(worktree);分支:feature/agent-stack-r0-r1 +- 授权与交付终点:<本次允许的动作与终点;未授权事项写明> + +## 目标与非目标 + +<预期结果、受影响入口/模块/契约;明确不做什么。> + +## 同步记录 + +| 节点 | sync_base_sha | tested_head_sha | checked_at | +|---|---|---|---| +| 启动 | f4aa0348d7f60e4dd5b6b222205a2c561465db8e | f4aa0348d7f60e4dd5b6b222205a2c561465db8e | 2026-10-03T00:27:10Z | + +## 结果与验证(完成后填写) + +- 结果: +- 验证: +- 影响与剩余项: From 33b545326e165d52b69b495dc5dc76b5756372c7 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 00:34:18 +0000 Subject: [PATCH 05/35] Record the R0 and R1 authorization on the task card Why: the task card must state the allowed endpoint before library edits begin. Evidence: plan authorizes five unmerged PRs and forbids merge, release, and history rewrite. Impact: task card only; no code or gitlink change. Refs: .task/feature-agent-stack-r0-r1.md Co-authored-by: Cursor --- .task/feature-agent-stack-r0-r1.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.task/feature-agent-stack-r0-r1.md b/.task/feature-agent-stack-r0-r1.md index 030b1c92..eab2602b 100644 --- a/.task/feature-agent-stack-r0-r1.md +++ b/.task/feature-agent-stack-r0-r1.md @@ -6,11 +6,12 @@ - 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= f4aa0348d7f60e4dd5b6b222205a2c561465db8e - 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-stack-r0-r1(worktree);分支:feature/agent-stack-r0-r1 -- 授权与交付终点:<本次允许的动作与终点;未授权事项写明> +- 授权与交付终点:按提案第 5 节实施 R0(组合一致性)与 R1(三库 P0 与安全向 P1)。允许在 Agent-Intent、Agent-Native、Agent-Squad、Agent-System-Backend、Agent-System-Dev 五个仓各从 origin/main 切 feature/agent-stack-r0-r1,提交、推送并建 PR,推进 Dev 与 Backend 的 gitlink。终点 = 五个 PR 已开且均未合入。未授权:合入、发版、改写历史、变更分支保护、改 development-guidelines 嵌套指针。 ## 目标与非目标 -<预期结果、受影响入口/模块/契约;明确不做什么。> +- 目标:Dev 测的就是发布的组合(go.work、指针一致性检查、库间依赖棘轮、库测试纳入 make test);修 I1/I2/I6、N1–N4/N13/N14、Q1–Q5/Q8/Q9/Q14–Q16,每条带回归测试。 +- 非目标:实现原生 Anthropic/Google 协议、合入 PR、发版、编排收敛到 Squad(后续批次)。 ## 同步记录 From 978bf8bdaec0890e241849f0fb9e6999b0a1de86 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 02:10:00 +0000 Subject: [PATCH 06/35] Check nested library pins and test the three agent libraries Why: Dev could ship a combination whose nested gitlinks differed from the top-level pins, and make test never ran the three agent libraries. Evidence: A go.work was measured and not adopted: workspace MVS selected newer golang.org/x crypto, exp, net, term, and text than backend with GOWORK=off. check-pins passes on the new pins and fails when backend's squad pin is 5cbac00. Impact: make test adds pin checks and GOWORK=off vet/test for intent, native, and squad. make build still compiles inside backend; the pin check requires those gitlinks to match Dev. Refs: R0 Co-authored-by: Cursor --- Makefile | 18 +++++++++--- PROJECT.md | 2 +- deps/agent-intent | 2 +- deps/agent-native | 2 +- deps/agent-squad | 2 +- modules/backend | 2 +- policy/lib-deps-allowlist.txt | 16 +++++++++++ scripts/check-pins.sh | 54 +++++++++++++++++++++++++++++++++++ scripts/lint-boundaries.sh | 43 ++++++++++++++++++++++++++++ 9 files changed, 132 insertions(+), 9 deletions(-) create mode 100644 policy/lib-deps-allowlist.txt create mode 100755 scripts/check-pins.sh diff --git a/Makefile b/Makefile index 2f1e7325..4ea73660 100644 --- a/Makefile +++ b/Makefile @@ -10,10 +10,10 @@ BIN := bin/agent-system EMBED_DIR := $(BACKEND)/web/dist PLUGINS := plugins # 版本溯源(release-operations:运行制品须可对上固定组合)。无 tag 时 --always 给短 SHA。 -COMBO := core=$(shell git -C $(CORE) rev-parse --short HEAD 2>/dev/null)+backend=$(shell git -C $(BACKEND) rev-parse --short HEAD 2>/dev/null)+frontend=$(shell git -C $(FRONTEND) rev-parse --short HEAD 2>/dev/null)+ui=$(shell git -C $(UI) rev-parse --short HEAD 2>/dev/null)+agentcmd=$(shell git -C deps/agent-command rev-parse --short HEAD 2>/dev/null)+documents=$(shell git -C modules/documents rev-parse --short HEAD 2>/dev/null) +COMBO := core=$(shell git -C $(CORE) rev-parse --short HEAD 2>/dev/null)+backend=$(shell git -C $(BACKEND) rev-parse --short HEAD 2>/dev/null)+frontend=$(shell git -C $(FRONTEND) rev-parse --short HEAD 2>/dev/null)+ui=$(shell git -C $(UI) rev-parse --short HEAD 2>/dev/null)+agentcmd=$(shell git -C deps/agent-command rev-parse --short HEAD 2>/dev/null)+documents=$(shell git -C modules/documents rev-parse --short HEAD 2>/dev/null)+native=$(shell git -C deps/agent-native rev-parse --short HEAD 2>/dev/null)+squad=$(shell git -C deps/agent-squad rev-parse --short HEAD 2>/dev/null)+intent=$(shell git -C deps/agent-intent rev-parse --short HEAD 2>/dev/null) VERSION := $(shell git describe --tags --always --dirty 2>/dev/null)+$(COMBO) -.PHONY: help sync status build frontend svc svc-list svc-commits svc-history svc-update test-backend test-frontend test-ui test-core test-agentcmd dev pin clean setup precheck task-start task-sync task-close task-finish version +.PHONY: help sync status build frontend svc svc-list svc-commits svc-history svc-update test-backend test-frontend test-ui test-core test-agentcmd test-pins test-libs dev pin clean setup precheck task-start task-sync task-close task-finish version version: @echo "agent-system $(VERSION)" @@ -44,7 +44,7 @@ task-finish: help: @echo "make sync 物化全部 submodule(递归)" @echo "make build 构建单二进制 bin/agent-system(契约同步→前端构建→embed→静态链接)" - @echo "make test 全量测试(core + backend + frontend)" + @echo "make test 全量测试(boundaries + pins + libs + core + backend + frontend + ui + agent-command)" @echo "make svc 服务级操作:make svc ENV= [ACTION=deploy|start|stop|restart|status|logs] [ARGS='--from dev@ --tag ...']" @echo "make svc-list 服务总览:make svc-list [ARGS='--tag core'];数据库运维:scripts/svc.sh db create|dsn|backup|backups|restore|clone|copy|ls|set" @echo "make svc-commits 列出可部署提交:make svc-commits SRC=dev|release [N=20]" @@ -99,11 +99,21 @@ test-agentcmd: test-boundaries: bash scripts/lint-boundaries.sh +# 容器仓 deps/ gitlink 与 Dev 顶层指针一致。读索引中的 gitlink。 +test-pins: + bash scripts/check-pins.sh + +# 三个库在各自模块内测试。不用 go.work:工作区 MVS 会抬高 golang.org/x 版本。 +test-libs: + cd deps/agent-intent && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... + cd deps/agent-native && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... + cd deps/agent-squad && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... + plugin-new: @test -n "$(NAME)" || (echo "用法:make plugin-new NAME="; exit 2) bash scripts/plugin-new.sh "$(NAME)" -test: test-boundaries test-core test-backend test-frontend test-ui test-agentcmd +test: test-boundaries test-pins test-libs test-core test-backend test-frontend test-ui test-agentcmd # 运行演示(mock 模式):单二进制 + 示例插件 + 嵌入式存储,浏览器 http://127.0.0.1:8787 # 环境服务管理(scripts/svc.sh):deploy = 停旧 → 构建 → 启动;dev/prod 相互隔离。 diff --git a/PROJECT.md b/PROJECT.md index 7d6313fd..15102969 100644 --- a/PROJECT.md +++ b/PROJECT.md @@ -2,5 +2,5 @@ - 用途:开发集成父仓(gitlink 权威);非分发单元。 - 组合:modules/{core,backend,frontend,ui,documents} + deps/{development-guidelines,agent-native,agent-squad,agent-intent,agent-command,error-code-system,logging-system}。 -- 验证:make test(core+backend+frontend 全量);make build 产出 bin/agent-system。 +- 验证:`make test` = test-boundaries(公开边界,另含三库之间导入配对棘轮)+ test-pins + test-libs(agent-intent、agent-native、agent-squad 各自 `GOWORK=off` 的 vet 与 test)+ test-core + test-backend + test-frontend + test-ui + test-agentcmd。`make build` 在 backend 模块内编译,replace 指向该模块自己的 `deps/`;`scripts/check-pins.sh` 要求这些 gitlink 与 Dev 顶层指针相同。未加 go.work:工作区最小版本选择会把 `golang.org/x/crypto`、`exp`、`net`、`term`、`text` 选得比 backend 单独构建更新。Releases 仓的 `scripts/build-release.sh` 递归克隆本仓固定提交后运行 `make build`,因此跟随同一套指针。 - 部署:非容器;Releases 仓从本仓固定提交导出版本。 diff --git a/deps/agent-intent b/deps/agent-intent index 1dbbe814..3130190a 160000 --- a/deps/agent-intent +++ b/deps/agent-intent @@ -1 +1 @@ -Subproject commit 1dbbe8149c561b36282bf781e61a06d1284be3a1 +Subproject commit 3130190acb396589d6022c243bbe07ce7c31c881 diff --git a/deps/agent-native b/deps/agent-native index c6d867cd..694b08cd 160000 --- a/deps/agent-native +++ b/deps/agent-native @@ -1 +1 @@ -Subproject commit c6d867cde7d87696feaf3073f097ca15b0145273 +Subproject commit 694b08cdbef5d52496f4425c9a22d1b77df14c23 diff --git a/deps/agent-squad b/deps/agent-squad index 590fd86f..8e987bf5 160000 --- a/deps/agent-squad +++ b/deps/agent-squad @@ -1 +1 @@ -Subproject commit 590fd86f4c8bfada0ec76efbfb57133c61607bd6 +Subproject commit 8e987bf535efbbbf317147542e858217f2bb3504 diff --git a/modules/backend b/modules/backend index 46d5f7b6..898fdd13 160000 --- a/modules/backend +++ b/modules/backend @@ -1 +1 @@ -Subproject commit 46d5f7b66830167ccf00b5d6d9cd0e73ad62e47d +Subproject commit 898fdd137148836b2e52666a2b5e0d591ec308c3 diff --git a/policy/lib-deps-allowlist.txt b/policy/lib-deps-allowlist.txt new file mode 100644 index 00000000..e391def8 --- /dev/null +++ b/policy/lib-deps-allowlist.txt @@ -0,0 +1,16 @@ +# 三个库之间的包导入现状。新增配对会使 scripts/lint-boundaries.sh 失败; +# 已经消失的配对只告警,提示从本文件删除。每行:导入方包 被导入包。 +agent-native/adapters/intentgate agent-intent/intent +agent-squad/cli agent-intent/intent +agent-squad/cli agent-native/exec +agent-squad/cli agent-native/runtime/llm +agent-squad/platform agent-native/runtime +agent-squad/platform agent-native/runtime/llm +agent-squad/squad agent-native/adapters/native +agent-squad/squad agent-native/exec +agent-squad/squad agent-native/runtime/llm +agent-squad/squad agent-native/runtime/mcp +agent-squad/squad agent-native/runtime/subagent +agent-squad/squad agent-native/runtime/tools +agent-squad/squadintent agent-intent/intent +agent-squad/squadintent agent-native/exec diff --git a/scripts/check-pins.sh b/scripts/check-pins.sh new file mode 100755 index 00000000..715272b0 --- /dev/null +++ b/scripts/check-pins.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +# 组合指针一致:容器仓在 Dev 钉住的提交上,deps/ 里的每个 gitlink +# 必须等于 Dev 顶层对应指针。development-guidelines 只告警。 +set -euo pipefail +root=$(cd "$(dirname "$0")/.." && pwd) +cd "$root" + +fail=0 + +pin_of() { + git rev-parse ":$1" +} + +check_link() { + local container="$1" name="$2" sha="$3" expect_path="$4" + local expect + if ! expect=$(pin_of "$expect_path" 2>/dev/null); then + echo "pin: $container deps/$name has no Dev pin at $expect_path" >&2 + fail=1 + return + fi + if [ "$sha" != "$expect" ]; then + echo "pin: $container deps/$name is ${sha:0:12}, Dev $expect_path is ${expect:0:12}" >&2 + fail=1 + return + fi + echo "ok $container $name" +} + +containers=(modules/backend deps/agent-native deps/agent-squad deps/agent-intent) +for container in "${containers[@]}"; do + commit=$(pin_of "$container") + while read -r mode _typ sha name; do + [ "$mode" = "160000" ] || continue + base=${name#deps/} + if [ "$base" = "development-guidelines" ]; then + dev=$(pin_of deps/development-guidelines) + if [ "$sha" != "$dev" ]; then + echo "warn: $container deps/development-guidelines is ${sha:0:12}, Dev is ${dev:0:12}" >&2 + fi + continue + fi + if [ "$base" = "agent-system-core" ]; then + check_link "$container" "$base" "$sha" modules/core + else + check_link "$container" "$base" "$sha" "deps/$base" + fi + done < <(git -C "$container" ls-tree "$commit" deps/) +done + +if [ "$fail" -ne 0 ]; then + exit 1 +fi +echo "pins ok" diff --git a/scripts/lint-boundaries.sh b/scripts/lint-boundaries.sh index e00d3e7b..00842346 100755 --- a/scripts/lint-boundaries.sh +++ b/scripts/lint-boundaries.sh @@ -24,6 +24,49 @@ if [ -d "$sdk" ]; then fi fi check "$root/examples" + +# 库间依赖棘轮:三个库的包导入兄弟库的配对,相对白名单只许减少、不许新增。 +allow="$root/policy/lib-deps-allowlist.txt" +observed=$(mktemp) +recorded=$(mktemp) +trap 'rm -f "$observed" "$recorded"' EXIT +siblings=(agent-intent agent-native agent-squad) +for dir in deps/agent-intent deps/agent-native deps/agent-squad; do + mod=$(awk '/^module /{print $2; exit}' "$root/$dir/go.mod") + ( + cd "$root/$dir" + GOWORK=off go list -f '{{.ImportPath}}{{range .Imports}} {{.}}{{end}}' ./... + ) | while read -r importer rest; do + for imp in $rest; do + for sib in "${siblings[@]}"; do + case "$imp" in + "$sib"|"$sib"/*) ;; + *) continue ;; + esac + case "$importer" in + "$mod"|"$mod"/*) ;; + *) continue ;; + esac + if [ "$sib" != "$mod" ]; then + echo "$importer $imp" + fi + done + done + done +done | sort -u >"$observed" +grep -v -e '^#' -e '^$' "$allow" | sort -u >"$recorded" +new_pairs=$(comm -13 "$recorded" "$observed" || true) +if [ -n "$new_pairs" ]; then + echo "boundary: new sibling-library import pairs" >&2 + echo "$new_pairs" >&2 + fail=1 +fi +stale_pairs=$(comm -23 "$recorded" "$observed" || true) +if [ -n "$stale_pairs" ]; then + echo "warn: sibling-library pairs no longer imported; delete from policy/lib-deps-allowlist.txt" >&2 + echo "$stale_pairs" >&2 +fi + if [ "$fail" -ne 0 ]; then exit 1 fi From 314f7987256561ef67abd29015a8b8cdb83b2253 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 02:10:29 +0000 Subject: [PATCH 07/35] Record the sync checkpoint --- .task/feature-agent-professional-deliverables.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.task/feature-agent-professional-deliverables.md b/.task/feature-agent-professional-deliverables.md index 6b91f686..2079e2db 100644 --- a/.task/feature-agent-professional-deliverables.md +++ b/.task/feature-agent-professional-deliverables.md @@ -32,3 +32,4 @@ | 同步前验收 | 959179f88fafa06daeab121929112069d34e8419 | 0f3ea6c8b545923a7dfaf46d938f682f0c879246 | 2026-10-01T23:48:16Z | | 同步前验收 | 08ef71661d4d65d13471978185a7afb4636b3f34 | 83881c13206d97a8b5ee69cd465c621a337a70fb | 2026-10-02T02:36:24Z | | 同步前验收 | 08ef71661d4d65d13471978185a7afb4636b3f34 | f43aec709d5e72dffd421fe157545507bd7d425e | 2026-10-02T05:03:41Z | +| 同步前验收 | f4aa0348d7f60e4dd5b6b222205a2c561465db8e | 978bf8bdaec0890e241849f0fb9e6999b0a1de86 | 2026-10-03T02:10:29Z | From aa7089ab5f0a04efb01f09072fe380f13c355c4f Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 02:20:15 +0000 Subject: [PATCH 08/35] Record the stack repair evidence on the task card Why: task-sync appended this branch's checkpoint to another open card, and the acceptance evidence belongs on this task. Evidence: make test and make build exited 0; check-pins failed on the temporary squad pin 5cbac00 and passed after restore. Impact: task cards only. The other card loses the misplaced sync row. Refs: R0 R1 Co-authored-by: Cursor --- ...feature-agent-professional-deliverables.md | 1 - .task/feature-agent-stack-r0-r1.md | 32 +++++++++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/.task/feature-agent-professional-deliverables.md b/.task/feature-agent-professional-deliverables.md index 2079e2db..6b91f686 100644 --- a/.task/feature-agent-professional-deliverables.md +++ b/.task/feature-agent-professional-deliverables.md @@ -32,4 +32,3 @@ | 同步前验收 | 959179f88fafa06daeab121929112069d34e8419 | 0f3ea6c8b545923a7dfaf46d938f682f0c879246 | 2026-10-01T23:48:16Z | | 同步前验收 | 08ef71661d4d65d13471978185a7afb4636b3f34 | 83881c13206d97a8b5ee69cd465c621a337a70fb | 2026-10-02T02:36:24Z | | 同步前验收 | 08ef71661d4d65d13471978185a7afb4636b3f34 | f43aec709d5e72dffd421fe157545507bd7d425e | 2026-10-02T05:03:41Z | -| 同步前验收 | f4aa0348d7f60e4dd5b6b222205a2c561465db8e | 978bf8bdaec0890e241849f0fb9e6999b0a1de86 | 2026-10-03T02:10:29Z | diff --git a/.task/feature-agent-stack-r0-r1.md b/.task/feature-agent-stack-r0-r1.md index eab2602b..60a2dc28 100644 --- a/.task/feature-agent-stack-r0-r1.md +++ b/.task/feature-agent-stack-r0-r1.md @@ -18,9 +18,35 @@ | 节点 | sync_base_sha | tested_head_sha | checked_at | |---|---|---|---| | 启动 | f4aa0348d7f60e4dd5b6b222205a2c561465db8e | f4aa0348d7f60e4dd5b6b222205a2c561465db8e | 2026-10-03T00:27:10Z | +| 同步前验收 | f4aa0348d7f60e4dd5b6b222205a2c561465db8e | 978bf8bdaec0890e241849f0fb9e6999b0a1de86 | 2026-10-03T02:10:29Z | -## 结果与验证(完成后填写) +## 结果与验证 -- 结果: +- 结果:五个仓的 `feature/agent-stack-r0-r1` 均已推送。指针:intent `3130190acb396589d6022c243bbe07ce7c31c881`,native `694b08cdbef5d52496f4425c9a22d1b77df14c23`,squad `8e987bf535efbbbf317147542e858217f2bb3504`,backend `898fdd137148836b2e52666a2b5e0d591ec308c3`。Dev 在 `978bf8b` 钉住这四条并加入指针检查、导入棘轮和三库测试。合入顺序:Intent、Native、Squad、Backend、Dev。均未合入。 +- go.work 未采用。实测工作区模块目录都落在 Dev 顶层 `deps/` 与 `modules/`,但最小版本选择把第三方抬高:`golang.org/x/crypto` v0.56.0→v0.57.0,`exp` `v0.0.0-20250305212735-054e65f0b394`→`v0.0.0-20251023183803-a4bb9ffd2546`,`net` v0.57.0→v0.59.0,`term` v0.45.0→v0.46.0,`text` v0.41.0→v0.42.0。库测试因此用 `GOWORK=off`。`development-guidelines` 嵌套指针仍是 `26b562d`,与 Dev 的 `ed2af3e` 不一致,`check-pins` 只告警。 +- 编号与回归测试: + - I1 `TestRecognizeClassifierRejectsBadRefinement`、`TestRecognizeClassifierRebuildsTamperedHandler` + - I2 `TestScopedSlotValidatorsDoNotInterfere` + - I6 `TestRecognizeClassifierRefinedTopGetsSlots` + - N1 `TestLoopBudgetToolCallCap`(含 `assertToolCallsPaired`) + - N2 `TestParallelHostCallbacksAreSerial`、`TestHooksDoNotRunConcurrently` + - N3 `TestStdioSlowCancelThenEcho` + - N4 `TestPresetsAndClientForChatCompletions` + - N13 `TestFetchResolveChangesToLoopbackRejected` + - N14 `TestFetchHostCheckRedirectStillRejectsPrivate` + - Q1 `TestStepApprovalApproveExecutes`、`TestStepApprovalSkipDoesNotCancel` + - Q2 `TestApprovalSurvivesRestart` + - Q3 `AtomicWrite`(`writeJSON`、黑板、store、leader inbox;既有落盘测试覆盖) + - Q4 `TestInterruptedRunningStepStaysHeld` + - Q5 `TestTwoEnginesOneRunIsBusy` + - Q8/Q9 `TestWakeupDoesNotApprovePermission`(原有 `TestWakeupRunDone`、`TestWakeupGuardMaxFires` 仍通过) + - Q14 `TestMissingTokenIsUnauthorized` + - Q15 `TestPathTraversalRejected` + - Q16 `TestOversizedBodyIs413` - 验证: -- 影响与剩余项: + - 启动 precheck(主检出,task-start 记录于 2026-10-03T00:27:10Z):verdict READY。head 与 origin/main 均为 `f4aa0348d7`。linked worktree 为 1(未合入的 `feature/agent-stack-blueprint`),未出现 `SHARED_WORKSPACE_BUSY` 或 `SYNC_REQUIRED`。 + - `make task-sync`:`Already up to date.` `[synced] sync_base=f4aa0348d7 tested_head=978bf8bdae checked_at=2026-10-03T02:10:29Z`。脚本按文件名把这一行写进了另一张任务卡,本提交已改回本卡。 + - `make test` 退出码 0(HEAD `314f798`,与 `978bf8b` 的代码相同):boundaries ok;pins ok(guidelines 三条 warn);intent 五包 ok;native 各包 ok(mcp 12.0s、tools 11.3s);squad 六包 ok;core ok;backend 各包 ok;frontend vitest 13 文件 68 项;ui tsc 与 vitest 11 文件 79 项;agent-command 两包 ok。 + - `make build` 退出码 0。版本串 `314f798+core=7c66075+backend=898fdd1+frontend=794c3e1+ui=b4a4fc1+agentcmd=cc1ad77+documents=acd6f01+native=694b08c+squad=8e987bf+intent=3130190`。 + - 负例:Backend 的 squad gitlink 临时改为 `5cbac00b994223b6aa76afd9bc70277b8b49e985` 后 `scripts/check-pins.sh` 退出码 1(`pin: modules/backend deps/agent-squad is 5cbac00b9942, Dev deps/agent-squad is 8e987bf535ef`)。已恢复到 `898fdd1`,再次运行 `pins ok`。该临时提交未推送。 +- 影响与剩余项:非 unix 平台没有 flock,只有进程内互斥(见 agent-squad PROJECT.md)。合入、发版、改写历史均未做。 From 0f8660bf40afecbafdbc4c19414a16a8d802866c Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 02:23:03 +0000 Subject: [PATCH 09/35] Record the five unmerged pull request links Why: the task card is the record of where review happens, and the links did not exist until the pull requests were opened. Evidence: Gitea returned Intent #3, Native #8, Squad #7, Backend #50, and Dev #152. None were merged. Impact: task card only. Refs: R0 R1 Co-authored-by: Cursor --- .task/feature-agent-stack-r0-r1.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.task/feature-agent-stack-r0-r1.md b/.task/feature-agent-stack-r0-r1.md index 60a2dc28..33bec37d 100644 --- a/.task/feature-agent-stack-r0-r1.md +++ b/.task/feature-agent-stack-r0-r1.md @@ -1,6 +1,6 @@ # feature/agent-stack-r0-r1 任务卡 -任务主记录:;状态:进行中;owner:weichen +任务主记录:PR #152 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/152 ;状态:进行中;owner:weichen ## 基线与授权 @@ -22,7 +22,7 @@ ## 结果与验证 -- 结果:五个仓的 `feature/agent-stack-r0-r1` 均已推送。指针:intent `3130190acb396589d6022c243bbe07ce7c31c881`,native `694b08cdbef5d52496f4425c9a22d1b77df14c23`,squad `8e987bf535efbbbf317147542e858217f2bb3504`,backend `898fdd137148836b2e52666a2b5e0d591ec308c3`。Dev 在 `978bf8b` 钉住这四条并加入指针检查、导入棘轮和三库测试。合入顺序:Intent、Native、Squad、Backend、Dev。均未合入。 +- 结果:五个 PR 已开,均未合入。合入顺序:Intent #3 https://git-home.u1680832.nyat.app:30319/weichen/Agent-Intent/pulls/3 、Native #8 https://git-home.u1680832.nyat.app:30319/weichen/Agent-Native/pulls/8 、Squad #7 https://git-home.u1680832.nyat.app:30319/weichen/Agent-Squad/pulls/7 、Backend #50 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/50 、Dev #152 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/152 。指针:intent `3130190acb396589d6022c243bbe07ce7c31c881`,native `694b08cdbef5d52496f4425c9a22d1b77df14c23`,squad `8e987bf535efbbbf317147542e858217f2bb3504`,backend `898fdd137148836b2e52666a2b5e0d591ec308c3`。Dev 在 `978bf8b` 钉住这四条并加入指针检查、导入棘轮和三库测试。 - go.work 未采用。实测工作区模块目录都落在 Dev 顶层 `deps/` 与 `modules/`,但最小版本选择把第三方抬高:`golang.org/x/crypto` v0.56.0→v0.57.0,`exp` `v0.0.0-20250305212735-054e65f0b394`→`v0.0.0-20251023183803-a4bb9ffd2546`,`net` v0.57.0→v0.59.0,`term` v0.45.0→v0.46.0,`text` v0.41.0→v0.42.0。库测试因此用 `GOWORK=off`。`development-guidelines` 嵌套指针仍是 `26b562d`,与 Dev 的 `ed2af3e` 不一致,`check-pins` 只告警。 - 编号与回归测试: - I1 `TestRecognizeClassifierRejectsBadRefinement`、`TestRecognizeClassifierRebuildsTamperedHandler` From 88d5787f29fd7b77fb9b21565866ec18afa9c6d4 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 10:19:06 +0000 Subject: [PATCH 10/35] Compare pin trees offline and archive finished task cards Why: Merge commits share a tree with the pinned feature commit, the import ratchet downloaded modules during CI, and task sync wrote the checkpoint onto the wrong card. Evidence: check-pins accepts 6c0f1e8 (same tree as Backend squad 8e987bf) and rejects empty-tree 8db069d; both objects stayed local. An empty GOMODCACHE run of lint-boundaries matches the cached go list, 14 pairs. bash -n scripts/task.sh. Impact: make pin no longer checks out Backend nested core or agent-command, and a failing pin check does not fail the target. task sync writes the branch card or warns. precheck reports completed-but-unarchived cards and card-close branches older than 24 hours. Refs: feature/agent-stack-r0-r1 Co-authored-by: Cursor --- .task/feature-agent-stack-r0-r1.md | 10 ++- Makefile | 3 +- scripts/check-pins.sh | 15 +++++ scripts/lint-boundaries.sh | 4 +- scripts/lint-imports.go | 99 ++++++++++++++++++++++++++++++ scripts/task.sh | 53 ++++++++++++++-- 6 files changed, 173 insertions(+), 11 deletions(-) create mode 100644 scripts/lint-imports.go diff --git a/.task/feature-agent-stack-r0-r1.md b/.task/feature-agent-stack-r0-r1.md index 33bec37d..1e184e36 100644 --- a/.task/feature-agent-stack-r0-r1.md +++ b/.task/feature-agent-stack-r0-r1.md @@ -7,6 +7,7 @@ - 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= f4aa0348d7f60e4dd5b6b222205a2c561465db8e - 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-stack-r0-r1(worktree);分支:feature/agent-stack-r0-r1 - 授权与交付终点:按提案第 5 节实施 R0(组合一致性)与 R1(三库 P0 与安全向 P1)。允许在 Agent-Intent、Agent-Native、Agent-Squad、Agent-System-Backend、Agent-System-Dev 五个仓各从 origin/main 切 feature/agent-stack-r0-r1,提交、推送并建 PR,推进 Dev 与 Backend 的 gitlink。终点 = 五个 PR 已开且均未合入。未授权:合入、发版、改写历史、变更分支保护、改 development-guidelines 嵌套指针。 +- 追加授权(2026-10-03,主检出 `make precheck` verdict READY,head=`f4aa0348d7`,linked worktrees=2):在同一批 `feature/agent-stack-r0-r1` 上补收尾加固与 CI。允许改 Squad 的并行审批与挂起、Dev 的指针检查、`make pin`、导入棘轮和 `task.sh`,五个仓的 CI workflow,以及任务卡欠账。R2 与 D1 等五个 PR 由所有者合入后再从各仓 main 开独立任务。未授权:合入、发版、改分支保护、配置 `SUBMODULE_TOKEN`。 ## 目标与非目标 @@ -36,11 +37,11 @@ - N14 `TestFetchHostCheckRedirectStillRejectsPrivate` - Q1 `TestStepApprovalApproveExecutes`、`TestStepApprovalSkipDoesNotCancel` - Q2 `TestApprovalSurvivesRestart` - - Q3 `AtomicWrite`(`writeJSON`、黑板、store、leader inbox;既有落盘测试覆盖) + - Q3 `TestAtomicWriteLeavesNoTemp`、`TestAtomicWriteRenameFailureKeepsOriginal` - Q4 `TestInterruptedRunningStepStaysHeld` - Q5 `TestTwoEnginesOneRunIsBusy` - Q8/Q9 `TestWakeupDoesNotApprovePermission`(原有 `TestWakeupRunDone`、`TestWakeupGuardMaxFires` 仍通过) - - Q14 `TestMissingTokenIsUnauthorized` + - Q14 `TestListenGuard`、`TestMissingTokenIsUnauthorized` - Q15 `TestPathTraversalRejected` - Q16 `TestOversizedBodyIs413` - 验证: @@ -50,3 +51,8 @@ - `make build` 退出码 0。版本串 `314f798+core=7c66075+backend=898fdd1+frontend=794c3e1+ui=b4a4fc1+agentcmd=cc1ad77+documents=acd6f01+native=694b08c+squad=8e987bf+intent=3130190`。 - 负例:Backend 的 squad gitlink 临时改为 `5cbac00b994223b6aa76afd9bc70277b8b49e985` 后 `scripts/check-pins.sh` 退出码 1(`pin: modules/backend deps/agent-squad is 5cbac00b9942, Dev deps/agent-squad is 8e987bf535ef`)。已恢复到 `898fdd1`,再次运行 `pins ok`。该临时提交未推送。 - 影响与剩余项:非 unix 平台没有 flock,只有进程内互斥(见 agent-squad PROJECT.md)。合入、发版、改写历史均未做。 +- 收尾加固(2026-10-03): + - Squad `73b8d09545a8c479344aded2227de5fc520ef769`。并行组第二步 `TestParallelGroupSecondStepApprovalHolds`、`TestParallelGroupSecondStepPermissionHolds`;自由文本 `TestFreeTextKeepsChoiceHold`;失败后挂起仍在 `TestFailedDecisionRestoresPending`。`GOWORK=off go vet ./...`、`go test -count=1 ./squad/ ./cli/`、`go test -race -count=1 ./squad/` 均通过。 + - 同 tree 正例:Backend 所记 squad `8e987bf535efbbbf317147542e858217f2bb3504` 的 tree `0fe06ce3ceea5cfa32476e2f0eed7f86cebc44a0`,`commit-tree` 得本地 `6c0f1e8bf1be85f10163eb0c6eebb5a6aa8f8798` 并临时写入 Dev 索引。`check-pins` 输出 `ok modules/backend agent-squad (same tree)`,退出码 0。 + - 负例:空 tree 的本地提交 `8db069d7352d` 写入同一索引后,`check-pins` 退出码 1,`pin: modules/backend deps/agent-squad is 8e987bf535ef, Dev deps/agent-squad is 8db069d7352d`。索引已 `git reset` 恢复,再次 `pins ok`。两个临时对象都没有推送。 + - 棘轮:`scripts/lint-imports.go` 在空 `GOMODCACHE` 下的配对与有缓存的 `go list` 相同,14 对。`GOMODCACHE=$(mktemp -d) bash scripts/lint-boundaries.sh` 与默认缓存的输出都是 `boundaries ok`。 diff --git a/Makefile b/Makefile index 4ea73660..9178bb7d 100644 --- a/Makefile +++ b/Makefile @@ -149,9 +149,8 @@ pin: @for m in modules/core modules/backend modules/frontend modules/ui modules/documents deps/agent-native deps/agent-squad deps/agent-intent deps/error-code-system deps/logging-system deps/development-guidelines deps/agent-command; do \ (git -C $$m fetch -q origin && git -C $$m checkout -q origin/main) || echo "skip $$m"; \ done - @cd $(BACKEND)/deps/agent-system-core && git fetch -q origin && git checkout -q origin/main || true - @cd $(BACKEND)/deps/agent-command && git fetch -q origin && git checkout -q origin/main || true @echo "submodule 指针已推进;请 make test 后 git add .gitmodules modules deps && git commit" + @scripts/check-pins.sh || echo "pin: check-pins 未通过,上面列出的容器需要重钉;pin 本身不失败" clean: rm -rf $(BIN) $(FRONTEND)/dist $(FRONTEND)/node_modules $(UI)/node_modules data diff --git a/scripts/check-pins.sh b/scripts/check-pins.sh index 715272b0..219a017e 100755 --- a/scripts/check-pins.sh +++ b/scripts/check-pins.sh @@ -20,6 +20,21 @@ check_link() { return fi if [ "$sha" != "$expect" ]; then + local sha_tree expect_tree + if ! sha_tree=$(git -C "$expect_path" rev-parse "${sha}^{tree}" 2>/dev/null); then + echo "pin: $container deps/$name ${sha:0:12} is missing locally; fetch $expect_path first" >&2 + fail=1 + return + fi + if ! expect_tree=$(git -C "$expect_path" rev-parse "${expect}^{tree}" 2>/dev/null); then + echo "pin: Dev $expect_path ${expect:0:12} is missing locally; fetch $expect_path first" >&2 + fail=1 + return + fi + if [ "$sha_tree" = "$expect_tree" ]; then + echo "ok $container $name (same tree)" + return + fi echo "pin: $container deps/$name is ${sha:0:12}, Dev $expect_path is ${expect:0:12}" >&2 fail=1 return diff --git a/scripts/lint-boundaries.sh b/scripts/lint-boundaries.sh index 00842346..ba35e59c 100755 --- a/scripts/lint-boundaries.sh +++ b/scripts/lint-boundaries.sh @@ -34,8 +34,8 @@ siblings=(agent-intent agent-native agent-squad) for dir in deps/agent-intent deps/agent-native deps/agent-squad; do mod=$(awk '/^module /{print $2; exit}' "$root/$dir/go.mod") ( - cd "$root/$dir" - GOWORK=off go list -f '{{.ImportPath}}{{range .Imports}} {{.}}{{end}}' ./... + cd "$root/scripts" + go run lint-imports.go "$root/$dir" ) | while read -r importer rest; do for imp in $rest; do for sib in "${siblings[@]}"; do diff --git a/scripts/lint-imports.go b/scripts/lint-imports.go new file mode 100644 index 00000000..488340eb --- /dev/null +++ b/scripts/lint-imports.go @@ -0,0 +1,99 @@ +// 离线列出模块内非测试 Go 文件的导入。 +// 只使用标准库,跳过 _test.go 和带 go.mod 的子目录,避免 go list 去下载模块图。 +package main + +import ( + "bufio" + "fmt" + "go/parser" + "go/token" + "os" + "path/filepath" + "strings" +) + +func main() { + for _, root := range os.Args[1:] { + mod := modulePath(filepath.Join(root, "go.mod")) + if mod == "" { + fmt.Fprintf(os.Stderr, "lint-imports: %s has no module path\n", root) + os.Exit(1) + } + err := filepath.WalkDir(root, func(path string, d os.DirEntry, err error) error { + if err != nil || !d.IsDir() { + return nil + } + name := d.Name() + if name == "vendor" || (name != "." && strings.HasPrefix(name, ".")) { + return filepath.SkipDir + } + if path != root { + if _, statErr := os.Stat(filepath.Join(path, "go.mod")); statErr == nil { + return filepath.SkipDir + } + } + return printImports(root, mod, path) + }) + if err != nil { + fmt.Fprintf(os.Stderr, "lint-imports: %v\n", err) + os.Exit(1) + } + } +} + +func modulePath(goMod string) string { + f, err := os.Open(goMod) + if err != nil { + return "" + } + defer f.Close() + sc := bufio.NewScanner(f) + for sc.Scan() { + fields := strings.Fields(sc.Text()) + if len(fields) >= 2 && fields[0] == "module" { + return fields[1] + } + } + return "" +} + +func printImports(root, mod, dir string) error { + rel, err := filepath.Rel(root, dir) + if err != nil { + return err + } + importer := mod + if rel != "." { + importer = mod + "/" + filepath.ToSlash(rel) + } + entries, err := os.ReadDir(dir) + if err != nil { + return err + } + fset := token.NewFileSet() + seen := map[string]struct{}{} + var imports []string + for _, entry := range entries { + name := entry.Name() + if entry.IsDir() || !strings.HasSuffix(name, ".go") || strings.HasSuffix(name, "_test.go") { + continue + } + file, err := parser.ParseFile(fset, filepath.Join(dir, name), nil, parser.ImportsOnly) + if err != nil { + continue + } + for _, imp := range file.Imports { + path := strings.Trim(imp.Path.Value, `"`) + if _, ok := seen[path]; ok { + continue + } + seen[path] = struct{}{} + imports = append(imports, path) + } + } + if len(imports) == 0 { + return nil + } + fmt.Printf("%s %s\n", importer, strings.Join(imports, " ")) + return nil +} diff --git a/scripts/task.sh b/scripts/task.sh index 84c1617a..f9814795 100755 --- a/scripts/task.sh +++ b/scripts/task.sh @@ -42,6 +42,23 @@ cmd_precheck() { fi done [ -n "$open_cards" ] && echo "[cards] 已合入未闭合任务卡:$(echo $open_cards)——make task-close 回填归档(主检出运行)" + local done_open="" stale="" now ts ref + for pc in .task/*.md; do + [ -f "$pc" ] || continue + case "$(card_status "$pc")" in + 已完成*) done_open="${done_open} ${pc##*/}" ;; + esac + done + [ -n "$done_open" ] && echo "[cards] 已完成但未归档:$(echo $done_open)" + now=$(date +%s) + while read -r ref ts; do + [ -n "$ref" ] || continue + git merge-base --is-ancestor "$ref" "origin/${TARGET_BRANCH}" 2>/dev/null && continue + if [ $((now - ts)) -gt 86400 ]; then + stale="${stale} ${ref#origin/}" + fi + done < <(git for-each-ref --format='%(refname:short) %(committerdate:unix)' "refs/remotes/origin/feature/card-close-*") + [ -n "$stale" ] && echo "[cards] 闭合分支超过 24 小时未合入:$(echo $stale)" echo "[required-reading] core/baseline.md, workflows/delivery.md §1$([ "$dirty" -gt 0 ] && echo ", standards/collaboration.md(树脏=他人或未收尾现场,不得写入)")" echo "[R0] $(echo "$rmain" | cut -c1-10)(完整:$rmain)" if [ "$dirty" -gt 0 ] || [ "${sub_drift:-0}" -gt 0 ]; then @@ -119,13 +136,27 @@ cmd_sync() { [ "$(git status --porcelain | grep -v '^.. \.zcode/' | wc -l)" -eq 0 ] || die "dirty tree — 先显式提交;不隐式 stash(collaboration.md:11)" git merge --no-edit "origin/${TARGET_BRANCH}" git merge-base --is-ancestor "origin/${TARGET_BRANCH}" HEAD || die "sync incomplete" - local base head card + local base head card branch slug pc base=$(git rev-parse "origin/${TARGET_BRANCH}"); head=$(git rev-parse HEAD) - card=$(ls .task/*.md 2>/dev/null | head -1 || true) - if [ -n "$card" ]; then + branch=$(git rev-parse --abbrev-ref HEAD) + slug=$(echo "$branch" | tr '/' '-') + card=".task/${slug}.md" + if [ ! -f "$card" ]; then + card="" + for pc in .task/*.md; do + [ -f "$pc" ] || continue + if [ "$(card_of_branch "$pc")" = "$branch" ]; then + card=$pc + break + fi + done + fi + if [ -n "$card" ] && [ -f "$card" ]; then printf '| 同步前验收 | %s | %s | %s |\n' "$base" "$head" "$(date -u +%FT%TZ)" >> "$card" git add "$card" git commit -q -m "Record the sync checkpoint" || true + else + echo "[warn] 找不到分支 ${branch} 的任务卡,同步记录未写入" >&2 fi echo "[synced] sync_base=$(echo "$base" | cut -c1-10) tested_head=$(echo "$head" | cut -c1-10) checked_at=$(date -u +%FT%TZ)" echo "[next] 跑正式验收(make test 等),证据写入任务卡" @@ -189,13 +220,18 @@ cmd_close() { for c in .task/*.md; do [ -f "$c" ] || continue b=$(card_of_branch "$c"); [ -n "$b" ] || continue - st=$(card_status "$c"); case "$st" in 已完成*) continue ;; esac + st=$(card_status "$c") + done_unarchived=0 + case "$st" in 已完成*) done_unarchived=1 ;; esac if card_pending "${c##*/}"; then echo "[close] ${c##*/} 已有待合入的闭合分支,跳过(等其 PR 合入)" continue fi m=$(card_merge "$b") || m="" - [ -n "$m" ] || continue + if [ -z "$m" ]; then + [ "$done_unarchived" = 1 ] || continue + m="ARCHIVE" + fi cards="$cards $c|$b|$m" done @@ -213,6 +249,13 @@ $c|$b|$m" local n=0 sha subject pr closed_list="" while IFS='|' read -r c b m; do [ -n "$c" ] || continue + if [ "$m" = "ARCHIVE" ]; then + mkdir -p .task/archive + git mv "$c" ".task/archive/${c##*/}" + closed_list="$closed_list ${c##*/}(already-complete)" + n=$((n+1)) + continue + fi sha="${m%%|*}"; subject="${m#*|}" pr=$(printf '%s' "$subject" | sed -n 's/.*(#\([0-9]\+\)) from.*/\1/p') [ -n "$pr" ] || pr=unknown From 42a92c93120fcc4aabbd303be4be6c8384180c47 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 10:19:57 +0000 Subject: [PATCH 11/35] Set the CI module proxy and name the make test step Why: make test downloads Go modules, and the runner cannot reach proxy.golang.org. Evidence: The test job sets GOPROXY=https://goproxy.cn,direct. The step name lists boundaries, pins, libs, core, backend, frontend, ui, and agent-command. Impact: npm still uses the default registry; add the npmmirror only if npm ci times out. Refs: feature/agent-stack-r0-r1 Co-authored-by: Cursor --- .gitea/workflows/ci.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 3c750cef..531c8e9e 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -8,6 +8,8 @@ on: jobs: test: runs-on: ubuntu-latest + env: + GOPROXY: https://goproxy.cn,direct steps: - name: Configure submodule auth over HTTPS run: git config --global url."https://weichen:${{ secrets.SUBMODULE_TOKEN }}@git-home.u1680832.nyat.app:30319/".insteadOf "ssh://git@git-ssh.u1680832.nyat.app:31411/" @@ -21,7 +23,7 @@ jobs: - uses: actions/setup-node@v4 with: node-version: "22" - - name: Combination test (core + backend + frontend) + - name: make test (boundaries, pins, libs, core, backend, frontend, ui, agent-command) run: make test - name: Build the single binary run: make build From 755474e6f5b4fb404c14d84437428d4886e5317f Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 10:21:41 +0000 Subject: [PATCH 12/35] Pin the agent stack to the hardened pull request heads Why: Dev must record the commits that contain the hold fixes, the offline pin check, and the CI checkout change. Evidence: intent 7f7879b06b053f0a62746309b79e0e1b9a00f42d, native 91c155618487e21edeb4f1d3cc27e985aae2b0d2, squad e928ea3c0fa649cbbbad22a93a1bc0a12dee5f7d, backend ef0a1bef0f7bee626e59f160be51fb0e5f6aa692. Impact: The four gitlinks match the open pull request heads. Other pins are unchanged. Refs: feature/agent-stack-r0-r1 Co-authored-by: Cursor --- deps/agent-intent | 2 +- deps/agent-native | 2 +- deps/agent-squad | 2 +- modules/backend | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/deps/agent-intent b/deps/agent-intent index 3130190a..7f7879b0 160000 --- a/deps/agent-intent +++ b/deps/agent-intent @@ -1 +1 @@ -Subproject commit 3130190acb396589d6022c243bbe07ce7c31c881 +Subproject commit 7f7879b06b053f0a62746309b79e0e1b9a00f42d diff --git a/deps/agent-native b/deps/agent-native index 694b08cd..91c15561 160000 --- a/deps/agent-native +++ b/deps/agent-native @@ -1 +1 @@ -Subproject commit 694b08cdbef5d52496f4425c9a22d1b77df14c23 +Subproject commit 91c155618487e21edeb4f1d3cc27e985aae2b0d2 diff --git a/deps/agent-squad b/deps/agent-squad index 8e987bf5..e928ea3c 160000 --- a/deps/agent-squad +++ b/deps/agent-squad @@ -1 +1 @@ -Subproject commit 8e987bf535efbbbf317147542e858217f2bb3504 +Subproject commit e928ea3c0fa649cbbbad22a93a1bc0a12dee5f7d diff --git a/modules/backend b/modules/backend index 898fdd13..ef0a1bef 160000 --- a/modules/backend +++ b/modules/backend @@ -1 +1 @@ -Subproject commit 898fdd137148836b2e52666a2b5e0d591ec308c3 +Subproject commit ef0a1bef0f7bee626e59f160be51fb0e5f6aa692 From 789a6f4c61035b3e8916b1cb15b9d682ce93b333 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 10:22:12 +0000 Subject: [PATCH 13/35] Record the sync checkpoint --- .task/feature-agent-stack-r0-r1.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.task/feature-agent-stack-r0-r1.md b/.task/feature-agent-stack-r0-r1.md index 1e184e36..40f11bd7 100644 --- a/.task/feature-agent-stack-r0-r1.md +++ b/.task/feature-agent-stack-r0-r1.md @@ -56,3 +56,4 @@ - 同 tree 正例:Backend 所记 squad `8e987bf535efbbbf317147542e858217f2bb3504` 的 tree `0fe06ce3ceea5cfa32476e2f0eed7f86cebc44a0`,`commit-tree` 得本地 `6c0f1e8bf1be85f10163eb0c6eebb5a6aa8f8798` 并临时写入 Dev 索引。`check-pins` 输出 `ok modules/backend agent-squad (same tree)`,退出码 0。 - 负例:空 tree 的本地提交 `8db069d7352d` 写入同一索引后,`check-pins` 退出码 1,`pin: modules/backend deps/agent-squad is 8e987bf535ef, Dev deps/agent-squad is 8db069d7352d`。索引已 `git reset` 恢复,再次 `pins ok`。两个临时对象都没有推送。 - 棘轮:`scripts/lint-imports.go` 在空 `GOMODCACHE` 下的配对与有缓存的 `go list` 相同,14 对。`GOMODCACHE=$(mktemp -d) bash scripts/lint-boundaries.sh` 与默认缓存的输出都是 `boundaries ok`。 +| 同步前验收 | f4aa0348d7f60e4dd5b6b222205a2c561465db8e | 755474e6f5b4fb404c14d84437428d4886e5317f | 2026-10-03T10:22:12Z | From a88b8d033349e55fc522048b3850e557d70f8b45 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 10:23:12 +0000 Subject: [PATCH 14/35] Record the cascade pin and verification evidence Why: The task card still named the previous library commits, and acceptance needs the sync, test, and build evidence on this card. Evidence: make task-sync at 2026-10-03T10:22:12Z, make test exit 0, make build version 789a6f4 with backend ef0a1be, native 91c1556, squad e928ea3, intent 7f7879b. Impact: Documentation only. The gitlinks were already committed. Refs: feature/agent-stack-r0-r1 Co-authored-by: Cursor --- .task/feature-agent-stack-r0-r1.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.task/feature-agent-stack-r0-r1.md b/.task/feature-agent-stack-r0-r1.md index 40f11bd7..b3df1fe2 100644 --- a/.task/feature-agent-stack-r0-r1.md +++ b/.task/feature-agent-stack-r0-r1.md @@ -51,6 +51,12 @@ - `make build` 退出码 0。版本串 `314f798+core=7c66075+backend=898fdd1+frontend=794c3e1+ui=b4a4fc1+agentcmd=cc1ad77+documents=acd6f01+native=694b08c+squad=8e987bf+intent=3130190`。 - 负例:Backend 的 squad gitlink 临时改为 `5cbac00b994223b6aa76afd9bc70277b8b49e985` 后 `scripts/check-pins.sh` 退出码 1(`pin: modules/backend deps/agent-squad is 5cbac00b9942, Dev deps/agent-squad is 8e987bf535ef`)。已恢复到 `898fdd1`,再次运行 `pins ok`。该临时提交未推送。 - 影响与剩余项:非 unix 平台没有 flock,只有进程内互斥(见 agent-squad PROJECT.md)。合入、发版、改写历史均未做。 +- 级联钉住与验收(2026-10-03,Dev `789a6f4`): + - 指针:intent `7f7879b06b053f0a62746309b79e0e1b9a00f42d`,native `91c155618487e21edeb4f1d3cc27e985aae2b0d2`,squad `e928ea3c0fa649cbbbad22a93a1bc0a12dee5f7d`,backend `ef0a1bef0f7bee626e59f160be51fb0e5f6aa692`。 + - `make task-sync`:`Already up to date.` `[synced] sync_base=f4aa0348d7 tested_head=755474e6f5 checked_at=2026-10-03T10:22:12Z`。记录写在本卡。 + - `make test` 退出码 0:`boundaries ok`;`pins ok`(guidelines 三条 warn);intent、native、squad、core、backend、frontend(13 文件 68 项)、ui(tsc 与 11 文件 79 项)、agent-command 均通过。 + - `make build` 退出码 0。版本串 `789a6f4+core=7c66075+backend=ef0a1be+frontend=794c3e1+ui=b4a4fc1+agentcmd=cc1ad77+documents=acd6f01+native=91c1556+squad=e928ea3+intent=7f7879b`。 + - 各库在钉住后的头上另跑了 `scripts/submodule-consistency.sh`(intent、native、squad 均为 ok)以及 vet、test、race。Backend 跑了 `GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./...`,退出码 0。 - 收尾加固(2026-10-03): - Squad `73b8d09545a8c479344aded2227de5fc520ef769`。并行组第二步 `TestParallelGroupSecondStepApprovalHolds`、`TestParallelGroupSecondStepPermissionHolds`;自由文本 `TestFreeTextKeepsChoiceHold`;失败后挂起仍在 `TestFailedDecisionRestoresPending`。`GOWORK=off go vet ./...`、`go test -count=1 ./squad/ ./cli/`、`go test -race -count=1 ./squad/` 均通过。 - 同 tree 正例:Backend 所记 squad `8e987bf535efbbbf317147542e858217f2bb3504` 的 tree `0fe06ce3ceea5cfa32476e2f0eed7f86cebc44a0`,`commit-tree` 得本地 `6c0f1e8bf1be85f10163eb0c6eebb5a6aa8f8798` 并临时写入 Dev 索引。`check-pins` 输出 `ok modules/backend agent-squad (same tree)`,退出码 0。 From 11adf5b940fd87c66cdef85eb207c479815dd87b Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 10:24:48 +0000 Subject: [PATCH 15/35] Close 1 merged task card(s) and archive them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Why: branches merged into main had left their task cards open; backfill status and archive to prevent bookkeeping debt. Evidence: feature-duplication-lesson-records.md(PR#13) — merges verified via git log --merges against origin/main. Impact: .task/*.md moved to .task/archive/ with status backfilled; no code or submodule change. Refs: task.sh close (card-autoclose-r1) --- .task/{ => archive}/feature-duplication-lesson-records.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) rename .task/{ => archive}/feature-duplication-lesson-records.md (92%) diff --git a/.task/feature-duplication-lesson-records.md b/.task/archive/feature-duplication-lesson-records.md similarity index 92% rename from .task/feature-duplication-lesson-records.md rename to .task/archive/feature-duplication-lesson-records.md index 0164b263..20612e9e 100644 --- a/.task/feature-duplication-lesson-records.md +++ b/.task/archive/feature-duplication-lesson-records.md @@ -1,6 +1,6 @@ # feature/duplication-lesson-records 任务卡 -任务主记录:Agent-System-Documents PR#7(内容)+ 本仓 PR(gitlink 钉入,链接见下方回填);状态:已完成;owner:weichen +任务主记录:PR #13 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/13(merge f20c634fea);状态:已完成(回填);owner:weichen ## 基线与授权 @@ -65,3 +65,9 @@ | 同步前验收 | 3072611209c445a0d87d54545cfd23d2b971e177 | 957de90142bc98bde3f479092e3892754000ef15 | 2026-10-01T05:23:44Z | | 同步前验收 | 4c4071e5d8e256dd8f82ba9c74efa1effd1e9df3 | 0ed945956af3f10231f7d80706c798fc83617e6c | 2026-10-01T04:50:27Z | | 同步前验收 | 4adc4cc458f15546e5605dc55843acc26b310c41 | 916437ca2d93310ed5b4e517f99b1a787d9af843 | 2026-10-01T06:09:46Z | + +## 闭合记录(card-autoclose 回填) + +- 依据:merge f20c634fea9e4316db664b4da7b4a6c772dd855e(PR #13)已包含于 origin/main,分支成果已落盘;本段为合入后回填。 +- 合并主题:Merge pull request 'Pin documents with the duplication lesson and follow-up records' (#13) from feature/duplication-lesson-records into main +- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。 From 2bf17346739ea48110a188662f01a4dcdb8a7daa Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 10:26:36 +0000 Subject: [PATCH 16/35] Record the first CI timeout on the task card Why: The acceptance note would otherwise claim the workflows were only pending, while the intent run already failed cloning the checkout action. Evidence: Agent-Intent actions run 661 failed after 30s with dial tcp 20.205.243.166:443 i/o timeout. Impact: Documentation only. No proxy change and no branch-protection change. Refs: feature/agent-stack-r0-r1 Co-authored-by: Cursor --- .task/feature-agent-stack-r0-r1.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.task/feature-agent-stack-r0-r1.md b/.task/feature-agent-stack-r0-r1.md index b3df1fe2..9f44aaa6 100644 --- a/.task/feature-agent-stack-r0-r1.md +++ b/.task/feature-agent-stack-r0-r1.md @@ -57,6 +57,7 @@ - `make test` 退出码 0:`boundaries ok`;`pins ok`(guidelines 三条 warn);intent、native、squad、core、backend、frontend(13 文件 68 项)、ui(tsc 与 11 文件 79 项)、agent-command 均通过。 - `make build` 退出码 0。版本串 `789a6f4+core=7c66075+backend=ef0a1be+frontend=794c3e1+ui=b4a4fc1+agentcmd=cc1ad77+documents=acd6f01+native=91c1556+squad=e928ea3+intent=7f7879b`。 - 各库在钉住后的头上另跑了 `scripts/submodule-consistency.sh`(intent、native、squad 均为 ok)以及 vet、test、race。Backend 跑了 `GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./...`,退出码 0。 + - CI 首轮未绿。Intent 运行 661(头 `7f7879b`)在 30 秒内失败:克隆 `actions/checkout` 时 `dial tcp 20.205.243.166:443: i/o timeout`。按计划停下,没有改走宿主代理,也没有预热缓存。`SUBMODULE_TOKEN` 与必需检查都未配置。 - 收尾加固(2026-10-03): - Squad `73b8d09545a8c479344aded2227de5fc520ef769`。并行组第二步 `TestParallelGroupSecondStepApprovalHolds`、`TestParallelGroupSecondStepPermissionHolds`;自由文本 `TestFreeTextKeepsChoiceHold`;失败后挂起仍在 `TestFailedDecisionRestoresPending`。`GOWORK=off go vet ./...`、`go test -count=1 ./squad/ ./cli/`、`go test -race -count=1 ./squad/` 均通过。 - 同 tree 正例:Backend 所记 squad `8e987bf535efbbbf317147542e858217f2bb3504` 的 tree `0fe06ce3ceea5cfa32476e2f0eed7f86cebc44a0`,`commit-tree` 得本地 `6c0f1e8bf1be85f10163eb0c6eebb5a6aa8f8798` 并临时写入 Dev 索引。`check-pins` 输出 `ok modules/backend agent-squad (same tree)`,退出码 0。 From 00c047533ea79f47a79b979a6a55dc3a76e36a39 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 10:31:44 +0000 Subject: [PATCH 17/35] Clone the repo in CI without GitHub-hosted actions Why: The runner cannot reach github.com, so actions/checkout and setup-node would time out before make test. Evidence: Go 1.27.1 comes from mirrors.aliyun.com and Node 22.23.3 from npmmirror. Checkout uses the job token and GITHUB_SHA. Impact: Submodule checkout still requires SUBMODULE_TOKEN. A missing secret fails the job with that message. Refs: feature/agent-stack-r0-r1 Co-authored-by: Cursor --- .gitea/workflows/ci.yaml | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 531c8e9e..b03983ff 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -11,18 +11,34 @@ jobs: env: GOPROXY: https://goproxy.cn,direct steps: - - name: Configure submodule auth over HTTPS - run: git config --global url."https://weichen:${{ secrets.SUBMODULE_TOKEN }}@git-home.u1680832.nyat.app:30319/".insteadOf "ssh://git@git-ssh.u1680832.nyat.app:31411/" - - uses: actions/checkout@v4 - with: - submodules: recursive - fetch-depth: 0 - - uses: actions/setup-go@v5 - with: - go-version: "1.27" - - uses: actions/setup-node@v4 - with: - node-version: "22" + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: | + set -euo pipefail + git init -q + git remote add origin "${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}.git" + git -c http.extraheader="AUTHORIZATION: token ${TOKEN}" fetch --depth=1 origin "${GITHUB_SHA}" + git checkout -q --detach FETCH_HEAD + if [ -z "${SUBMODULE_TOKEN}" ]; then + echo "SUBMODULE_TOKEN is not configured" >&2 + exit 1 + fi + git config --global url."https://weichen:${SUBMODULE_TOKEN}@git-home.u1680832.nyat.app:30319/".insteadOf "ssh://git@git-ssh.u1680832.nyat.app:31411/" + git -c fetch.recurseSubmodules=false submodule update --init --recursive + - name: Install Go 1.27.1 + run: | + set -euo pipefail + curl -fsSL -o "$RUNNER_TEMP/go.tgz" https://mirrors.aliyun.com/golang/go1.27.1.linux-amd64.tar.gz + tar -C /usr/local -xzf "$RUNNER_TEMP/go.tgz" + ln -sfn /usr/local/go/bin/go /usr/local/bin/go + ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt + - name: Install Node 22 + run: | + set -euo pipefail + curl -fsSL -o "$RUNNER_TEMP/node.tar.xz" https://npmmirror.com/mirrors/node/v22.23.3/node-v22.23.3-linux-x64.tar.xz + tar -C /usr/local --strip-components=1 -xJf "$RUNNER_TEMP/node.tar.xz" - name: make test (boundaries, pins, libs, core, backend, frontend, ui, agent-command) run: make test - name: Build the single binary From a25e79f4ef2c2ec4c0bd3dbf3fe5d042db7261eb Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 10:38:40 +0000 Subject: [PATCH 18/35] Install python-docx before the CI backend tests Why: The runner image has Python but not python-docx, so TestLintErrorContinues failed after checkout succeeded. Evidence: Agent-System-Dev actions job 1012 reported ModuleNotFoundError: No module named docx. Impact: The package comes from the Tsinghua PyPI mirror. Library CI still stops until SUBMODULE_TOKEN is set. Refs: feature/agent-stack-r0-r1 Co-authored-by: Cursor --- .gitea/workflows/ci.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index b03983ff..cf789383 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -39,6 +39,8 @@ jobs: set -euo pipefail curl -fsSL -o "$RUNNER_TEMP/node.tar.xz" https://npmmirror.com/mirrors/node/v22.23.3/node-v22.23.3-linux-x64.tar.xz tar -C /usr/local --strip-components=1 -xJf "$RUNNER_TEMP/node.tar.xz" + - name: Install python-docx for backend lint tests + run: python3 -m pip install --break-system-packages -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx - name: make test (boundaries, pins, libs, core, backend, frontend, ui, agent-command) run: make test - name: Build the single binary From 2e43703838a8fcb84cd00d669f28038b8a8d3efd Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 10:40:38 +0000 Subject: [PATCH 19/35] Install the house-style Python packages in CI Why: lint.py imports python-pptx and openpyxl at import time, so installing only python-docx still skipped the layout finding. Evidence: actions run 680 failed TestLintErrorContinues with lint reason missing after python-docx was present. Impact: CI installs python-docx, python-pptx, and openpyxl from the Tsinghua index. Refs: feature/agent-stack-r0-r1 Co-authored-by: Cursor --- .gitea/workflows/ci.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index cf789383..17f9a9ca 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -39,8 +39,8 @@ jobs: set -euo pipefail curl -fsSL -o "$RUNNER_TEMP/node.tar.xz" https://npmmirror.com/mirrors/node/v22.23.3/node-v22.23.3-linux-x64.tar.xz tar -C /usr/local --strip-components=1 -xJf "$RUNNER_TEMP/node.tar.xz" - - name: Install python-docx for backend lint tests - run: python3 -m pip install --break-system-packages -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx + - name: Install house-style Python packages + run: python3 -m pip install --break-system-packages -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx python-pptx openpyxl - name: make test (boundaries, pins, libs, core, backend, frontend, ui, agent-command) run: make test - name: Build the single binary From 6475650038814557cfa0e27e9854b3066dbc3568 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 12:50:55 +0000 Subject: [PATCH 20/35] Close 1 merged task card(s) and archive them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Why: branches merged into main had left their task cards open; backfill status and archive to prevent bookkeeping debt. Evidence: feature-agent-stack-r0-r1.md(PR#unknown) — merges verified via git log --merges against origin/main. Impact: .task/*.md moved to .task/archive/ with status backfilled; no code or submodule change. Refs: task.sh close (card-autoclose-r1) --- .task/{ => archive}/feature-agent-stack-r0-r1.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) rename .task/{ => archive}/feature-agent-stack-r0-r1.md (94%) diff --git a/.task/feature-agent-stack-r0-r1.md b/.task/archive/feature-agent-stack-r0-r1.md similarity index 94% rename from .task/feature-agent-stack-r0-r1.md rename to .task/archive/feature-agent-stack-r0-r1.md index 9f44aaa6..dbaa4ea8 100644 --- a/.task/feature-agent-stack-r0-r1.md +++ b/.task/archive/feature-agent-stack-r0-r1.md @@ -1,6 +1,6 @@ # feature/agent-stack-r0-r1 任务卡 -任务主记录:PR #152 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/152 ;状态:进行中;owner:weichen +任务主记录:PR #152 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/152 ;状态:已完成(回填);owner:weichen ## 基线与授权 @@ -64,3 +64,9 @@ - 负例:空 tree 的本地提交 `8db069d7352d` 写入同一索引后,`check-pins` 退出码 1,`pin: modules/backend deps/agent-squad is 8e987bf535ef, Dev deps/agent-squad is 8db069d7352d`。索引已 `git reset` 恢复,再次 `pins ok`。两个临时对象都没有推送。 - 棘轮:`scripts/lint-imports.go` 在空 `GOMODCACHE` 下的配对与有缓存的 `go list` 相同,14 对。`GOMODCACHE=$(mktemp -d) bash scripts/lint-boundaries.sh` 与默认缓存的输出都是 `boundaries ok`。 | 同步前验收 | f4aa0348d7f60e4dd5b6b222205a2c561465db8e | 755474e6f5b4fb404c14d84437428d4886e5317f | 2026-10-03T10:22:12Z | + +## 闭合记录(card-autoclose 回填) + +- 依据:merge 7dd107bae40a203d684b0c9a3fd81ca316fd8c90(PR #unknown)已包含于 origin/main,分支成果已落盘;本段为合入后回填。 +- 合并主题:Merge pull request #152 from feature/agent-stack-r0-r1 into main +- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。 From 3e2d8c7cd2b8480a5c4c3005176dc5509f731d72 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 12:52:46 +0000 Subject: [PATCH 21/35] Record the task card for feature-agent-stack-r2 --- .task/feature-agent-stack-r2.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .task/feature-agent-stack-r2.md diff --git a/.task/feature-agent-stack-r2.md b/.task/feature-agent-stack-r2.md new file mode 100644 index 00000000..993f9056 --- /dev/null +++ b/.task/feature-agent-stack-r2.md @@ -0,0 +1,25 @@ +# feature/agent-stack-r2 任务卡 + +任务主记录:;状态:进行中;owner:weichen + +## 基线与授权 + +- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 5cd138084ae52b22f02ae4d2e358f6147b1aed55 +- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-stack-r2(worktree);分支:feature/agent-stack-r2 +- 授权与交付终点:<本次允许的动作与终点;未授权事项写明> + +## 目标与非目标 + +<预期结果、受影响入口/模块/契约;明确不做什么。> + +## 同步记录 + +| 节点 | sync_base_sha | tested_head_sha | checked_at | +|---|---|---|---| +| 启动 | 5cd138084ae52b22f02ae4d2e358f6147b1aed55 | 5cd138084ae52b22f02ae4d2e358f6147b1aed55 | 2026-10-03T12:52:46Z | + +## 结果与验证(完成后填写) + +- 结果: +- 验证: +- 影响与剩余项: From 50312be0cbcc30964f0307f2e32f179b1eb7b60c Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 13:11:21 +0000 Subject: [PATCH 22/35] Pin the R2 library and backend heads Why: Dev must record the intent, native, squad, and backend commits that close this batch so check-pins sees one tree. Evidence: agent-intent 05e74d8, agent-native 11d1a76, agent-squad 1bb0c3a, and backend a494375 are the feature/agent-stack-r2 heads. Impact: four gitlinks move and the task card records the batch scope. Refs: R2 pin Co-authored-by: Cursor --- .task/feature-agent-stack-r2.md | 11 ++++++----- deps/agent-intent | 2 +- deps/agent-native | 2 +- deps/agent-squad | 2 +- modules/backend | 2 +- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/.task/feature-agent-stack-r2.md b/.task/feature-agent-stack-r2.md index 993f9056..c289ce52 100644 --- a/.task/feature-agent-stack-r2.md +++ b/.task/feature-agent-stack-r2.md @@ -6,11 +6,12 @@ - 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 5cd138084ae52b22f02ae4d2e358f6147b1aed55 - 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-stack-r2(worktree);分支:feature/agent-stack-r2 -- 授权与交付终点:<本次允许的动作与终点;未授权事项写明> +- 授权与交付终点:合入 Intent、Native、Squad、Backend、Dev 的 feature/agent-stack-r2,然后在本 worktree 运行 make task-finish。不改分支保护、不发版、不改写历史。N10、N20、N22、Q20、Q21、I3、I5 留到后续批次。 ## 目标与非目标 -<预期结果、受影响入口/模块/契约;明确不做什么。> +- 目标:按审计 P1 关闭本批条目,每条至少一个回归测试。Intent I4 I7 I8 I9 I10 I11 I12;Native N5 N6 N7 N8 N9 N11 N12 N15 N16 N17 N18 N19 N21(I9 落在 intentgate);Squad Q6 Q10 Q11 Q12 Q13 Q17 Q18 Q19(I9 落在 squadintent)。钉住顺序 intent → native → squad → backend → Dev。 +- 非目标:不实现推迟项;不改模块路径、不删除嵌套 gitlink(那是 D1 / 发版任务);不重写已合入的 CI workflow。 ## 同步记录 @@ -20,6 +21,6 @@ ## 结果与验证(完成后填写) -- 结果: -- 验证: -- 影响与剩余项: +- 结果:Intent 05e74d8,Native 11d1a76,Squad 1bb0c3a,Backend a494375。Dev 钉住这四个头。 +- 验证:三库在各自仓内 GOWORK=off go test -count=1 -race 通过。Dev make test / make build 见合入前记录。 +- 影响与剩余项:推迟项仍未做。D1 在本任务 task-finish 之后另开。 diff --git a/deps/agent-intent b/deps/agent-intent index 7f7879b0..05e74d8e 160000 --- a/deps/agent-intent +++ b/deps/agent-intent @@ -1 +1 @@ -Subproject commit 7f7879b06b053f0a62746309b79e0e1b9a00f42d +Subproject commit 05e74d8e320647fe41c4ca9cd20e31065323d6af diff --git a/deps/agent-native b/deps/agent-native index 91c15561..11d1a76b 160000 --- a/deps/agent-native +++ b/deps/agent-native @@ -1 +1 @@ -Subproject commit 91c155618487e21edeb4f1d3cc27e985aae2b0d2 +Subproject commit 11d1a76bdd1f26d118c26c22adbe29958a9b727e diff --git a/deps/agent-squad b/deps/agent-squad index e928ea3c..1bb0c3a2 160000 --- a/deps/agent-squad +++ b/deps/agent-squad @@ -1 +1 @@ -Subproject commit e928ea3c0fa649cbbbad22a93a1bc0a12dee5f7d +Subproject commit 1bb0c3a2aef6ba5d664566fba3a36395da9a2209 diff --git a/modules/backend b/modules/backend index ef0a1bef..a494375d 160000 --- a/modules/backend +++ b/modules/backend @@ -1 +1 @@ -Subproject commit ef0a1bef0f7bee626e59f160be51fb0e5f6aa692 +Subproject commit a494375d58632950af442dc0d4e81dbac64f659b From 8655d5cd82b5cc1ad15d1456ff7303855d4254ab Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 13:12:00 +0000 Subject: [PATCH 23/35] Record the sync checkpoint --- .task/feature-agent-stack-r2.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.task/feature-agent-stack-r2.md b/.task/feature-agent-stack-r2.md index c289ce52..51c14173 100644 --- a/.task/feature-agent-stack-r2.md +++ b/.task/feature-agent-stack-r2.md @@ -24,3 +24,4 @@ - 结果:Intent 05e74d8,Native 11d1a76,Squad 1bb0c3a,Backend a494375。Dev 钉住这四个头。 - 验证:三库在各自仓内 GOWORK=off go test -count=1 -race 通过。Dev make test / make build 见合入前记录。 - 影响与剩余项:推迟项仍未做。D1 在本任务 task-finish 之后另开。 +| 同步前验收 | 5cd138084ae52b22f02ae4d2e358f6147b1aed55 | 50312be0cbcc30964f0307f2e32f179b1eb7b60c | 2026-10-03T13:12:00Z | From 309a47eee1c8d05fe29f5512ff23dee984e6d8fe Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 13:14:27 +0000 Subject: [PATCH 24/35] Pin the native sum fix through squad and backend Why: native 855fe41 is the first head whose go.sum covers intent's NFKC import, so the later pins have to move with it. Evidence: native go test of runtime, adapters, and exec passed; squad and backend vet passed on 855fe41 and 31ee395. Impact: three gitlinks and the task card move. Product code in Dev is unchanged. Refs: I4 Co-authored-by: Cursor --- .task/feature-agent-stack-r2.md | 8 ++++---- deps/agent-native | 2 +- deps/agent-squad | 2 +- modules/backend | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.task/feature-agent-stack-r2.md b/.task/feature-agent-stack-r2.md index 51c14173..30374e3d 100644 --- a/.task/feature-agent-stack-r2.md +++ b/.task/feature-agent-stack-r2.md @@ -18,10 +18,10 @@ | 节点 | sync_base_sha | tested_head_sha | checked_at | |---|---|---|---| | 启动 | 5cd138084ae52b22f02ae4d2e358f6147b1aed55 | 5cd138084ae52b22f02ae4d2e358f6147b1aed55 | 2026-10-03T12:52:46Z | +| 同步前验收 | 5cd138084ae52b22f02ae4d2e358f6147b1aed55 | 50312be0cbcc30964f0307f2e32f179b1eb7b60c | 2026-10-03T13:12:00Z | ## 结果与验证(完成后填写) -- 结果:Intent 05e74d8,Native 11d1a76,Squad 1bb0c3a,Backend a494375。Dev 钉住这四个头。 -- 验证:三库在各自仓内 GOWORK=off go test -count=1 -race 通过。Dev make test / make build 见合入前记录。 -- 影响与剩余项:推迟项仍未做。D1 在本任务 task-finish 之后另开。 -| 同步前验收 | 5cd138084ae52b22f02ae4d2e358f6147b1aed55 | 50312be0cbcc30964f0307f2e32f179b1eb7b60c | 2026-10-03T13:12:00Z | +- 结果:Intent 05e74d8,Native 855fe41,Squad 31ee395,Backend 6e30569。Dev 钉住这四个头。Native 补了 golang.org/x/text v0.29.0 的 go.sum。 +- 验证:Intent 与 Squad 变更包 race 通过。Native 在补 sum 后 GOWORK=off go vet 与 go test -count=1 ./runtime/... ./adapters/... ./exec/... 通过。Dev make test / make build 见合入前记录。 +- 影响与剩余项:推迟项仍未做。D1 在本任务 task-finish 之后另开。PR:Intent #4、Native #9、Squad #8、Backend #51、Dev #154。 diff --git a/deps/agent-native b/deps/agent-native index 11d1a76b..855fe411 160000 --- a/deps/agent-native +++ b/deps/agent-native @@ -1 +1 @@ -Subproject commit 11d1a76bdd1f26d118c26c22adbe29958a9b727e +Subproject commit 855fe411520d2d8c3445ff5e7db7b2c065245f43 diff --git a/deps/agent-squad b/deps/agent-squad index 1bb0c3a2..31ee3958 160000 --- a/deps/agent-squad +++ b/deps/agent-squad @@ -1 +1 @@ -Subproject commit 1bb0c3a2aef6ba5d664566fba3a36395da9a2209 +Subproject commit 31ee395895e5a0e54235ede2b0a8db9357ec0ac5 diff --git a/modules/backend b/modules/backend index a494375d..6e30569c 160000 --- a/modules/backend +++ b/modules/backend @@ -1 +1 @@ -Subproject commit a494375d58632950af442dc0d4e81dbac64f659b +Subproject commit 6e30569cab9c1d327a24f7586125d951d2479790 From 8c0dc8d4683afcbedd2db7e2581514c4353e542e Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 13:14:28 +0000 Subject: [PATCH 25/35] Record the sync checkpoint --- .task/feature-agent-stack-r2.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.task/feature-agent-stack-r2.md b/.task/feature-agent-stack-r2.md index 30374e3d..ff9ad9ec 100644 --- a/.task/feature-agent-stack-r2.md +++ b/.task/feature-agent-stack-r2.md @@ -25,3 +25,4 @@ - 结果:Intent 05e74d8,Native 855fe41,Squad 31ee395,Backend 6e30569。Dev 钉住这四个头。Native 补了 golang.org/x/text v0.29.0 的 go.sum。 - 验证:Intent 与 Squad 变更包 race 通过。Native 在补 sum 后 GOWORK=off go vet 与 go test -count=1 ./runtime/... ./adapters/... ./exec/... 通过。Dev make test / make build 见合入前记录。 - 影响与剩余项:推迟项仍未做。D1 在本任务 task-finish 之后另开。PR:Intent #4、Native #9、Squad #8、Backend #51、Dev #154。 +| 同步前验收 | 5cd138084ae52b22f02ae4d2e358f6147b1aed55 | 309a47eee1c8d05fe29f5512ff23dee984e6d8fe | 2026-10-03T13:14:28Z | From a5377ec2347e08c84d428d980c652355fa7785be Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 13:15:46 +0000 Subject: [PATCH 26/35] Record the R2 verification evidence Why: the task card has to carry the make test and make build results before the batch is merged. Evidence: make test exited 0 and make build wrote bin/agent-system on 8c0dc8d. Impact: documentation only. Refs: R2 pin Co-authored-by: Cursor --- .task/feature-agent-stack-r2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.task/feature-agent-stack-r2.md b/.task/feature-agent-stack-r2.md index ff9ad9ec..a33bbb1f 100644 --- a/.task/feature-agent-stack-r2.md +++ b/.task/feature-agent-stack-r2.md @@ -23,6 +23,6 @@ ## 结果与验证(完成后填写) - 结果:Intent 05e74d8,Native 855fe41,Squad 31ee395,Backend 6e30569。Dev 钉住这四个头。Native 补了 golang.org/x/text v0.29.0 的 go.sum。 -- 验证:Intent 与 Squad 变更包 race 通过。Native 在补 sum 后 GOWORK=off go vet 与 go test -count=1 ./runtime/... ./adapters/... ./exec/... 通过。Dev make test / make build 见合入前记录。 +- 验证:2026-10-03,worktree 8c0dc8d。Intent 与 Squad 变更包 `GOWORK=off go test -count=1 -race` 通过。Native 在 855fe41 上 `go vet ./...` 与 `go test -count=1 ./runtime/... ./adapters/... ./exec/...` 通过。Dev `make test` 退出码 0(boundaries、pins、libs、core、backend、frontend 13 文件 68 测试、ui 11 文件 79 测试、agent-command)。`make build` 产出 `bin/agent-system`,版本串含 native=855fe41 squad=31ee395 intent=05e74d8 backend=6e30569。 - 影响与剩余项:推迟项仍未做。D1 在本任务 task-finish 之后另开。PR:Intent #4、Native #9、Squad #8、Backend #51、Dev #154。 | 同步前验收 | 5cd138084ae52b22f02ae4d2e358f6147b1aed55 | 309a47eee1c8d05fe29f5512ff23dee984e6d8fe | 2026-10-03T13:14:28Z | From d9606926a07508a3b842de76fa49b356731bee81 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 13:24:28 +0000 Subject: [PATCH 27/35] Close 1 merged task card(s) and archive them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Why: branches merged into main had left their task cards open; backfill status and archive to prevent bookkeeping debt. Evidence: feature-agent-stack-r2.md(PR#154) — merge 0a047db verified on origin/main. The merge subject did not match the from-branch pattern, so task.sh close skipped it. Impact: .task/feature-agent-stack-r2.md moved to .task/archive/ with status backfilled; no code or submodule change. Refs: task.sh close (card-autoclose-r1) Co-authored-by: Cursor --- .task/{ => archive}/feature-agent-stack-r2.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) rename .task/{ => archive}/feature-agent-stack-r2.md (81%) diff --git a/.task/feature-agent-stack-r2.md b/.task/archive/feature-agent-stack-r2.md similarity index 81% rename from .task/feature-agent-stack-r2.md rename to .task/archive/feature-agent-stack-r2.md index a33bbb1f..8db609cb 100644 --- a/.task/feature-agent-stack-r2.md +++ b/.task/archive/feature-agent-stack-r2.md @@ -1,6 +1,6 @@ # feature/agent-stack-r2 任务卡 -任务主记录:;状态:进行中;owner:weichen +任务主记录:PR #154 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/154(merge 0a047db5c9);状态:已完成(回填);owner:weichen ## 基线与授权 @@ -20,9 +20,15 @@ | 启动 | 5cd138084ae52b22f02ae4d2e358f6147b1aed55 | 5cd138084ae52b22f02ae4d2e358f6147b1aed55 | 2026-10-03T12:52:46Z | | 同步前验收 | 5cd138084ae52b22f02ae4d2e358f6147b1aed55 | 50312be0cbcc30964f0307f2e32f179b1eb7b60c | 2026-10-03T13:12:00Z | -## 结果与验证(完成后填写) +## 结果与验证 - 结果:Intent 05e74d8,Native 855fe41,Squad 31ee395,Backend 6e30569。Dev 钉住这四个头。Native 补了 golang.org/x/text v0.29.0 的 go.sum。 - 验证:2026-10-03,worktree 8c0dc8d。Intent 与 Squad 变更包 `GOWORK=off go test -count=1 -race` 通过。Native 在 855fe41 上 `go vet ./...` 与 `go test -count=1 ./runtime/... ./adapters/... ./exec/...` 通过。Dev `make test` 退出码 0(boundaries、pins、libs、core、backend、frontend 13 文件 68 测试、ui 11 文件 79 测试、agent-command)。`make build` 产出 `bin/agent-system`,版本串含 native=855fe41 squad=31ee395 intent=05e74d8 backend=6e30569。 - 影响与剩余项:推迟项仍未做。D1 在本任务 task-finish 之后另开。PR:Intent #4、Native #9、Squad #8、Backend #51、Dev #154。 | 同步前验收 | 5cd138084ae52b22f02ae4d2e358f6147b1aed55 | 309a47eee1c8d05fe29f5512ff23dee984e6d8fe | 2026-10-03T13:14:28Z | + +## 闭合记录(card-autoclose 回填) + +- 依据:merge 0a047db5c9c852539c6a839cf85589729f246019(PR #154)已包含于 origin/main,分支成果已落盘;本段为合入后回填。 +- 合并主题:Pin the R2 library and backend heads +- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。 From 2b4049356b42a629d9600da480e064991acd9f6e Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 13:26:20 +0000 Subject: [PATCH 28/35] Record the task card for feature-agent-stack-d1 --- .task/feature-agent-stack-d1.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .task/feature-agent-stack-d1.md diff --git a/.task/feature-agent-stack-d1.md b/.task/feature-agent-stack-d1.md new file mode 100644 index 00000000..3adf30e3 --- /dev/null +++ b/.task/feature-agent-stack-d1.md @@ -0,0 +1,25 @@ +# feature/agent-stack-d1 任务卡 + +任务主记录:;状态:进行中;owner:weichen + +## 基线与授权 + +- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 954ea44478ceac73d205c3a68b5de522847fb6cf +- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-stack-d1(worktree);分支:feature/agent-stack-d1 +- 授权与交付终点:<本次允许的动作与终点;未授权事项写明> + +## 目标与非目标 + +<预期结果、受影响入口/模块/契约;明确不做什么。> + +## 同步记录 + +| 节点 | sync_base_sha | tested_head_sha | checked_at | +|---|---|---|---| +| 启动 | 954ea44478ceac73d205c3a68b5de522847fb6cf | 954ea44478ceac73d205c3a68b5de522847fb6cf | 2026-10-03T13:26:20Z | + +## 结果与验证(完成后填写) + +- 结果: +- 验证: +- 影响与剩余项: From 10bff94a6aa928b27cded352eb21f5e4d985ebc9 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 13:47:02 +0000 Subject: [PATCH 29/35] Pin the D1 heads and cover the adapter modules Why: Dev has to test the split modules and refuse a core import of a sibling library. Evidence: bash scripts/lint-boundaries.sh printed boundaries ok. Full make test follows on this pin. Impact: test-libs runs the intent, native, sqlite, and command modules. The sibling allowlist is empty. Refs: D1 Co-authored-by: Cursor --- .task/feature-agent-stack-d1.md | 5 +++-- Makefile | 4 ++++ deps/agent-intent | 2 +- deps/agent-native | 2 +- deps/agent-squad | 2 +- modules/backend | 2 +- policy/lib-deps-allowlist.txt | 15 +-------------- scripts/lint-boundaries.sh | 28 +++++++++++++++++++++++++++- 8 files changed, 39 insertions(+), 21 deletions(-) diff --git a/.task/feature-agent-stack-d1.md b/.task/feature-agent-stack-d1.md index 3adf30e3..00c74f47 100644 --- a/.task/feature-agent-stack-d1.md +++ b/.task/feature-agent-stack-d1.md @@ -6,11 +6,12 @@ - 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 954ea44478ceac73d205c3a68b5de522847fb6cf - 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-stack-d1(worktree);分支:feature/agent-stack-d1 -- 授权与交付终点:<本次允许的动作与终点;未授权事项写明> +- 授权与交付终点:合入 Intent、Native、Squad、Backend、Dev 的 feature/agent-stack-d1,然后在本 worktree 运行 make task-finish。不改分支保护、不发版、不改写历史。不改模块路径,不删除嵌套 gitlink。 ## 目标与非目标 -<预期结果、受影响入口/模块/契约;明确不做什么。> +- 目标:按提案第 3 节把三库解耦。Native 删掉 intentgate,契约并进 exec,Options 拆成嵌入子结构。Squad 核心只留端口;native、intent、sqlite、命令各自成模块。三库各自给出 schema 样例和往返测试。Backend 改走 adapters/native。Dev 的 test-libs 覆盖新模块,核心 go list -deps 不得看见兄弟库,agent-intent 只许 adapters/intent 和 Backend internal/intentgate 导入。 +- 非目标:不改模块路径,不删除嵌套 gitlink,不做 go.work、AgentSpec 迁移、workflow 退役,也不做意图校验器的 Registry 作用域改动。N10、N20、N22、Q20、Q21、I3、I5 以及后续 N1/Q1/I1 不在本批。 ## 同步记录 diff --git a/Makefile b/Makefile index 9178bb7d..63f36276 100644 --- a/Makefile +++ b/Makefile @@ -108,6 +108,10 @@ test-libs: cd deps/agent-intent && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... cd deps/agent-native && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... cd deps/agent-squad && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... + cd deps/agent-squad/adapters/intent && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... + cd deps/agent-squad/adapters/native && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... + cd deps/agent-squad/adapters/sqlite && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... + cd deps/agent-squad/cmd/agent-squad && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... plugin-new: @test -n "$(NAME)" || (echo "用法:make plugin-new NAME="; exit 2) diff --git a/deps/agent-intent b/deps/agent-intent index 05e74d8e..65aaebca 160000 --- a/deps/agent-intent +++ b/deps/agent-intent @@ -1 +1 @@ -Subproject commit 05e74d8e320647fe41c4ca9cd20e31065323d6af +Subproject commit 65aaebca1ea69ab7d48eda51d33ef1d4eea5a0bf diff --git a/deps/agent-native b/deps/agent-native index 855fe411..33573d0d 160000 --- a/deps/agent-native +++ b/deps/agent-native @@ -1 +1 @@ -Subproject commit 855fe411520d2d8c3445ff5e7db7b2c065245f43 +Subproject commit 33573d0d75d694a3c21106197492cfc9b43784d0 diff --git a/deps/agent-squad b/deps/agent-squad index 31ee3958..5e414ffe 160000 --- a/deps/agent-squad +++ b/deps/agent-squad @@ -1 +1 @@ -Subproject commit 31ee395895e5a0e54235ede2b0a8db9357ec0ac5 +Subproject commit 5e414ffeccda9ba8efa729d6fd82baa92f76e055 diff --git a/modules/backend b/modules/backend index 6e30569c..5d0097d1 160000 --- a/modules/backend +++ b/modules/backend @@ -1 +1 @@ -Subproject commit 6e30569cab9c1d327a24f7586125d951d2479790 +Subproject commit 5d0097d14548f04f929bd4816338f4705e38b6f3 diff --git a/policy/lib-deps-allowlist.txt b/policy/lib-deps-allowlist.txt index e391def8..dba2b29d 100644 --- a/policy/lib-deps-allowlist.txt +++ b/policy/lib-deps-allowlist.txt @@ -1,16 +1,3 @@ # 三个库之间的包导入现状。新增配对会使 scripts/lint-boundaries.sh 失败; # 已经消失的配对只告警,提示从本文件删除。每行:导入方包 被导入包。 -agent-native/adapters/intentgate agent-intent/intent -agent-squad/cli agent-intent/intent -agent-squad/cli agent-native/exec -agent-squad/cli agent-native/runtime/llm -agent-squad/platform agent-native/runtime -agent-squad/platform agent-native/runtime/llm -agent-squad/squad agent-native/adapters/native -agent-squad/squad agent-native/exec -agent-squad/squad agent-native/runtime/llm -agent-squad/squad agent-native/runtime/mcp -agent-squad/squad agent-native/runtime/subagent -agent-squad/squad agent-native/runtime/tools -agent-squad/squadintent agent-intent/intent -agent-squad/squadintent agent-native/exec +# D1 之后核心模块不再导入兄弟库。适配器在各自 go.mod 里,不进入这条棘轮。 diff --git a/scripts/lint-boundaries.sh b/scripts/lint-boundaries.sh index ba35e59c..2827c982 100755 --- a/scripts/lint-boundaries.sh +++ b/scripts/lint-boundaries.sh @@ -54,7 +54,7 @@ for dir in deps/agent-intent deps/agent-native deps/agent-squad; do done done done | sort -u >"$observed" -grep -v -e '^#' -e '^$' "$allow" | sort -u >"$recorded" +grep -v -e '^#' -e '^$' "$allow" | sort -u >"$recorded" || true new_pairs=$(comm -13 "$recorded" "$observed" || true) if [ -n "$new_pairs" ]; then echo "boundary: new sibling-library import pairs" >&2 @@ -67,6 +67,32 @@ if [ -n "$stale_pairs" ]; then echo "$stale_pairs" >&2 fi +# 核心模块的依赖图不得出现兄弟库。go list ./... 不进入带 go.mod 的子目录。 +for dir in deps/agent-intent deps/agent-native deps/agent-squad; do + mod=$(awk '/^module /{print $2; exit}' "$root/$dir/go.mod") + deps_out=$(cd "$root/$dir" && GOWORK=off go list -deps ./...) || fail=1 + for sib in "${siblings[@]}"; do + [ "$sib" = "$mod" ] && continue + if printf '%s\n' "$deps_out" | grep -E -q "^(${sib}|${sib}/)"; then + echo "boundary: $mod core depends on $sib" >&2 + fail=1 + fi + done +done + +# agent-intent 只许被小队意图适配器和后端识别适配器导入。 +while IFS= read -r f; do + grep -q '"agent-intent/' "$f" || continue + case "$f" in + */deps/agent-squad/adapters/intent/*|*/modules/backend/internal/intentgate/*) ;; + *) + echo "boundary: $f imports agent-intent" >&2 + fail=1 + ;; + esac +done < <(find "$root/deps/agent-native" "$root/deps/agent-squad" "$root/modules/backend" \ + -path '*/deps/*' -prune -o -name '*.go' -print) + if [ "$fail" -ne 0 ]; then exit 1 fi From e760579111b8d076df66694169ce77ffacf15690 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 13:47:07 +0000 Subject: [PATCH 30/35] Record the sync checkpoint --- .task/feature-agent-stack-d1.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.task/feature-agent-stack-d1.md b/.task/feature-agent-stack-d1.md index 00c74f47..f5cb4cc7 100644 --- a/.task/feature-agent-stack-d1.md +++ b/.task/feature-agent-stack-d1.md @@ -24,3 +24,4 @@ - 结果: - 验证: - 影响与剩余项: +| 同步前验收 | 954ea44478ceac73d205c3a68b5de522847fb6cf | 10bff94a6aa928b27cded352eb21f5e4d985ebc9 | 2026-10-03T13:47:07Z | From a90cf58b2ade6dafc2fb4e91b21310a57eea8c4e Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 13:48:22 +0000 Subject: [PATCH 31/35] Record the D1 test evidence on the task card Why: the acceptance record has to name the heads and the make test result before review. Evidence: make test exited 0 on e760579. make build version string contains native=33573d0 squad=5e414ff intent=65aaebc backend=5d0097d. Impact: task card only. Refs: D1 Co-authored-by: Cursor --- .task/feature-agent-stack-d1.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.task/feature-agent-stack-d1.md b/.task/feature-agent-stack-d1.md index f5cb4cc7..d2c1d9a9 100644 --- a/.task/feature-agent-stack-d1.md +++ b/.task/feature-agent-stack-d1.md @@ -18,10 +18,10 @@ | 节点 | sync_base_sha | tested_head_sha | checked_at | |---|---|---|---| | 启动 | 954ea44478ceac73d205c3a68b5de522847fb6cf | 954ea44478ceac73d205c3a68b5de522847fb6cf | 2026-10-03T13:26:20Z | - -## 结果与验证(完成后填写) - -- 结果: -- 验证: -- 影响与剩余项: | 同步前验收 | 954ea44478ceac73d205c3a68b5de522847fb6cf | 10bff94a6aa928b27cded352eb21f5e4d985ebc9 | 2026-10-03T13:47:07Z | + +## 结果与验证 + +- 结果:Intent 65aaebc,Native 33573d0,Squad 5e414ff,Backend 5d0097d。Dev 钉住这四个头。Native 删除 intentgate 并把契约并进 exec。Squad 核心不再导入兄弟库;adapters/intent、adapters/native、adapters/sqlite 与 cmd/agent-squad 各自有 go.mod。 +- 验证:2026-10-03,worktree e760579。`make test` 退出码 0(boundaries、pins、libs 含四个新模块、core、backend、frontend 13 文件 68 测试、ui 11 文件 79 测试、agent-command)。`make build` 产出 `bin/agent-system`,版本串含 native=33573d0 squad=5e414ff intent=65aaebc backend=5d0097d。 +- 影响与剩余项:模块路径与嵌套 gitlink 保持不变。N10、N20、N22、Q20、Q21、I3、I5 以及后续 N1/Q1/I1 仍未做。development-guidelines 嵌套指针与 Dev 顶层不一致,check-pins 只告警。 From af649e19b7a7ea0c0a6f92dceafb384c1a8a747f Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 13:52:12 +0000 Subject: [PATCH 32/35] Pin native to the SSE abort fix Why: Dev has to record the native head that treats a cancelled stream as aborted, and the squad and backend checkouts that point at it. Evidence: GOWORK=off go test -count=50 -race ./runtime/llm/ passed on d84a67c. Impact: gitlinks only. The earlier make test covered the previous pin. Refs: D1 --- deps/agent-native | 2 +- deps/agent-squad | 2 +- modules/backend | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/deps/agent-native b/deps/agent-native index 33573d0d..d84a67cd 160000 --- a/deps/agent-native +++ b/deps/agent-native @@ -1 +1 @@ -Subproject commit 33573d0d75d694a3c21106197492cfc9b43784d0 +Subproject commit d84a67cd240e785291873c19686765c1d1f60c22 diff --git a/deps/agent-squad b/deps/agent-squad index 5e414ffe..02c0d6aa 160000 --- a/deps/agent-squad +++ b/deps/agent-squad @@ -1 +1 @@ -Subproject commit 5e414ffeccda9ba8efa729d6fd82baa92f76e055 +Subproject commit 02c0d6aae4f1af3265b94cdc3172eccefa2cb3c9 diff --git a/modules/backend b/modules/backend index 5d0097d1..0a9a9776 160000 --- a/modules/backend +++ b/modules/backend @@ -1 +1 @@ -Subproject commit 5d0097d14548f04f929bd4816338f4705e38b6f3 +Subproject commit 0a9a9776d679cdb7e4a740138dca130dd4f1aeaf From bbffa42bb301c950c83e385244b64a1b8fbcf34c Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 13:52:17 +0000 Subject: [PATCH 33/35] Record the sync checkpoint --- .task/feature-agent-stack-d1.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.task/feature-agent-stack-d1.md b/.task/feature-agent-stack-d1.md index d2c1d9a9..3540e05c 100644 --- a/.task/feature-agent-stack-d1.md +++ b/.task/feature-agent-stack-d1.md @@ -25,3 +25,4 @@ - 结果:Intent 65aaebc,Native 33573d0,Squad 5e414ff,Backend 5d0097d。Dev 钉住这四个头。Native 删除 intentgate 并把契约并进 exec。Squad 核心不再导入兄弟库;adapters/intent、adapters/native、adapters/sqlite 与 cmd/agent-squad 各自有 go.mod。 - 验证:2026-10-03,worktree e760579。`make test` 退出码 0(boundaries、pins、libs 含四个新模块、core、backend、frontend 13 文件 68 测试、ui 11 文件 79 测试、agent-command)。`make build` 产出 `bin/agent-system`,版本串含 native=33573d0 squad=5e414ff intent=65aaebc backend=5d0097d。 - 影响与剩余项:模块路径与嵌套 gitlink 保持不变。N10、N20、N22、Q20、Q21、I3、I5 以及后续 N1/Q1/I1 仍未做。development-guidelines 嵌套指针与 Dev 顶层不一致,check-pins 只告警。 +| 同步前验收 | 954ea44478ceac73d205c3a68b5de522847fb6cf | af649e19b7a7ea0c0a6f92dceafb384c1a8a747f | 2026-10-03T13:52:17Z | From 3cd83db5ca01de2227e8ab668355a431708193f9 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 13:53:18 +0000 Subject: [PATCH 34/35] Record the SSE abort fix in the D1 evidence Why: the task card has to name the heads that CI will merge. Evidence: make test exited 0 on bbffa42. make build version string contains native=d84a67c squad=02c0d6a intent=65aaebc backend=0a9a977. Impact: task card only. Refs: D1 Co-authored-by: Cursor --- .task/feature-agent-stack-d1.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.task/feature-agent-stack-d1.md b/.task/feature-agent-stack-d1.md index 3540e05c..c4f9ee87 100644 --- a/.task/feature-agent-stack-d1.md +++ b/.task/feature-agent-stack-d1.md @@ -19,10 +19,10 @@ |---|---|---|---| | 启动 | 954ea44478ceac73d205c3a68b5de522847fb6cf | 954ea44478ceac73d205c3a68b5de522847fb6cf | 2026-10-03T13:26:20Z | | 同步前验收 | 954ea44478ceac73d205c3a68b5de522847fb6cf | 10bff94a6aa928b27cded352eb21f5e4d985ebc9 | 2026-10-03T13:47:07Z | +| 同步前验收 | 954ea44478ceac73d205c3a68b5de522847fb6cf | af649e19b7a7ea0c0a6f92dceafb384c1a8a747f | 2026-10-03T13:52:17Z | ## 结果与验证 -- 结果:Intent 65aaebc,Native 33573d0,Squad 5e414ff,Backend 5d0097d。Dev 钉住这四个头。Native 删除 intentgate 并把契约并进 exec。Squad 核心不再导入兄弟库;adapters/intent、adapters/native、adapters/sqlite 与 cmd/agent-squad 各自有 go.mod。 -- 验证:2026-10-03,worktree e760579。`make test` 退出码 0(boundaries、pins、libs 含四个新模块、core、backend、frontend 13 文件 68 测试、ui 11 文件 79 测试、agent-command)。`make build` 产出 `bin/agent-system`,版本串含 native=33573d0 squad=5e414ff intent=65aaebc backend=5d0097d。 +- 结果:Intent 65aaebc,Native d84a67c,Squad 02c0d6a,Backend 0a9a977。Dev 钉住这四个头。Native 删除 intentgate 并把契约并进 exec,取消中的 SSE 以 aborted 结束。Squad 核心不再导入兄弟库;adapters/intent、adapters/native、adapters/sqlite 与 cmd/agent-squad 各自有 go.mod。 +- 验证:2026-10-03,worktree bbffa42。Native `GOWORK=off go test -count=50 -race ./runtime/llm/` 通过。`make test` 退出码 0(boundaries、pins、libs 含四个新模块、core、backend、frontend 13 文件 68 测试、ui 11 文件 79 测试、agent-command)。`make build` 产出 `bin/agent-system`,版本串含 native=d84a67c squad=02c0d6a intent=65aaebc backend=0a9a977。 - 影响与剩余项:模块路径与嵌套 gitlink 保持不变。N10、N20、N22、Q20、Q21、I3、I5 以及后续 N1/Q1/I1 仍未做。development-guidelines 嵌套指针与 Dev 顶层不一致,check-pins 只告警。 -| 同步前验收 | 954ea44478ceac73d205c3a68b5de522847fb6cf | af649e19b7a7ea0c0a6f92dceafb384c1a8a747f | 2026-10-03T13:52:17Z | From fa209419e869d88ba65bf3266c3442037a14dc9d Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 3 Oct 2026 14:03:26 +0000 Subject: [PATCH 35/35] Close 1 merged task card(s) and archive them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Why: branches merged into main had left their task cards open; backfill status and archive to prevent bookkeeping debt. Evidence: feature-agent-stack-d1.md(PR#156) — merges verified via git log --merges against origin/main. Impact: .task/*.md moved to .task/archive/ with status backfilled; no code or submodule change. Refs: task.sh close (card-autoclose-r1) --- .task/{ => archive}/feature-agent-stack-d1.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) rename .task/{ => archive}/feature-agent-stack-d1.md (82%) diff --git a/.task/feature-agent-stack-d1.md b/.task/archive/feature-agent-stack-d1.md similarity index 82% rename from .task/feature-agent-stack-d1.md rename to .task/archive/feature-agent-stack-d1.md index c4f9ee87..ad18493e 100644 --- a/.task/feature-agent-stack-d1.md +++ b/.task/archive/feature-agent-stack-d1.md @@ -1,6 +1,6 @@ # feature/agent-stack-d1 任务卡 -任务主记录:;状态:进行中;owner:weichen +任务主记录:PR #156 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/156(merge 19b93ed09c);状态:已完成(回填);owner:weichen ## 基线与授权 @@ -26,3 +26,9 @@ - 结果:Intent 65aaebc,Native d84a67c,Squad 02c0d6a,Backend 0a9a977。Dev 钉住这四个头。Native 删除 intentgate 并把契约并进 exec,取消中的 SSE 以 aborted 结束。Squad 核心不再导入兄弟库;adapters/intent、adapters/native、adapters/sqlite 与 cmd/agent-squad 各自有 go.mod。 - 验证:2026-10-03,worktree bbffa42。Native `GOWORK=off go test -count=50 -race ./runtime/llm/` 通过。`make test` 退出码 0(boundaries、pins、libs 含四个新模块、core、backend、frontend 13 文件 68 测试、ui 11 文件 79 测试、agent-command)。`make build` 产出 `bin/agent-system`,版本串含 native=d84a67c squad=02c0d6a intent=65aaebc backend=0a9a977。 - 影响与剩余项:模块路径与嵌套 gitlink 保持不变。N10、N20、N22、Q20、Q21、I3、I5 以及后续 N1/Q1/I1 仍未做。development-guidelines 嵌套指针与 Dev 顶层不一致,check-pins 只告警。 + +## 闭合记录(card-autoclose 回填) + +- 依据:merge 19b93ed09c0b80de78eed45763b482616b54ed06(PR #156)已包含于 origin/main,分支成果已落盘;本段为合入后回填。 +- 合并主题:Merge pull request 'Pin the D1 library and backend heads' (#156) from feature/agent-stack-d1 into main +- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。