Record the composed backend pin (lifecycle line + Backend main merge + test reconciliation)
Why: the backend composition (lifecycle narrowing + member-history fixes merged with Backend main association/explanation/super-admin, tests reconciled to the narrowed model) is the L1 integration pin recorded per the composition note on the task card. Impact: backend gitlink pin. Refs: PR #634.
This commit is contained in:
@@ -0,0 +1,410 @@
|
||||
# feature/cli-agent-fallback-chain 任务卡
|
||||
|
||||
任务主记录:PR #648 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/648;状态:已完成(合入前闭合);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= d2035c76dc1cb15e01d2c184af5155d9d773cd9f
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain(worktree);分支:feature/cli-agent-fallback-chain
|
||||
- 分支类型:standalone;root_target:main;immediate_target:main;accepting_requirements:false
|
||||
- 需求分流:verdict=NEW;selected_initiative=无;requirement_sha256=8817d4906061c95f5116cecb7e6b185dc6882b638ea71d2dde2db6e437903610;triage_receipt=/tmp/cli-fallback-chain-triage.json;receipt_sha256=555d302ea9cc489bc4b9ef51c0c5857332df08494cd57267646f93c1eabfaf7b
|
||||
|
||||
- 授权与交付终点:用户 2026-10-20 要求修改执行规范:CLI Agent 安全失败后不询问用户、自动换下一候选;候选为 cursor(auto)、agy(Gemini 3.8 Flash)、pi(GLM-5.3-flash)、pi(MiniMax-M3),前三类顺序不限,Codex(GPT-6.1-Sol) 必须最后;每候选 3 次,全部失败后暂停询问是否重试。授权范围内实施、验证、Review、PR 合入 Dev main 与安全收口。不改 DM 控制器、不部署、不发布版本、不改分支保护。
|
||||
- 交付模式:goal-first(目标、范围和交付终点一次确认;范围内连续推进)
|
||||
- 实施执行:agent-per-unit(配置:AGENT-EXECUTION.md)
|
||||
- 合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入)
|
||||
- 人工决策点:仅限目标/范围/验收变更、重大取舍、高后果操作或无法自动判定的业务验收
|
||||
- 当前阶段:实施与自检;当前增量:I1(AGENT-EXECUTION.md 候选链 + 规范文字)
|
||||
- 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位)
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
目标:`AGENT-EXECUTION.md` 的四个角色候选均为 cursor(`auto`)、antigravity(`gemini-3.8-flash-high`)、pi-glm(`zai-coding-cn/glm-5.3-flash`)、pi(`minimax-cn/MiniMax-M3`),codex(`gpt-6.1-sol`) 固定为最后候选;去掉 `emergency_profile`,`max_attempts_per_profile: 3` 对含 Codex 在内的每个候选生效。`policy/delivery.md`、`policy/governance.md`、`policy/tool-adaptation-matrix.md` 同步:安全可恢复失败自动换候选、不询问用户;Codex 之外的候选顺序可按角色调整但 Codex 必须最后;全部安全耗尽后 host 暂停并询问用户是否重试,仍不代写。
|
||||
|
||||
验收:`make agent-exec-validate` 通过;文档与机器块一致;PR HEAD 完整 CI 通过。
|
||||
|
||||
非目标:不改 DM 控制器(不实现运行时随机顺序;“顺序不限”由声明顺序满足);fail-stop 终态(`failed-unknown` 等)语义不变;不改 `deps/development-guidelines`。
|
||||
|
||||
## Agent 实施收据
|
||||
|
||||
路由与 fail-stop 规则见根目录 AGENT-EXECUTION.md 与 policy/delivery.md;每次尝试一行,原始日志留在源码外收据路径。
|
||||
|
||||
| 单元 ID | 预期范围 | 配置摘要 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| dev-cli-agent-fallback-chain | `AGENT-EXECUTION.md`、`policy/{delivery,governance,tool-adaptation-matrix}.md` | config_digest=d2e3574ebf5a…(run 时 AGENT-EXECUTION.md 为 R0 版本) | implementation | [cursor, antigravity, pi] | 1 | cursor-agent-stable / auto | completed (success) | refs/agent-exec/68343647…/536ff962e681 → 8e21b66db4606c20a1d7de4f1293fbcd61780658 | 否 | /tmp/cli-fallback-chain-receipt.json(单元包 /tmp/cli-fallback-chain-unit.json) |
|
||||
|
||||
## 关联方向与规划
|
||||
|
||||
- 适用状态:不适用(用户直接提出的执行路由调整,无对应规划条目)
|
||||
- 主记录路径/版本:不适用
|
||||
- 对应里程碑:不适用
|
||||
|
||||
## 需求分析
|
||||
|
||||
| ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| R1 | 五个候选(含第二个 PI 档与 Codex)各 3 次、Codex 最后、全部失败暂停询问 | 符合:控制器已按声明顺序对 `unavailable`/`failed-clean` 自动续跑;模型 ID 经本机冒烟(agy `gemini-3.8-flash-high`、pi `zai-coding-cn/glm-5.3-flash`、codex `gpt-6.1-sol` 均回 OK,SELF) | P2 | validate 通过;文档一致;CI 通过 | 无 | 接受 |
|
||||
|
||||
## 方案与计划
|
||||
|
||||
- 方案引用:纯配置:Codex 从应急档改为各角色最后一个正常候选(校验器禁止应急档进入普通角色列表,且应急档只跑 1 次,故不保留 `emergency_profile`);新增 `pi-glm` 档
|
||||
- 实施计划引用:I1 / R1:单一 Agent 单元改 `AGENT-EXECUTION.md` 与三份 policy 文本
|
||||
- 测试计划引用:R1:`make agent-exec-validate`;PR HEAD 完整 CI
|
||||
|
||||
## 阶段记录
|
||||
|
||||
| 阶段 | 对象版本 | 状态 | 决策/执行者 | 时间 | 依据 |
|
||||
|---|---|---|---|---|---|
|
||||
| 需求拆解 | d2035c7 | 已完成 | host | 2026-10-20 | 用户直接请求 |
|
||||
| 需求评估 | d2035c7 | 已完成 | host | 2026-10-20 | R1 接受 |
|
||||
| 需求表确认 | d2035c7 | 跳过 | — | 2026-10-20 | 用户请求已明确目标与验收,无取舍 |
|
||||
| 方案设计 | 890313e | 已完成 | host | 2026-10-20 | 本卡方案与计划段 |
|
||||
| 实施计划 | 890313e | 已完成 | host | 2026-10-20 | 本卡方案与计划段 |
|
||||
| 实施与自检 | 8e21b66 | 已完成 | cursor-agent-stable | 2026-10-20 | Agent 实施收据表 |
|
||||
| 正式测试与验收 | 8e21b66 | 已完成(SELF;GATE 待 CI) | host | 2026-10-20 | 证据表 |
|
||||
| 代码 Review | 8e21b66 | PASS | host 主模型 | 2026-10-20 | 合入与清理段 |
|
||||
| 合入 | 待定 | 待执行 | — | — | — |
|
||||
| 合入核验与收口 | 待定 | 待执行 | — | — | — |
|
||||
|
||||
## 探索试验与迭代
|
||||
|
||||
| 增量/试验 | 假设 | 范围 | 判断和停止条件 | 授权/决策依据 | 结果 | 变更影响 | 需重审补测 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| I1 | 纯配置即可实现五候选链、Codex 最后、每候选 3 次 | AGENT-EXECUTION.md + 3 份 policy | validate 与 CI 通过即停 | 用户直接请求 | 三个新模型 ID 冒烟回 OK(SELF);validate PASS | 全部角色路由 | 否 |
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | d2035c76dc1cb15e01d2c184af5155d9d773cd9f | d2035c76dc1cb15e01d2c184af5155d9d773cd9f | 2026-10-20T05:56:50Z |
|
||||
|
||||
## 证据(Evidence)
|
||||
|
||||
<!-- CMD="<命令>" make evidence 写入;手抄/转写输出视为无效证据(AGENTS.md 证据与验证门禁)。 -->
|
||||
| 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) |
|
||||
|---|---|---|---|---|---|
|
||||
|
||||
## 交付调度
|
||||
|
||||
- 调度状态:窗口已领取;调度记录:#518 comment 8226(mq-dev-20261020-cli-agent-fallback-chain-01)
|
||||
- entry_id:无;attempt_id:无;窗口执行者:无
|
||||
- 固定候选:无(base/head、组件与相关配置引用实际尝试)
|
||||
- 调度依据:policy/delivery.md#合入调度
|
||||
- 固定后证据:源码外 RECEIPT;实际结果后按授权原样导入和闭合
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:四个角色候选链为 cursor(auto) → antigravity(`gemini-3.8-flash-high`) → pi-glm(`zai-coding-cn/glm-5.3-flash`) → pi(`minimax-cn/MiniMax-M3`) → codex(`gpt-6.1-sol`)(test/review 前四项顺序不同,Codex 均最后),每候选最多 3 次;去掉 `emergency_profile`;policy 三份文本同步“自动换候选不询问、全部耗尽暂停询问是否重试”。
|
||||
- 验证:`make agent-exec-validate` PASS;`make test-governance` PASS(513 tests,skipped=18);`make task-sync` PASS;三个新模型 ID 冒烟 PASS(SELF,未入证据表);PR HEAD 完整 CI 待 GATE。
|
||||
- 影响与剩余项:仅影响 Agent 执行路由。运行时随机顺序未实现(非目标,声明顺序满足“顺序不限、Codex 最后”);`failed-unknown` 等 fail-stop 仍立即停止、不换候选。
|
||||
|
||||
## 规划进展与下一步
|
||||
|
||||
- 本次推进/剩余:R1 完成,无剩余
|
||||
- 首选下一任务:无(独立小改动)
|
||||
- 推荐依据:不适用
|
||||
- 前置条件/待确认:无
|
||||
- 预期产物/验收条件:不适用
|
||||
- 重复任务核对:远端分流 NEW(唯一候选 rdm-two-trees-followup 无关)
|
||||
- 启动授权:未授权(建议不自动启动新任务,仍须明确授权)
|
||||
|
||||
## 合入与清理
|
||||
|
||||
- Review 记录:host 主模型(未撰写实施单元;平台账号 weichen)审阅 890313e..8e21b66 实际 diff(AGENT-EXECUTION.md 机器块与说明、delivery/governance/tool-adaptation-matrix 指定段落),重放 `make agent-exec-validate`;结论 PASS,无阻塞项(非阻塞:AGENT-EXECUTION.md 一行超过 78 列)。
|
||||
- 冲突记录:窗口内 `make task-sync` 合入 main f1866dc(changed=1),无冲突;main 侧对 AGENT-EXECUTION.md 仅在 cursor 档加注释,与本改动正交;合并后重跑 `make agent-exec-validate` PASS。
|
||||
- CI 记录:NOT_RUN(当前 HEAD 完整 SHA、全部必需检查、运行链接、执行身份及 GATE 结果)
|
||||
- 合入记录:NOT_RUN(交付授权范围、PR、被核验 HEAD、合入 SHA、目标分支及内容核验)
|
||||
- 清理记录:NOT_RUN(授权依据、写者退出确认、worktree/分支/任务卡处置)
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T05:55:50.540864+00:00",
|
||||
"command": "make precheck",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev",
|
||||
"before_head": "d2035c76dc1cb15e01d2c184af5155d9d773cd9f",
|
||||
"after_head": "d2035c76dc1cb15e01d2c184af5155d9d773cd9f",
|
||||
"branch": "main",
|
||||
"target_branch": "main",
|
||||
"target_head": "d2035c76dc1cb15e01d2c184af5155d9d773cd9f",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev'",
|
||||
"[repo] branch=main head=d2035c76dc",
|
||||
"[remote] origin/main=d2035c76dc ahead=0 behind=0",
|
||||
"[tree] clean submodules_drift=0 uninit=0",
|
||||
"[worktrees] linked=7",
|
||||
"[initiatives] local cards (not authoritative): none",
|
||||
"[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)",
|
||||
"[facts] policy/facts.md 6 条事实均在有效期内",
|
||||
"[required-reading] core/baseline.md, workflows/delivery.md §1, policy/delivery.md",
|
||||
"[R0] d2035c76dc(完整:d2035c76dc1cb15e01d2c184af5155d9d773cd9f)",
|
||||
"[worktree] before-sync: recursive component checks passed",
|
||||
"[verdict] READY — 保留本次 precheck receipt 后建任务工作区:PRECHECK_RECEIPT=/tmp/task-precheck.json make task-start NAME=feature/your-branch",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev'"
|
||||
],
|
||||
"output_sha256": "ecc7f16b6bcabae29ac639e9d5d31ab0bc39f85e0fe0b51449d7b69412ba2d08",
|
||||
"receipt_sha256": "a8789614c5e3adf44db1e46a6fee98cfabea7b7e79708756d63c4aa756359b79",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/a8789614c5e3adf44db1e46a6fee98cfabea7b7e79708756d63c4aa756359b79.json"
|
||||
}
|
||||
```
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T06:00:53.614147+00:00",
|
||||
"command": "make agent-exec-validate",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain",
|
||||
"before_head": "8e21b66db4606c20a1d7de4f1293fbcd61780658",
|
||||
"after_head": "8e21b66db4606c20a1d7de4f1293fbcd61780658",
|
||||
"branch": "feature/cli-agent-fallback-chain",
|
||||
"target_branch": "main",
|
||||
"target_head": "d2035c76dc1cb15e01d2c184af5155d9d773cd9f",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain'",
|
||||
"scripts/agent-exec validate --repo .",
|
||||
"validate: ok",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain'"
|
||||
],
|
||||
"output_sha256": "74357235852380ff3b7cbcb532b030dc924e8d11a6b2e39dfcb729717e460660",
|
||||
"receipt_sha256": "1f3ed60af7d5c96fd19ba0b2f89142237b61597e30e7c9578ec20b8c6bfb60f5",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/1f3ed60af7d5c96fd19ba0b2f89142237b61597e30e7c9578ec20b8c6bfb60f5.json"
|
||||
}
|
||||
```
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T06:01:05.726907+00:00",
|
||||
"command": "make task-sync",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain",
|
||||
"before_head": "95aba5d68d68f1e3f35887a93aec41b464638a95",
|
||||
"after_head": "95aba5d68d68f1e3f35887a93aec41b464638a95",
|
||||
"branch": "feature/cli-agent-fallback-chain",
|
||||
"target_branch": "main",
|
||||
"target_head": "d2035c76dc1cb15e01d2c184af5155d9d773cd9f",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain'",
|
||||
"[worktree] before-sync: recursive component checks passed",
|
||||
"[worktree] before-update: recursive component checks passed",
|
||||
"[worktree] materialize: recursive component checks passed",
|
||||
"[worktree] after-sync: recursive component checks passed",
|
||||
"[evidence] WARN JSON receipt line 120: recorded HEAD predates non-card changes ——关键检查须重跑并以 make evidence 重新写入",
|
||||
"[synced] sync_base=d2035c76dc1cb15e01d2c184af5155d9d773cd9f tested_head=95aba5d68d68f1e3f35887a93aec41b464638a95 checked_at=2026-10-20T06:01:57Z changed=0 sync_target=main",
|
||||
"[next] 跑正式验收(make test 等),证据写入任务卡",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain'"
|
||||
],
|
||||
"output_sha256": "e797ab5e6a3e9bd075c44fdfe89f72e36a3e2f2fa892e6194501f7c88f46ceb1",
|
||||
"receipt_sha256": "d05e26eda35110298bb7721e35872f95cdc6c62964c0bf8a84e6db0f06e07775",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/d05e26eda35110298bb7721e35872f95cdc6c62964c0bf8a84e6db0f06e07775.json"
|
||||
}
|
||||
```
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T06:04:41.162206+00:00",
|
||||
"command": "make task-sync",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain",
|
||||
"before_head": "c41e773d1e11a052ff53b32d493a3fa3e025ea99",
|
||||
"after_head": "c41e773d1e11a052ff53b32d493a3fa3e025ea99",
|
||||
"branch": "feature/cli-agent-fallback-chain",
|
||||
"target_branch": "main",
|
||||
"target_head": "d2035c76dc1cb15e01d2c184af5155d9d773cd9f",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain'",
|
||||
"[worktree] before-sync: recursive component checks passed",
|
||||
"[worktree] before-update: recursive component checks passed",
|
||||
"[worktree] materialize: recursive component checks passed",
|
||||
"[worktree] after-sync: recursive component checks passed",
|
||||
"[evidence] WARN JSON receipt line 120: recorded HEAD predates non-card changes ——关键检查须重跑并以 make evidence 重新写入",
|
||||
"[synced] sync_base=d2035c76dc1cb15e01d2c184af5155d9d773cd9f tested_head=c41e773d1e11a052ff53b32d493a3fa3e025ea99 checked_at=2026-10-20T06:05:34Z changed=0 sync_target=main",
|
||||
"[next] 跑正式验收(make test 等),证据写入任务卡",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain'"
|
||||
],
|
||||
"output_sha256": "40878f3432df9e7aa449f4304ca79a36a9f2c9d3253e229481283dd119efc992",
|
||||
"receipt_sha256": "cf538efd2a1d13e0f740447675779b37e3ae0db15fa78cc6553856ac2dbb6cc1",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/cf538efd2a1d13e0f740447675779b37e3ae0db15fa78cc6553856ac2dbb6cc1.json"
|
||||
}
|
||||
```
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T06:06:03.531305+00:00",
|
||||
"command": "make task-sync",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain",
|
||||
"before_head": "3a6ffb97ad0cab5c215f684f27108dbd92f23129",
|
||||
"after_head": "3a6ffb97ad0cab5c215f684f27108dbd92f23129",
|
||||
"branch": "feature/cli-agent-fallback-chain",
|
||||
"target_branch": "main",
|
||||
"target_head": "d2035c76dc1cb15e01d2c184af5155d9d773cd9f",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain'",
|
||||
"[worktree] before-sync: recursive component checks passed",
|
||||
"[worktree] before-update: recursive component checks passed",
|
||||
"[worktree] materialize: recursive component checks passed",
|
||||
"[worktree] after-sync: recursive component checks passed",
|
||||
"[evidence] WARN JSON receipt line 120: recorded HEAD predates non-card changes ——关键检查须重跑并以 make evidence 重新写入",
|
||||
"[synced] sync_base=d2035c76dc1cb15e01d2c184af5155d9d773cd9f tested_head=3a6ffb97ad0cab5c215f684f27108dbd92f23129 checked_at=2026-10-20T06:06:49Z changed=0 sync_target=main",
|
||||
"[next] 跑正式验收(make test 等),证据写入任务卡",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain'"
|
||||
],
|
||||
"output_sha256": "1be7bf73418483205369a97f0b90f7ff7a2709effd5ca44875e59f6ff1b2d955",
|
||||
"receipt_sha256": "2756940470feebd40744bd42504690f19dfeebd9d76cca06369b57e36fe7caa3",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/2756940470feebd40744bd42504690f19dfeebd9d76cca06369b57e36fe7caa3.json"
|
||||
}
|
||||
```
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T06:08:38.659173+00:00",
|
||||
"command": "make test-governance",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain",
|
||||
"before_head": "286c3ab0c16fff6ead69a62f470977de4cec656e",
|
||||
"after_head": "286c3ab0c16fff6ead69a62f470977de4cec656e",
|
||||
"branch": "feature/cli-agent-fallback-chain",
|
||||
"target_branch": "main",
|
||||
"target_head": "d2035c76dc1cb15e01d2c184af5155d9d773cd9f",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"test_feature_missing_parent_is_allowed (test_write_guard.WriteGuardTests.test_feature_missing_parent_is_allowed) ... ok",
|
||||
"test_invalid_json_is_denied (test_write_guard.WriteGuardTests.test_invalid_json_is_denied) ... ok",
|
||||
"test_missing_parent_on_main_is_denied (test_write_guard.WriteGuardTests.test_missing_parent_on_main_is_denied) ... ok",
|
||||
"test_missing_unknown_and_malformed_write_input_are_denied (test_write_guard.WriteGuardTests.test_missing_unknown_and_malformed_write_input_are_denied) ... ok",
|
||||
"test_non_git_destination_is_explicitly_outside_scope (test_write_guard.WriteGuardTests.test_non_git_destination_is_explicitly_outside_scope) ... ok",
|
||||
"test_nonwrite_tools_are_outside_scope (test_write_guard.WriteGuardTests.test_nonwrite_tools_are_outside_scope) ... ok",
|
||||
"test_relative_path_uses_hook_cwd_not_process_cwd (test_write_guard.WriteGuardTests.test_relative_path_uses_hook_cwd_not_process_cwd) ... ok",
|
||||
"test_symlink_into_main_with_missing_parents_is_denied (test_write_guard.WriteGuardTests.test_symlink_into_main_with_missing_parents_is_denied) ... ok",
|
||||
"test_valid_multi_file_patch_on_feature_is_allowed (test_write_guard.WriteGuardTests.test_valid_multi_file_patch_on_feature_is_allowed) ... ok",
|
||||
"",
|
||||
"----------------------------------------------------------------------",
|
||||
"Ran 513 tests in 365.638s",
|
||||
"",
|
||||
"OK (skipped=18)",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain'"
|
||||
],
|
||||
"output_sha256": "750f575e91446dc8480ec53ac70d500852145ae12a75d19ef96390baaf6d55a2",
|
||||
"receipt_sha256": "14ba55cc1c8585e2a24ef81e0f4edaf74277b83fb47d76fa7bd95dda815cceec",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/14ba55cc1c8585e2a24ef81e0f4edaf74277b83fb47d76fa7bd95dda815cceec.json"
|
||||
}
|
||||
```
|
||||
| 同步(记录前对象) | f1866dc3bb4537ac6446fdd26e696cb636b543ef | 16913620d8cbf214bf81792c5ff03eaee94752cd | 2026-10-20T07:48:20Z |
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T07:47:26.429534+00:00",
|
||||
"command": "make task-sync",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain",
|
||||
"before_head": "6bf1000547cc533b914dcb79ad37573b7d33cf61",
|
||||
"after_head": "f60effc6326ae8847cb1a39bef469c83d812c385",
|
||||
"branch": "feature/cli-agent-fallback-chain",
|
||||
"target_branch": "main",
|
||||
"target_head": "f1866dc3bb4537ac6446fdd26e696cb636b543ef",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
" create mode 100644 docker/verify-env.sh",
|
||||
" create mode 100644 docs/superpowers/specs/2026-10-20-fast-slow-o2-i1-review.md",
|
||||
"[worktree] before-update: recursive component checks passed",
|
||||
"[worktree] materialize: recursive component checks passed",
|
||||
"[worktree] after-sync: recursive component checks passed",
|
||||
"admit: ok",
|
||||
"[evidence] WARN JSON receipt line 120: recorded HEAD predates non-card changes ——关键检查须重跑并以 make evidence 重新写入",
|
||||
"[evidence] WARN JSON receipt line 159: recorded HEAD predates non-card changes ——关键检查须重跑并以 make evidence 重新写入",
|
||||
"[evidence] WARN JSON receipt line 189: recorded HEAD predates non-card changes ——关键检查须重跑并以 make evidence 重新写入",
|
||||
"[evidence] WARN JSON receipt line 224: recorded HEAD predates non-card changes ——关键检查须重跑并以 make evidence 重新写入",
|
||||
"[evidence] WARN JSON receipt line 259: recorded HEAD predates non-card changes ——关键检查须重跑并以 make evidence 重新写入",
|
||||
"[evidence] WARN JSON receipt line 294: recorded HEAD predates non-card changes ——关键检查须重跑并以 make evidence 重新写入",
|
||||
"[synced] sync_base=f1866dc3bb4537ac6446fdd26e696cb636b543ef tested_head=f60effc6326ae8847cb1a39bef469c83d812c385 checked_at=2026-10-20T07:48:20Z changed=1 sync_target=main",
|
||||
"[next] 跑正式验收(make test 等),证据写入任务卡",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain'"
|
||||
],
|
||||
"output_sha256": "9671a18a5835bfbad2bade03cd21602d59eb40b92f070c258b186ecea7ae9a58",
|
||||
"receipt_sha256": "c4547470f11d63491ea2f2c4b23c6a46425e5362f37dd23d13f1770165e32057",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/c4547470f11d63491ea2f2c4b23c6a46425e5362f37dd23d13f1770165e32057.json"
|
||||
}
|
||||
```
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T07:48:38.505764+00:00",
|
||||
"command": "make agent-exec-validate",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain",
|
||||
"before_head": "b90d3aaee9550271cb7c2acd200267f3605d6fca",
|
||||
"after_head": "b90d3aaee9550271cb7c2acd200267f3605d6fca",
|
||||
"branch": "feature/cli-agent-fallback-chain",
|
||||
"target_branch": "main",
|
||||
"target_head": "f1866dc3bb4537ac6446fdd26e696cb636b543ef",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain'",
|
||||
"scripts/agent-exec validate --repo .",
|
||||
"validate: ok",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-cli-agent-fallback-chain'"
|
||||
],
|
||||
"output_sha256": "74357235852380ff3b7cbcb532b030dc924e8d11a6b2e39dfcb729717e460660",
|
||||
"receipt_sha256": "8a2946c846a8e64c76222cefd05e91161131d1fae4d8b8412dd4e8d90c562fd7",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/8a2946c846a8e64c76222cefd05e91161131d1fae4d8b8412dd4e8d90c562fd7.json"
|
||||
}
|
||||
```
|
||||
|
||||
## 闭合记录(合入前折叠)
|
||||
|
||||
- 本卡在 PR #648(https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/648)合入前闭合并归档,随该 PR 一同合入。
|
||||
- 该 PR 的合并提交即本任务的落地记录。
|
||||
- 合入后无需回填,也无需单独的闭合 PR。
|
||||
@@ -0,0 +1,413 @@
|
||||
# feature/conversation-handoff 任务卡
|
||||
|
||||
任务主记录:PR #651 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/651;状态:已完成(合入前闭合);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= f97917032d143188bc7faf665aff612d9814af4e
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-conversation-handoff(worktree);分支:feature/conversation-handoff
|
||||
- 分支类型:standalone;root_target:main;immediate_target:main;accepting_requirements:false
|
||||
- 需求分流:verdict=NEW;selected_initiative=无;requirement_sha256=19ad0cf4b00048ede29774b079a28c2d8e417b9363c9cbe266ce99852b2594f9;triage_receipt=/tmp/task-handoff-triage-20261020.json;receipt_sha256=2ace0e14daaab36c1418ac3ce392cdbbf6e43722ddc86663b4939c8d85f9a930
|
||||
|
||||
- 授权与交付终点:更新本仓任务交付规范,规定每轮结束时最终回复附可续作 handoff;按现行门禁完成 Review、PR、CI、合入与安全收口。不得修改共享规范子模块或增加自动化。
|
||||
- 交付模式:goal-first(目标、范围和交付终点一次确认;范围内连续推进)
|
||||
- 实施执行:agent-per-unit(配置:AGENT-EXECUTION.md)
|
||||
- 合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入)
|
||||
- 人工决策点:仅限目标/范围/验收变更、重大取舍、高后果操作或无法自动判定的业务验收
|
||||
- 当前阶段:最终验证与合入;当前增量:I1(对话收尾交接块规范)
|
||||
- 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位)
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
在 `policy/delivery.md` 定义最终回复 handoff 的最小字段、证据边界和无续办状态时的处理,并在 `AGENTS.md` 增加强制入口。共享 Development-Guidelines、模板、schema、自动化和测试不是本次范围。
|
||||
|
||||
## Agent 实施收据
|
||||
|
||||
路由与 fail-stop 规则见根目录 AGENT-EXECUTION.md 与 policy/delivery.md;每次尝试一行,原始日志留在源码外收据路径。
|
||||
|
||||
| 单元 ID | 预期范围 | 配置摘要 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| conversation-handoff-rules | `AGENTS.md`, `policy/delivery.md` | 701aa8b8 | implementation | cursor, antigravity, pi | 1 | Cursor / auto | success | success (`a98f095`) | false | `/tmp/task-handoff-implementation-20261020.json` |
|
||||
|
||||
## 关联方向与规划
|
||||
|
||||
- 适用状态:待核对(无适用规划时说明原因)
|
||||
- 主记录路径/版本:待核对(路径按仓库根目录定位,归档后不变;只引用唯一正文)
|
||||
- 对应里程碑:待核对
|
||||
|
||||
## 需求分析
|
||||
|
||||
| ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| R1 | 每轮用户任务结束时提供可在上下文清理后恢复工作的 handoff | 与现有任务卡为状态权威、阶段 handoff 落盘规则一致;对话 handoff 仅作恢复摘要 | 必须 | 最终回复末尾有自包含续作要点,未发生的信息不编造;无仓库与续办状态时允许一行明确不适用 | 无 | 已实现;待 CI 准入 |
|
||||
|
||||
## 方案与计划
|
||||
|
||||
- 方案引用:待填写(含对象版本)
|
||||
- 实施计划引用:待填写(含增量与需求 ID)
|
||||
- 测试计划引用:待填写(含需求 ID 与验收条件)
|
||||
|
||||
## 阶段记录
|
||||
|
||||
| 阶段 | 对象版本 | 状态 | 决策/执行者 | 时间 | 依据 |
|
||||
|---|---|---|---|---|---|
|
||||
| 需求拆解/评估 | f97917032d143188bc7faf665aff612d9814af4e | 完成 | 主模型;NEW,与现有 RDM initiative 不相关 | 2026-10-20 | triage receipt `/tmp/task-handoff-triage-20261020.json` |
|
||||
| 方案/实施计划 | a98f095cef5ede016440d92060fa62db03b7318b | 完成 | 主模型;仅更新规范权威与入口摘要 | 2026-10-20 | 本卡目标与范围 |
|
||||
| 实施与自检 | a98f095cef5ede016440d92060fa62db03b7318b | 完成 | Cursor CLI;transport 成功,host 检查 | 2026-10-20 | `/tmp/task-handoff-implementation-20261020.json`;`git show --check --format= HEAD`;`make agent-exec-validate` |
|
||||
| 正式测试与验收 | 0dcaa430e0d724752aef1f55f120f419eeda9ad4 | 阻塞 | 文档直接检查通过;代码测试不适用 | 2026-10-20 | GATE CI run #4403 的 `test-pg` 失败,日志为 `TestArtifactFacadeCard` 的 anchorMessageId 不匹配;`svc-realcombo` 通过,`test` 当时 pending |
|
||||
| 代码 Review | 0dcaa430e0d724752aef1f55f120f419eeda9ad4 | 通过 | 主模型审阅规范差异及链接 | 2026-10-20 | 仅涉及 `AGENTS.md`、`policy/delivery.md`;无规范缺陷 |
|
||||
| 合入 | 待定 | 待执行 | agent | — | — |
|
||||
| 合入核验与收口 | 待定 | 待执行 | host | — | — |
|
||||
|
||||
## 探索试验与迭代
|
||||
|
||||
| 增量/试验 | 假设 | 范围 | 判断和停止条件 | 授权/决策依据 | 结果 | 变更影响 | 需重审补测 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 待定义 | — | — | — | 待核对 | NOT_RUN | 待评估 | 待评估 |
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | f97917032d143188bc7faf665aff612d9814af4e | f97917032d143188bc7faf665aff612d9814af4e | 2026-10-20T07:09:18Z |
|
||||
|
||||
## 证据(Evidence)
|
||||
|
||||
<!-- CMD="<命令>" make evidence 写入;手抄/转写输出视为无效证据(AGENTS.md 证据与验证门禁)。 -->
|
||||
| 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) |
|
||||
|---|---|---|---|---|---|
|
||||
|
||||
## 交付调度
|
||||
|
||||
- 调度状态:持有最终窗口;调度记录:#518 comment 8266
|
||||
- entry_id:mq-dev-20261020-conversation-handoff-01;attempt_id:final-01;窗口执行者:host / weichen
|
||||
- 固定候选:无(base/head、组件与相关配置引用实际尝试)
|
||||
- 调度依据:policy/delivery.md#合入调度
|
||||
- 固定后证据:源码外 RECEIPT;实际结果后按授权原样导入和闭合
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:增加最终回复 handoff 规范及 AGENTS 强制指针;与任务卡/持久阶段交接权威边界一致。
|
||||
- 验证:旧候选的 GATE 失败保留为历史;当前已同步权威 main 17f8bc06c110014b9101e7a33729d9f5445bd123,文档范围/字段/链接/现行规则保留、agent-exec validate 和递归组合检查均 SELF PASS(下方原始 evidence)。最终 HEAD 的 test/test-pg/svc-realcombo GATE 待运行。
|
||||
- 影响与剩余项:规范变更已就绪;Backend 修复 #226 已合入但 Dev 组合采用由独立 #653 承担。本 PR 仅规范与任务记录,须最终 HEAD 三项 CI 全绿后合入。
|
||||
|
||||
## 规划进展与下一步
|
||||
|
||||
- 本次推进/剩余:完成已授权的对话 handoff 规范;不属长期业务方案,剩余为当前候选 GATE、合入核验和安全收口。
|
||||
- 首选下一任务:完成本 PR 当前交付,无新增任务;新版运行时组合已有 PR #653,继续由原任务负责。
|
||||
- 推荐依据:待填写
|
||||
- 前置条件/待确认:待核对
|
||||
- 预期产物/验收条件:待定义
|
||||
- 重复任务核对:待核对(已有/在途任务、PR 与规划记录)
|
||||
- 启动授权:未授权(建议不自动启动新任务,仍须明确授权)
|
||||
|
||||
## 合入与清理
|
||||
|
||||
- Review 记录:PASS(主模型;head `0dcaa430e0d724752aef1f55f120f419eeda9ad4`;规范范围与链接审阅通过)
|
||||
- 冲突记录:NOT_RUN(最新目标同步、冲突处置、组合兼容核验及复审/补测)
|
||||
- CI 记录:FAIL(GATE;head `0dcaa430e0d724752aef1f55f120f419eeda9ad4`;run #4403;`test-pg` 的 `TestArtifactFacadeCard` 失败,`svc-realcombo` 通过,`test` 为 pending;[job 7138](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/actions/runs/4403/jobs/7138))
|
||||
- 合入记录:NOT_RUN(CI 未通过,未合入)
|
||||
- 清理记录:NOT_RUN(授权依据、写者退出确认、worktree/分支/任务卡处置)
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T07:08:07.377183+00:00",
|
||||
"command": "make precheck",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev",
|
||||
"before_head": "f97917032d143188bc7faf665aff612d9814af4e",
|
||||
"after_head": "f97917032d143188bc7faf665aff612d9814af4e",
|
||||
"branch": "main",
|
||||
"target_branch": "main",
|
||||
"target_head": "f97917032d143188bc7faf665aff612d9814af4e",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev'",
|
||||
"[repo] branch=main head=f97917032d",
|
||||
"[remote] origin/main=f97917032d ahead=0 behind=0",
|
||||
"[tree] clean submodules_drift=0 uninit=0",
|
||||
"[worktrees] linked=8",
|
||||
"[initiatives] local cards (not authoritative): none",
|
||||
"[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)",
|
||||
"[facts] policy/facts.md 6 条事实均在有效期内",
|
||||
"[required-reading] core/baseline.md, workflows/delivery.md §1, policy/delivery.md",
|
||||
"[R0] f97917032d(完整:f97917032d143188bc7faf665aff612d9814af4e)",
|
||||
"[worktree] before-sync: recursive component checks passed",
|
||||
"[verdict] READY — 保留本次 precheck receipt 后建任务工作区:PRECHECK_RECEIPT=/tmp/task-precheck.json make task-start NAME=feature/your-branch",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev'"
|
||||
],
|
||||
"output_sha256": "601e28fd5627afdf978a470ef2b37265fee4ff28520a4668dd8e6a19ce5553e6",
|
||||
"receipt_sha256": "237e2888ced51370c2ca6ba41989e490f6e00c72bdbb74d008a15725efcaff65",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/237e2888ced51370c2ca6ba41989e490f6e00c72bdbb74d008a15725efcaff65.json"
|
||||
}
|
||||
```
|
||||
|
||||
## 闭合记录(合入前折叠)
|
||||
|
||||
- 本卡在 PR #651(https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/651)合入前闭合并归档,随该 PR 一同合入。
|
||||
- 该 PR 的合并提交即本任务的落地记录。
|
||||
- 合入后无需回填,也无需单独的闭合 PR。
|
||||
|
||||
## 2026-10-20 恢复与 fail-stop 对账
|
||||
|
||||
- 用户再次明确“继续”,目标仍为 PR #651 通过必要验证并合入;已授权修复阻塞合入的 Backend 测试,禁止 host 代写。
|
||||
- 原 repair run `290c8b13f4a4a9e5d67df066754ab3fd` 的终态仍为 `scope-expansion`,没有 transport,不导入任何产物;原隔离现场保留。
|
||||
- 已只读检查唯一未跟踪诊断文件 `internal/server/zz_diag_tmp_test.go` 与实际工具事件;未发现仓库正式代码、引用或远端修改。机器本地诊断产物位于 `/tmp/ciflake-943183` 与 `~/.cache/ciflake-943183-tmp`,原执行器记录的进程及该现场写者已退出。
|
||||
- 原包把 `internal/server/**` 当作目录通配,但执行器仅按精确路径或目录前缀匹配;新单元须使用明确文件清单,不续跑原尝试、不修改执行器。
|
||||
- Backend 已登记任务工作区已保留并移至 `/home/weichen/projects/Agent-System-Backend-wt-fix-ci-pg-flaky-tests`,修复 Git 与唯一已初始化子模块的路径元数据;Dev 工作树的未跟踪嵌套工作区阻塞已消除。
|
||||
- 启动检查原始 SELF 收据:`/tmp/pr651-resume-20261020-a1.json`(SHARED_WORKSPACE_BUSY)、`/tmp/pr651-resume-20261020-a2.json`(任务卡已归档,拒绝 LOCAL_READY);不宣称通过。恢复活动卡后重新检查。
|
||||
- GATE 重新只读核验:PR #651 head `19566bfde79313dfaea31ff6f5ca918f820c1606` 仍开放;run 4404 的 test/svc-realcombo success,test-pg failure;日志 `/tmp/pr651-job7141.log`。目标 main 当前 `f1866dc3bb4537ac6446fdd26e696cb636b543ef`;#648 持有交付窗口,本任务先局部排障。
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T08:46:38.272183+00:00",
|
||||
"command": "make precheck",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-conversation-handoff",
|
||||
"before_head": "f9884db84b7fb5752d50b641f09adb75303e327c",
|
||||
"after_head": "f9884db84b7fb5752d50b641f09adb75303e327c",
|
||||
"branch": "feature/conversation-handoff",
|
||||
"target_branch": "main",
|
||||
"target_head": "adbef2f49c6c252a09449496afbdb6685201993b",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-conversation-handoff'",
|
||||
"[repo] branch=feature/conversation-handoff head=f9884db84b",
|
||||
"[remote] origin/main=adbef2f49c ahead=6 behind=26",
|
||||
"[tree] clean submodules_drift=0 uninit=0",
|
||||
"[worktrees] linked=6",
|
||||
"[initiatives] local cards (not authoritative): none",
|
||||
"[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)",
|
||||
"[facts] policy/facts.md 6 条事实均在有效期内",
|
||||
"[required-reading] core/baseline.md, workflows/delivery.md §1, policy/delivery.md",
|
||||
"[target] adbef2f49c6c252a09449496afbdb6685201993b(observed; task initial baseline is reported separately)",
|
||||
"[task-state] registered=/home/weichen/projects/Agent-System-Dev-wt-feature-conversation-handoff initial_base=f97917032d143188bc7faf665aff612d9814af4e",
|
||||
"[verdict] LOCAL_READY — existing task may continue authorized local work; final delivery still requires latest-target sync and checks",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-conversation-handoff'"
|
||||
],
|
||||
"output_sha256": "be0eda106b0ed68d8f108a607b83c5231d1c34c744675a83995638fa5e39aa43",
|
||||
"receipt_sha256": "12bb48774c59da7635b3b0cf1ef81465b5fe29475baaf880c72a1a82a0649f46",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/12bb48774c59da7635b3b0cf1ef81465b5fe29475baaf880c72a1a82a0649f46.json"
|
||||
}
|
||||
```
|
||||
|
||||
- 局部恢复已通过并导入:`/tmp/pr651-resume-20261020-a6.json`(LOCAL_READY,SELF);正式交付需新鲜同步与固定 HEAD CI。
|
||||
- 新 repair 单元:`ci-pg-async-completion-r2`;固定 Backend base `e927694818f3c0b79ec663d70ab2aa9d47d8fd8f`;工作包 `/tmp/pr651-repair-unit-r2.json`;收据目标 `/tmp/pr651-repair-r2.json`;运行中,尚无成功产物。
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T09:09:46.106201+00:00",
|
||||
"command": "cd /home/weichen/projects/Agent-System-Backend-wt-fix-ci-pg-flaky-tests && git rev-parse HEAD && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./...",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-conversation-handoff",
|
||||
"before_head": "4544cd94f8ece209b32aec885a410e5eeaef968e",
|
||||
"after_head": "4544cd94f8ece209b32aec885a410e5eeaef968e",
|
||||
"branch": "feature/conversation-handoff",
|
||||
"target_branch": "main",
|
||||
"target_head": "17f8bc06c110014b9101e7a33729d9f5445bd123",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"ok \tagent-system-backend/internal/runtime\t1.834s",
|
||||
"ok \tagent-system-backend/internal/server\t28.474s",
|
||||
"ok \tagent-system-backend/internal/settings\t0.211s",
|
||||
"ok \tagent-system-backend/internal/skills\t1.741s",
|
||||
"ok \tagent-system-backend/internal/squadadapter\t0.158s",
|
||||
"ok \tagent-system-backend/internal/store\t12.820s",
|
||||
"ok \tagent-system-backend/internal/surfacesvc\t0.399s",
|
||||
"ok \tagent-system-backend/internal/tools\t13.619s",
|
||||
"ok \tagent-system-backend/internal/vision\t0.003s",
|
||||
"ok \tagent-system-backend/internal/wfcompile\t0.050s",
|
||||
"ok \tagent-system-backend/internal/workflow\t0.002s",
|
||||
"ok \tagent-system-backend/pkg/extension\t0.004s",
|
||||
"ok \tagent-system-backend/pkg/extension/link\t0.006s",
|
||||
"ok \tagent-system-backend/pkg/identity\t0.095s",
|
||||
"? \tagent-system-backend/web\t[no test files]"
|
||||
],
|
||||
"output_sha256": "08769f0589e95d0b7878ce3551b931aceae5f80ad4916cc5f64bfd53ae5cfbb0",
|
||||
"receipt_sha256": "d0a0fa46d65618338b88d99c72e53402449454c740fe7399d6354b7a80f5d084",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/d0a0fa46d65618338b88d99c72e53402449454c740fe7399d6354b7a80f5d084.json"
|
||||
}
|
||||
```
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T09:13:47.514647+00:00",
|
||||
"command": "cd /home/weichen/projects/Agent-System-Backend-wt-fix-ci-pg-flaky-tests && git rev-parse HEAD && git diff --check origin/main HEAD && GOWORK=off go test ./internal/server ./internal/runmgr -run \"^(TestArtifactFacadeCard|TestMockCardflowFullLoop|TestMockCardflowStreamLoop|TestBackground.*|TestProjectEvents.*|TestUnregisteredProjectEventsRetainLegacyReads)$\" -count=1",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-conversation-handoff",
|
||||
"before_head": "4544cd94f8ece209b32aec885a410e5eeaef968e",
|
||||
"after_head": "4544cd94f8ece209b32aec885a410e5eeaef968e",
|
||||
"branch": "feature/conversation-handoff",
|
||||
"target_branch": "main",
|
||||
"target_head": "17f8bc06c110014b9101e7a33729d9f5445bd123",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"910d8e5fd20747eebc6e53b5fc0118185cb53765",
|
||||
"ok \tagent-system-backend/internal/server\t6.436s",
|
||||
"ok \tagent-system-backend/internal/runmgr\t0.495s"
|
||||
],
|
||||
"output_sha256": "3015a2c860e2066174d3f89da874b63b403192d9aa870b0a3fa4e238f1db9e24",
|
||||
"receipt_sha256": "5d2035b4cc2d543ec86a9fa19b93ed143ff6a637ab275a328827ad5ba02e7b56",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/5d2035b4cc2d543ec86a9fa19b93ed143ff6a637ab275a328827ad5ba02e7b56.json"
|
||||
}
|
||||
```
|
||||
|
||||
## Backend 修复结果与本 PR 最终范围
|
||||
|
||||
- repair r2 已通过 completed/transport:2ee469011e66b6bedcf6e9d87c8b1c026f7a8cef,仅三个测试文件;主模型审阅与独立重放通过。
|
||||
- Backend PR #226 已合入 508288fbed318ec808b1da1145417d062f9e0ce2;精确候选 910d8e5fd20747eebc6e53b5fc0118185cb53765 的 ci/vet-and-test、governance 全部 GATE success;来源 /tmp/pr651-backend-gate.json 与 /tmp/pr651-backend-merged.json。
|
||||
- 新版 Backend 同时包含尚待 Dev 组合采用的 O2 依赖,已有独立 PR #653;本规范 PR 不推进 gitlink,以免提前采用另一任务的运行时组合。#651 在最新 main 上重新验证,Backend 修复的已合入与 Dev 已采用分别记录。
|
||||
- 交付窗口 mq-dev-20261020-conversation-handoff-01 已在 #518 领取;此前 #652 已释放。当前需 task-sync、闭合任务卡、固定候选并等待三项 GATE。
|
||||
| 同步(记录前对象) | 17f8bc06c110014b9101e7a33729d9f5445bd123 | d0150787e2ba7fec94575e42c9bea2f945418c71 | 2026-10-20T09:20:53Z |
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T09:20:09.212113+00:00",
|
||||
"command": "make task-sync",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-conversation-handoff",
|
||||
"before_head": "0dd24cafc6024d5854957ff8f5b6ecb2c65d3c72",
|
||||
"after_head": "11245d172c6841a17696a041889b8dbc4d8807a7",
|
||||
"branch": "feature/conversation-handoff",
|
||||
"target_branch": "main",
|
||||
"target_head": "17f8bc06c110014b9101e7a33729d9f5445bd123",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
" create mode 100644 .task/archive/feature-fast-slow-o2-i1-agent-native.md",
|
||||
" create mode 100644 .task/archive/feature-fast-slow-o2-i2-backend.md",
|
||||
" create mode 100644 docs/superpowers/specs/2026-10-20-fast-slow-o2-i1-review.md",
|
||||
" create mode 100644 docs/superpowers/specs/2026-10-20-fast-slow-o2-i2-review.md",
|
||||
"[worktree] before-update: recursive component checks passed",
|
||||
"[worktree] materialize: recursive component checks passed",
|
||||
"[worktree] after-sync: recursive component checks passed",
|
||||
"admit: ok",
|
||||
"[evidence] WARN JSON receipt line 113: recorded HEAD predates non-card changes ——关键检查须重跑并以 make evidence 重新写入",
|
||||
"[evidence] WARN JSON receipt line 168: recorded HEAD predates non-card changes ——关键检查须重跑并以 make evidence 重新写入",
|
||||
"[evidence] WARN JSON receipt line 210: recorded HEAD predates non-card changes ——关键检查须重跑并以 make evidence 重新写入",
|
||||
"[evidence] WARN JSON receipt line 251: recorded HEAD predates non-card changes ——关键检查须重跑并以 make evidence 重新写入",
|
||||
"[synced] sync_base=17f8bc06c110014b9101e7a33729d9f5445bd123 tested_head=11245d172c6841a17696a041889b8dbc4d8807a7 checked_at=2026-10-20T09:20:53Z changed=1 sync_target=main",
|
||||
"[next] 跑正式验收(make test 等),证据写入任务卡",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-conversation-handoff'"
|
||||
],
|
||||
"output_sha256": "447fa8d3b023bd473ca8076ad32b77ac406c86f6ff097e032b1c602e7a4649c6",
|
||||
"receipt_sha256": "faa7ddd69578d19c3c5280c5633868612431065be8ad6d74c37f15eca7642427",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/faa7ddd69578d19c3c5280c5633868612431065be8ad6d74c37f15eca7642427.json"
|
||||
}
|
||||
```
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T09:21:27.020003+00:00",
|
||||
"command": "python3 /tmp/pr651-doc-check.py && make agent-exec-validate && make test-worktree",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-conversation-handoff",
|
||||
"before_head": "11245d172c6841a17696a041889b8dbc4d8807a7",
|
||||
"after_head": "11245d172c6841a17696a041889b8dbc4d8807a7",
|
||||
"branch": "feature/conversation-handoff",
|
||||
"target_branch": "main",
|
||||
"target_head": "17f8bc06c110014b9101e7a33729d9f5445bd123",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "56ecb85dcdac1667ad1f575d1021a6f5306fabf593cfa8326465e9997f56c62e",
|
||||
"after_tracked_diff_sha256": "56ecb85dcdac1667ad1f575d1021a6f5306fabf593cfa8326465e9997f56c62e",
|
||||
"output_tail": [
|
||||
"tested Dev HEAD 11245d172c6841a17696a041889b8dbc4d8807a7",
|
||||
"PASS handoff fields, authoritative links, document scope and preservation of current main policies",
|
||||
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-conversation-handoff'",
|
||||
"scripts/agent-exec validate --repo .",
|
||||
"validate: ok",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-conversation-handoff'",
|
||||
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-conversation-handoff'",
|
||||
"python3 scripts/check-worktree.py verify",
|
||||
"[worktree] verify: recursive component checks passed",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-conversation-handoff'"
|
||||
],
|
||||
"output_sha256": "e7627921f53b21804805a831022ddae38dae1b31a328efabd2ad4db6a9329638",
|
||||
"receipt_sha256": "3f45ddbd4927efd7848281e5575c71ad8b5b411584650f5440cd9327e0c08ace",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/3f45ddbd4927efd7848281e5575c71ad8b5b411584650f5440cd9327e0c08ace.json"
|
||||
}
|
||||
```
|
||||
|
||||
## 最终对象审阅
|
||||
|
||||
- host Review 对同步后 11245d172c6841a17696a041889b8dbc4d8807a7 完成:相对 origin/main 的业务差异只有 AGENTS.md 一行与 policy/delivery.md 新增 22 行,另有本任务记录;现行 AGENT-EXECUTION.md 与其它 policy 无回退。
|
||||
- 需求 R1 的七项 handoff 字段、无续办例外、证据权威边界和入口链接均直接复核通过。文档没有新增平台功能,不制造业务测试。真实模型行为前后量化 NOT_RUN;当前规范交付以可审条款、链接和 GATE 为依据,不声称完成行为评测。
|
||||
- main 同步原始输出、文档检查与递归组合输出均由 make evidence 原样写入本卡。最终候选固定后只保存在源码外记录,避免为回填 CI 再改变 HEAD。
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T09:23:34.774230+00:00",
|
||||
"command": "make precheck",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-conversation-handoff",
|
||||
"before_head": "2aad4bc2acf0cf7fb29ce5df604bcaff83c054bd",
|
||||
"after_head": "2aad4bc2acf0cf7fb29ce5df604bcaff83c054bd",
|
||||
"branch": "feature/conversation-handoff",
|
||||
"target_branch": "main",
|
||||
"target_head": "17f8bc06c110014b9101e7a33729d9f5445bd123",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-conversation-handoff'",
|
||||
"[repo] branch=feature/conversation-handoff head=2aad4bc2ac",
|
||||
"[remote] origin/main=17f8bc06c1 ahead=11 behind=0",
|
||||
"[tree] clean submodules_drift=0 uninit=0",
|
||||
"[worktrees] linked=6",
|
||||
"[initiatives] local cards (not authoritative): none",
|
||||
"[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)",
|
||||
"[facts] policy/facts.md 6 条事实均在有效期内",
|
||||
"[required-reading] core/baseline.md, workflows/delivery.md §1, policy/delivery.md",
|
||||
"[R0] 17f8bc06c1(完整:17f8bc06c110014b9101e7a33729d9f5445bd123)",
|
||||
"[worktree] before-sync: recursive component checks passed",
|
||||
"[verdict] READY — 保留本次 precheck receipt 后建任务工作区:PRECHECK_RECEIPT=/tmp/task-precheck.json make task-start NAME=feature/your-branch",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-conversation-handoff'"
|
||||
],
|
||||
"output_sha256": "df04e4a972fd4f2eec24c391d8892c85698ca0f00fe9950df3d4b91c27df48a2",
|
||||
"receipt_sha256": "f676ac17f42a3634b98cc3287cb7f891df70b5361970c14c4bd3dcd77a6290fa",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/f676ac17f42a3634b98cc3287cb7f891df70b5361970c14c4bd3dcd77a6290fa.json"
|
||||
}
|
||||
```
|
||||
|
||||
## 闭合记录(合入前折叠)
|
||||
|
||||
- 本卡在 PR #651(https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/651)合入前闭合并归档,随该 PR 一同合入。
|
||||
- 该 PR 的合并提交即本任务的落地记录。
|
||||
- 合入后无需回填,也无需单独的闭合 PR。
|
||||
@@ -0,0 +1,254 @@
|
||||
# feature/docker-test-image 任务卡
|
||||
|
||||
任务主记录:PR #645 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/645;状态:已完成(合入前闭合);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 162c5a0160955989608f325b4be30458e3717d16
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-docker-test-image(worktree);分支:feature/docker-test-image
|
||||
- 分支类型:standalone;root_target:main;immediate_target:main;accepting_requirements:false
|
||||
- 需求分流:verdict=NEW;selected_initiative=无;requirement_sha256=614aefe70dd97a672de9522beee5fece3da4719ee310d1c7cfc4d13fea081ac2;triage_receipt=/tmp/docker-image-triage.json;receipt_sha256=bc1c9cab074d853273d064a98599c6ef2519aa4022f2272bcc0830d3d97d01c0
|
||||
|
||||
- 授权与交付终点:用户直接请求(2026-10-20):为本系统准备 Docker 测试镜像(含系统环境、SSH、无头浏览器),后续测试用该镜像启动容器做隔离测试。终点=镜像定义与构建/验证入口合入 main:docker/ 定义文件 + Makefile image-build/image-verify + docker/README.md,镜像本机构建通过、容器内环境自检通过。未授权事项:不改动 modules/**、CI/治理脚本、部署形态(本仓交付仍非容器化);不发布镜像到外部 registry;不把本镜像用于生产部署。
|
||||
- 交付模式:goal-first(目标、范围和交付终点一次确认;范围内连续推进)
|
||||
- 实施执行:agent-per-unit(配置:AGENT-EXECUTION.md)
|
||||
- 合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入)
|
||||
- 人工决策点:仅限目标/范围/验收变更、重大取舍、高后果操作或无法自动判定的业务验收
|
||||
- 当前阶段:需求拆解;当前增量:I1(待定义)
|
||||
- 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位)
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
目标:一份可重复构建的测试环境镜像定义(docker/),镜像内提供与本机开发一致的工具链(Go 1.27.1、Node 26.10.0、Python 3.14、git、make)、SSH 服务(仅公钥、专用 dev 用户)与无头浏览器(Playwright 1.64.0 chromium,系统级缓存 /opt/ms-playwright),供后续以 `docker run` 启动一次性容器、挂载仓库做隔离测试。
|
||||
|
||||
入口/影响:新增 docker/(Dockerfile、entrypoint.sh、verify-env.sh、README.md);根 Makefile 新增 image-build / image-verify 两个目标。不嵌入仓库代码与任何密钥;不改变 `make test`/CI 行为;不引入部署容器化。
|
||||
|
||||
非目标:镜像注册表发布、CI 内构建镜像、多架构构建、给镜像装业务代码/子模块、Windows/macOS 镜像。
|
||||
|
||||
## Agent 实施收据
|
||||
|
||||
路由与 fail-stop 规则见根目录 AGENT-EXECUTION.md 与 policy/delivery.md;每次尝试一行,原始日志留在源码外收据路径。
|
||||
|
||||
| 单元 ID | 预期范围 | 配置摘要 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| docker-test-image | docker/**、Makefile | AGENT-EXECUTION.md(agent-execution/v1) | implementation | cursor→antigravity→pi(紧急 codex) | cursor#a1(运行 1) | cursor-agent-stable/auto | failed-unknown(cursor 后端连接反复中断,exit 1) | 未发生 | 无 | /tmp/docker-image-unit1-receipt.json;隔离工作区保留于 /tmp/agent-exec-1000/ebd031a7b7be000aca6f401395d70cd1/wt-bb3cf3ec9e85 |
|
||||
| docker-test-image | 同上(重派发) | 同上 | implementation | 同上 | cursor#a1(运行 2,重发前已对账+探活) | cursor-agent-stable/auto | failed-unknown(Cursor 月度额度耗尽 ActionRequiredError,非瞬时) | 未发生 | 无 | /tmp/docker-image-unit2-receipt.json;隔离工作区保留于 /tmp/agent-exec-1000/90bc3c29e3ea2d9fbebc9e376461846f/wt-c0358fa94a6b |
|
||||
| docker-test-image | 同上(误派发) | 同上 | implementation | 同上 | — | — | invalid-config(运行前检出脏:host 对 AGENT-EXECUTION.md 的直接改动被 admit 拒绝后残留,已回滚,未启动任何候选) | 未发生 | 无 | /tmp/docker-image-unit3-receipt.json |
|
||||
| docker-test-image | 同上(重派发) | AGENT-EXECUTION.md(cursor 停用后,16776aa) | implementation | antigravity→pi(紧急 codex) | agy#a1(运行 4) | antigravity/auto | failed-unknown(实现与验证全部完成、终态记录已输出,但会话尾部一次后端 API EOF 污染 result 信封,控制器 fail-closed 未建 transport;镜像已建成且 verify-env PASS 经 host 独立复核) | 未发生 | 无 | /tmp/docker-image-unit4-receipt.json;隔离区 /tmp/agent-exec-1000/78f91904001532b603bf0ceeb292b893/wt-3ec6b80250c3(含已验证实现) |
|
||||
| docker-test-image | 同上(重验证派发) | 同上 | implementation | 同上 | agy#a2(运行 5,对账后;连续第二次因传输机制的 failed-unknown 重派发,若再失败则回到用户决策,不无限循环) | 待运行 | NOT_RUN | NOT_RUN | NOT_RUN | /tmp/docker-image-unit5-receipt.json |
|
||||
|
||||
- 配置摘要来源:AGENT-EXECUTION.md `agent-execution` 块(schema v1;implementation 候选 cursor/agy/pi,每候选至多 3 次,紧急 codex 一次,fallback_to_host=never);运行收据由 scripts/agent-exec run 写出后原样保留在源码外路径。
|
||||
- 运行 1 对账(2026-10-20):镜像未构建(docker images 无 agent-system-test-*)、无新增容器、规范检出干净;改动仅存在于保留的隔离工作区(Makefile M + docker/ 4 文件);cursor 探活已恢复(探针 exit 0)。据此授权同一单元重新派发(新 run,非同 run 盲重试)。
|
||||
- 运行 2 对账(2026-10-20):终态原因实为 Cursor Ultra 月度用量额度耗尽(ActionRequiredError,重置日 2026-11-10),属确定性不可用;host 依配置 enabled 机制停用 cursor 时被 pre-commit admit 拒绝(非豁免路径须 transport 来源),路由改动本身又需一次成功运行——死锁,经用户选项 1 解除(见下方决策点)。
|
||||
- 运行 4 对账(2026-10-20):worker 完成实现且四条验证自报通过,host 独立重跑 `docker run --rm --shm-size=1g agent-system-test-env:dev /usr/local/bin/verify-env.sh` → verify-env: PASS;失败纯属会话尾部 API EOF 污染 result 信封(raw log 尾部 `streamGenerateContent: EOF`),非内容缺陷。镜像 agent-system-test-env:dev 已在 daemon 中(层缓存可复用)。授权重派发运行 5 作纯重验证;若再因传输机制失败,停止并回用户决策。
|
||||
|
||||
## 关联方向与规划
|
||||
|
||||
- 适用状态:待核对(无适用规划时说明原因)
|
||||
- 主记录路径/版本:待核对(路径按仓库根目录定位,归档后不变;只引用唯一正文)
|
||||
- 对应里程碑:待核对
|
||||
|
||||
## 需求分析
|
||||
|
||||
| ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| R1 | 测试环境镜像定义:docker/ 内 Dockerfile 固定 ubuntu:24.04(amd64)+ Go 1.27.1 + Node 26.10.0 + Python 3.14(deadsnakes)+ git/make/openssh-server/sudo + Playwright 1.64.0 chromium(/opt/ms-playwright) | 与本机开发工具链版本一致(实测:go1.27.1 / v26.10.0 / 3.14.8 / playwright 1.64.0),避免测试行为漂移 | 高 | `docker build -t agent-system-test-env:dev docker/` 退出 0 | 无 | 已确认 |
|
||||
| R2 | SSH 就绪:容器以 root 入口前台跑 sshd;PermitRootLogin no、PasswordAuthentication no;dev 用户(UID 1000、NOPASSWD sudo);host key 首启生成;authorized_keys 运行时只读挂载注入 | 隔离测试需要经 SSH 进入容器;公钥注入避免镜像携带凭据 | 高 | 容器内 `sshd -t` 通过;dev 存在且 sudo NOPASSWD;镜像内无任何私钥/secret | R1 | 已确认 |
|
||||
| R3 | 无头浏览器可用:镜像内预装 playwright 1.64.0 chromium 及系统依赖,ENV PLAYWRIGHT_BROWSERS_PATH=/opt/ms-playwright | frontend e2e(@playwright/test ^1.50.1,解析 1.64.0)容器内可直接跑;版本对齐避免浏览器 revision 漂移 | 高 | verify-env.sh 中 chromium --headless --dump-dom about:blank 输出 HTML | R1 | 已确认 |
|
||||
| R4 | 构建/验证入口与文档:Makefile image-build / image-verify;docker/README.md 覆盖构建、启动(端口映射、--shm-size、公钥挂载、仓库挂载 /workspace)、容器内跑 e2e 示例与安全边界 | 用户后续直接用这两个入口启动隔离测试容器 | 中 | `make image-build`、`make image-verify` 可用;README 含最小可复现命令 | R1–R3 | 已确认 |
|
||||
|
||||
## 方案与计划
|
||||
|
||||
- 方案引用:本卡「目标与非目标」+ 单元包 /tmp/unit-docker-test-image.json(digest 由运行收据记录);固定版本事实:go1.27.1、node v26.10.0、python 3.14.8、playwright 1.64.0(本机实测于 2026-10-20)
|
||||
- 实施计划引用:单单元 docker-test-image(docker/** + Makefile 内聚小任务,合为一个包)
|
||||
- 测试计划引用:R1–R4 验收条件 = worker 窄检查(docker build + 容器内 verify-env.sh);host 权威验证在 apply 后本仓重跑同两命令
|
||||
|
||||
## 阶段记录
|
||||
|
||||
| 阶段 | 对象版本 | 状态 | 决策/执行者 | 时间 | 依据 |
|
||||
|---|---|---|---|---|---|
|
||||
| 需求拆解 | R0=162c5a0160 | 已完成 | host 主模型 | 2026-10-20 | AGENTS.md 路由 + policy/delivery.md |
|
||||
| 需求评估 | R0=162c5a0160 | 已完成 | host 主模型 | 2026-10-20 | 本卡需求表 R1–R4 |
|
||||
| 需求表确认 | R0=162c5a0160 | 已完成 | 用户直接请求即授权 | 2026-10-20 | 授权与交付终点节 |
|
||||
| 方案设计 | R0=162c5a0160 | 已完成 | host 主模型 | 2026-10-20 | 见方案与计划 |
|
||||
| 实施计划 | R0=162c5a0160 | 已完成 | host 主模型 | 2026-10-20 | 单元 docker-test-image(单元包 /tmp/unit-docker-test-image.json) |
|
||||
| 实施与自检 | de3d3aff(transport de3d3aff285e0dcfd185c9904a3a9b01af34e2fa) | 已完成 | agy worker(运行 4 实现、运行 5 重验证)→ host apply | 2026-10-20 | /tmp/docker-image-unit5-receipt.json;运行 1–5 详见收据表 |
|
||||
| 正式测试与验收 | de3d3aff | 已完成(SELF;GATE 待 CI) | host 主模型 | 2026-10-20 | make image-build / image-verify 证据入卡;CI 待验 |
|
||||
| 代码 Review | de3d3aff | 进行中 | host 主模型(policy 允许,独立于实施会话) | 2026-10-20 | 见合入与清理节 Review 记录 |
|
||||
| 合入 | de3d3aff | 待执行 | host(授权范围内) | — | 按 policy/delivery.md 合入流程 |
|
||||
| 合入核验与收口 | — | 待执行 | host | — | — |
|
||||
|
||||
### 决策点(2026-10-20,已闭合)
|
||||
|
||||
implementation/repair 角色首候选 cursor 因月度额度耗尽必然失败,且路由配置无法由 host/worker 合规变更。选项及结果:
|
||||
|
||||
1. **已采纳(用户 2026-10-20 选定选项 1)**:用户以自身授权在任务 worktree 编辑 AGENT-EXECUTION.md 将 cursor profile `enabled: false`(附注释,额度重置后恢复),并亲自 `git commit --no-verify` 提交为 16776aa(配置 diff 已在决策菜单中预告并经用户选择,validate 通过)。host 据此重派发,路由落到探活正常的 antigravity。额度重置后应恢复 enabled: true。
|
||||
2. 用户在 Cursor 提高 Spend Limit(未采用)。
|
||||
3. 等待 2026-11-10 重置(未采用)。
|
||||
4. host 以 role=test 派发(未采用,角色标签与工作性质不符)。
|
||||
|
||||
## 探索试验与迭代
|
||||
|
||||
| 增量/试验 | 假设 | 范围 | 判断和停止条件 | 授权/决策依据 | 结果 | 变更影响 | 需重审补测 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| I1 | docker/ 镜像定义可构建、容器内自检通过 | 单一交付 | build+verify 通过即停,不做镜像优化迭代 | 授权与交付终点节 | NOT_RUN | 待评估 | 待评估 |
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 162c5a0160955989608f325b4be30458e3717d16 | 162c5a0160955989608f325b4be30458e3717d16 | 2026-10-20T02:39:22Z |
|
||||
|
||||
## 证据(Evidence)
|
||||
|
||||
<!-- CMD="<命令>" make evidence 写入;手抄/转写输出视为无效证据(AGENTS.md 证据与验证门禁)。 -->
|
||||
| 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) |
|
||||
|---|---|---|---|---|---|
|
||||
|
||||
## 交付调度
|
||||
|
||||
- 调度状态:未入队;调度记录:无
|
||||
- entry_id:无;attempt_id:无;窗口执行者:无
|
||||
- 固定候选:无(base/head、组件与相关配置引用实际尝试)
|
||||
- 调度依据:policy/delivery.md#合入调度
|
||||
- 固定后证据:源码外 RECEIPT;实际结果后按授权原样导入和闭合
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:docker/ 测试环境镜像定义(Dockerfile + entrypoint.sh + verify-env.sh + README.md)与根 Makefile image-build/image-verify 目标已由 worker 交付、host apply 入分支(de3d3aff)。镜像 ubuntu:24.04 + Go 1.27.1 + Node 26.10.0 + Python 3.14(deadsnakes)+ Playwright 1.64.0 chromium(/opt/ms-playwright)+ sshd(仅公钥、dev 用户 NOPASSWD sudo、root 登录关闭)。
|
||||
- 验证:`make image-build` exit=0(SELF,证据块);`make image-verify` exit=0 且 verify-env: PASS(SELF);worker 四条自检通过;R1–R4 验收条件全部满足。已知非阻塞项:Dockerfile `FROM --platform=linux/amd64` 触发 buildkit 一条 lint 警告(有意钉住 amd64,不改)。CI GATE 与 Review 见合入与清理节。
|
||||
- 影响与剩余项:仅新增 docker/ 与 Makefile 两个目标,不触碰 modules/CI/治理脚本;镜像不发布外部 registry。剩余:PR CI、独立 Review、合入与回收。
|
||||
|
||||
## 规划进展与下一步
|
||||
|
||||
- 本次推进/剩余:待核对(依据实际成果更新适用方案/规划)
|
||||
- 首选下一任务:待核对(无适用规划、已完成或受阻时如实说明,不虚构任务)
|
||||
- 推荐依据:待填写
|
||||
- 前置条件/待确认:待核对
|
||||
- 预期产物/验收条件:待定义
|
||||
- 重复任务核对:待核对(已有/在途任务、PR 与规划记录)
|
||||
- 启动授权:未授权(建议不自动启动新任务,仍须明确授权)
|
||||
|
||||
## 合入与清理
|
||||
|
||||
- Review 记录:PASS(host 主模型独立 Review,非实施会话;对象 base=origin/main/d2035c76 head=b9c0fc3)。范围核对:7 文件全部在授权内(docker/ 4 文件 + Makefile 增量 + 任务卡 + AGENT-EXECUTION.md 路由调整 16776aa);Go/CI/脚本/modules 零触碰;secret 扫描无命中(仅 task-start 等词的 sk- 误报);Makefile 除 .PHONY 一行外纯增量。非阻塞观察:① FROM --platform=linux/amd64 触发 buildkit lint 警告(有意钉 amd64,接受);② sshd_config 追加式覆盖依赖 stock ubuntu 默认(测试镜像可接受,verify-env 已断言 sshd -t)。
|
||||
- 冲突记录:main 前进至 d2035c7(含 #644)后合并 origin/main(merge commit b9c0fc3),无冲突;新 gitlink 物化后 make test-worktree 递归核对通过;modules/frontend 仍解析 @playwright/test ^1.50.1(镜像内浏览器 1.64.0 对齐不变)。
|
||||
- CI 记录:CI_SUCCESS @ b9c0fc3fa1817812295394e069b457cc098e1f24(ci / test、test-pg、svc-realcombo 全绿,runs 4360)。过程备注:首候选 HEAD 8e062ca 的 test-pg 首跑 TestArtifactFacadeCard 失败(伴随 database is closed 收尾噪音),重跑同 job 即 success,判偶发;b9c0fc3 的 test 首跑为 npm EIDLETIMEOUT 网络抖动,重跑 success。两次均非本 PR 内容缺陷(本 PR 未触碰 Go/npm 依赖)。
|
||||
- 合入记录:待执行(合入后回填)
|
||||
- 清理记录:待执行(合入后回填)
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T02:38:25.695061+00:00",
|
||||
"command": "make precheck",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev",
|
||||
"before_head": "162c5a0160955989608f325b4be30458e3717d16",
|
||||
"after_head": "162c5a0160955989608f325b4be30458e3717d16",
|
||||
"branch": "main",
|
||||
"target_branch": "main",
|
||||
"target_head": "162c5a0160955989608f325b4be30458e3717d16",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev'",
|
||||
"[repo] branch=main head=162c5a0160",
|
||||
"[remote] origin/main=162c5a0160 ahead=0 behind=0",
|
||||
"[tree] clean submodules_drift=0 uninit=0",
|
||||
"[worktrees] linked=6",
|
||||
"[initiatives] local cards (not authoritative): none",
|
||||
"[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)",
|
||||
"[facts] policy/facts.md 6 条事实均在有效期内",
|
||||
"[required-reading] core/baseline.md, workflows/delivery.md §1, policy/delivery.md",
|
||||
"[R0] 162c5a0160(完整:162c5a0160955989608f325b4be30458e3717d16)",
|
||||
"[worktree] before-sync: recursive component checks passed",
|
||||
"[verdict] READY — 保留本次 precheck receipt 后建任务工作区:PRECHECK_RECEIPT=/tmp/task-precheck.json make task-start NAME=feature/your-branch",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev'"
|
||||
],
|
||||
"output_sha256": "9e1904b7470a27857bd0243bc42faff0a9eb9cafc6916ad823fb1ccfea32f3b3",
|
||||
"receipt_sha256": "838d0ce05fc8661b279c5ccd7696cbe4712cd582b3bf39411ede4265e314a7f1",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/838d0ce05fc8661b279c5ccd7696cbe4712cd582b3bf39411ede4265e314a7f1.json"
|
||||
}
|
||||
```
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T04:24:06.218569+00:00",
|
||||
"command": "make image-build",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-docker-test-image",
|
||||
"before_head": "de3d3aff285e0dcfd185c9904a3a9b01af34e2fa",
|
||||
"after_head": "de3d3aff285e0dcfd185c9904a3a9b01af34e2fa",
|
||||
"branch": "feature/docker-test-image",
|
||||
"target_branch": "main",
|
||||
"target_head": "d2035c76dc1cb15e01d2c184af5155d9d773cd9f",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"#10 CACHED",
|
||||
"",
|
||||
"#11 exporting to image",
|
||||
"#11 exporting layers done",
|
||||
"#11 exporting manifest sha256:1b70b78c47f81555bca6525d04f8fefa836eb817d37bd018fcd71632c9cce13b done",
|
||||
"#11 exporting config sha256:af4c14981be06d79e082e1685dd6f5aac947bc2f08022de3efdb8a158d656ffb done",
|
||||
"#11 exporting attestation manifest sha256:bebc178b5c4328c737af45858184422a642deb66ac627d6cc80d6ec3c003f246 done",
|
||||
"#11 exporting manifest list sha256:b9244ca7c49a4192b6beee8cb66ea148f2b07d6c26e613f3661aba4e569b6fa4 done",
|
||||
"#11 naming to docker.io/library/agent-system-test-env:dev done",
|
||||
"#11 unpacking to docker.io/library/agent-system-test-env:dev done",
|
||||
"#11 DONE 0.0s",
|
||||
"",
|
||||
" \u001b[33m1 warning found (use docker --debug to expand):",
|
||||
"\u001b[0m - FromPlatformFlagConstDisallowed: FROM --platform flag should not use constant value \"linux/amd64\" (line 1)",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-docker-test-image'"
|
||||
],
|
||||
"output_sha256": "9d5d28f761a75ec302f735b181d53f3a31893b29a7db1417da0b580d39a6ede9",
|
||||
"receipt_sha256": "10c826d7803683685c0fe49e99b8a86a04e0d675b14aad637f50220a48b13d58",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/10c826d7803683685c0fe49e99b8a86a04e0d675b14aad637f50220a48b13d58.json"
|
||||
}
|
||||
```
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T04:24:15.223285+00:00",
|
||||
"command": "make image-verify",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-docker-test-image",
|
||||
"before_head": "de3d3aff285e0dcfd185c9904a3a9b01af34e2fa",
|
||||
"after_head": "de3d3aff285e0dcfd185c9904a3a9b01af34e2fa",
|
||||
"branch": "feature/docker-test-image",
|
||||
"target_branch": "main",
|
||||
"target_head": "d2035c76dc1cb15e01d2c184af5155d9d773cd9f",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-docker-test-image'",
|
||||
"docker run --rm --shm-size=1g agent-system-test-env:dev /usr/local/bin/verify-env.sh",
|
||||
"verify-env: PASS",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-docker-test-image'"
|
||||
],
|
||||
"output_sha256": "4e670ae97df841f706396291f73ef43e7702f9fd60cfe163b37699ca5968804a",
|
||||
"receipt_sha256": "3c69f4644d10998f86733da4486b1967e49c310aad4a932aa13a7bddaf387265",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/3c69f4644d10998f86733da4486b1967e49c310aad4a932aa13a7bddaf387265.json"
|
||||
}
|
||||
```
|
||||
|
||||
## 闭合记录(合入前折叠)
|
||||
|
||||
- 本卡在 PR #645(https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/645)合入前闭合并归档,随该 PR 一同合入。
|
||||
- 该 PR 的合并提交即本任务的落地记录。
|
||||
- 合入后无需回填,也无需单独的闭合 PR。
|
||||
@@ -0,0 +1,166 @@
|
||||
# feature/fast-slow-o2-i1-agent-native 任务卡
|
||||
|
||||
任务主记录:PR #647 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/647;Dev 草稿 PR [#647](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/647);状态:已完成(合入前闭合);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= ac594c90e536cfb670e94680f045a6c8247a2513
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-fast-slow-o2-i1-agent-native(worktree);分支:feature/fast-slow-o2-i1-agent-native
|
||||
- 分支类型:standalone;root_target:main;immediate_target:main;accepting_requirements:false
|
||||
- 需求分流:verdict=NEW;selected_initiative=无;requirement_sha256=24717af8dcc91e7b1fbe4ceb92919ea31e43da66f46e51371e9ea2102d8b8cc5;triage_receipt=/tmp/o2i1-20261020/triage.json;receipt_sha256=7854667c4867dabc655b1ce4d1b8f026da6de0e2929fb26b4374353089474fa7
|
||||
|
||||
- 授权与交付终点:用户 2026-10-20 阶段 4/5 人审“通过”([方案](docs/superpowers/specs/2026-10-19-fast-slow-o2-route-contract-eof-design.md) §6.1 选 C2 同时接受 `http2_stream` 与 `known_length`+`match`;§6.2 配置仅系统层、默认关闭),并要求启动 I1。终点:Agent-Native I1 草稿 PR 经独立 Review 与 CI 通过 + 阶段 6 评审包,待用户阶段 6 人审后再合入。未授权:I2/I3 启动前另行确认、P1 付费探针(另提资源方案)、部署、真实模型/付费请求。
|
||||
- 交付模式:goal-first(目标、范围和交付终点一次确认;范围内连续推进)
|
||||
- 实施执行:agent-per-unit(配置:AGENT-EXECUTION.md)
|
||||
- 合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入)
|
||||
- 人工决策点:仅限目标/范围/验收变更、重大取舍、高后果操作或无法自动判定的业务验收
|
||||
- 当前阶段:实施与自检;当前增量:I1(Agent-Native 分支 feature/fast-slow-o2-i1-route-contract,base origin/main 9c24e22)
|
||||
- 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位)
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:对一条精确绑定的 OpenAI 兼容路由(模型 + 规范化基址 + 摘要),在流缺字面 `[DONE]` 但 C1–C9 全部成立时放行工具调用,终态标 `CompletionBasis=route_contract_eof`;合同为零值时行为逐字节等同现状。
|
||||
- 受影响:Agent-Native `runtime/llm`(`Client.RouteContract`、解析器延后判定、`Event`/`TerminalObservation` 新增 `completionBasis`/`contractCheck`)、新包 `runtime/argschema`、`runtime/tools/registry.go` 委托校验。
|
||||
- 非目标:不改 `StreamComplete` 语义;不泛化到其他路由/协议;Backend 配置与透传(I2)、Dev 改钉(I3)、付费探针(P1)不在本卡。
|
||||
|
||||
## Agent 实施收据
|
||||
|
||||
路由与 fail-stop 规则见根目录 AGENT-EXECUTION.md 与 policy/delivery.md;每次尝试一行,原始日志留在源码外收据路径。
|
||||
|
||||
| 单元 ID | 预期范围 | 配置摘要 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| o2-i1-agent-native-route-contract | runtime/llm、runtime/argschema、registry.go(+test) | AGENT-EXECUTION.md | implementation | cursor→antigravity→pi | 1 | cursor / auto | scope-expansion(单元包 `allowed_paths` 误用 `**` 通配,执行器按前缀匹配,7 个范围内文件被判越界;fail-stop) | 未集成 | never | /tmp/o2i1-20261020/o2-i1-receipt.attempt1-scope-expansion.json |
|
||||
| o2-i1-agent-native-route-contract | 同上(改为前缀写法 `runtime/llm/`、`runtime/argschema/`,范围不变) | AGENT-EXECUTION.md | implementation | cursor→antigravity→pi | 2(用户 2026-10-20 授权全新重跑) | cursor / auto | success | `899fd70`(ref refs/agent-exec/e38bcf1c…/445c377b,parent 9c24e22),`agent-exec apply` 快进集成 | never | /tmp/o2i1-20261020/o2-i1-receipt.json |
|
||||
|
||||
## 关联方向与规划
|
||||
|
||||
- 适用状态:待核对(无适用规划时说明原因)
|
||||
- 主记录路径/版本:待核对(路径按仓库根目录定位,归档后不变;只引用唯一正文)
|
||||
- 对应里程碑:待核对
|
||||
|
||||
## 需求分析
|
||||
|
||||
| ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| R1 | I1:Agent-Native `route_contract_eof` 限路由等价终态 | 符合:用户 2026-10-19 选定 O2,2026-10-20 阶段 4/5 通过 | P1 | 计划 §2 测试矩阵全部用例通过;拒绝时终态事件除 `contractCheck` 外与合同关闭 deep-equal;零值合同行为不变;现有断言不删减 | 无 | 实施中 |
|
||||
|
||||
## 方案与计划
|
||||
|
||||
- 方案引用:docs/superpowers/specs/2026-10-19-fast-slow-o2-route-contract-eof-design.md(Dev main,PR #639 合入)
|
||||
- 实施计划引用:docs/superpowers/plans/2026-10-19-fast-slow-o2-route-contract-eof-plan.md §2(I1)
|
||||
- 测试计划引用:同上 §2 测试表与验证命令
|
||||
|
||||
## 阶段记录
|
||||
|
||||
| 阶段 | 对象版本 | 状态 | 决策/执行者 | 时间 | 依据 |
|
||||
|---|---|---|---|---|---|
|
||||
| 需求拆解 | 待定 | 待执行 | — | — | — |
|
||||
| 需求评估 | 待定 | 待执行 | — | — | — |
|
||||
| 需求表确认 | 待定 | 待执行 | — | — | — |
|
||||
| 方案设计 | Dev 5a7a0da | 通过(C2 接受 known_length+match) | 用户 | 2026-10-20 | 阶段 4 人审 |
|
||||
| 实施计划 | Dev 5a7a0da | 通过 | 用户 | 2026-10-20 | 阶段 5 人审 |
|
||||
| 实施与自检 | Agent-Native 899fd70 | 完成(SELF) | cursor worker 实施;host 范围审阅与验证 | 2026-10-20 | 收据 o2-i1-receipt.json |
|
||||
| 正式测试与验收 | Agent-Native 899fd70 | 阶段 6 通过(接受 C2 编号) | 用户 | 2026-10-20 | PR #48 CI GATE success;评审包 2026-10-20-fast-slow-o2-i1-review.md |
|
||||
| 代码 Review | Agent-Native 899fd70 | PASS | 全新会话 code-reviewer | 2026-10-20 | 见合入与清理节 |
|
||||
| 合入 | Agent-Native 2fc66be | 已合入 Agent-Native main | host | 2026-10-20 | 用户阶段 6 授权 |
|
||||
| 合入核验与收口 | 待定 | 待执行 | — | — | — |
|
||||
|
||||
## 探索试验与迭代
|
||||
|
||||
| 增量/试验 | 假设 | 范围 | 判断和停止条件 | 授权/决策依据 | 结果 | 变更影响 | 需重审补测 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 待定义 | — | — | — | 待核对 | NOT_RUN | 待评估 | 待评估 |
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | ac594c90e536cfb670e94680f045a6c8247a2513 | ac594c90e536cfb670e94680f045a6c8247a2513 | 2026-10-20T03:22:13Z |
|
||||
|
||||
## 证据(Evidence)
|
||||
|
||||
<!-- CMD="<命令>" make evidence 写入;手抄/转写输出视为无效证据(AGENTS.md 证据与验证门禁)。 -->
|
||||
| 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) |
|
||||
|---|---|---|---|---|---|
|
||||
|
||||
## 交付调度
|
||||
|
||||
- 调度状态:未入队;调度记录:无
|
||||
- entry_id:无;attempt_id:无;窗口执行者:无
|
||||
- 固定候选:无(base/head、组件与相关配置引用实际尝试)
|
||||
- 调度依据:policy/delivery.md#合入调度
|
||||
- 固定后证据:源码外 RECEIPT;实际结果后按授权原样导入和闭合
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:I1 在 Agent-Native 分支 `feature/fast-slow-o2-i1-route-contract`(`899fd70`,草稿 PR #48)交付;阶段 6 评审包 docs/superpowers/specs/2026-10-20-fast-slow-o2-i1-review.md。
|
||||
- 验证:host(SELF)@899fd70 vet、定向测试(含 -race)、`go test ./...` PASS;CI(GATE)PR #48 三项 success;独立 Review PASS。
|
||||
- 影响与剩余项:仅 Agent-Native `runtime/llm`、`runtime/argschema`、registry 委托;合同默认关闭。剩余:用户阶段 6;I2、I3、P1;评审包第 3 节非阻塞项。
|
||||
|
||||
## 规划进展与下一步
|
||||
|
||||
- 本次推进/剩余:待核对(依据实际成果更新适用方案/规划)
|
||||
- 首选下一任务:待核对(无适用规划、已完成或受阻时如实说明,不虚构任务)
|
||||
- 推荐依据:待填写
|
||||
- 前置条件/待确认:待核对
|
||||
- 预期产物/验收条件:待定义
|
||||
- 重复任务核对:待核对(已有/在途任务、PR 与规划记录)
|
||||
- 启动授权:未授权(建议不自动启动新任务,仍须明确授权)
|
||||
|
||||
## 合入与清理
|
||||
|
||||
- Review 记录:Cursor Task 子代理 code-reviewer(fresh_session=true,session=531ce711-73e7-44d8-8b9e-ed90d93856f7;只接收需求、方案/计划、base 9c24e22/head 899fd70 与 diff,未转交实施会话);结论 PASS,0 阻塞,3 条非阻塞记入评审包第 3 节;评审者自跑 vet 与 -race 定向测试通过(SELF)。
|
||||
- CI 记录(Agent-Native):PR #48 head `899fd70d27dd25bb88088a677546a71e54a86d9e` commit status success:`ci / vet-and-test`(runs/4350/jobs/7018)、`ci / docker-checkout-hostgateway`(runs/4350/jobs/7019)、`governance / governance`(runs/4351/jobs/7020)(GATE)。
|
||||
- 冲突记录:NOT_RUN(最新目标同步、冲突处置、组合兼容核验及复审/补测)
|
||||
- CI 记录:NOT_RUN(当前 HEAD 完整 SHA、全部必需检查、运行链接、执行身份及 GATE 结果)
|
||||
- 合入记录(Agent-Native):用户 2026-10-20 阶段 6 通过;PR #48 核验 head `899fd70`、commit status success(3 项,GATE)后合入 Agent-Native main,合入提交 `2fc66be65201232ea38ba64d457efad5565d869d`;合入后 tree `720ec93` 与合入前 `git merge-tree` 预期一致。Dev 改钉在 I3 组合验证。
|
||||
- 合入记录(本 PR):NOT_RUN(交付授权范围、PR、被核验 HEAD、合入 SHA、目标分支及内容核验)
|
||||
- 清理记录:Agent-Native worktree `Agent-Native-wt-feature-fast-slow-o2-i1` 核验无写者、干净后移除,本地分支已删;Dev worktree 待本 PR 合入后回收。
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T03:21:23.593016+00:00",
|
||||
"command": "make precheck",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev",
|
||||
"before_head": "ac594c90e536cfb670e94680f045a6c8247a2513",
|
||||
"after_head": "ac594c90e536cfb670e94680f045a6c8247a2513",
|
||||
"branch": "main",
|
||||
"target_branch": "main",
|
||||
"target_head": "ac594c90e536cfb670e94680f045a6c8247a2513",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev'",
|
||||
"[repo] branch=main head=ac594c90e5",
|
||||
"[remote] origin/main=ac594c90e5 ahead=0 behind=0",
|
||||
"[tree] clean submodules_drift=0 uninit=0",
|
||||
"[worktrees] linked=7",
|
||||
"[cards] 已合入未闭合任务卡:feature-iam-role-permission-linked-capabilities.md——make task-close 回填归档(主检出运行)",
|
||||
"[initiatives] local cards (not authoritative): none",
|
||||
"[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)",
|
||||
"[facts] policy/facts.md 6 条事实均在有效期内",
|
||||
"[required-reading] core/baseline.md, workflows/delivery.md §1, policy/delivery.md",
|
||||
"[R0] ac594c90e5(完整:ac594c90e536cfb670e94680f045a6c8247a2513)",
|
||||
"[worktree] before-sync: recursive component checks passed",
|
||||
"[verdict] READY — 保留本次 precheck receipt 后建任务工作区:PRECHECK_RECEIPT=/tmp/task-precheck.json make task-start NAME=feature/your-branch",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev'"
|
||||
],
|
||||
"output_sha256": "8354ba7addbd3c5505eb65459b25cc49dc9c6513d9a4e8f6b38dc9f448b3f478",
|
||||
"receipt_sha256": "a0e06fafe3a01436440290d8fe41abd0581c817dde2ad3481497f95cae50a473",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/a0e06fafe3a01436440290d8fe41abd0581c817dde2ad3481497f95cae50a473.json"
|
||||
}
|
||||
```
|
||||
|
||||
## 闭合记录(合入前折叠)
|
||||
|
||||
- 本卡在 PR #647(https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/647)合入前闭合并归档,随该 PR 一同合入。
|
||||
- 该 PR 的合并提交即本任务的落地记录。
|
||||
- 合入后无需回填,也无需单独的闭合 PR。
|
||||
| 同步(记录前对象) | d2035c76dc1cb15e01d2c184af5155d9d773cd9f | 014655339962c1057970ddc9ce9e2025fe31f902 | 2026-10-20T05:56:34Z |
|
||||
| 同步(记录前对象) | f97917032d143188bc7faf665aff612d9814af4e | a577c9e11bae5655fc63a9ca313c84e70ad24aed | 2026-10-20T06:55:48Z |
|
||||
@@ -0,0 +1,164 @@
|
||||
# feature/fast-slow-o2-i2-backend 任务卡
|
||||
|
||||
任务主记录:PR #652 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/652;状态:已完成(合入前闭合);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= d2035c76dc1cb15e01d2c184af5155d9d773cd9f
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-fast-slow-o2-i2-backend(worktree);分支:feature/fast-slow-o2-i2-backend
|
||||
- 分支类型:standalone;root_target:main;immediate_target:main;accepting_requirements:false
|
||||
- 需求分流:verdict=NEW;selected_initiative=无;requirement_sha256=95d3a2ee34b8bdcabd1222b2ffbad0031a98717338fa400b8d7367d9d7d91610;triage_receipt=/tmp/o2i2-20261020/triage.json;receipt_sha256=88c443107094b249c62de6b88b0d3503d8caa4e420b802ebc4002dc58bb9250e
|
||||
|
||||
- 授权与交付终点:用户 2026-10-20 在 O2 I1 阶段 6 结论中选择“通过并启动 I2”(方案/计划阶段 4/5 已于同日通过)。终点:Backend I2 草稿 PR 经独立 Review 与 CI 通过 + 阶段 6 评审包,待用户阶段 6 人审后再合入。未授权:I3 Dev 改钉(I2 通过后启动)、P1 付费探针、写入任何实例的系统层配置、部署、真实模型/付费请求。
|
||||
- 交付模式:goal-first(目标、范围和交付终点一次确认;范围内连续推进)
|
||||
- 实施执行:agent-per-unit(配置:AGENT-EXECUTION.md)
|
||||
- 合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入)
|
||||
- 人工决策点:仅限目标/范围/验收变更、重大取舍、高后果操作或无法自动判定的业务验收
|
||||
- 当前阶段:实施与自检;当前增量:I2(Backend 分支 feature/fast-slow-o2-i2-route-contract,base origin/main b5eb89c)
|
||||
- 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位)
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:Backend 以系统层三键 `models.routeContractEOF.model/.baseUrl/.identitySha256`(默认空 = 关闭)声明 O2 路由合同;5 个 `openLLMClient` 调用点统一按各自解析出的 (model, base) 精确判定是否挂 `RouteContractEOF`;`deps/agent-native` 改钉到 I1 合入提交 `2fc66be`。
|
||||
- 受影响:Backend `internal/runtime`(`openRouteClient`/`routeContractFor`)、`internal/settings/settings.go`、`deps/agent-native` gitlink。
|
||||
- 非目标:不改 Agent-Native;不写入任何实例配置;`runmgr` 无需改动(Backend 生产代码不记录终态字段,快慢通道收据由测试侧评估工具记录整个 `terminalObservation`,改钉后自动包含 `completionBasis`);Dev 改钉(I3)、付费探针(P1)不在本卡。
|
||||
|
||||
## Agent 实施收据
|
||||
|
||||
路由与 fail-stop 规则见根目录 AGENT-EXECUTION.md 与 policy/delivery.md;每次尝试一行,原始日志留在源码外收据路径。
|
||||
|
||||
| 单元 ID | 预期范围 | 配置摘要 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| o2-i2-backend-route-contract-config | deps/agent-native、internal/runtime/、internal/settings/ | AGENT-EXECUTION.md | implementation | cursor→antigravity→pi | 1 | — | invalid-config(host 把写单元包与派发并行执行,执行器读包时文件尚不存在;attempts 为空,无任何改动;fail-stop) | 未集成 | never | /tmp/o2i2-20261020/o2-i2-receipt.attempt1-invalid-config.json |
|
||||
| o2-i2-backend-route-contract-config | 同上 | AGENT-EXECUTION.md | implementation | cursor→antigravity→pi | 2(用户 2026-10-20 授权全新重跑) | cursor / auto | success | `e1a90a5`(ref refs/agent-exec/8eed31d0…/d97e9636,parent b5eb89c),`agent-exec apply` 快进集成 | never | /tmp/o2i2-20261020/o2-i2-receipt.json |
|
||||
| o2-i2b-eval-receipt-route-contract | internal/runtime/llm.go、internal/server/work_checkpoint_eval_test.go、internal/server/work_checkpoint_eval_route_contract_test.go | AGENT-EXECUTION.md | implementation | cursor→antigravity→pi | 1 | cursor / auto | failed-unknown(worker exit 1,原始日志末尾 `RetriableError: [internal] HTTP/2 keepalive ping timed out after 5000ms`;变更仅在允许路径内但未完成,执行器无法机械对账外部副作用;fail-stop,未换候选) | 未集成 | never | /tmp/o2i2-20261020/o2-i2b-receipt.attempt1-failed-unknown.json |
|
||||
| o2-i2b-eval-receipt-route-contract | 同上 | AGENT-EXECUTION.md | implementation | cursor→antigravity→pi | 2(用户 2026-10-20 07:54 对“授权全新重跑(推荐)”回复“继续”) | cursor / auto | success(219s) | `16f98b8`(ref refs/agent-exec/4792e791…/c578cdde,parent e1a90a5),`agent-exec apply` 快进集成 | never | /tmp/o2i2-20261020/o2-i2b-receipt.json |
|
||||
|
||||
## 关联方向与规划
|
||||
|
||||
- 适用状态:待核对(无适用规划时说明原因)
|
||||
- 主记录路径/版本:待核对(路径按仓库根目录定位,归档后不变;只引用唯一正文)
|
||||
- 对应里程碑:待核对
|
||||
|
||||
## 需求分析
|
||||
|
||||
| ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| R1 | I2:Backend 系统层合同配置与按身份挂合同 | 符合:O2 阶段 4/5 通过;I1 阶段 6 通过(Agent-Native #48 合入 2fc66be) | P1 | 计划 §3 测试全部通过:缺省关闭;用户层写入被忽略;模型/基址/摘要任一不符不挂;视觉改模/轻量档独立判定;挂合同后假流放行一次工具并记 `route_contract_eof`;删除配置恢复拒绝;现有断言不删减 | I1 | 实施中 |
|
||||
|
||||
## 方案与计划
|
||||
|
||||
- 方案引用:docs/superpowers/specs/2026-10-19-fast-slow-o2-route-contract-eof-design.md §4.5(Dev main,PR #639)
|
||||
- 实施计划引用:docs/superpowers/plans/2026-10-19-fast-slow-o2-route-contract-eof-plan.md §3(I2)
|
||||
- 测试计划引用:同上 §3 测试与验证命令
|
||||
|
||||
## 阶段记录
|
||||
|
||||
| 阶段 | 对象版本 | 状态 | 决策/执行者 | 时间 | 依据 |
|
||||
|---|---|---|---|---|---|
|
||||
| 需求拆解 | 待定 | 待执行 | — | — | — |
|
||||
| 需求评估 | 待定 | 待执行 | — | — | — |
|
||||
| 需求表确认 | 待定 | 待执行 | — | — | — |
|
||||
| 方案设计 | 待定 | 待执行 | — | — | — |
|
||||
| 实施计划 | 待定 | 待执行 | — | — | — |
|
||||
| 实施与自检 | Backend `16f98b8` | 完成 | Cursor worker ×2 单元 + host 验证 | 2026-10-20 | 收据表;host SELF 验证见评审包 §2 |
|
||||
| 正式测试与验收 | Backend `16f98b8` | 用户阶段 6 通过 | 用户 | 2026-10-20 08:06 | 用户对“通过:合入 #224 和 #652,并启动 I3(推荐)”回复“继续”;评审包 docs/superpowers/specs/2026-10-20-fast-slow-o2-i2-review.md |
|
||||
| 代码 Review | `e1a90a5` / `16f98b8` | PASS | 独立子智能体 8b8edce1(第 1 轮 PASS-with-fixes)、b0f773ba(第 2 轮 PASS) | 2026-10-20 | 见合入与清理节 Review 记录 |
|
||||
| 合入 | Backend #224 | 已合入 `c164950` | host(agent) | 2026-10-20 | 见合入记录 |
|
||||
| 合入核验与收口 | 待定 | 待执行 | — | — | — |
|
||||
|
||||
## 探索试验与迭代
|
||||
|
||||
| 增量/试验 | 假设 | 范围 | 判断和停止条件 | 授权/决策依据 | 结果 | 变更影响 | 需重审补测 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 待定义 | — | — | — | 待核对 | NOT_RUN | 待评估 | 待评估 |
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | d2035c76dc1cb15e01d2c184af5155d9d773cd9f | d2035c76dc1cb15e01d2c184af5155d9d773cd9f | 2026-10-20T06:05:02Z |
|
||||
|
||||
## 证据(Evidence)
|
||||
|
||||
<!-- CMD="<命令>" make evidence 写入;手抄/转写输出视为无效证据(AGENTS.md 证据与验证门禁)。 -->
|
||||
| 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) |
|
||||
|---|---|---|---|---|---|
|
||||
|
||||
## 交付调度
|
||||
|
||||
- 调度状态:未入队;调度记录:无
|
||||
- entry_id:无;attempt_id:无;窗口执行者:无
|
||||
- 固定候选:无(base/head、组件与相关配置引用实际尝试)
|
||||
- 调度依据:policy/delivery.md#合入调度
|
||||
- 固定后证据:源码外 RECEIPT;实际结果后按授权原样导入和闭合
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:
|
||||
- 验证:<结论摘要 PASS/FAIL/SKIP/NOT_RUN 逐项;逐条证据由 make evidence 写入上方证据表>
|
||||
- 影响与剩余项:
|
||||
|
||||
## 规划进展与下一步
|
||||
|
||||
- 本次推进/剩余:待核对(依据实际成果更新适用方案/规划)
|
||||
- 首选下一任务:待核对(无适用规划、已完成或受阻时如实说明,不虚构任务)
|
||||
- 推荐依据:待填写
|
||||
- 前置条件/待确认:待核对
|
||||
- 预期产物/验收条件:待定义
|
||||
- 重复任务核对:待核对(已有/在途任务、PR 与规划记录)
|
||||
- 启动授权:未授权(建议不自动启动新任务,仍须明确授权)
|
||||
|
||||
## 合入与清理
|
||||
|
||||
- Review 记录:第 1 轮——全新独立 Cursor 子智能体(agent 8b8edce1,fresh_session=true,只接收目标/计划/base b5eb89c..head e1a90a5 diff/CI),结论 PASS-with-fixes:5 条单元验收均满足(本地 SELF 重放 vet、`go test -race ./internal/runtime ./internal/settings`、gofmt、diff --check 通过)。阻塞(相对已批准计划 §3 I2“运行记录与快慢通道收据透传 completionBasis”,host 写单元包时漏列):`internal/server/work_checkpoint_eval_test.go` 的 `evalProviderStream` 直接构造 Client 不挂合同,`evalTerminalObservation`/`evalCallRecord` 白名单丢 `CompletionBasis`/`ContractCheck`。处置:属已批准 I2 范围,补派单元 `o2-i2b-eval-receipt-route-contract`。非阻塞(只记录):`internal/app/app.go:350` 小队内核直接构造 Client(不在批准的 5 个调用点内,维持失败关闭);`app.go:519` 意图生成器无合同无影响;5 个调用点与 `Execute` 的 nil-stream 分支靠审读确认;`settings.go` baseUrl 说明未提 fragment/userinfo。第 2 轮——全新独立 code-reviewer 子智能体(agent b0f773ba,fresh_session=true,只接收需求与 e1a90a5..16f98b8 diff),结论 **PASS,无阻塞项**:生产代码零行为变化(仅导出薄封装);评测判定经真实 settings 服务 `SetSystemOverride`+`Effective` 与生产同源;白名单无泄漏路径(含 PRIVATE_/C10/大小写反例);不匹配失败关闭;既有断言未删减。评审者重放(REPLAY):`go vet -tags live ./internal/server`、`go test -tags live ./internal/server -run 'TestEval|TestEvaluation|TestExtraA01|TestFollowupA01|TestMechanism'`、`go test ./internal/runtime` 均通过。非阻塞:配置了 `routeContractEOF` 却未挂上时评测静默按无合同运行(建议 P1 前改为 t.Fatal,避免浪费付费请求);合同对象未知键被静默丢弃。
|
||||
- 冲突记录:Backend #224 合入前 origin/main(b5eb89c)是 head 的祖先,无冲突;Dev 侧见同步记录。
|
||||
- CI 记录(Backend #224,GATE):head `16f98b8e4fbc413d65e2d76b761ffe19afc65a67` 全部 success——`ci / vet-and-test`(/weichen/Agent-System-Backend/actions/runs/4409/jobs/7158)、`governance / governance`(runs/4410/jobs/7159);前一 head `e1a90a5` 亦 success(runs/4382/jobs/7104、runs/4383/jobs/7105)。注意:CI 跑 `go vet ./... && go test ./...`,不含 `live` tag,评测文件 `internal/server/work_checkpoint_eval*_test.go` 的测试只有 host SELF(`go test -tags live ./internal/server` 24 项通过)与评审重放。
|
||||
- 合入记录:Backend PR #224(授权:用户 2026-10-20 08:06 阶段 6 通过)被核验 HEAD `16f98b8e4fbc413d65e2d76b761ffe19afc65a67`(CI success),合入 Agent-System-Backend main,merge commit `c16495006dbf1cf6ee581b48d99bba1e7f9a377c`,main tree `43129de` 与被核验 HEAD tree 一致。Dev 侧 gitlink 改钉由 I3 负责。
|
||||
- 清理记录:NOT_RUN(授权依据、写者退出确认、worktree/分支/任务卡处置)
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T06:04:02.239270+00:00",
|
||||
"command": "make precheck",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev",
|
||||
"before_head": "d2035c76dc1cb15e01d2c184af5155d9d773cd9f",
|
||||
"after_head": "d2035c76dc1cb15e01d2c184af5155d9d773cd9f",
|
||||
"branch": "main",
|
||||
"target_branch": "main",
|
||||
"target_head": "d2035c76dc1cb15e01d2c184af5155d9d773cd9f",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev'",
|
||||
"[repo] branch=main head=d2035c76dc",
|
||||
"[remote] origin/main=d2035c76dc ahead=0 behind=0",
|
||||
"[tree] clean submodules_drift=0 uninit=0",
|
||||
"[worktrees] linked=8",
|
||||
"[initiatives] local cards (not authoritative): none",
|
||||
"[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)",
|
||||
"[facts] policy/facts.md 6 条事实均在有效期内",
|
||||
"[required-reading] core/baseline.md, workflows/delivery.md §1, policy/delivery.md",
|
||||
"[R0] d2035c76dc(完整:d2035c76dc1cb15e01d2c184af5155d9d773cd9f)",
|
||||
"[worktree] before-sync: recursive component checks passed",
|
||||
"[verdict] READY — 保留本次 precheck receipt 后建任务工作区:PRECHECK_RECEIPT=/tmp/task-precheck.json make task-start NAME=feature/your-branch",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev'"
|
||||
],
|
||||
"output_sha256": "32e2a7ee7d89e931af5b2d76a480bf3ccfb9367bff3bc01a91df24649e3a09d8",
|
||||
"receipt_sha256": "c2a4c48509432276fcb5c41d14a8e62e01dda2248d6e49da03b8438114e3650d",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/c2a4c48509432276fcb5c41d14a8e62e01dda2248d6e49da03b8438114e3650d.json"
|
||||
}
|
||||
```
|
||||
|
||||
## 闭合记录(合入前折叠)
|
||||
|
||||
- 本卡在 PR #652(https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/652)合入前闭合并归档,随该 PR 一同合入。
|
||||
- 该 PR 的合并提交即本任务的落地记录。
|
||||
- 合入后无需回填,也无需单独的闭合 PR。
|
||||
| 同步(记录前对象) | adbef2f49c6c252a09449496afbdb6685201993b | c70ebf53bfac50b460707d7eb6f482f20e697701 | 2026-10-20T08:08:33Z |
|
||||
@@ -0,0 +1,165 @@
|
||||
# feature/fast-slow-o2-i3-repin 任务卡
|
||||
|
||||
任务主记录:PR #653 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/653;状态:已完成(合入前闭合);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= adbef2f49c6c252a09449496afbdb6685201993b
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-fast-slow-o2-i3-repin(worktree);分支:feature/fast-slow-o2-i3-repin
|
||||
- 分支类型:standalone;root_target:main;immediate_target:main;accepting_requirements:false
|
||||
- 需求分流:verdict=NEW;selected_initiative=无;requirement_sha256=8dcd51b91a010e321fa05269fd41d0d283d5d1f381da03127748631799667b15;triage_receipt=/tmp/o2i3-20261020/triage.json;receipt_sha256=29e82b237f2fe8ca0bb9dbae8edcdc62403b2f51ca72c718b81d70719aad7c2e
|
||||
|
||||
- 授权与交付终点:用户 2026-10-20 08:06 在 O2 I2 阶段 6 中对“通过:合入 #224 和 #652,并启动 I3(推荐)”回复“继续”。终点:Dev 改钉 `deps/agent-native`、`modules/backend`(及 `check-pins` 强制要求的连锁 `deps/agent-squad`),`make test`+`make build` 由 PR CI(GATE)确认后经 #518 窗口合入 main。未授权:P1 付费探针、写入任何实例的系统层配置、部署、真实模型/付费请求。
|
||||
- 交付模式:goal-first(目标、范围和交付终点一次确认;范围内连续推进)
|
||||
- 实施执行:agent-per-unit(配置:AGENT-EXECUTION.md)
|
||||
- 合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入)
|
||||
- 人工决策点:仅限目标/范围/验收变更、重大取舍、高后果操作或无法自动判定的业务验收
|
||||
- 当前阶段:实施;当前增量:I3(计划 §4)
|
||||
- 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位)
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:Dev main 组合包含 Agent-Native `2fc66be`(O2 I1)与 Backend I2 合入点,`make test` 通过;默认关闭,行为不变。
|
||||
- 连锁改钉(`scripts/check-pins.sh` 强制各容器嵌套钉与 Dev 一致;先例 `234aa28`/`579a6fe`):Agent-Squad 嵌套 `deps/agent-native` 28f3ea7→2fc66be(Agent-Squad #55)→ Backend `deps/agent-squad` 改到 Agent-Squad 合入点(Backend 新 PR)→ Dev 一次改钉 `deps/agent-native`、`deps/agent-squad`、`modules/backend`。全部仅 gitlink,无产品代码改动。
|
||||
- 非目标:P1 付费探针、系统层配置写入、部署;O2 已记录的非阻塞项。
|
||||
|
||||
## Agent 实施收据
|
||||
|
||||
路由与 fail-stop 规则见根目录 AGENT-EXECUTION.md 与 policy/delivery.md;每次尝试一行,原始日志留在源码外收据路径。
|
||||
|
||||
| 单元 ID | 预期范围 | 配置摘要 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| o2-i3a-agent-squad-native-pin(Agent-Squad 仓) | deps/agent-native | AGENT-EXECUTION.md | implementation | cursor→antigravity→pi-glm→pi→codex | 1 | cursor / auto | success(34s) | `ad58d0a`(ref refs/agent-exec/1695a49c…/559ef8a7,parent c0ce10a),`agent-exec apply` 快进集成 | never | /tmp/o2i3-20261020/o2-i3a-receipt.json |
|
||||
| o2-i3b-backend-squad-pin(Backend 仓) | deps/agent-squad | AGENT-EXECUTION.md | implementation | cursor→antigravity→pi-glm→pi→codex | 1 | cursor / auto | success | `74f655c`(ref refs/agent-exec/70cdf684…/fcc4d2e0,parent c164950),`agent-exec apply` 快进集成 | never | /tmp/o2i3-20261020/o2-i3b-receipt.json |
|
||||
| o2-i3c-dev-repin(Dev) | deps/agent-native、deps/agent-squad、modules/backend | AGENT-EXECUTION.md | implementation | cursor→antigravity→pi-glm→pi→codex | 1 | cursor / auto | success(46s) | `76c1c33`(ref refs/agent-exec/cba05e49…/b41a05cf,parent 409f476),`agent-exec apply` 快进集成;host `bash scripts/check-pins.sh` → pins ok | never | /tmp/o2i3-20261020/o2-i3c-receipt.json |
|
||||
| o2-i3d-backend-search-deadlock-test-pg(Backend 仓,扩围授权) | internal/store/search_deadlock_run_timing_test.go | AGENT-EXECUTION.md | implementation | cursor→antigravity→pi-glm→pi→codex | 1 | cursor / auto | success | `9b23713`(ref refs/agent-exec/245f757e…/1faa105e,parent bb9274d),`agent-exec apply` 快进集成;host SQLite 下 `go test ./internal/store -run TestSearchDeadlockRegression` 通过 | never | /tmp/o2i3-20261020/o2-i3d-receipt.json |
|
||||
| o2-i3e-dev-backend-repin(Dev) | modules/backend | AGENT-EXECUTION.md | implementation | cursor→antigravity→pi-glm→pi→codex | 1 | cursor / auto | success | `0ab8f8c`(ref refs/agent-exec/304f0c46…/bb83de1c,parent e799650),`agent-exec apply` 快进集成;check-pins ok | never | /tmp/o2i3-20261020/o2-i3e-receipt.json |
|
||||
|
||||
## 关联方向与规划
|
||||
|
||||
- 适用状态:待核对(无适用规划时说明原因)
|
||||
- 主记录路径/版本:待核对(路径按仓库根目录定位,归档后不变;只引用唯一正文)
|
||||
- 对应里程碑:待核对
|
||||
|
||||
## 需求分析
|
||||
|
||||
| ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| R1 | I3:Dev 改钉 O2 组合 | 符合:O2 计划 §4;I1、I2 阶段 6 均通过 | P1 | Dev PR HEAD 上 CI `test`/`test-pg`/`svc-realcombo` 全部 success(含 check-pins);diff 只含 gitlink | I1、I2 合入 | 实施中 |
|
||||
|
||||
## 方案与计划
|
||||
|
||||
- 方案引用:docs/superpowers/specs/2026-10-19-fast-slow-o2-route-contract-eof-design.md
|
||||
- 实施计划引用:docs/superpowers/plans/2026-10-19-fast-slow-o2-route-contract-eof-plan.md §4(I3)
|
||||
- 测试计划引用:同上 §4:`make test` + `make build` 由 PR CI 确认
|
||||
|
||||
## 阶段记录
|
||||
|
||||
| 阶段 | 对象版本 | 状态 | 决策/执行者 | 时间 | 依据 |
|
||||
|---|---|---|---|---|---|
|
||||
| 需求拆解 | 待定 | 待执行 | — | — | — |
|
||||
| 需求评估 | 待定 | 待执行 | — | — | — |
|
||||
| 需求表确认 | 待定 | 待执行 | — | — | — |
|
||||
| 方案设计 | 待定 | 待执行 | — | — | — |
|
||||
| 实施计划 | 待定 | 待执行 | — | — | — |
|
||||
| 实施与自检 | 待定 | 待执行 | — | — | — |
|
||||
| 正式测试与验收 | 待定 | 待执行 | — | — | — |
|
||||
| 代码 Review | 待定 | 待执行 | — | — | — |
|
||||
| 合入 | 待定 | 待执行 | — | — | — |
|
||||
| 合入核验与收口 | 待定 | 待执行 | — | — | — |
|
||||
|
||||
## 探索试验与迭代
|
||||
|
||||
| 增量/试验 | 假设 | 范围 | 判断和停止条件 | 授权/决策依据 | 结果 | 变更影响 | 需重审补测 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 扩围:Backend #223 测试方言缺陷 | Dev #653 @a64a68b CI `test-pg`(runs/4432/jobs/7197)确定性失败:Backend #223(其他会话,已在 Backend main)新增的 `TestSearchDeadlockRegression` 在 PostgreSQL 上调用仅限 SQLite 的 `searchKnowledgeFTSCandidates`(`syntax error at or near "MATCH"`);Backend CI 不跑 PG 未拦截;O2 I2 合在其上,改钉无法绕开。同 run `test` 失败为 npm ECONNRESET(runner 网络) | Backend `internal/store/search_deadlock_run_timing_test.go` 单文件,仅测试;生产代码不动 | 非 SQLite 方言跳过仅限 SQLite 的步骤后,Dev 组合 `test-pg` 通过即停 | 用户 2026-10-20 授权最小扩围(AskQuestion i3pg=fix_min) | Backend #227 合入 `d8923f1`(期间 main 被其他会话 #226 推进,已合并 main 后在 `803d64e` 重跑 CI 通过);Dev 改钉 modules/backend → d8923f1 | Dev 需再改钉 modules/backend 到修复合入点 | Dev 组合 CI 重跑 |
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | adbef2f49c6c252a09449496afbdb6685201993b | adbef2f49c6c252a09449496afbdb6685201993b | 2026-10-20T08:53:44Z |
|
||||
|
||||
## 证据(Evidence)
|
||||
|
||||
<!-- CMD="<命令>" make evidence 写入;手抄/转写输出视为无效证据(AGENTS.md 证据与验证门禁)。 -->
|
||||
| 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) |
|
||||
|---|---|---|---|---|---|
|
||||
|
||||
## 交付调度
|
||||
|
||||
- 调度状态:未入队;调度记录:无
|
||||
- entry_id:无;attempt_id:无;窗口执行者:无
|
||||
- 固定候选:无(base/head、组件与相关配置引用实际尝试)
|
||||
- 调度依据:policy/delivery.md#合入调度
|
||||
- 固定后证据:源码外 RECEIPT;实际结果后按授权原样导入和闭合
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:
|
||||
- 验证:<结论摘要 PASS/FAIL/SKIP/NOT_RUN 逐项;逐条证据由 make evidence 写入上方证据表>
|
||||
- 影响与剩余项:
|
||||
|
||||
## 规划进展与下一步
|
||||
|
||||
- 本次推进/剩余:待核对(依据实际成果更新适用方案/规划)
|
||||
- 首选下一任务:待核对(无适用规划、已完成或受阻时如实说明,不虚构任务)
|
||||
- 推荐依据:待填写
|
||||
- 前置条件/待确认:待核对
|
||||
- 预期产物/验收条件:待定义
|
||||
- 重复任务核对:待核对(已有/在途任务、PR 与规划记录)
|
||||
- 启动授权:未授权(建议不自动启动新任务,仍须明确授权)
|
||||
|
||||
## 合入与清理
|
||||
|
||||
- Review 记录:全新独立 code-reviewer 子智能体(agent 9c6a14b3,fresh_session=true,只接收需求、各仓 base/head 与 diff),结论 **PASS,无阻塞项**:Agent-Squad c0ce10a..c7121bd、Backend c164950..bb9274d、Dev 409f476..76c1c33 均只含指定 gitlink;目标 SHA 均在各自 origin/main;Agent-Native 28f3ea7..2fc66be 实际内容只有 O2 I1;评审者重放 `bash scripts/check-pins.sh` → pins ok(REPLAY)。非阻塞(已处置/记录):① `modules/backend` 改钉顺带引入已在 Backend main 合入的 #222(IAM U5 集成测试,仅测试)与 #223(store 层多用户协作修复)——此后又因扩围引入 #226(其他会话的 CI 不稳定测试修复)与 #227(本任务的 PG 方言测试修复);Dev diff 本身仍只有 gitlink,行为由组合 CI `make test`/`test-pg` 兜底;U5 归档卡“待 bump Dev modules/backend”随本 PR 实际结清(不改该卡)。② check-pins 8 条 development-guidelines/manager 嵌套钉 warn 为既有状态。③ 合入前 task-sync。④ Dev #634 将来需自行解决 modules/backend gitlink 冲突。#227 的测试方言修复由 host 范围审阅并经本 PR 组合 CI `test-pg` 实测。
|
||||
- 冲突记录:NOT_RUN(最新目标同步、冲突处置、组合兼容核验及复审/补测)
|
||||
- CI 记录:@a64a68b `test-pg` 失败(#223 PG 方言缺陷,见探索试验与迭代)与 `test` 失败(npm ECONNRESET);@6b78511 `test`/`test-pg`/`svc-realcombo` 全部 success(组合含 Backend d8923f1)。最终 HEAD 的 CI 见合入记录。
|
||||
- 合入记录(组件连锁):Agent-Squad PR #55 被核验 HEAD `ad58d0ab1a915675e1c7692c0ebb59d48416b655`(CI vet-and-test/docker-checkout-hostgateway/governance success)→ merge `c7121bda2a681dc46078350f7929e56e142db57f`,tree 一致;Backend PR #225 被核验 HEAD `74f655c30ac835920a2d278ebd6dc418280ae01b`(CI vet-and-test/governance success)→ merge `bb9274d737f853474237934bcf25669fd8d6cadb`,tree 一致。两者均只改 gitlink,目标内容(Agent-Native 2fc66be)已在 I1 独立评审。Backend PR #227(扩围修复)被核验 HEAD `803d64e8a2342c6722b696e373c87bc212a62533`(CI vet-and-test/governance success;首轮 `9b23713` 的 vet-and-test 因既有不稳定用例 TestProjectEventsSharedProofAndPrivatePagination 失败,重跑通过)→ merge `d8923f18eceeb476507b09467c0e730ddafc8221`,tree 一致。Dev 合入:待定。
|
||||
- 清理记录:NOT_RUN(授权依据、写者退出确认、worktree/分支/任务卡处置)
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
```json
|
||||
{
|
||||
"summary_schema": 1,
|
||||
"source": "SELF",
|
||||
"timestamp": "2026-10-20T08:52:56.204072+00:00",
|
||||
"command": "make precheck",
|
||||
"exit_code": 0,
|
||||
"cwd": "/home/weichen/projects/Agent-System-Dev",
|
||||
"before_head": "adbef2f49c6c252a09449496afbdb6685201993b",
|
||||
"after_head": "adbef2f49c6c252a09449496afbdb6685201993b",
|
||||
"branch": "main",
|
||||
"target_branch": "main",
|
||||
"target_head": "adbef2f49c6c252a09449496afbdb6685201993b",
|
||||
"root_target": "main",
|
||||
"immediate_target": "main",
|
||||
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"output_tail": [
|
||||
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev'",
|
||||
"[repo] branch=main head=adbef2f49c",
|
||||
"[remote] origin/main=adbef2f49c ahead=0 behind=0",
|
||||
"[tree] clean submodules_drift=0 uninit=0",
|
||||
"[worktrees] linked=6",
|
||||
"[initiatives] local cards (not authoritative): none",
|
||||
"[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)",
|
||||
"[facts] policy/facts.md 6 条事实均在有效期内",
|
||||
"[required-reading] core/baseline.md, workflows/delivery.md §1, policy/delivery.md",
|
||||
"[R0] adbef2f49c(完整:adbef2f49c6c252a09449496afbdb6685201993b)",
|
||||
"[worktree] before-sync: recursive component checks passed",
|
||||
"[verdict] READY — 保留本次 precheck receipt 后建任务工作区:PRECHECK_RECEIPT=/tmp/task-precheck.json make task-start NAME=feature/your-branch",
|
||||
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev'"
|
||||
],
|
||||
"output_sha256": "11058c4bea77919221946183196ce5a97c24fc0bbab8d56ce68de1b1d4ec20ac",
|
||||
"receipt_sha256": "fc66eec2b412ae9a3bfb3afe7f489227201bd35f59c942d555d4dac482e4879f",
|
||||
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/fc66eec2b412ae9a3bfb3afe7f489227201bd35f59c942d555d4dac482e4879f.json"
|
||||
}
|
||||
```
|
||||
|
||||
## 闭合记录(合入前折叠)
|
||||
|
||||
- 本卡在 PR #653(https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/653)合入前闭合并归档,随该 PR 一同合入。
|
||||
- 该 PR 的合并提交即本任务的落地记录。
|
||||
- 合入后无需回填,也无需单独的闭合 PR。
|
||||
| 同步(记录前对象) | a4fa1bb518dd13f2efb9bfab8fdf10e15ddeab22 | b2b45d623faba5770993be35003723500861c752 | 2026-10-20T09:41:50Z |
|
||||
+47
-34
@@ -7,20 +7,22 @@ parser accepts exactly one `agent-execution` fenced block.
|
||||
|
||||
U3's execution controller and U4's project wiring are integrated. This file is
|
||||
the execution-routing authority for implementation, repair, test, and review.
|
||||
Normal implementation, repair, and test routes stay Cursor, Antigravity
|
||||
(`agy`), and PI. Each of those profiles may be attempted up to
|
||||
`max_attempts_per_profile`, which is exactly 3 whenever `emergency_profile`
|
||||
is configured. Only after those candidates safely exhaust their attempts does
|
||||
the enabled emergency `codex` profile run once. Codex remains out of the three
|
||||
normal role lists and may also appear in review. `fallback_to_host` is
|
||||
`never`: the controller does not emit `host-fallback-authorized` and does not
|
||||
increment host fallback authorizations. Safe exhaustion without an emergency
|
||||
candidate ends `unavailable` or `blocked`, and that result does not authorize
|
||||
the host to write the unit. The legacy value `all-unavailable` remains
|
||||
parseable and likewise grants no host write authority. Cursor uses
|
||||
`cursor-agent-stable`. `model: auto` makes Cursor receive an explicit
|
||||
`--model auto`; the other CLIs omit the model flag and use their configured
|
||||
default. Any other value is passed to that CLI as its model selector. The
|
||||
Implementation, repair, test, and review all use the candidates Cursor,
|
||||
Antigravity (`agy`), PI with GLM (`pi-glm`), PI with MiniMax (`pi`), and
|
||||
Codex. Each candidate may be attempted up to `max_attempts_per_profile` (3)
|
||||
times on safe recoverable failures (`unavailable`, `failed-clean`); after that
|
||||
the controller moves to the next candidate automatically, and the host does
|
||||
not ask the user. The order of the non-Codex candidates may differ per role,
|
||||
but Codex must stay the last candidate in every role list. There is no
|
||||
`emergency_profile`. `fallback_to_host` is `never`: the controller does not
|
||||
emit `host-fallback-authorized` and does not increment host fallback
|
||||
authorizations. When every candidate is safely exhausted the run ends
|
||||
`unavailable` or `blocked`; the host pauses that unit and asks the user
|
||||
whether to retry, and does not write the unit. The legacy value
|
||||
`all-unavailable` remains parseable and likewise grants no host write
|
||||
authority. Cursor uses `cursor-agent-stable`. `model: auto` makes Cursor
|
||||
receive an explicit `--model auto`; the other CLIs omit the model flag and use
|
||||
their configured default. Any other value is passed to that CLI as its model selector. The
|
||||
`integration` block declares the host-exempt paths and the transport, admission,
|
||||
and cleanup entry points.
|
||||
|
||||
@@ -37,25 +39,34 @@ execution:
|
||||
summary_bytes: 16384
|
||||
raw_output_bytes: 10485760
|
||||
max_attempts_per_profile: 3
|
||||
emergency_profile: codex
|
||||
|
||||
roles:
|
||||
implementation: [cursor, antigravity, pi]
|
||||
repair: [cursor, antigravity, pi]
|
||||
test: [pi, antigravity, cursor]
|
||||
review: [pi, antigravity, cursor, codex]
|
||||
implementation: [cursor, antigravity, pi-glm, pi, codex]
|
||||
repair: [cursor, antigravity, pi-glm, pi, codex]
|
||||
test: [pi-glm, pi, antigravity, cursor, codex]
|
||||
review: [pi-glm, pi, antigravity, cursor, codex]
|
||||
|
||||
profiles:
|
||||
cursor:
|
||||
adapter: cursor
|
||||
executable: cursor-agent-stable
|
||||
model: auto
|
||||
# Re-enabled 2026-10-20: the earlier disable was based on a misreading
|
||||
# of ActionRequiredError — the real cause was the DM executor not
|
||||
# passing --model auto (cursor fell back to a quota-limited model).
|
||||
# Fixed by PR #644 (deps/development-manager pin); quota itself is fine.
|
||||
enabled: true
|
||||
|
||||
antigravity:
|
||||
adapter: antigravity
|
||||
executable: agy
|
||||
model: auto
|
||||
model: gemini-3.8-flash-high
|
||||
enabled: true
|
||||
|
||||
pi-glm:
|
||||
adapter: pi
|
||||
executable: pi
|
||||
model: zai-coding-cn/glm-5.3-flash
|
||||
enabled: true
|
||||
|
||||
pi:
|
||||
@@ -67,7 +78,7 @@ profiles:
|
||||
codex:
|
||||
adapter: codex
|
||||
executable: codex
|
||||
model: auto
|
||||
model: gpt-6.1-sol
|
||||
enabled: true
|
||||
|
||||
integration:
|
||||
@@ -92,23 +103,25 @@ section records only this project's choices.
|
||||
|
||||
- Planning, design and implementation plans: Codex or Claude when available,
|
||||
in the host or a fresh CLI session. This is a preference, not a routing role.
|
||||
- Bounded implementation, repair and test units: the existing normal
|
||||
candidates in the configured role order above. Requested models:
|
||||
- PI: `minimax-cn/MiniMax-M3`, passed as `--model provider/id`. PI
|
||||
actual events have reported `minimax-cn` / `MiniMax-M3` and the local
|
||||
offline catalog lists that profile; each run still records the effective
|
||||
model from that run's events.
|
||||
- Bounded implementation, repair, test and review units: the candidates in
|
||||
the configured role order above, with Codex last. Requested models:
|
||||
- Cursor: `auto`, passed explicitly as `--model auto` (Cursor Auto).
|
||||
- agy: Gemini 3.8 Flash is requested, but its exact selectable model ID and
|
||||
effective identity are `NOT_VERIFIED` (the `agy` models query needs a
|
||||
login that was not available). The profile therefore stays `model: auto`
|
||||
until an observed model ID exists; do not claim Gemini 3.8 Flash is active.
|
||||
- agy: `gemini-3.8-flash-high`. `agy models` listed it on 2026-10-20 and a
|
||||
one-line smoke run answered; the effective identity is still taken from
|
||||
each run's events.
|
||||
- PI GLM profile (`pi-glm`): `zai-coding-cn/glm-5.3-flash`, passed as
|
||||
`--model provider/id`.
|
||||
- PI MiniMax profile (`pi`): `minimax-cn/MiniMax-M3`, passed as
|
||||
`--model provider/id`. PI actual events have reported `minimax-cn` /
|
||||
`MiniMax-M3` and the local offline catalog lists that profile; each run
|
||||
still records the effective model from that run's events.
|
||||
- Codex: `gpt-6.1-sol`, always the last candidate.
|
||||
- Assigning a different candidate or model to a unit needs a concrete,
|
||||
task-specific reason recorded in the task record, and stays within the
|
||||
existing roles and candidate lists. It is not a silent permission or routing
|
||||
change. Role lists, attempt limits, timeouts, output limits, the single
|
||||
Codex emergency attempt, stage isolation and `fallback_to_host: never` are
|
||||
unchanged by these preferences.
|
||||
change. Role lists, attempt limits, timeouts, output limits, Codex as the
|
||||
last candidate, stage isolation and `fallback_to_host: never` are unchanged
|
||||
by these preferences.
|
||||
- A requested model is prompt/config intent. Only the model reported in a
|
||||
run's actual event envelope counts as effective; when the CLI does not report
|
||||
it, record `not-observable`. Unknown context capacity, a missing agy login
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
- 智能体完成 Review、解决冲突并确认当前 HEAD 必需 CI 通过后执行合入,无需另请人工操作。
|
||||
- 合入后仅在已登记任务 worktree 根目录、确认所有写者退出后回收;父子仓改动与未跟踪/ignored 唯一文件先保存或处置,删除被拒时保留现场,禁止强删兜底。
|
||||
- 放弃未合入工作用 `make task-finish ABANDON="--abandon <原因>"` 并记录原因,不豁免现场保护。
|
||||
- 每次结束用户任务,最终回复末尾附简短自包含的交接块,供清空上下文后续办;它只是摘要,不替代任务卡、持久交接或证据。无仓库变更也无续办状态时,写一行明确的“不适用”。字段与细则见 [对话收尾交接块](policy/delivery.md#对话收尾交接块)。
|
||||
- 首次克隆后运行 `make setup` 启用本地钩子;治理脚本改动须运行 `make test-governance`(见 [持续回归](policy/governance.md#持续回归))。
|
||||
- 命令与细则:[启动与恢复](policy/governance.md#启动与恢复)、[回收](policy/governance.md#回收)、[两级分支与分流](policy/delivery.md#两级分支交付模型与分流检查)、[分级门禁](policy/delivery.md#层级任务通道与分级门禁)、[合入调度](policy/delivery.md#合入调度)、[Review 与合入](policy/delivery.md#智能体-review-与-pr-合入)。
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ PLUGINS := plugins
|
||||
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-info svc-commits svc-history svc-update svc-recover svc-watchdog test-backend test-backend-pg test-multi-instance test-lifecycle test-regulations-kb test-frontend test-ui test-core test-agentcmd test-pins test-libs dev pin clean setup precheck task-triage task-triage-decide task-start task-resume task-sync task-close task-finish task-pr-check ci-wait facts-verify evidence version agent-exec-validate agent-exec-apply agent-exec-admit
|
||||
.PHONY: help sync status build frontend svc svc-list svc-info svc-commits svc-history svc-update svc-recover svc-watchdog test-backend test-backend-pg test-multi-instance test-lifecycle test-regulations-kb test-frontend test-ui test-core test-agentcmd test-pins test-libs dev pin clean setup precheck task-triage task-triage-decide task-start task-resume task-sync task-close task-finish task-pr-check ci-wait facts-verify evidence version agent-exec-validate agent-exec-apply agent-exec-admit image-build image-verify
|
||||
|
||||
version:
|
||||
@echo "agent-system $(VERSION)"
|
||||
@@ -99,6 +99,8 @@ help:
|
||||
@echo "make dev 开发模式说明(前后端分离热更新)"
|
||||
@echo "make pin 推进 submodule 指针到各仓远端 main(提交前须 make test 通过)"
|
||||
@echo "make status submodule 状态"
|
||||
@echo "make image-build 构建 Docker 测试环境镜像 agent-system-test-env:dev"
|
||||
@echo "make image-verify 运行镜像内环境自检 verify-env.sh"
|
||||
@echo "make agent-exec-validate 校验 AGENT-EXECUTION.md(scripts/agent-exec validate,经 dm-server agent-exec)"
|
||||
@echo "make agent-exec-apply RECEIPT=<path> 快进当前分支到成功收据的 transport"
|
||||
@echo "make agent-exec-admit 校验暂存路径具备 transport 来源或属于 host 豁免"
|
||||
@@ -118,6 +120,12 @@ agent-exec-apply:
|
||||
agent-exec-admit:
|
||||
scripts/agent-exec admit --repo .
|
||||
|
||||
image-build:
|
||||
docker build -t agent-system-test-env:dev docker/
|
||||
|
||||
image-verify:
|
||||
docker run --rm --shm-size=1g agent-system-test-env:dev /usr/local/bin/verify-env.sh
|
||||
|
||||
sync:
|
||||
git submodule update --init --recursive --jobs 8
|
||||
|
||||
|
||||
Vendored
+1
-1
Submodule deps/agent-native updated: 28f3ea7674...2fc66be652
Vendored
+1
-1
Submodule deps/agent-squad updated: 11ff3a0a9c...c7121bda2a
@@ -0,0 +1,50 @@
|
||||
FROM --platform=linux/amd64 ubuntu:24.04
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV PLAYWRIGHT_BROWSERS_PATH=/opt/ms-playwright
|
||||
ENV PATH=/usr/local/go/bin:/usr/local/lib/nodejs/node-v26.10.0-linux-x64/bin:${PATH}
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
curl \
|
||||
git \
|
||||
libatomic1 \
|
||||
make \
|
||||
openssh-server \
|
||||
sudo \
|
||||
xz-utils \
|
||||
software-properties-common \
|
||||
&& add-apt-repository -y ppa:deadsnakes/ppa \
|
||||
&& apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
python3.14 \
|
||||
python3.14-venv \
|
||||
&& python3.14 -m ensurepip --upgrade \
|
||||
&& ln -sf /usr/bin/python3.14 /usr/local/bin/python3 \
|
||||
&& ln -sf /usr/bin/python3.14 /usr/local/bin/python \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN curl -fsSL https://go.dev/dl/go1.27.1.linux-amd64.tar.gz -o /tmp/go1.27.1.linux-amd64.tar.gz \
|
||||
&& rm -rf /usr/local/go \
|
||||
&& tar -C /usr/local -xzf /tmp/go1.27.1.linux-amd64.tar.gz \
|
||||
&& curl -fsSL https://nodejs.org/dist/v26.10.0/node-v26.10.0-linux-x64.tar.xz -o /tmp/node-v26.10.0-linux-x64.tar.xz \
|
||||
&& mkdir -p /usr/local/lib/nodejs \
|
||||
&& tar -C /usr/local/lib/nodejs -xJf /tmp/node-v26.10.0-linux-x64.tar.xz \
|
||||
&& npx -y playwright@1.64.0 install --with-deps chromium \
|
||||
&& rm -f /tmp/go1.27.1.linux-amd64.tar.gz /tmp/node-v26.10.0-linux-x64.tar.xz \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN userdel -r ubuntu 2>/dev/null || true \
|
||||
&& groupdel ubuntu 2>/dev/null || true \
|
||||
&& groupadd --gid 1000 dev \
|
||||
&& useradd --uid 1000 --gid 1000 --create-home --shell /bin/bash dev \
|
||||
&& echo "dev ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/dev \
|
||||
&& chmod 0440 /etc/sudoers.d/dev \
|
||||
&& printf '\nPermitRootLogin no\nPasswordAuthentication no\nPubkeyAuthentication yes\n' >> /etc/ssh/sshd_config
|
||||
|
||||
COPY --chmod=755 entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||
COPY --chmod=755 verify-env.sh /usr/local/bin/verify-env.sh
|
||||
|
||||
EXPOSE 22
|
||||
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|
||||
@@ -0,0 +1,57 @@
|
||||
# Docker 测试环境镜像说明
|
||||
|
||||
## 用途与边界
|
||||
|
||||
本目录用于定义一个可重复构建的隔离测试环境镜像,供后续用该镜像启动一次性容器、挂载当前仓库做隔离测试。
|
||||
|
||||
- 该镜像只提供测试运行环境,不包含仓库代码。
|
||||
- 该镜像不包含任何密钥、私钥或凭据。
|
||||
- 本仓正式交付流程仍以非容器化路径为准,此镜像仅用于辅助隔离测试。
|
||||
|
||||
## 构建与自检
|
||||
|
||||
在仓库根目录执行:
|
||||
|
||||
```bash
|
||||
make image-build
|
||||
make image-verify
|
||||
```
|
||||
|
||||
- `make image-build`:构建镜像 `agent-system-test-env:dev`。
|
||||
- `make image-verify`:运行镜像内环境自检脚本 `/usr/local/bin/verify-env.sh`。
|
||||
|
||||
## 启动测试容器示例
|
||||
|
||||
```bash
|
||||
docker run -d --name asdev-test --shm-size=1g -p 127.0.0.1:2222:22 -v ~/.ssh/id_ed25519.pub:/home/dev/.ssh/authorized_keys:ro -v $PWD:/workspace agent-system-test-env:dev
|
||||
```
|
||||
|
||||
说明:
|
||||
|
||||
- `authorized_keys` 挂载源可以替换为任意可用的 `.pub` 公钥文件。
|
||||
- 容器内 SSH 登录用户为 `dev`。
|
||||
- `dev` 用户已配置 sudo 免密。
|
||||
|
||||
进入容器:
|
||||
|
||||
```bash
|
||||
ssh -p 2222 dev@127.0.0.1
|
||||
```
|
||||
|
||||
## 容器内最小测试流程
|
||||
|
||||
```bash
|
||||
cd /workspace
|
||||
make sync
|
||||
cd modules/frontend
|
||||
npm ci
|
||||
npx playwright test
|
||||
```
|
||||
|
||||
说明:镜像已内置 `PLAYWRIGHT_BROWSERS_PATH=/opt/ms-playwright` 下的 Chromium,通常无需在容器内再次执行 `playwright install`。
|
||||
|
||||
## 安全说明
|
||||
|
||||
- 容器内无密码登录,仅允许公钥认证。
|
||||
- 每个容器实例在启动时独立生成 SSH host key。
|
||||
- 不要将生产凭据、私钥或其他敏感文件带进容器。
|
||||
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
mkdir -p /run/sshd
|
||||
ssh-keygen -A
|
||||
|
||||
install -d -m 0700 -o dev -g dev /home/dev/.ssh
|
||||
|
||||
if [ -f /home/dev/.ssh/authorized_keys ]; then
|
||||
tmp_authorized_keys="$(mktemp)"
|
||||
cp /home/dev/.ssh/authorized_keys "${tmp_authorized_keys}"
|
||||
install -m 0600 -o dev -g dev "${tmp_authorized_keys}" /home/dev/.ssh/authorized_keys 2>/dev/null || {
|
||||
chown dev:dev /home/dev/.ssh/authorized_keys 2>/dev/null || true
|
||||
chmod 0600 /home/dev/.ssh/authorized_keys 2>/dev/null || true
|
||||
}
|
||||
rm -f "${tmp_authorized_keys}"
|
||||
fi
|
||||
|
||||
if [ "$#" -gt 0 ]; then
|
||||
exec "$@"
|
||||
fi
|
||||
|
||||
exec /usr/sbin/sshd -D -e
|
||||
@@ -0,0 +1,50 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
fail_expect() {
|
||||
local expected="$1"
|
||||
local actual="$2"
|
||||
echo "校验失败: 期望: ${expected}"
|
||||
echo "校验失败: 实际: ${actual}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
command -v git >/dev/null 2>&1 || fail_expect "git 可执行文件存在" "git 不存在"
|
||||
command -v make >/dev/null 2>&1 || fail_expect "make 可执行文件存在" "make 不存在"
|
||||
|
||||
go_version="$(go version 2>&1 || true)"
|
||||
[[ "${go_version}" == *"go1.27.1"* ]] || fail_expect "go version 输出包含 go1.27.1" "${go_version}"
|
||||
|
||||
node_version="$(node --version 2>&1 || true)"
|
||||
[[ "${node_version}" == "v26.10.0" ]] || fail_expect "v26.10.0" "${node_version}"
|
||||
|
||||
npm_version="$(npm --version 2>&1 || true)"
|
||||
[[ -n "${npm_version}" ]] || fail_expect "npm --version 有输出" "空输出"
|
||||
|
||||
python_version="$(python3 --version 2>&1 || true)"
|
||||
[[ "${python_version}" =~ ^Python\ 3\.14\.[0-9]+$ ]] || fail_expect "Python 3.14.x" "${python_version}"
|
||||
|
||||
if ! sshd_output="$(sshd -t 2>&1)"; then
|
||||
fail_expect "sshd -t 检查通过" "${sshd_output}"
|
||||
fi
|
||||
|
||||
id dev >/dev/null 2>&1 || fail_expect "用户 dev 存在" "用户 dev 不存在"
|
||||
|
||||
sudo_list="$(sudo -l -U dev 2>&1 || true)"
|
||||
echo "${sudo_list}" | grep -q "NOPASSWD" || fail_expect "sudo -l -U dev 含 NOPASSWD" "${sudo_list}"
|
||||
|
||||
if [ "${PLAYWRIGHT_BROWSERS_PATH:-}" != "/opt/ms-playwright" ]; then
|
||||
fail_expect "PLAYWRIGHT_BROWSERS_PATH=/opt/ms-playwright" "${PLAYWRIGHT_BROWSERS_PATH:-<未设置>}"
|
||||
fi
|
||||
|
||||
chromium_path="$(
|
||||
find /opt/ms-playwright -type f \( -name headless_shell -o -name chrome \) 2>/dev/null | head -n 1
|
||||
)"
|
||||
|
||||
[ -n "${chromium_path}" ] || fail_expect "在 /opt/ms-playwright 下存在 headless_shell 或 chrome" "未找到可执行文件"
|
||||
[ -x "${chromium_path}" ] || fail_expect "chromium 可执行文件具有执行权限" "${chromium_path} 不可执行"
|
||||
|
||||
chromium_dom="$("${chromium_path}" --headless --no-sandbox --disable-gpu --dump-dom about:blank 2>&1 || true)"
|
||||
echo "${chromium_dom}" | grep -q "<html" || fail_expect "chromium --dump-dom 输出包含 <html" "${chromium_dom}"
|
||||
|
||||
echo "verify-env: PASS"
|
||||
@@ -0,0 +1,36 @@
|
||||
# 快慢通道 O2 I1(Agent-Native `route_contract_eof`):阶段 6 评审包
|
||||
|
||||
- 状态:**用户阶段 6 通过(2026-10-20)**,接受第 3 节第 1 条的 C2 编号,并要求启动 I2。Agent-Native #48 已合入 main(`2fc66be`)。I3(Dev 改钉)待 I2 后启动,P1 付费探针另提资源方案。
|
||||
- 日期:2026-10-20;作者:host;Dev 任务:`feature/fast-slow-o2-i1-agent-native`。
|
||||
- 依据:[阶段 4 方案](2026-10-19-fast-slow-o2-route-contract-eof-design.md)与[阶段 5 计划 §2](../plans/2026-10-19-fast-slow-o2-route-contract-eof-plan.md)(用户 2026-10-20 通过;C2 同时接受 `http2_stream` 与 `known_length`+`match`)。
|
||||
- 交付对象:Agent-Native 草稿 PR [#48](https://git-home.u1680832.nyat.app:30319/weichen/Agent-Native/pulls/48),base `9c24e22`(origin/main),head `899fd70`。
|
||||
|
||||
## 1. 交付内容
|
||||
|
||||
| 方案条目 | 实现 | 位置 |
|
||||
|---|---|---|
|
||||
| 路由合同与身份绑定(§4.1) | `RouteContractEOF{Model, BaseURL, IdentitySHA256}`、`RouteContractIdentity`、`NormalizeRouteBaseURL`(仅 https,含 userinfo/query/fragment 一律不匹配);`Client.RouteContract` 为 nil/零值即关闭;重定向逐项比较 scheme、host、port、path | `runtime/llm/route_contract.go`、`client.go` |
|
||||
| 解析器延后判定(计划 §2.2) | 公开 `ParseSSE` 签名与零值行为不变;内部 `parseSSE(…, sseHooks)` 只在“有工具且缺 `[DONE]`”时把成功候选与今天的失败事件一起交给传输层;新增 `finishChunks`、`multiChoice`、`fragmentAfterFinish` 统计 | `runtime/llm/sse.go` |
|
||||
| 放行条件 C1–C9(§4.2) | 按顺序判定,记录第一个不满足的编号;放行时 `StreamComplete=false`、`CompletionBasis=route_contract_eof` | `route_contract.go` `check` |
|
||||
| 参数 schema 子集(§4.3) | 新包 `runtime/argschema.Validate`,由 `validateArgs`/`matchesType` 逐字迁移;registry 改为委托 | `runtime/argschema/`、`runtime/tools/registry.go` |
|
||||
| 可观测性(§4.4) | `Event.CompletionBasis`;`TerminalObservation.completionBasis`/`contractCheck`(仅枚举值);`[DONE]` 成功路径记 `done_marker` | `types.go`、`client.go` |
|
||||
|
||||
## 2. 验证
|
||||
|
||||
- 实施:Cursor worker(`agent-exec`,attempt 2 success;attempt 1 因单元包 `allowed_paths` 误用 `**` 被判 scope-expansion,修正写法后经用户授权全新重跑),`agent-exec apply` 快进集成。
|
||||
- host 验证(SELF)@`899fd70`:改动文件 `gofmt` 合格;`git diff --check`;`go vet ./runtime/...`;`go test ./runtime/llm/... ./runtime/argschema/... ./runtime/tools/... -count=1`(另跑 `-race`)与 `go test ./... -count=1` 全部通过。
|
||||
- CI(GATE):PR #48 head `899fd70` 三项检查 success(`ci / vet-and-test`、`ci / docker-checkout-hostgateway`、`governance / governance`)。
|
||||
- 独立 Review(全新会话 code-reviewer,只接收需求、base/head 与 diff;评审者自跑为 SELF):**PASS,无阻塞项**。确认零值合同行为不变;拒绝事件与合同关闭事件除 `contractCheck` 外 `reflect.DeepEqual`;`argschema` 与旧实现逐行一致;无数据竞争;计划 §2 测试矩阵每一行都有带断言的用例,并同时断言 Usage 保留与放行次数。
|
||||
|
||||
## 3. 需人审确认与非阻塞项
|
||||
|
||||
1. **C3 行的编号差异**:计划写的是 HTTP/2 `RST_STREAM`/中途断连期望 C3,实现返回 **C2**。原因是 C2(传输边界)先于 C3 判定,断流时没有见到 EOF,先在 C2 失败。结论同样是拒绝,`contractCheck` 记录的是“第一个不满足的条件”,不一定是根因。请确认接受。
|
||||
2. **无工具的错误终态也会带 `contractCheck`**(非阻塞):合同开启时,纯文本流遇到供应商错误这类终态也会补一次判定(如记为 `C2`),这类流本来就不可能放行。不影响验收条件 3,也不泄漏内容;可在后续把补判限定为含工具调用的终态。
|
||||
3. **重复 `finish_reason` 会被 C4 拒绝**(非阻塞,失败关闭):若供应商在 usage 块里重复 `finish_reason`,一律拒绝。MiniMax 真实流是否这样,列为 P1 付费探针的观察点。
|
||||
4. **测试可加强**(非阻塞):`release/http2` 与 `close-delimited` 用例可直接断言 `BodyBoundary.FramingClass`;补一个“合同开启时纯文本流不变”的回归用例(评审者已用临时探针确认行为不变)。
|
||||
|
||||
## 4. 下一步(通过后)
|
||||
|
||||
1. 合入 Agent-Native #48(组件仓,无需 #518 窗口)。
|
||||
2. 启动 I2(Backend:系统层配置键、`openLLMClient` 按身份挂合同、透传 `completionBasis`;启动前核对 Backend 是否有读 `StreamComplete` 的工具门控)。
|
||||
3. I3 Dev 改钉组合验证;P1 另提资源方案。
|
||||
@@ -0,0 +1,48 @@
|
||||
# 快慢通道 O2 I2(Backend `route_contract_eof` 配置与挂载):阶段 6 评审包
|
||||
|
||||
- 状态:**用户阶段 6 通过(2026-10-20)**,并要求启动 I3。Backend #224 已合入 main(`c164950`)。P1 付费探针另提资源方案。
|
||||
- 日期:2026-10-20;作者:host;Dev 任务:`feature/fast-slow-o2-i2-backend`(Dev 草稿 PR [#652](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/652))。
|
||||
- 依据:[阶段 4 方案 §4.5](2026-10-19-fast-slow-o2-route-contract-eof-design.md) 与[阶段 5 计划 §3](../plans/2026-10-19-fast-slow-o2-route-contract-eof-plan.md);I1 已于 2026-10-20 通过,Agent-Native #48 合入 `2fc66be`。
|
||||
- 交付对象:Backend 草稿 PR [#224](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/224),base `b5eb89c`(origin/main),head `16f98b8`。
|
||||
|
||||
## 1. 交付内容
|
||||
|
||||
| 计划条目 | 实现 | 位置 |
|
||||
|---|---|---|
|
||||
| 改钉 Agent-Native | `deps/agent-native` `28f3ea7 → 2fc66be`(I1 合入点) | gitlink |
|
||||
| 系统层配置键 | `models.routeContractEOF.model/.baseUrl/.identitySha256`,`SettingScopeSystem`、缺省空;任一为空即关闭;用户/项目层写入被 `ManagedPaths` 剥除 | `internal/settings/settings.go` |
|
||||
| 按身份挂合同 | `routeContractFor(eff, route)`:三项非空、模型名精确相等、`NormalizeRouteBaseURL(route.Base)` 成功且等于配置值、`RouteContractIdentity` 等于摘要,全部满足才挂;只看本 client 实际解析出的 (model, base),不看 `Kind` | `internal/runtime/llm.go` |
|
||||
| 5 个调用点全覆盖 | `llm.go`、`sub_loop.go`、`squad_runner.go`、`verify.go`、`workflow_compiled.go` 统一改用 `openRouteClient(route, eff)`;轻量档、视觉改模、子代理各自独立判定 | 同左 |
|
||||
| 运行记录透传 | Backend 包装器(`annotateKeyFailure`、`GuardProjectStream`、`budgetedStream` 等)原样转发事件,`CompletionBasis`/`TerminalObservation` 不丢;runmgr/store 本来不记录终态观测,无需改 | 测试断言 |
|
||||
| 快慢通道收据透传 | 评测工具按同一规则挂合同(导出薄封装 `runtime.RouteContractFor`);受保护 route 文件可选 `routeContractEOF{…}` 移入系统层;`provider-records.json` 每条记录新增 `completionBasis`,`terminalObservation` 透传 `completionBasis`/`contractCheck`,均按枚举白名单(其它值记 `unknown`,空保持空) | `internal/server/work_checkpoint_eval_test.go`(`live` tag) |
|
||||
|
||||
## 2. 验证
|
||||
|
||||
- 实施:两个 Cursor worker 单元,均经 `agent-exec apply` 快进集成。
|
||||
- `o2-i2-backend-route-contract-config`:attempt 2 success(attempt 1 是 host 把写单元包与派发并行,导致 invalid-config)。
|
||||
- `o2-i2b-eval-receipt-route-contract`:补收据透传,attempt 2 success(attempt 1 因 Cursor CLI 连接中断记为 failed-unknown)。两次重跑均经用户授权。
|
||||
- host 验证(SELF)@`16f98b8`:
|
||||
- `gofmt`、`git diff --check`、`go vet ./internal/runtime ./internal/server`(含 `-tags live`)通过。
|
||||
- `go test ./internal/runtime ./internal/settings -count=1` 通过。
|
||||
- `go test -tags live ./internal/server` 新增 4 个 `TestEvalRouteContract*` 与既有 20 个评测预算/脱敏测试全部通过。
|
||||
- CI(GATE):Backend CI 跑 `go vet ./... && go test ./...`。
|
||||
- `e1a90a5` 已 success。
|
||||
- `16f98b8` success(`ci / vet-and-test` runs/4409、`governance` runs/4410)。
|
||||
- **`live` tag 的评测测试不在 CI 内**,这部分只有 SELF 和独立评审重放。
|
||||
- 独立 Review(全新会话,只接收需求、base/head 与 diff):
|
||||
- 第 1 轮 @`e1a90a5`:PASS-with-fixes。5 条单元验收满足;指出计划 §3 的“快慢通道收据透传”缺失,由第二个单元补齐。
|
||||
- 第 2 轮 @`16f98b8`:**PASS,无阻塞项**。确认生产代码零行为变化,评测判定经真实 settings 服务与生产同源,白名单无泄漏,不匹配时失败关闭,既有断言未删减;评审者重放 `live` 评测测试与 runtime 测试均通过(REPLAY)。
|
||||
|
||||
## 3. 需人审确认与非阻塞项
|
||||
|
||||
1. **小队 agent-native 内核不挂合同**(非阻塞,失败关闭):`internal/app/app.go:350` 用主模型路由直接构造 client,不在计划列出的 5 个调用点内,行为维持今天的拒绝。若希望小队路径也享受合同放行,需另开增量。
|
||||
2. **意图生成器无合同**(无影响):`app.go:519` 不涉及工具放行。
|
||||
3. **调用点接线靠审读确认**(非阻塞):测试注入 `Stream`,没有直接执行 `Execute` 的 nil-stream 分支;判定函数与包装器透传均有直接测试。
|
||||
4. **`baseUrl` 说明措辞**(非阻塞):只写了“无查询串”,未提 fragment/userinfo 同样不匹配。
|
||||
5. **评测配置写错时静默无合同**(非阻塞,建议 P1 前处理):route 文件写了 `routeContractEOF` 但与路由不匹配时,评测按“无合同”运行(安全),但可能白花一次付费请求才发现。建议在 P1 资源方案前,把这种情况改为直接失败,且报错不带配置值。
|
||||
|
||||
## 4. 下一步(通过后)
|
||||
|
||||
1. 合入 Backend #224(组件仓,无需 #518 窗口);Dev #652 收口合入。
|
||||
2. 启动 I3:Dev 改钉 Agent-Native `2fc66be` 与 Backend 合入点,`make test` 组合验证,经 #518 窗口合入。
|
||||
3. P1 付费探针另提资源方案(预算上限、停止条件、收据路径)并单独批准;在此之前不写任何实例的系统层配置。
|
||||
+33
-10
@@ -73,18 +73,19 @@
|
||||
[AGENT-EXECUTION.md](../AGENT-EXECUTION.md) 为唯一权威;按角色声明的候选顺序在新进程与
|
||||
隔离工作区中尝试外部 Agent。不得跨单元复用同一外部进程,也不得 resume 同一次尝试。
|
||||
|
||||
实施、修复与测试的正常候选只有 Cursor、Antigravity(`agy`)和 PI。每个候选对安全可恢复失败
|
||||
最多 3 次全新尝试:`unavailable`,或外部无副作用已被机制证明的 `failed-clean`。三次仍属这类失败后才进入
|
||||
下一候选。单元包的 `network=false` 与 `external_cost=false` 只是声明,不证明外部干净;当前没有强制的
|
||||
实施、修复、测试与 Review 的候选为 Cursor、Antigravity(`agy`)、PI(GLM 与 MiniMax 两个档)和
|
||||
Codex。每个候选对安全可恢复失败最多 3 次全新尝试:`unavailable`,或外部无副作用已被机制证明的
|
||||
`failed-clean`。三次仍属这类失败后由控制器自动进入下一候选,host 不为此询问用户。
|
||||
单元包的 `network=false` 与 `external_cost=false` 只是声明,不证明外部干净;当前没有强制的
|
||||
网络/外部费用隔离或可信对账,所以已启动的失败尝试即使私有克隆可精确恢复,也记为 `failed-unknown`
|
||||
并保留现场。三个正常候选都安全耗尽后,才允许一次全新的 Codex CLI 紧急尝试;这次不按每候选 3 次计算。
|
||||
紧急尝试若仍是安全可恢复失败,运行停在 `blocked`。host 不接过该单元继续撰写。
|
||||
并保留现场。
|
||||
|
||||
Codex 平时只用于规划、方案设计、实施计划,或独立 Review。执行配置没有单独的 plan 角色;
|
||||
上述规划与设计工作可以直接使用 Codex CLI。`review` 角色的候选可以包含 Codex,并按该角色自己的
|
||||
顺序和尝试上限执行。Codex 不出现在实施、修复、测试的正常候选里;这三个角色上的一次紧急尝试是唯一例外。
|
||||
Codex 之外的候选顺序可按角色在 [AGENT-EXECUTION.md](../AGENT-EXECUTION.md) 中调整,但 Codex
|
||||
必须是每个角色的最后一个候选,不设单次紧急尝试。全部候选安全耗尽后运行停在 `unavailable` 或
|
||||
`blocked`,host 暂停该单元并询问用户是否重试,不接过该单元继续撰写。Codex 另可直接用于规划、
|
||||
方案设计、实施计划(执行配置没有单独的 plan 角色)。
|
||||
|
||||
显式 fail-stop 立即停止整次运行,不重试、不换候选、不启动紧急尝试:`failed-unknown`、
|
||||
显式 fail-stop 立即停止整次运行,不重试、不换候选:`failed-unknown`、
|
||||
`scope-expansion`、`blocked`、`cancelled`、无效配置、未对账的 Git 状态与安全失败。总超时,
|
||||
以及 stdin/stdout/stderr 都没有活动的空闲超时,归入 `failed-unknown`。
|
||||
|
||||
@@ -123,7 +124,7 @@ host 可以直接编写并提交的豁免只有 `.task/**`、`docs/superpowers/s
|
||||
`docs/superpowers/plans/**`。除此之外,host 不直接撰写实施单元。
|
||||
|
||||
安全耗尽不发出 `host-fallback-authorized`,`host_fallback_authorizations` 保持为 0。
|
||||
未配置紧急候选时终态为 unavailable 或 blocked,不授权 host 撰写实施单元。现行
|
||||
安全耗尽的终态为 unavailable 或 blocked,不授权 host 撰写实施单元。现行
|
||||
[AGENT-EXECUTION.md](../AGENT-EXECUTION.md) 的 `fallback_to_host` 是 `never`。旧值
|
||||
`all-unavailable` 仍可解析,但同样不产生 host 撰写授权。已归档任务卡里的旧表述保持原样,
|
||||
不改写成现行规则。
|
||||
@@ -461,3 +462,25 @@ post-merge 默认只提示,不因 pull 或 merge 自动提交、推送或创
|
||||
|
||||
中断或交接时记录当前有效版本、批准范围、未决假设、最新试验结论、剩余事项及下一动作。
|
||||
恢复后核对现场和授权,从最早未满足的环节续办;不重做仍有效的工作,不省略失效环节。
|
||||
|
||||
### 对话收尾交接块
|
||||
|
||||
每次结束用户任务时,最终对话回复的末尾都附一个简短、自包含的交接块,让对话上下文被清空后,
|
||||
新会话只读这一块和其中的链接就能续办。交接块只是对话层的摘要:权威仍然是任务卡、持久阶段交接
|
||||
(见[有界单元包、上下文与阶段交接](#有界单元包上下文与阶段交接))和 evidence 记录。交接块不替代
|
||||
这些记录或证据,不得把仅写在回复里的内容声称为已记录、已验证,不手抄命令输出,二者不一致时以
|
||||
任务记录为准。
|
||||
|
||||
交接块只写续办所需的最少字段,没有的内容不编造:
|
||||
|
||||
- **目标与授权范围**:本次目标、已授权的动作与写入对象、交付终点。
|
||||
- **当前状态**:已完成、进行中、阻塞或放弃;有仓库时写仓库、分支、HEAD SHA,以及 PR 和任务卡路径。
|
||||
- **关键决定**:影响后续工作的取舍及其依据。
|
||||
- **变更文件**:路径列表,或写明无变更。
|
||||
- **验证与证据状态**:执行过的检查及结果,标注 `SELF`/`GATE`/`REPLAY`,并指向任务卡里的 evidence
|
||||
记录;没有执行的写 `NOT_RUN`,无法复核的写 `[未经证实]`。
|
||||
- **未决事项**:阻塞、待决策点、已登记的非阻塞项。
|
||||
- **下一动作**:一条明确的下一步,或明确写出“已完成,无后续”。
|
||||
|
||||
没有仓库变更、也没有续办状态的工作(例如纯问答或只读解释),只写一行明确的不适用交接,例如
|
||||
`交接:不适用(无仓库变更、无续办状态)`,不为凑齐字段而填充内容。
|
||||
|
||||
@@ -11,12 +11,12 @@
|
||||
### Agent 实施收据与来源
|
||||
|
||||
每次外部实施尝试须在任务卡「Agent 实施收据」记录:配置摘要(`AGENT-EXECUTION.md` digest)、
|
||||
角色、声明候选顺序、attempt、CLI/模型、终态、transport、fallback(只表示该行是否为 Codex
|
||||
紧急尝试),以及源码外原始收据路径。初始生成状态为 `NOT_RUN`。原始事件流与超限输出保留在
|
||||
角色、声明候选顺序、attempt、CLI/模型、终态、transport、fallback(是否为应急尝试;现行配置无
|
||||
应急档,恒为否),以及源码外原始收据路径。初始生成状态为 `NOT_RUN`。原始事件流与超限输出保留在
|
||||
源码外;未知终态(`failed-unknown`)与 `scope-expansion` 的隔离工作区须保留待对账,不得静默丢弃。
|
||||
清理须有精确恢复或保留现场的可复核证据。
|
||||
|
||||
候选、尝试上限、Codex 紧急尝试、fallback、fail-stop、尝试结束条件,以及 transport/admit
|
||||
候选、尝试上限、fallback、fail-stop、尝试结束条件,以及 transport/admit
|
||||
与 host 豁免路径,以[迭代交付](delivery.md#agent-实施单元与主模型职责)为唯一权威。
|
||||
|
||||
## 启动与恢复
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
| A5 回收 | 本地命令检查;写者退出须可证明,无法证明时才请求 owner 决策 | 登记根目录、锁/操作状态、父子仓与唯一文件、合入核验 | `tests/test_task.py` |
|
||||
| A6 秘密 | 本地脱敏及 CI 获取边界;权限与宿主隔离另验 | 命令/输出/摘要脱敏,凭据不持久写 Git 配置 | `tests/test_evidence.py`、`tests/test_ci_credentials.py` |
|
||||
| A7 证据 | 本地 SELF 收据;外部来源独立核验 | 首次捕获、完整脱敏输出/摘要、对象记录、原样导入 | `tests/test_evidence.py`;CI/审阅链接另核 |
|
||||
| A8 阶段记录与迭代 | goal-first + agent-per-unit(AGENT-EXECUTION.md);模板默认连续执行,仅真实决策点需人工,没有全流程授权强制;实施/修复/测试仅 Cursor、agy、PI,每候选对安全可恢复失败最多 3 次全新尝试,全部安全耗尽后一次 Codex CLI 紧急尝试;Codex 平时仅规划、设计、计划或独立 Review;显式 fail-stop 立即停止;不限制推理时长、工具次数、规划方式或首次写文件时间;集成经成功 transport 的 agent-exec apply,或 pre-commit admit 精确内容来源;host 豁免仅为 .task/** 与 docs/superpowers/specs/**、plans/**;host 不直接实施;fallback_to_host 为 never;安全耗尽不发出 host-fallback-authorized,终态为 unavailable 或 blocked | policy/delivery.md、AGENT-EXECUTION.md;任务卡分别记录阶段状态、决策点、Agent 实施收据(配置摘要/角色/候选/attempt/CLI-模型/终态/transport/紧急尝试/源码外路径)、Review、冲突、当前 HEAD 的 CI 和合入;post-merge 默认仅提示 | `tests/test_task.py` 核对 goal-first/agent-per-unit 模板、正常路由、尝试上限、fail-stop、空闲超时与 apply/admit 来源表述,及钩子不自动写入;`scripts/agent-exec validate`(CI)与 parser·adapter·controller 假 CLI 契约(Development-Manager internal/agentexec 测试,经 deps/development-manager 钉住)为本地 SELF 强制行为;已安装 provider/model 身份待 U5,远端平台准入为 GATE;智能体核对授权范围、实施单元边界、Review、冲突及匹配 HEAD 的 CI/平台准入 |
|
||||
| A8 阶段记录与迭代 | goal-first + agent-per-unit(AGENT-EXECUTION.md);模板默认连续执行,仅真实决策点需人工,没有全流程授权强制;实施/修复/测试/Review 候选为 Cursor、agy、PI(GLM、MiniMax)与最后的 Codex,每候选对安全可恢复失败最多 3 次全新尝试并自动换候选,全部安全耗尽后暂停询问用户是否重试;显式 fail-stop 立即停止;不限制推理时长、工具次数、规划方式或首次写文件时间;集成经成功 transport 的 agent-exec apply,或 pre-commit admit 精确内容来源;host 豁免仅为 .task/** 与 docs/superpowers/specs/**、plans/**;host 不直接实施;fallback_to_host 为 never;安全耗尽不发出 host-fallback-authorized,终态为 unavailable 或 blocked | policy/delivery.md、AGENT-EXECUTION.md;任务卡分别记录阶段状态、决策点、Agent 实施收据(配置摘要/角色/候选/attempt/CLI-模型/终态/transport/fallback/源码外路径)、Review、冲突、当前 HEAD 的 CI 和合入;post-merge 默认仅提示 | `tests/test_task.py` 核对 goal-first/agent-per-unit 模板、正常路由、尝试上限、fail-stop、空闲超时与 apply/admit 来源表述,及钩子不自动写入;`scripts/agent-exec validate`(CI)与 parser·adapter·controller 假 CLI 契约(Development-Manager internal/agentexec 测试,经 deps/development-manager 钉住)为本地 SELF 强制行为;已安装 provider/model 身份待 U5,远端平台准入为 GATE;智能体核对授权范围、实施单元边界、Review、冲突及匹配 HEAD 的 CI/平台准入 |
|
||||
| A9 长期方向与后续任务 | manual;模板不校验规划有效性或自动调度任务 | policy/delivery.md;PROJECT.md 提供规划入口,任务卡关联规划/里程碑并记录下一步建议 | `tests/test_task.py` 核对生成字段与未授权默认值;智能体核对当前规划、进展、重复任务和建议依据,新任务仍不自动获得授权 |
|
||||
| A10 交付窗口 | manual;无自动互斥或接管 | [合入调度](delivery.md#合入调度)与 #518:同一目标一个最终窗口,等待分支不追 main;轮到后同步、固定、验证并由智能体合入 | 每个实际 PR 核对窗口记录、精确 HEAD 三项 GATE、Review 和合入后 main;不要求额外试行或全写者审计 |
|
||||
| A11 固定后证据 | manual 选择源码外位置;工具捕获绝对未用路径/原始输出;无 OS 冻结 | policy/governance.md;RECEIPT 捕获,后续授权闭合再原样导入 | `tests/test_evidence.py` 固定对象、权限、覆盖拒绝、原样导入与幂等 |
|
||||
|
||||
Reference in New Issue
Block a user