feat(mcp/envoy): 使者回传闭环——回执 + 三端回传入口 #28

Merged
lanrtop merged 2 commits from feat/governance-feedback-loop into master 2026-10-03 00:44:04 +08:00
Owner

目的

蓝图 governance-feedback-loop「缺口① 治理反馈入口」。修两个问题:

  • 回传只进不出:list_envoy_returns 没有处置状态,LIMIT 50 把更早的回传静默挤掉;处理过的 59 条一直挂在「待处理」里。
  • 只有 Claude 能回传:入口只有 /envoy 斜杠命令。enterprise 8 月下旬主力转向 DSH/Codex 后,回传降到零。

改动

  • src-tauri/src/envoy.rs(新):业务本体,连接由调用方注入。db.rs 的 migrate() 新增 envoy_dispositions 回执表。
  • MCP:
    • report_envoy_return:项目级,三端在项目地址上都能用。字段做枚举校验,内容压成单行并限长,兜底拒绝明显的凭据。同项目 1 天内同内容、且未处置时幂等返回原编号(IMMEDIATE 事务)。写入后复用 append_project_note 的档案双写。
    • resolve_envoy_return:控制面。landed/carded 必须填落点,reason 必填,允许更正。
    • list_envoy_returns:默认只列未处置(带编号),附已处置计数;超出展示上限时明说;改用 LEFT JOIN,不再丢掉登记已删项目的回传;include_resolved 可审计回执。
  • 接入包:
    • lian-jing skill 新增「遇到摩擦时回传炼境」一节,三端共用。
    • /envoy 改为指向该入口的薄指引,保留扫描与分类硬门槛;身份改读 .lian-jing/context.json。
    • AGENTS 托管块加一行指路,版本 1.9.0→1.10.0。
    • 能力包 base-onboarding 1.6.0→1.7.0。
  • 删除炼境仓库内 Codex 迁移遗留的 .agents/skills/source-command-envoy。它读旧身份文件、走旧写入路径。
  • 文档同步:project-context.yaml、project-brief.md、AGENTS.md、agents-meta-rules.md。

设计取舍(审查后)

  • 服务端 instructions 规定「写操作需用户确认」,与「自然回传」冲突。因此在工具描述、skill 和 AGENTS 指路里写明:回传只追加一条信号,不必逐条征得用户同意。
  • 硬门槛原本会吞掉「只在本项目复现」的模板 bug。现在炼境分发物本身出错时免过门槛,scope 填 this_project。
  • 新的两个工具 schema 单独放在 envoy_tool_schemas():主清单的 json! 已触达宏递归上限,不抬高全局 recursion_limit。

自验

  • cargo test --locked:266 通过、0 失败,其中新增 11 个。
    • envoy 本体 9 个:写入格式、非法输入、幂等与复发、改名与 1 天窗口、凭据拦截、处置与更正、超限与孤儿。
    • MCP 层 2 个:scoped 目录可见性与注解;dispatch 往返——项目地址回传 → 全局列表带编号与客户端 → 项目地址处置被拒 → 控制面处置后不再列出。
  • 对抗审查两路:Rust 实现(全量测试连跑 3 次稳定),契约与模板措辞。所有采纳项都已修,详见蓝图卡。
  • pnpm typecheck 通过。
  • 只读核对真实库:使者回传恰好 59 条(#77–#150),无孤儿。

没验什么

  • CI 不跑 Rust:本 PR 的 CI 只覆盖前端 typecheck/test 与提交信息校验,Rust 测试只有本地证据。
  • 真实炼境上的三端探针还没做:要等合并后主仓库 tauri dev 重编译生效,再在 enterprise 里让 Claude、Codex、DSH 各回传一条。
  • 59 条历史补录还没执行:脚本与复核清单已就绪,合并上线后经 MCP 执行。
  • 「自然回传」是否真的发生:只能靠人在 DSH/Codex 日常会话终验。skill 按需加载、AGENTS 指路是否足以触发,没有自动化证据。
  • 子项目还拿不到新模板:要重跑 apply_onboarding_pack;本 PR 不做分发。
  • 凭据拦截只覆盖私钥头和常见令牌前缀,其余情况靠描述约束。

🤖 Generated with Claude Code

## 目的 蓝图 governance-feedback-loop「缺口① 治理反馈入口」。修两个问题: - **回传只进不出**:`list_envoy_returns` 没有处置状态,`LIMIT 50` 把更早的回传静默挤掉;处理过的 59 条一直挂在「待处理」里。 - **只有 Claude 能回传**:入口只有 `/envoy` 斜杠命令。enterprise 8 月下旬主力转向 DSH/Codex 后,回传降到零。 ## 改动 - `src-tauri/src/envoy.rs`(新):业务本体,连接由调用方注入。`db.rs` 的 `migrate()` 新增 `envoy_dispositions` 回执表。 - MCP: - `report_envoy_return`:项目级,三端在项目地址上都能用。字段做枚举校验,内容压成单行并限长,兜底拒绝明显的凭据。同项目 1 天内同内容、且未处置时幂等返回原编号(IMMEDIATE 事务)。写入后复用 `append_project_note` 的档案双写。 - `resolve_envoy_return`:控制面。landed/carded 必须填落点,reason 必填,允许更正。 - `list_envoy_returns`:默认只列未处置(带编号),附已处置计数;超出展示上限时明说;改用 LEFT JOIN,不再丢掉登记已删项目的回传;`include_resolved` 可审计回执。 - 接入包: - lian-jing skill 新增「遇到摩擦时回传炼境」一节,三端共用。 - `/envoy` 改为指向该入口的薄指引,保留扫描与分类硬门槛;身份改读 `.lian-jing/context.json`。 - AGENTS 托管块加一行指路,版本 1.9.0→1.10.0。 - 能力包 base-onboarding 1.6.0→1.7.0。 - 删除炼境仓库内 Codex 迁移遗留的 `.agents/skills/source-command-envoy`。它读旧身份文件、走旧写入路径。 - 文档同步:`project-context.yaml`、`project-brief.md`、`AGENTS.md`、`agents-meta-rules.md`。 ## 设计取舍(审查后) - 服务端 instructions 规定「写操作需用户确认」,与「自然回传」冲突。因此在工具描述、skill 和 AGENTS 指路里写明:回传只追加一条信号,不必逐条征得用户同意。 - 硬门槛原本会吞掉「只在本项目复现」的模板 bug。现在炼境分发物本身出错时免过门槛,scope 填 `this_project`。 - 新的两个工具 schema 单独放在 `envoy_tool_schemas()`:主清单的 `json!` 已触达宏递归上限,不抬高全局 `recursion_limit`。 ## 自验 - `cargo test --locked`:266 通过、0 失败,其中新增 11 个。 - envoy 本体 9 个:写入格式、非法输入、幂等与复发、改名与 1 天窗口、凭据拦截、处置与更正、超限与孤儿。 - MCP 层 2 个:scoped 目录可见性与注解;dispatch 往返——项目地址回传 → 全局列表带编号与客户端 → 项目地址处置被拒 → 控制面处置后不再列出。 - 对抗审查两路:Rust 实现(全量测试连跑 3 次稳定),契约与模板措辞。所有采纳项都已修,详见蓝图卡。 - `pnpm typecheck` 通过。 - 只读核对真实库:使者回传恰好 59 条(#77–#150),无孤儿。 ## 没验什么 - **CI 不跑 Rust**:本 PR 的 CI 只覆盖前端 typecheck/test 与提交信息校验,Rust 测试只有本地证据。 - **真实炼境上的三端探针还没做**:要等合并后主仓库 tauri dev 重编译生效,再在 enterprise 里让 Claude、Codex、DSH 各回传一条。 - **59 条历史补录还没执行**:脚本与复核清单已就绪,合并上线后经 MCP 执行。 - **「自然回传」是否真的发生**:只能靠人在 DSH/Codex 日常会话终验。skill 按需加载、AGENTS 指路是否足以触发,没有自动化证据。 - **子项目还拿不到新模板**:要重跑 `apply_onboarding_pack`;本 PR 不做分发。 - **凭据拦截只覆盖私钥头和常见令牌前缀**,其余情况靠描述约束。 🤖 Generated with [Claude Code](https://claude.com/claude-code)
lanrtop added 2 commits 2026-10-03 00:17:42 +08:00
回传只进不出:list_envoy_returns 无处置状态、LIMIT 50 把更早的回传静默挤掉;
入口只有 Claude /envoy,08-23 后 enterprise 主力转 DSH/Codex 即零回传。

- envoy.rs 业务本体(连接注入)+ envoy_dispositions 回执表(migrate 补表)
- report_envoy_return(项目级,Claude/Codex/DSH 在项目地址均可用):字段枚举校验、
  内容压单行限长、兜底拒绝明显凭据;同项目 1 天内同内容未处置幂等返回原编号
  (IMMEDIATE 事务防并发重复);复用 append_project_note 的档案双写
- resolve_envoy_return(控制面):landed/carded 必填落点、reason 必填、允许更正
- list_envoy_returns 默认只列未处置(带编号),附已处置计数,超出展示上限明说;
  LEFT JOIN 不再丢掉登记已删项目的回传;include_resolved 可审计回执
- lian-jing skill 新增「遇到摩擦时回传炼境」;/envoy 改为指向该入口的薄指引
  (保留扫描与分类硬门槛,炼境分发物出错免门槛,身份改读 .lian-jing/context.json);
  AGENTS 托管块加一行指路(1.9.0→1.10.0),能力包 base-onboarding 1.6.0→1.7.0
- 删除炼境仓库内 Codex 迁移遗留的 source-command-envoy 技能(读旧身份文件、走旧写入路径)
- 契约与架构文档同步:project-context.yaml、project-brief.md、AGENTS.md、agents-meta-rules.md

Rules-Applied: R05,R06,R12
Feature-Confirmed: true

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(blueprint/governance-feedback-loop): 缺口① 立卡使者回传闭环,记录实现、审查与自验,进行中
All checks were successful
Push & PR Check / check (push) Successful in 1m30s
Push & PR Check / check (pull_request) Successful in 1m2s
c6ebc2d775
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lanrtop merged commit f948c4c802 into master 2026-10-03 00:44:04 +08:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: lanrtop/dev-manager-tauri#28
No description provided.