# 后端交接（B · relay 点 + 收口）

> A「后端就绪」（汇总契约 + scope 就绪）已在 [`feature-overview.md`](feature-overview.md) 的「→ 后端那一半（relay）」段做完；**走到产交接包这个 relay 点才 Read 本文件**。本文件只做 B：产交接包+甩出 → 联调收口 → 发布。**唯一跨出会话的是后端代码的编写权**（接手会话取 `meegle-plugin-backend` skill）；本 skill 不 Read 后端实现、不复述「怎么写」、不接收回贴的后端代码。中断只在代码编写权交出这一点，交出后本会话立即继续联调收口+发布。

## B1：产出交接包 + 甩出（跨仓、另起会话 · 这就是 relay 交接点）

照下面模板把带源契约 + 能调清单填成一整块可复制文本（`< >` 处用上下文里的真值替换，没有的字段整行删掉），**「要调的 OpenAPI」每条用接口中文名，并补上 MCP 查询关键词**（接口中文名 → 关键词 `<中文名> OpenAPI`）让接手会话照着查出入参。然后**照下面 ①② 的样子原样输出给用户**：

① 先对用户说这句交接说明：

> 把下面这一整块复制到你自己的后端仓、在那里另起一个会话执行（你常用的 AI 编码 agent 都行，不限定某一家）。后端代码在那边写——**本插件会话不写后端代码、不 Read 后端实现、也不接收回贴的后端代码**，只在后端联调出真 URL 后回来替换占位地址。

② 紧接着打印这一整块可复制文本（用户要整块复制走的就是它）：

````text
/meegle-plugin-backend 实现下面这个 Meegle 插件的后端那一半，并按结尾「执行约束」落地。

=== 插件身份 ===
插件 ID：<MII_...>
站点：<site-domain，如 https://meego.feishu.cn>
应用类型：<app_type，如 ai_node / ai_field / normal>
原始需求：<originalRequirement 原话>

=== webhook 端点 ===
点位：<pointType[pointKey]>
URL：<占位 URL，联调出公网真地址后替换>
Token：<token，CLI 生成的 36 位 UUID>

=== 要调的 OpenAPI（lpm perm list 的 granted / perm check satisfied）===
1. <接口中文名> —— <这次用它做什么>｜MCP 关键词：`<接口中文名> OpenAPI`
2. <接口中文名> —— <这次用它做什么>｜MCP 关键词：`<接口中文名> OpenAPI`

=== 前端占位（后端就绪后要对接的点）===
- <占位点，如「重试按钮」当前 alert 占位，需对接 <接口中文名> 触发节点重试>
- <占位点，如「结果展示」当前 TODO，AI 结果落地后替换 fieldKey 并读取展示>

=== 执行约束 ===
- 先召回 meegle-plugin-backend skill 取知识索引
- 每个 OpenAPI 调用照上面「要调的 OpenAPI」的 MCP 关键词查出入参 / 鉴权；webhook 验签照该 skill「webhook」段的源查
- 验签 / token / 出入参 / 写回每一处平台事实都带源（MCP doc）；查不到就停下问，不猜签名、不编造协议
- Go / Java 用官方服务端 SDK，TS / Node 逐接口查文档手写
- 联调通过（验签过 / OpenAPI 返预期 / 写回生效）后，把后端部署出的公网 webhook URL 回贴给插件会话（或自己去插件开发者后台改）
````

## B2：联调收口（拿到后端真 URL 后，回插件会话做这 4 步）

1. 后端部署出平台可达的公网 webhook URL（`lpm` 造不出，由用户 / 后端会话给）；
2. 用真 url/token 做**第 2 次 `local-config set`** 替换占位地址（走 feature 的 `stage=config`，入口 [`feature-overview.md`](feature-overview.md) 的 Stage Config——config.plan 拉远端基线建全量 draft、patch url/token → config.apply 删除闸口 + 用户明示确认；`ai_node`/`ai_field` 的 url/token 在 `diff` 里恒显 `[MODIFIED]` 是已知非阻断现象）——**或**让用户直接去插件开发者后台改 webhook URL；
3. 产品里触发该场景，看**后端日志**确认收到回调 + 写回生效；
4. 收口 → 发布。

> 这一步插件会话**只替换 webhook url/token + 看日志确认**，用不到后端代码、不 Read 后端实现。后端会话坐在自己仓里、没有 `plugin.config.json` 想自己跑 `local-config` 时：先建 config-only 工作区当身份锚 —— `lpm init <name> <pluginId> <pluginSecret> --config-only --site-domain <url>`（`<name>` 任意，固定建在 `meegle-plugin-config/`；**secret 必传**——从开发者后台拿到 secret 显式传入；前提先 `lpm login --site-domain <url>`）→ `cd meegle-plugin-config`，再用 meegle-plugin skill 走 feature 的 `stage=config` 改配置（入口 [`feature-overview.md`](feature-overview.md) 的 Stage Config，按序跑 config.plan 拉远端基线建全量 draft → config.apply 删除闸口 + 用户明示确认，全套护栏自带）。换插件同目录换 pluginId 重跑 init 自动清旧锚重建；完事删掉 `meegle-plugin-config/`（gitignored 的临时锚）。

## B3：发布

被 workflow 编排时交还 Phase 3（polish + publish）；本 skill 单独跑时引导 `lpm publish`（不可逆、需用户确认）。
