D0 正在从 reactive chatbot 走向 proactive trading agent。
Reactive 模式有天然防线:agent 分析 → 人审阅 → 人决定执行。错了能截住。
Proactive 模式下这道防线消失了。Agent 会在用户不在场时持续观察、判断、行动。错误不再是「答错一句话」,是在更大范围内能否被限制在可控边界内。
所以 Constrained Autonomy 不是 safety 副本 — 它决定 D0 能不能从「有点聪明的 bot」变成「可以安全放权的 agent」。
Peter 审计发现:爆仓 (liquidation) 没有任何用户通知、TPSL 触发完全静默、GRPS 的 sendSlack()/sendWs() 写了代码但 TODO 跳过。
Trading 侧事件发生了 (Layer 1),但根本没有管道把它推到 Agent 或用户 (Layer 2)。
Trading→Agent 事件推送管道缺失。Agent 会用过期上下文做判断。这是 Spec 里标注的 P1 根因 — Fei 七天前标出来的,至今没有 owner 在推。
Ethan 的 PR#163 (bias.mjs signal 输出) 和 Liang Han 的 PR#155 (schema 重命名 side→direction, fair_value→fair_prob) 撞了。两个人改同一个接口面,没有事先协调。
典型的 Layer 3→4 断裂:agent 推理和交易执行之间没有 typed contract。
充值地址混乱、金额受限于单链余额、不支持外部充值 — 全部是「每条链各自为战」的结果。
Layer 1 (各链资产) 和 Layer 2 (用户感知的统一账户) 之间没有聚合层。
Agent 调 Trading 工具时,80% 以上是直接 callTool 零校验。Blog 写的是「LLM should never be one function call away from moving money」,实际就是一个 function call away。
Layer 3 (推理) 直接撞进 Layer 1 (执行),中间的 Layer 4 (验证边界) 基本不存在。
3/15 sprint retro 里的跨模块信息不通模式一模一样地在本周重现:后端 Done 但前端不知道,接口改了但下游没感知,issue 只写「做什么」不写「谁受影响」。
这块信息密度高,但不适合默认整屏展开。现在按三类证据折叠:先看哪一类断裂最影响判断,再点开细证据。
用户发送任何媒体类型给 D0 bot → 报错 "Failed to download media"。根因是 TG proxy 没有 strip virtualToken 前缀,一行代码的 bug 导致所有用户的图片/语音/文件全部无法接收。PR#867 已提交但还没合并。
用户想告诉 agent 的信息(截图、语音指令)根本进不了 agent context。
用户反馈明确表示对语音输入功能有强需求。但当前语音消息根本无法接收(见证据 7),配置层面的问题让产品承诺的能力名存实亡。
Bot 执行脚本因缺少防御性解析而崩溃 — 4 种不同的崩溃模式:KeyError 'response'、list 当 dict 解析、NoneType.get()、undefined is not iterable。
API 返回了数据但格式不一致,agent 无法正确解析 → 即使 L1 有数据,L2 也消费不了。
Bot 调用 DONUT_MARKET_DISCOVERY → 连续 2 次 "Invalid arguments" 错误。Bot 传入的参数格式与 gateway schema 不匹配。工具存在但 agent 调不通。
三个独立数据源同时断裂:
· DONUT_ONCHAIN_PUMPFUN_TOKENS 工具声称存在但实际不存在(当前 canonical: PRODUCT-2720,仍在 Triage)
· ForexFactory/Investing.com 宏观日历返回 403(当前 canonical: PRODUCT-2721,已 Canceled)
· Birdeye API 用量耗尽,链上数据断流(ENG-1216,已 Done)
Agent 的「世界模型」在持续缩窄 — 它以为自己能看见的东西,实际上越来越多在返回错误。
D0 热更新没有同步 workspace skills — 老用户容器里的 d0-perps/index.md 版本过旧。不同用户看到不同版本的 agent 行为,Layer 2 感知层连一致性都没有。
Session review 中 3/3 sessions 全部命中:72 条 narration 泄漏,42 次一问多答。用户问 "BTC analysis" 收到 4 条消息,前 3 条是 "Let me load the skill…" "Now let me pull data…" 内部推理噪音。
这是「反向断裂」— Layer 3 的内部推理在往 Layer 2 的用户感知层泄漏。不只 L1→L2 断了,L3 还在往 L2 灌噪音。
内部系统控制信号 "NO_REPLY" 直接显示给用户。这是 TES-642 的回归 bug — 修过一次又回来了,说明没有系统级的 regression 防护。
DonutLabs-ai/openclaw 公开仓库包含不应公开的内部信息,需要清理。
两个 issue 说同一件事:Agent 充值后资金未自动转入交易子账户 (TES-739)、Dashboard 充值后 transferToSub 无轮询重试 (TES-740)。交易后端 (L1) 充值完成了,但 Dashboard (L2) 看不到资金。
6 项问题导致 Jupiter V2 限价单在 D0 Bot 中完全无法使用。交易能力 (L1) 存在但 agent (L2-L3) 无法调用。已修,但暴露了「后端功能上线 → bot 能力跟进」之间没有验证流程。
Docker 网络泄漏导致新 agent 创建失败 (PRODUCT-2714);自动扩容机制在突发流量下失效 (PRODUCT-2715)。Layer 1 地基层不稳 — agent 连创建都可能失败,七层全不存在。
现在的组织逻辑:
每个团队 own 自己的模块。但 Constrained Autonomy 的七层是垂直的 — 它需要有人 own 的是「层之间的接口」,不是「层本身」。
具体来说,每相邻层之间需要有人保证上游产出 = 下游消费。现在没人做这件事:
| 层间 | 上游产出什么 | 下游需要什么 | 断在哪 |
|---|---|---|---|
| L1→L2 事件管道 |
Trading 产出事件:成交、强平、TPSL、余额变动、行情 | Agent 需要:实时 context 注入、通知推送、MCP 可查询 | 事件产出了但没管道送上去(证据 1-2, 7-12, 16-17) |
| L3→L4 验证关卡 |
Agent 推理后输出:function call、交易参数、执行计划 | 系统需要:schema 校验、参数边界检查、幻觉拦截 | 187/268 工具裸透传、schema 冲突(证据 3, 5, 13-14) |
| L5→L6 策略适配 |
GRPS 输出:全局约束、风险等级、杠杆上限 | Agent 需要:按用户 profile 导出差异化行为 | GRPS 只覆盖 perps,Profile 未接入决策 |
| L7→全栈 进化回路 |
Eval/Langfuse/PostHog 输出:质量信号、成本、用户反馈 | 全栈需要:prompt 改进、模型切换、规则更新 | 多人在做但闭环未通 |
这一页本质是“谁在守哪条交接线”。先看摘要卡理解每个阶段的关键 owner 和当前断点;如果要查人,再展开阶段明细。
这一页先看现在的监控面,再按需展开审计细节。 总原则先回答“受限自治要靠哪些依赖链成立”;两张监控板再分别回答“真实状态有没有进 agent”以及“执行有没有被系统边界限制”。repo PR、窄 issue 和运行态 proof 仍然是 execution SSOT,这里只负责把 reality 收回到原则链。
| 对象 | 这张 tab 怎么用它 | 当前状态 |
|---|---|---|
| PRODUCT-2718 | parent spec / principles / dependency-chain issue;定义四个原则及其严格依赖顺序 | In Progress |
| PRODUCT-2725 | Ground Truth 原则审计板;先看 source-family coverage,再看 GT-1..GT-4 哪一段还没成立 | In Progress |
| PRODUCT-2726 | Typed Boundary 原则审计板;先看 execution-surface coverage,再看 TB-1..TB-5 哪一段还没成立 | In Progress |
| Execution SSOT | repo PR、窄 issue、runtime/eval/release proof;这张 tab 不替代它们,只负责原则收口 | External SSOT |
| Source Family | 上游 owner / repo | 要审的覆盖链 | 当前判断 |
|---|---|---|---|
| HyperLiquid | `donut-agents-backend` | orders / fills / positions / liquidations → canonical fact → ingress | 统一 publisher 基础设施已出现,但 HL → agent ingress 仍没有被单点 issue 收口 |
| Donut Perps | `donut-perpetual` | 成交 / 结算 / 强平 / funding / risk → canonical event bus | 当前最完整;`PRODUCT-1959` 在 In Review,`PRODUCT-2629 / 2670` 已转历史桥梁 |
| Onchain / Webhook | `donut-backend` | swap / transfer / limit fill / wallet 状态 → webhook / bus / trace | 链上 webhook 正在进入统一总线,但 user-facing traceability 还没被单点收口 |
| Action Outcome | `donut-backend` | `action.mcp` execute outcome → action result envelope → agent / trace | 动作结果已经被当成独立 source family;不能再混回“通知副作用”里看 |
| Pull-path Live Data | `d0-cli` + 第三方数据源 | tool result → schema / freshness / structured failure → reasoning | 这是当前最大的 active 缺口;truth contract 仍没变成 runtime 事实 |
| 要求 | 监控链 | 面向 | 当前判断 |
|---|---|---|---|
| GT-1 | `source family -> canonical fact / envelope`;先审现实源头有没有被收成机器事实 | 事实面 | Converging |
| GT-2 | `canonical fact / bus -> agent ingress`;不只问“有通知”,而是问 agent 是否有显式 ingress | 回流面 | Partial |
| GT-3 | `pull-path source -> runtime truth contract`;schema / freshness / structured failure 必须成为 runtime contract | 工具面 | Largest Gap |
| GT-4 | `fact -> user / event / execution traceability`;事实必须能绑定回 user / event / execution | 证明面 | Partial |
| Issue | 做什么 | 谁 | 进度 |
|---|---|---|---|
| PRODUCT-2725 | Ground Truth principle audit board;用 source-family coverage + GT-1..GT-4 收口 reality | Fei | In Progress |
| PRODUCT-1959 | Perps event pipeline 总设计;负责 canonical event envelope 与 consumer contract | Peter | In Review |
| PRODUCT-2629 | 历史性的 return-path gap 修复;现在更像旧桥梁已关账,而不是当前主控 issue | kevin wang | Done |
| PRODUCT-3216 | canonical executed contract + USD notional;把事实口径钉进 analytics / trace contract | Fei | In Review |
| PRODUCT-3222 | MCP result validation 主承载;阻止脏数据直接进 agent 决策 | Jin Xu | Triage |
| PRODUCT-2934 | `@Tool` 结果校验 / staleness / precision 的工程入口 | Regison | Todo |
| PRODUCT-3228 | tool / skill 静默失败的 immediate mitigation | 未指派 | Triage |
| PRODUCT-2563 | trace / observability / downstream proof;补 traceability 的主要证明面 | Justin Wu | In Progress |
| Execution Surface | 主 owner / repo | 要审的边界链 | 当前判断 |
|---|---|---|---|
| Onchain / Action Gateway | `d0-cli` + `donut-backend` | swap / transfer / limit fill / `action.mcp execute` → typed intent → validate → gate | `PRODUCT-1219` 证明 validate 能力存在,但还没变成 D0 默认主路径 |
| Donut Perps | `d0-cli` + `donut-backend` + `donut-perpetual` | 开平仓 / 调杠杆 / 风险敏感仓位动作 → hard boundary → engine | 是最能做硬边界的主场,但 amount / HIL / typed intent 仍未统一收口 |
| HyperLiquid | `donut-agents-backend` | HL order / position / exchange-side execution → pre-call / post-result boundary | `ai.Decision` 证明局部 typed decision 可以存在,但它还不是全局 typed contract |
| Wallet / Account Privileged Actions | `donut-backend` + `donut-wallet-service` | 签名 / 钱包归属 / nonce / 账户级敏感操作 → ownership / auth / hard gate | 归属校验已修,后续 wallet-service hardening 继续在证明特权路径必须显式受控 |
| 要求 | 监控链 | 当前结构判断 |
|---|---|---|
| TB-1 | `execution surface -> typed intent` | 最大的结构空洞仍在这里;还没有 D0 主路径的统一 typed intent object |
| TB-2 | `typed intent -> deterministic pre-call validation` | 局部能力已存在,但没有跨 execution surfaces 的统一 contract |
| TB-3 | `validated intent -> hard boundary -> execution engine` | 关键 exploit 已关一批,但 amount / daily quota / HIL / scope / rate / breaker 仍渠道分裂 |
| TB-4 | `execution -> post-result verification` | 结果回流在变强,但通用的 plan-vs-actual verifier 仍不存在 |
| TB-5 | `boundary path -> non-bypass proof` | proof surface 在增强,但“每条 execution surface 都不可被旁路”还没有统一证明结构 |
| Issue | 做什么 | 谁 | 进度 |
|---|---|---|---|
| PRODUCT-2726 | Typed Boundary principle audit board;用 execution-surface coverage + TB-1..TB-5 收口 reality | Fei | In Progress |
| PRODUCT-2501 | Agent-first 策略设计;理论上最终应承载 agent action semantics | Peter | Triage |
| PRODUCT-1958 | Agent Trading API 总设计;最接近 execution contract 总轮廓 | Peter | In Review |
| PRODUCT-1219 | `/action-mcp/validate` 预校验能力;能力已存在,但 issue 本身已 Done 并归档 | jim | Done |
| PRODUCT-2598 | Polymarket 9 项 pre-call risk checks;证明局部渠道可以先闭环 | Ethan | In Review |
| PRODUCT-2177 | 代码级硬边界总设计;system-enforced limit / HIL / scope / breaker 的总入口 | Jiagui | Triage |
| PRODUCT-2113 | 金额 / 日累计限额 guard;ActionMcpController 前置硬拦截 | Jiagui | Triage |
| PRODUCT-2615 | 钱包归属校验;wallet / account 特权执行面的核心 ownership 漏洞已关闭 | jim | Done |
| PRODUCT-2236 | trading-mcp-server 认证 + 执行沙箱;把高危执行面先做硬边界 | kevin wang | Done |
| PRODUCT-2618 | message role 注入防护;阻止上游 prompt 绕过边界 | kevin wang | Done |
| PRODUCT-1920 | 策略验证标签;是 post-result verification 的相邻证明层,不是 typed intent 替代 | JackJun | In Review |
| Issue | 做什么 | 谁 | 进度 |
|---|---|---|---|
| TES-721 | 跨边界 contract / QA / Trading 防线;强调防止旁路和漏测 | kevin wang | Triage |
| TES-723 | d0-evals 为中心的 QA 流程;把质量信号汇总到可判定面 | Fei | Triage |
| PRODUCT-2508 | Release Checklist 模板 | kevin wang | Done |
| PRODUCT-2509 | Release Gate 机制建设 | kevin wang | Done |
| PRODUCT-2664 | Eval ↔ E2E CI 接入发版流水线 | kevin wang | Done |
| PRODUCT-2505 | `d0-skill-eval` CI / deploy / benchmark run 流水线 | Fei | Done |
| PRODUCT-2507 | Core-30 canonical benchmark 收敛 | Fei | In Progress |
根因不是人不够 — 是各模块团队各自建自己那一段,层之间没有人保证「上游产出 = 下游消费」。
每个阶段的验收本质上是在验收「对应交接线的质量」。先让「看得清」过关,再往「想得明」走。