diff --git a/.task/archive/feature-fast-slow-completion-signal-eval.md b/.task/archive/feature-fast-slow-completion-signal-eval.md new file mode 100644 index 00000000..8b9a0cb1 --- /dev/null +++ b/.task/archive/feature-fast-slow-completion-signal-eval.md @@ -0,0 +1,160 @@ +# feature/fast-slow-completion-signal-eval 任务卡 + +任务主记录:PR #633 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/633;状态:已完成(合入前闭合);owner:weichen + +## 基线与授权 + +- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 46e331a7a81c94c6f5881c997ae0aca45664c830 +- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-fast-slow-completion-signal-eval(worktree);分支:feature/fast-slow-completion-signal-eval +- 分支类型:standalone;root_target:main;immediate_target:main;accepting_requirements:false +- 需求分流:verdict=NEW;selected_initiative=无;requirement_sha256=9ea2d573b0e9f5d8a54ad2fc9d07ce8363ffcdee483232c63b6f4feb8f67b430;triage_receipt=/tmp/fscs-triage-20261019.json;receipt_sha256=be542a3a92d5b61f37d470092fea2ada8773b0d55d44fc455eb772495704f2cf + +- 授权与交付终点:用户 2026-10-19 在遗留项推进中选定“快慢通道:评估是否把 tool_calls + Usage + 干净 EOF 认作该供应商的完成信号(属于口径变更)”;终点为评估文档经 Dev PR 合入并提交用户口径决策。未授权:产品代码、任何真实模型/付费请求、A01、部署。 +- 交付模式:goal-first(目标、范围和交付终点一次确认;范围内连续推进) +- 实施执行:agent-per-unit(配置:AGENT-EXECUTION.md) +- 合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入) +- 人工决策点:仅限目标/范围/验收变更、重大取舍、高后果操作或无法自动判定的业务验收 +- 当前阶段:方案设计(评估稿);当前增量:I1(评估文档) +- 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位) + +## 目标与非目标 + +- 目标:形成可复核的口径评估(证据、供应商文档、对照 r0.6 四前提、风险、O1/O2/O3 方案与验证设想),交用户决策。 +- 非目标:不改 Agent-Native/Backend 终态门禁,不新增付费请求,不改已批准的 r0.6 设计。 + +## Agent 实施收据 + +路由与 fail-stop 规则见根目录 AGENT-EXECUTION.md 与 policy/delivery.md;每次尝试一行,原始日志留在源码外收据路径。 + +| 单元 ID | 预期范围 | 配置摘要 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 | +|---|---|---|---|---|---|---|---|---|---|---| +| 不适用 | 仅 host 豁免路径 docs/superpowers/specs/** 与 .task/** | — | — | — | — | — | — | — | — | — | + +## 关联方向与规划 + +- 适用状态:适用 +- 主记录路径/版本:modules/documents/docs/proposals/2026-10-14-fast-slow-u3-r06-transport-completeness-design.md(阶段 4 已批准);.task/archive/feature-fast-slow-u2-u3-plan.md(部分收口) +- 对应里程碑:快慢通道 U3 真实模型质量(未解决) + +## 需求分析 + +| ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 | +|---|---|---|---|---|---|---| +| R1 | 评估限路由完成信号口径 | 符合:r0.6 设计第 41 行定义提出等价终态的四前提 | P1 | 评估稿含证据、供应商文档核对、四前提逐项评估、风险与 O1–O3 | 无 | 纳入 | + +## 方案与计划 + +- 方案引用:docs/superpowers/specs/2026-10-19-fast-slow-completion-signal-evaluation.md +- 实施计划引用:不适用(仅评估文档;选 O2 后另立计划) +- 测试计划引用:不适用(文档链接与 make test 由 CI 覆盖) + +## 阶段记录 + +| 阶段 | 对象版本 | 状态 | 决策/执行者 | 时间 | 依据 | +|---|---|---|---|---|---| +| 需求拆解 | R0 46e331a | 完成 | host | 2026-10-19 | 用户选定评估项 | +| 需求评估 | 待定 | 待执行 | — | — | — | +| 需求表确认 | 待定 | 待执行 | — | — | — | +| 方案设计 | 评估稿 | 完成(待用户口径决策) | host | 2026-10-19 | 本卡 R1 | +| 实施计划 | 待定 | 待执行 | — | — | — | +| 实施与自检 | 待定 | 待执行 | — | — | — | +| 正式测试与验收 | 待定 | 待执行 | — | — | — | +| 代码 Review | 待定 | 待执行 | — | — | — | +| 合入 | 待定 | 待执行 | — | — | — | +| 合入核验与收口 | 待定 | 待执行 | — | — | — | + +## 探索试验与迭代 + +| 增量/试验 | 假设 | 范围 | 判断和停止条件 | 授权/决策依据 | 结果 | 变更影响 | 需重审补测 | +|---|---|---|---|---|---|---|---| +| 不适用 | — | — | — | — | — | — | — | + +## 同步记录 + +| 节点 | sync_base_sha | tested_head_sha | checked_at | +|---|---|---|---| +| 启动 | 46e331a7a81c94c6f5881c997ae0aca45664c830 | 46e331a7a81c94c6f5881c997ae0aca45664c830 | 2026-10-19T14:28:50Z | + +## 证据(Evidence) + + +| 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) | +|---|---|---|---|---|---| + +## 交付调度 + +- 调度状态:未入队;调度记录:无 +- entry_id:无;attempt_id:无;窗口执行者:无 +- 固定候选:无(base/head、组件与相关配置引用实际尝试) +- 调度依据:policy/delivery.md#合入调度 +- 固定后证据:源码外 RECEIPT;实际结果后按授权原样导入和闭合 + +## 结果与验证 + +- 结果: +- 验证:<结论摘要 PASS/FAIL/SKIP/NOT_RUN 逐项;逐条证据由 make evidence 写入上方证据表> +- 影响与剩余项: + +## 规划进展与下一步 + +- 本次推进/剩余:待核对(依据实际成果更新适用方案/规划) +- 首选下一任务:待核对(无适用规划、已完成或受阻时如实说明,不虚构任务) +- 推荐依据:待填写 +- 前置条件/待确认:待核对 +- 预期产物/验收条件:待定义 +- 重复任务核对:待核对(已有/在途任务、PR 与规划记录) +- 启动授权:未授权(建议不自动启动新任务,仍须明确授权) + +## 合入与清理 + +- Review 记录:NOT_RUN(审阅智能体/平台身份、base/head、结论、问题闭合及重放依据) +- 冲突记录:NOT_RUN(最新目标同步、冲突处置、组合兼容核验及复审/补测) +- CI 记录:NOT_RUN(当前 HEAD 完整 SHA、全部必需检查、运行链接、执行身份及 GATE 结果) +- 合入记录:NOT_RUN(交付授权范围、PR、被核验 HEAD、合入 SHA、目标分支及内容核验) +- 清理记录:NOT_RUN(授权依据、写者退出确认、worktree/分支/任务卡处置) + + +```json +{ + "summary_schema": 1, + "source": "SELF", + "timestamp": "2026-10-19T14:28:00.109630+00:00", + "command": "make precheck", + "exit_code": 0, + "cwd": "/home/weichen/projects/Agent-System-Dev", + "before_head": "46e331a7a81c94c6f5881c997ae0aca45664c830", + "after_head": "46e331a7a81c94c6f5881c997ae0aca45664c830", + "branch": "main", + "target_branch": "main", + "target_head": "46e331a7a81c94c6f5881c997ae0aca45664c830", + "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=46e331a7a8", + "[remote] origin/main=46e331a7a8 ahead=0 behind=0", + "[tree] clean submodules_drift=0 uninit=0", + "[worktrees] linked=3", + "[recycle] merged un-recycled branches: feature/layered-python-env", + "[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] 46e331a7a8(完整:46e331a7a81c94c6f5881c997ae0aca45664c830)", + "[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": "3b728a0b62ddb071c6fcb0f74110b2a3da23e5670b2f3fd2bb4364e3217d52ba", + "receipt_sha256": "2073d669c43e38ba9881008c1dccf6040721142a6d55a55ee618b3c315781d4d", + "receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/2073d669c43e38ba9881008c1dccf6040721142a6d55a55ee618b3c315781d4d.json" +} +``` + +## 闭合记录(合入前折叠) + +- 本卡在 PR #633(https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/633)合入前闭合并归档,随该 PR 一同合入。 +- 该 PR 的合并提交即本任务的落地记录。 +- 合入后无需回填,也无需单独的闭合 PR。 diff --git a/.task/archive/fix-nonblocking-followups.md b/.task/archive/fix-nonblocking-followups.md new file mode 100644 index 00000000..13308b6d --- /dev/null +++ b/.task/archive/fix-nonblocking-followups.md @@ -0,0 +1,127 @@ +# fix/nonblocking-followups 任务卡 + +任务主记录:PR #632 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/632;状态:已完成(合入前闭合);owner:weichen + +- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 46e331a7a81c94c6f5881c997ae0aca45664c830 +- 工作区:/home/weichen/projects/Agent-System-Dev-wt-fix-nonblocking-followups(worktree);分支:fix/nonblocking-followups +- 分支类型:standalone;root_target:main;immediate_target:main;accepting_requirements:false +- 需求分流:verdict=NEW;selected_initiative=无;requirement_sha256=f2f8f52d18af5d383141e1bdd57e949cf5d64c137b10d1c1ae28bd84ca3f43fc;triage_receipt=/tmp/nonblock-triage-20261019.json;receipt_sha256=c598a12b8b6b399c7acbb8463c65b47357c513b694083ea0072e84ff4b8e8bc5 + +- 授权与交付终点:用户 2026-10-19 选定“非阻塞记录项:adminRdmSections 多余的 import、umask 0077 下失败的 TestDSNFileMode”;终点为 Backend/Frontend 修复合入各自 main,本卡经 Dev PR 闭合。Dev 不改钉:Backend main 含 IAM 联动大任务尚未经 Dev 组合验证的 U1+U3A(`3f4b34a`,其 Dev PR #628 进行中),改钉会抢先带入;两处修复不影响 Dev 组合行为,随后续正常改钉带入。 +- 交付模式:goal-first(目标、范围和交付终点一次确认;范围内连续推进) +- 实施执行:agent-per-unit(配置:AGENT-EXECUTION.md) +- 合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入) +- 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位) + +## 目标与非目标 + +- 目标:TestDSNFileMode 在任意 umask 下稳定(来源:U8 卡非阻塞项);adminRdmSections.tsx 只保留一条 `../rdmManagement` import(来源:.task/archive/feature-rdm-settings-phase1a.md)。 +- 非目标:不改生产代码与 Dev 组件指针。 + +## Agent 实施收据 + +路由与 fail-stop 规则见根目录 AGENT-EXECUTION.md 与 policy/delivery.md;每次尝试一行,原始日志留在源码外收据路径。 + +| 单元 ID | 预期范围 | 配置摘要 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 | +|---|---|---|---|---|---|---|---|---|---|---| +| nonblocking-backend-dsn-filemode-umask | Backend pkg/identity/identity_test.go | AGENT-EXECUTION.md | implementation | cursor→agy→pi | 1 | cursor | success | 965eda5(apply ff) | 无 | /tmp/leftover-20261019/nb-backend-receipt.json | +| nonblocking-frontend-merge-rdm-imports | Frontend src/components/adminRdmSections.tsx | AGENT-EXECUTION.md | implementation | cursor→agy→pi | 1 | cursor | success | 7d43ef6(apply ff) | 无 | /tmp/leftover-20261019/nb-frontend-receipt.json | + +## 同步记录 + +| 节点 | sync_base_sha | tested_head_sha | checked_at | +|---|---|---|---| +| 启动 | 46e331a7a81c94c6f5881c997ae0aca45664c830 | 46e331a7a81c94c6f5881c997ae0aca45664c830 | 2026-10-19T14:23:28Z | + +## 证据(Evidence) + + +| 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) | +|---|---|---|---|---|---| + +## 结果与验证 + +- 结果:Backend [#220](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/220) 合入 `b351fd5`(测试写文件后显式 Chmod);Frontend [#113](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/113) 合入 `259021d`(合并重复 import)。 +- 验证:R1 umask 0077 下 `go test ./pkg/identity` PASS(SELF,见证据);umask 0022 PASS(SELF 重放)。R2 vitest test/rdm-members-search.test.ts 25/25 PASS,tsc 错误集与改动前一致(借主仓 node_modules 的既有错误,SELF)。两组件 PR HEAD CI_SUCCESS(GATE)。 +- 影响与剩余项:仅测试与 import 顺序;Dev 指针未变,随后续改钉带入。 + +## 合入与清理 + +- Review 记录:host 主模型审阅 worker diff(未复用实施会话):Backend 3f4b34a..965eda5、Frontend 9baf96d..7d43ef6,结论通过,无问题;重放见验证。 +- 冲突记录:组件分支基于各自最新 main,无冲突;Dev 仅卡片变更。 +- CI 记录:Backend 965eda578609f29c7610b16ea4626afe66461beb、Frontend 7d43ef6ff76af2c83dab67cae7418b560887b49c 均 CI_SUCCESS(Gitea CI,GATE);Dev 本 PR CI 见 PR。 +- 合入记录:Backend #220 → b351fd5d084a6479495013a6dd563796ff2e8460;Frontend #113 → 259021d530cd5678e4ad329057dc14434c8c9b04(head_commit_id 固定合入)。 +- 清理记录:合入后回收组件 worktree 与分支、Dev worktree(task-finish)。 + + +```json +{ + "summary_schema": 1, + "source": "SELF", + "timestamp": "2026-10-19T14:22:32.487527+00:00", + "command": "make precheck", + "exit_code": 0, + "cwd": "/home/weichen/projects/Agent-System-Dev", + "before_head": "46e331a7a81c94c6f5881c997ae0aca45664c830", + "after_head": "46e331a7a81c94c6f5881c997ae0aca45664c830", + "branch": "main", + "target_branch": "main", + "target_head": "46e331a7a81c94c6f5881c997ae0aca45664c830", + "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=46e331a7a8", + "[remote] origin/main=46e331a7a8 ahead=0 behind=0", + "[tree] clean submodules_drift=0 uninit=0", + "[worktrees] linked=2", + "[recycle] merged un-recycled branches: feature/layered-python-env", + "[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] 46e331a7a8(完整:46e331a7a81c94c6f5881c997ae0aca45664c830)", + "[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": "4c291c66a4b4a607a984e599b2be57198f660ec0fa6fc88cfb519976b689a7f0", + "receipt_sha256": "2cd965309f73c7a30946db5f614cc187066c3dbd335607a6ec9d42a31de0f272", + "receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/2cd965309f73c7a30946db5f614cc187066c3dbd335607a6ec9d42a31de0f272.json" +} +``` + + +```json +{ + "summary_schema": 1, + "source": "SELF", + "timestamp": "2026-10-19T14:34:22.691199+00:00", + "command": "cd /home/weichen/projects/Agent-System-Backend-wt-fix-nonblocking-followups && umask 0077 && GOWORK=off go test ./pkg/identity -count=1", + "exit_code": 0, + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-fix-nonblocking-followups", + "before_head": "e4f351a25278bb94de7f9cb6c3e063ab75b62ad5", + "after_head": "e4f351a25278bb94de7f9cb6c3e063ab75b62ad5", + "branch": "fix/nonblocking-followups", + "target_branch": "main", + "target_head": "46e331a7a81c94c6f5881c997ae0aca45664c830", + "root_target": "main", + "immediate_target": "main", + "before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "output_tail": [ + "ok \tagent-system-backend/pkg/identity\t0.053s" + ], + "output_sha256": "61cc64b79c83505e0ddeaff2de8d79b148749278e802cc0cf1c5fee9da7d2242", + "receipt_sha256": "7b1326ef2daa518aa0a12171f403bba9ef6c25b99f3f40dde60a48736fd35871", + "receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/7b1326ef2daa518aa0a12171f403bba9ef6c25b99f3f40dde60a48736fd35871.json" +} +``` + +## 闭合记录(合入前折叠) + +- 本卡在 PR #632(https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/632)合入前闭合并归档,随该 PR 一同合入。 +- 该 PR 的合并提交即本任务的落地记录。 +- 合入后无需回填,也无需单独的闭合 PR。 diff --git a/docs/superpowers/specs/2026-10-19-fast-slow-completion-signal-evaluation.md b/docs/superpowers/specs/2026-10-19-fast-slow-completion-signal-evaluation.md new file mode 100644 index 00000000..2b2cca0e --- /dev/null +++ b/docs/superpowers/specs/2026-10-19-fast-slow-completion-signal-evaluation.md @@ -0,0 +1,70 @@ +# 快慢通道:MiniMax 工具流完成信号口径评估 + +- 状态:**评估稿,待用户口径决策。** 本文不授权产品代码改动、付费请求、A01 复验、合入产品变更或部署;用户选定方向后,按 policy/delivery.md 另立方案/计划评审。 +- 日期:2026-10-19;执行者:host(只读调查与文档撰写);来源等级:SELF(本地收据与当日抓取的公开文档,可按“复核方法”重放)。 +- 上下文:[r0.6 传输完整性设计](../../../modules/documents/docs/proposals/2026-10-14-fast-slow-u3-r06-transport-completeness-design.md)(已获阶段 4 批准)、[U2/U3 核验报告](../../../modules/documents/docs/reports/2026-10-13-fast-slow-u2-u3-validation.md)、归档任务卡 [feature-fast-slow-u2-u3-plan](../../../.task/archive/feature-fast-slow-u2-u3-plan.md)(部分收口:零付费机制已合入,真实模型质量未解决)。 + +## 1. 问题 + +现行门禁:工具流缺少 SSE 字面 `[DONE]` 时,工具一律不放行、不执行。当前 MiniMax-M3 路由在三次独立观察中都以“`finishReason=tool_calls` + Usage + 干净 EOF、无 `[DONE]`”结束,因此真实 A01 在该路由上无法跑通。需要决定:是否为该路由定义一个**限路由的等价完成信号**,还是保持拒绝或更换路由。 + +## 2. 已有证据 + +| 观察 | 对象 | 结果 | +|---|---|---| +| r0.4 A01 | 两次付费 run、三次调用 | 返回 `tool_calls` 与 Usage,客户端未见 `[DONE]`;工具安全拒绝 | +| r0.5 短探针 | Dev `0959e1c`,513 tokens | HTTP 200、`finishReason=tool_calls`、`clean_eof`、最后一帧 JSON 完整、Usage 存在、`StreamComplete=false`;放行/执行 0/0 | +| r0.6 短探针 | 收据 `fast-slow-u3-r06-20261019/private-probe/run-001/terminal-receipt.json`,472 tokens | HTTP/2、`framingClass=http2_stream`、`eofSeen=true`、`lengthRelation=unknown`、`finishReason=tool_calls`、Usage 存在、`toolFragments=1`、参数 28 字节且为 JSON 对象、`tailEventKind=json_frame`;`diagnosis=eof_unproven`,放行/执行 0/0 | + +三次观察一致:**缺 `[DONE]` 是该路由的稳定行为**,不是长任务或偶发中断特有的现象。r0.6 的分层观察进一步表明响应体以 HTTP/2 流正常结束,而非连接异常关闭。 + +## 3. 供应商文档核对(2026-10-19) + +- MiniMax 对话补全 OpenAPI 规范 `https://platform.minimaxi.com/docs/api-reference/text/api/openapi-chat-openai.json`(当日 WebFetch 文本 SHA-256 `d73496802f4af2b38d0a1d56afdf6ed35e4cc3a7aac44e597b355c6f8dcfe9af`): + - 流式响应声明为 `text/event-stream`,元素模式为 `ChatCompletionChunk`。 + - 流式块的 `finish_reason` 说明为“生成停止的原因,**未结束时为 null**”。 + - `stream_options.include_usage` 控制是否在流中返回用量。 + - 全文**没有出现 `[DONE]`**;流式示例以一个带 `finish_reason` 的块结束。 +- [OpenAI SDK 接入页](https://platform.minimaxi.com/docs/api-reference/text-openai-api)只给出用 SDK 迭代流的示例,未说明结束哨兵。官方 SDK 在流正常结束时停止迭代、不要求 `[DONE]`——这是对 SDK 行为的推断,**不能视为供应商对完成语义的承诺**([未经证实])。 + +结论:供应商以“`finish_reason` 非空”表示生成结束,有可核验的文档依据;但文档**未写明**是否发送 `[DONE]`、Usage 块相对 `finish_reason` 块的顺序,也没有版本化契约。 + +## 4. 对照 r0.6 已批准设计的四个前提 + +r0.6 设计规定,提出等价终态规则至少要同时满足以下四项,且满足后也只进入下一轮方案评审: + +| 前提 | 现状评估 | +|---|---| +| ① 可复核的供应商契约,说明无 `[DONE]` 时如何表示业务完成 | **部分满足**:OpenAPI 规范写明 `finish_reason` 非空即结束、全文无 `[DONE]`;缺 Usage 顺序与版本承诺 | +| ② 本地解析器能识别约定的终止形式,并有正常/截断/半帧/缺 Usage/重定向/取消的正反例 | **可零付费实现**:Agent-Native `ParseSSE` 已有 `finishReason`、Usage、帧完整性与工具片段观察,补夹具即可 | +| ③ 客户端可区分“按协议结束”与“未知关闭”,工具身份与参数完整性可验证,预算/停止门禁成立 | **基本具备**:r0.6 已能区分 `http2_stream`/`known_length`/`close_delimited`/`unknown`;工具 ID/名称/JSON 对象可校验;**尚无参数 schema 校验** | +| ④ 规则只绑定经核验的路由身份 | **可实现**:按模型名 + 主机 + 受保护路由文件哈希绑定,不泛化到其他 OpenAI 兼容服务 | + +## 5. 风险分析 + +- **截断被误判为完成**:若上游在 `finish_reason` 块之前截断,就不会出现非空 `finish_reason`,规则自然拒绝。残余风险在于供应商先发 `finish_reason`、后补参数片段——文档与三次观察都没有显示这种顺序,但也无法证伪,可通过“`finish_reason` 之后不得再有工具片段”的约束拒绝。 +- **未知关闭**:`close_delimited`、`unknown` 或读取错误无法区分正常结束与中断,必须继续拒绝。r0.6 探针属于 `http2_stream` 正常结束,不在此列。 +- **参数语义**:JSON 对象可解析不等于参数符合工具 schema。放宽终态后,参数错误会直接进入工具执行,建议同轮引入 schema 校验。 +- **供应商行为漂移**:文档无版本承诺,路由身份变化(模型、主机、路由文件哈希)必须使规则失效并回到拒绝。 + +## 6. 可选方案 + +| 方案 | 内容 | 代价 | 评估 | +|---|---|---|---| +| O1 保持拒绝 | 维持现行门禁;该路由不可用于工具流 | 零 | 最安全;真实 A01 在该路由上继续无法跑通 | +| O2 限路由等价终态 | 仅对核验过的 MiniMax 路由,在下述全部条件成立时视为完成:HTTP/2 流正常结束或已知长度且字节相符;恰好一个非空 `finish_reason=tool_calls` 块;请求开启 `include_usage` 且收到 Usage;`finish_reason` 之后无工具片段;全部工具调用 ID/名称齐全、参数为 JSON 对象并通过 schema 校验;最后一帧完整、无取消/读错。默认关闭的配置开关;终态记录单独标为 `route_contract_eof`,不与 `[DONE]` 混同 | 零付费:解析器夹具与 schema 校验;付费:1 次短工具探针 + 1 次 A01,需单独资源提案与路由文件 | **推荐进入下一轮方案评审**:前提 ①–④ 大体具备,风险可由条件组合限定 | +| O3 更换路由 | 改用已验证会发送 `[DONE]` 的模型路由 | 新模型质量基线、路由配置与资源评审 | O2 被否或供应商行为不稳定时的后备 | + +## 7. O2 的验证设想(供下一轮计划细化) + +1. 零付费:`httptest`/TLS HTTP/2 假流覆盖——有 `[DONE]`;无 `[DONE]` 但满足全部条件(放行);缺 Usage;Usage 在 `finish_reason` 之前或之后;`finish_reason` 后追加工具片段;半帧;参数非 JSON 或不符 schema;`close_delimited`/`unknown`;取消;路由身份不符(以上除第二项外均拒绝),并核对放行/执行次数与后继请求数。 +2. 付费(需另行批准):固定新候选后 1 次短工具探针,确认 `route_contract_eof` 放行且工具执行一次;再 1 次 A01 验证真实质量。预算按 r0.5/r0.6 探针(约 500 tokens)与 r0.4 A01 规模另行提案。 + +## 8. 需要用户决定 + +- 选 O1、O2 或 O3。选 O2 时,下一步是编写方案/计划(阶段 4/5 人工评审),而非直接改代码。 + +## 复核方法 + +- 探针收据:读取 `~/.local/share/agent-system-evidence/fast-slow-u3-r06-20261019/private-probe/run-001/terminal-receipt.json` 的字段(不含正文)。 +- 供应商文档:重新抓取上述 OpenAPI 规范,检索 `[DONE]`、`finish_reason`、`include_usage`;内容变化时以新抓取为准并更新本节。