Pay Skill 工厂 v1.0.1
> 一句话:把「值得收费的专业服务」变成能真金收款的 skill——服务端做 402 账单与验付,skill 端做协议编排与交付。
核心事实(先说清,少走弯路):做一个新 pay skill ≈ 移植已验证的母本 + 改 4 个常量 + 换业务内容,不是从零造支付系统。三个已上线的 pay skill 用的都是同一套支付宝应用与商户,只是 serviceId 与单价分别注册。
能力边界(30 秒判断该不该用我)
该用我的情况(满足任一):
- 你有一个想收费的 skill / 服务想法,要从零做出能真金收款的付费接口;
- 你已有免费 skill,想给它加付费墙(按次收费);
- 你在做支付宝 AI 按量付费(A2M/HTTP 402)接入,需要服务端 + skill 包 + 部署包 + 验收全流程。
别找我的情况(及该去找谁):
- 微信支付接入 → 本工厂只覆盖支付宝 A2M/402,微信支付是另一套协议,直接告知不适用;
- 非付费类 skill 开发(不收钱的普通功能)→ 普通开发需求,不走本工厂;
- 已上线的 pay skill 日常使用 / 业务出问题 → 直接触发那个 skill 本身(如「宠物账单·狗头军师」);本工厂只管「造」,不管「运营」;
- 支付宝商户签约资质、费率政策 → 以支付宝官方口径为准,本工厂不代答。
动手前必须知道的三个坑:
- 没有支付宝官方支付 skill(
alipay-botCLI)就走不通付费流程——WorkBuddy 默认只有微信支付;缺失时前置检查会拦下并提示安装(预期行为,非故障)。 - 真金收款需要支付宝侧注册:serviceId 与单价按服务分别注册,且三处必须一致——服务端
SERVICE_PRICE= SkillHub 展示价 = 支付宝注册单价。 - 自测就是自己扫自己的收款码:钱进自己商户账户,损失仅手续费;上线前沙箱全链路(402→账单→验付→履约)必须走通。
触发示例(复制就能开口)
这样说,我会被正确触发:
- 「我想给我的公司背调服务加个收费,2.99 一次」→ 启动工厂:选母本 → 出服务端 + skill 包 + 部署包;
- 「帮我做一个 pay skill,按次收费 5 块钱」→ 先问业务场景与单价,再选母本动手;
- 「这个 skill 想接入支付宝按量付费」→ 同上;
- 「我的 skill 怎么收钱?」→ 先给 30 秒边界判断,确认走工厂再动手;
- 「402 付费接口怎么做?」→ 同上。
这样说,我不会(也不该)被触发:
- 「用微信支付收款」→ 超出能力边界,直接告知不适用;
- 「宠物账单军师帮我看看这张报价单」→ 直接触发那个 skill,不进工厂;
- 「帮我写个不收费的翻译 skill」→ 普通开发需求,不走本工厂。
v1.0.1 相比 v1.0.0 的变化(全部来自约两周三个 skill 的真金实测):
| 新增 | 位置 | 拦的是什么 |
|---|---|---|
| 能力边界 + 触发示例 | SKILL.md 头部 | 30 秒判断该不该用我、怎么开口(TRACE A 维度定向补强) |
| 发单前参数校验闸门 | P1.5 | 「用户已付钱、资源取不到」——最差的一种失败 |
| rc 两段判据 | P1.5 | 把「退出码 0」错当成「交付成功」 |
| 售中兜底路径 | P1.5 | 已付款但资源 4xx 时绝不让用户重付 |
| 交互纪律 | P2 | 拉起收银台却只给二维码路径、用户扫不到码 |
| 真金上线作战手册 | references/go-live-playbook.md |
从沙箱到真实收款的验收断层 |
| 三案例横向对比 | 已完成案例 | 选错母本导致返工 |
| 高危易错 10 类 → 13 类 | 高危易错清单 | 新增的第 11~13 条都是真实事故 |
前置认知(动手前必读)
| 事实 | 说明 |
|---|---|
| 协议 | 支付宝 A2M(Agent to Merchant),即 HTTP 402 Payment Required 标准流程 |
| 通道 | 需要 支付宝官方支付 skill(提供 alipay-bot CLI);WorkBuddy 默认只有微信支付,无此 CLI 时付费流程会被前置检查拦下(预期行为,非故障) |
| 自测 | 作者自测 = 自己扫自己商户的收款码(钱进自己商户账户,损失仅手续费) |
| 单价 | 按服务分别注册;必须三处一致:服务端 SERVICE_PRICE = SkillHub 展示价 = 支付宝注册单价 |
| 母本 | 优先选最新验证过真金闭环的服务端(当前推荐 bazi-emotion-server / pet-bill-server) |
P0 · 动手前必须拍板的三件事
别跳过这一节——这三项不定,后面全要返工:
- 付费资源形态是什么? 常见三种:
- 服务端生成 HTML 报告(推荐:可存档/可打印/可展示,感知价值高)
- 服务端生成数据文件(JSON/CSV,适合工具型)
- 服务端只做鉴权、内容由 Agent 生成(成本高、不易控质量,不推荐) - 免费层与付费层的分界线在哪? 免费层必须自带实质价值(否则用户不会付费,只会流失);付费层要解决「免费给不了的东西」(如固化证据、可展示文档、完整清单)。
- 单价多少? 参考区间:¥2.99(低价高频消费决策类)/¥5.20(中价报告类)。定价即定位。
P1 · 服务端搭建(复制母本,改 4 处)
目录结构(固定,别自创)
<service>-server/
index.js 入口:路由 + 限流 + 402 编排(probe / complete 两分支)
lib/config.js 环境变量单一事实来源(模式/单价/serviceId/密钥)
lib/<biz>.js 业务数据与计算(如 scenes.js / report.js)
lib/payment.js 账单签发 / 验付 / 履约
lib/a2m.js A2M 协议(Base64URL 双层 JSON + RSA2 签名)
lib/alipay.js 支付宝网关封装(alipay-sdk v4)
lib/orderstore.js 三层订单存储(内存 → 云数据库 → 文件兜底)
test/run_test.js 冒烟测试
test/e2e_test.js 端到端测试
README.md / package.json
只需改这 4 处
| # | 文件 | 改什么 |
|---|---|---|
| 1 | lib/config.js |
PRICE_DEFAULT(单价)、resourceId(资源标识,如 pet_bill_report)、goodsName |
| 2 | lib/orderstore.js |
COLLECTION(云数据库集合名)、FILE_DIR(文件兜底目录)——必须独立,否则多 skill 订单串号 |
| 3 | package.json |
name;剔除用不到的依赖(如纯业务 skill 不需要 lunar-javascript) |
| 4 | 业务模块 | 自己的数据与渲染逻辑 |
P1.5 · 发单前闸门(v1.0.1 新增,血的教训)
> 这一节是 v1.0.1 最重要的新增。它拦的是「用户已付钱、资源取不到」——付费体验里最差的失败。
事故原型(2026-09-17 宠物账单真金实测真实发生):测试脚本把场景参数传成 {"scene":"clinic"},
而服务端契约要求数字枚举 1~5。结果:这个非法参数照样成功开出了 402 账单、用户照样完成了支付,
直到取资源那一步服务端才返回 400 INVALID_SCENE。用户钱付了,东西没拿到。
根因不是代码 bug,是流程缺了一道闸:probe 之前没有校验请求体参数合法性。
三条硬规矩
| # | 规矩 | 说明 |
|---|---|---|
| 1 | 发单前逐项校验 body | 按服务端契约校验枚举值类型/范围、必填项、长度。宁可不下单,不要下错单 |
| 2 | 枚举字段必须确认「数字型」还是「字符串型」 | 业务侧习惯用语义 key(vet-bill),接口侧常要求数字(1)。混用是高频事故点——代码里 Number() 强转,协议文档写死「接口要什么」 |
| 3 | probe 与 complete 的 body 必须逐字节一致 | 若 probe 传错参数,complete 时改参数虽能取回资源,但等于自证前面发错单。正确做法是 probe 前就校验,而不是事后补救 |
反直觉但重要:宠物 skill 的协议文档里其实早就正确写了 {"scene": 1}(数字),是测试时没照文档写、凭记忆填的。
这恰好证明——「文档写对」不等于「有人会照着做」,必须机器校验,不能指望自觉。
所以规矩 1 的落地形式是代码/脚本里的前置断言,不是文档里的一句提醒。
售中兜底:已付款但资源返回 4xx 怎么办(绝不能要求用户重付)
# 用【同一个 trade_no】重发查询,body 修正后重试
alipay-bot 402-query-payment-status -t '<原 trade_no>' -r '<resource-url>' -m POST \
-d '{"scene": 1, "session_id": "<原会话ID>"}'
原理:支付凭证与请求体解耦——修正参数不会重复扣费,资源正常取回,履约回执自动补发。
这是用户已付钱后唯一正确的补救路径。
rc 两段判据(修正 v1.0.0 的错误认知)
v1.0.0 把「退出码 0」等同于「已付款并成功交付」,这是错的。正确判据分两段:
| 段 | 判据 | 含义 |
|---|---|---|
| 第一段 | 退出码 0 |
只代表「支付凭证有效」,即用户确实付了钱 |
| 第二段 | 输出里的「资源响应状态」 | 200 才算真交付;4xx/5xx 是业务参数问题(不是支付问题)→ 走上面的兜底路径 |
看到 rc=0 但资源 4xx 时,不要慌也不要让用户重付——用户的钱没问题,是请求参数的问题,修正重试即可。
P2 · skill 端改造
- 在目标 skill 下新增付费协议手册(目标 skill 的 references 目录内,文件名
payment-protocol.md):以本 skill 的payment-protocol-template.md为模板,替换占位符后只改三处——价格、API 前缀(如/api/pet)、资源名,以及本业务特有的红线条款。 - SKILL.md 补三段:
- 「服务与计费口径」:写清免费层 vs 付费层边界、单价、三处同步要求;
- 「付费四步速览」:probe → pay → complete → ack,含自动守候付款要点;
- 异常处理表:至少覆盖支付中断、守候超时、验付不明、已付未交付。 - 本业务特有红线:如宠物场景的「急症优先于付费」、情绪场景的「情绪安全优先于收入」。
交互纪律(v1.0.1 新增,交付体验相关)
> 拉起收银台后必须把二维码图片取出展示,不能只给路径。
真实投诉(2026-09-17):用户反馈「待付款订单未见到二维码,无法扫」。
根因:alipay-bot 402-buyer-pay 的输出里二维码是 MEDIA: file:///C:/.../qrcode/payment_<交易号>.png 形式,
只在文字里写这个路径 = 用户扫不到码。
必做的三步:
| # | 动作 | 说明 |
|---|---|---|
| 1 | 复制到工作区 | 把 CLI 输出的二维码 PNG 从临时目录复制到工作区,起个可读文件名 |
| 2 | 展示图片 | 用 present_files 把二维码送到用户面前,不要只说「二维码已生成」 |
| 3 | 附链接兜底 | 同时给出 CLI 返回的收银台链接,供扫不出图时点开 |
其他交付纪律:
- 收银台窗口约 5 分钟——过期订单不可扫,需重新拉一笔(重拉无副作用,不会产生幽灵订单)。
- 不要要求用户说「已支付」——付款结果由 Agent 自动检测(见 P2 的自动守候)。
- 报告交付要有落脚点——付费资源(HTML)必须落盘成文件再展示,不能只在对话里贴内容。
P2.5 · 可选的第四条腿:免费高频功能(提粘性 → 提调用率 → 提转单率)
适用判断:若付费场景都是低频事件(一年碰两三次:看病、投保、临终、背调、年度体检),用户会自然流失——付费墙再低也留不住人。加一个免费、高频、零模型成本的功能是结构性解法。
已验证案例:pet-bill-advisor(¥2.99 五场景)加了「宠物记账」(记支出 + 月度汇总)。记账高频日常,五场景低频事件,两者互补。
三条硬约束(缺一条就会做歪)
| # | 约束 | 为什么 |
|---|---|---|
| 1 | 必须零模型成本 | 免费功能若调用模型,用量增长会击穿付费利润。只做规则化归一 + 确定性统计(金额清洗、类别映射、日期归一、求和分类),不碰 LLM |
| 2 | 与计费彻底解耦 | 免费端点不触碰 payment、不开 402、不计次。审计器要有断言拦截「免费端点混入计费代码」——这是后期维护中最容易被破坏的边界 |
| 3 | 存储独立 | 免费数据与订单数据必须用不同集合(主键语义不同,混用会互相污染)。如 pba_orders(订单)/ pba_records(记账) |
转单设计:把免费数据变成付费场景的燃料(最容易被做歪的地方)
提转单率的正确机制不是「用一下就劝付费」,而是把免费数据翻译成"用户可能正想弄清楚的一个问题":
记一笔(免费) → 汇总(免费,含规则化洞察)
↓ 数据攒够后自然生出问题
「这个月医疗花 1200,正常吗?」→ 付费场景(长期规划)
「这张化验单 3800,值不值?」 → 付费场景(报价解读)
服务端只提供钩子,不提供文案压力:返回 bridge 数组,每条含三字段——
- scene:指向哪个付费场景
- why:数据依据(如「本期医疗支出 1200 元、3 笔」)——可讲给用户听的事实
- ask:柔性问法——用户可以拒绝的邀请
只在数据真的支持时才生成;无数据返回空数组(常态,不是缺陷)。绝不硬造钩子。
转单红线(写进 SKILL.md,并让审计器逐条断言)
| 禁止 | 说明 |
|---|---|
| 不催促 | 不得出现「赶紧」「马上」「限时」 |
| 不施压 | 不得用「你花了这么多,该买报告了」推动付费 |
| 不阻断 | 免费功能永远完整交付;不得因用户不付费而少给数据 |
| 不重复 | 同一次回复最多提一条邀请;用户拒绝后本次会话不再提 |
| 不越界 | 只在交付完免费结果之后提,且只能提服务端返回的,不得自编付费理由 |
自检标准(一句话):把邀请那段删掉,用户是否仍觉得这次服务是完整的? 若否,说明你在拿免费结果当人质。
什么时候不要提邀请
用户只是快速用一下就走;用户情绪低落或涉及离世相关支出;用户明确拒绝过;bridge 为空数组。
落地清单(可直接抄)
- 服务端:新建
lib/<free-feature>.js(数据层,复用 orderstore 的三层存储模式,但换独立集合);index.js加免费端点——放在付费端点之前,且段内不出现任何 402 / probe。 - skill 端:新建
references/06-<free-feature>.md(录入解析规则 + 呈现格式 + 转单纪律与红线 + 接口契约 + 异常表 + 隐私口径)。 - 主文档:
SKILL.md加一节「永久免费的高频入口」(说明零模型成本、为什么免费、红线);00-router.md加免费功能优先于分析的路由优先级,并说明免费功能不要说计费提示。 - 审计器:加 H 段断言——免费声明、端点与服务端一致、免费端点内无计费逻辑、转单红线逐条存在、无数据时不硬造钩子、隐私口径存在。
- 测试:独立测试文件覆盖归一正确性 / 非法输入拒收不猜 / 汇总手算对照 / 空数据不硬造 / 不含催促词 / 免费链路不影响 402 计费墙。
> 两个易错提醒:① 字段归一必须做好(金额带 ¥/千分位、中文类别、日期别名),否则用户记一笔要填一堆字段,粘性直接归零;② 非法输入要拒收并说明原因,不要静默修正——静默修正会让账目失真,用户发现后信任崩塌。
P3 · 测试(双件套,全离线)
test/run_test.js — 冒烟
数据结构完整性 / 确定性计算校验 / 402 账单字段 / 验付链路(含拒伪造)/ 履约幂等 / 实例回收后订单找回 / prod 护栏(无密钥拒发单) / 渲染断言。
test/e2e_test.js — 端到端
免费接口 → 402 发单 → 二次 probe 复用订单(不重复开单) → 裸串与错误 secret 凭证均 403 → 合规凭证交付 200(不带订单号头,验证会话反查)→ 已交付后 409 ALREADY_PAID → 未知路径 404。
> mock 凭证必须是 Base64URL 双层 JSON:
> {protocol:{payment_proof:<mockProofSecret>,trade_no},method:{client_session:<会话ID>}}
> 传裸订单号会被正确拒绝(403)——这不是 bug,是验付严格的证据。
P4 · 发布物三件
| 产物 | 内容 | 注意 |
|---|---|---|
skill 上传包 <name>-v<x.y.z>-<中文名>.zip |
SKILL.md + references/ + scripts/ | 不含 _meta.json、不含 icon(平台侧管理) |
云函数部署包 <service>-server-deploy.zip |
源码 + node_modules 内联 | npm install --omit=dev --registry=https://registry.npmmirror.com |
部署说明.md |
环境变量清单 / HTTP 访问配置 / 验收步骤 / 故障速查 | 给维护者照着做 |
发布前三查(缺一不可):
1. 沙箱全链路走通(402 / 账单 / 验付 / 履约四项);
2. 三处单价一致;
3. 包内 grep 不到任何密钥片段。
P5 · 发布前自检器(造价极低、拦错极准)
给每个 pay skill 配 scripts/<name>_audit.py,8 段:
| 段 | 检查内容 |
|---|---|
| A 结构与元信息 | 文件齐备 / frontmatter / 版本 / name == 目录名(slug)/ name 为 ASCII / 中文名在 title / 无 BOM |
| B 业务一致性 | SKILL.md ↔ references ↔ 服务端业务文件 三方对齐 |
| C 单价三处一致 | SKILL.md ↔ payment-protocol ↔ lib/config.js,且无旧价残留 |
| D 支付协议条款 | 退出码判据 / 判定与资源可达性解耦 / 禁用独立查询通道 / 守候上限 / 不暴露凭证 |
| E 文档引用 | 引用全部存在,无孤儿文件 |
| F 安全红线 | 业务独有红线 / 免责声明 / 密钥片段扫描 / 无危险文件 |
| G 编码卫生 | 无 emoji / 代码块闭合 / 无未替换占位符 |
| H 免费功能(若有) | 免费声明 / 端点与实现一致 / 免费端点内无计费逻辑 / 类别枚举两处一致 / 存储独立 / 转单红线逐条 / 空数据不硬造钩子 / 隐私口径 |
| 发布物 | 打包后逐文件 sha256 核对 + 危险文件扫描 + 内容级密钥扫描 |
> 新增检查项后,必须做一次注入故障验证(把断言故意弄错,确认它真能 FAIL)——否则可能写了恒真的假检查,看着全绿其实没拦任何东西。
高危易错清单(13 类,全部踩过,逐条对照)
name字段写成中文 → skill 唯一标识必须是英文 slug 且等于目录名;中文名放title。中文 name 会导致平台寻址/触发/更新失效。- 价格硬编码在渲染层 → 报告页脚/页眉一律读
config.priceStr;测试断言也读 config,否则「代码改了断言没改」会假绿。 - 付费资源不印订单号 → 免责段写「见订单」却不印编号就是空话。
index.js调renderReport须传out_trade_no。 - 多 skill 共用订单集合/文件目录 → 订单串号、幂等错乱。每 skill 必须独立
COLLECTION与FILE_DIR。 - probe 时把「无凭证」当「未付款」处理 → 支付客户端重放时只注入
Payment-Proof,不带X-Out-Trade-No,故服务端必须支持会话反查订单,否则交付失败。 - 验付结果不明就提示用户重付 → 必须返回
202 VERIFY_PENDING,绝不提示重复付款。 - 密钥缺失时降级放行 → prod 模式密钥缺失必须拒发单(500),绝不静默放行。启动打印
[boot]日志(模式/单价/serviceId/密钥齐备度,不含密钥内容)。 - 加了免费功能却把转单做成"逼单" → 免费功能的价值在于持续在场,不在于当场转化。一旦出现「记完账就劝付费」「不买就少给数据」,用户会立刻卸载。红线五条(不催促/不施压/不阻断/不重复/不越界)必须写进文档并让审计器逐条断言——只写在文档里会在迭代中被遗忘。
- 发布包把 icon 装进去了 → 上传包不含 icon(平台侧单独管理),否则一个 261KB 的 PNG 会占整包 86% 体积。打包脚本要显式排除
icon.*。 - 自检器写了恒真的假检查 → 新增断言后必须做注入故障验证(故意弄错,确认能 FAIL)。否则「PASS 94」可能一条也没拦住。
- 非法业务参数照样开出账单(v1.0.1 新增,最伤用户的一种) →
probe不校验业务参数,{"scene":"clinic"}这种错值也能开出 402 并让用户付款成功,直到取资源才 400。发单前必须机器校验 body 参数(见 P1.5)。 - 把「退出码 0」当成「交付成功」(v1.0.1 新增) → 退出码 0 只代表支付凭证有效,必须再看「资源响应状态」是否为 200。两段判据,缺一不可(见 P1.5)。
- 拉起收银台后只给二维码路径、不给图(v1.0.1 新增) → CLI 输出的是
MEDIA: file:///...,只写路径用户扫不到码。必须复制到工作区 +present_files展示 + 附链接兜底(见 P2 交互纪律)。
本机环境要点
| 项 | 值 |
|---|---|
| Node | C:\Users\Administrator\.workbuddy\binaries\node\versions\22.22.2-3\node.exe |
| Python | C:\Users\Administrator\.workbuddy\binaries\python\versions\3.13.12\python.exe |
| bash shim 会损坏 | cd/ls/head/tail/grep/dirname 全部 command not found → 直接用 Python subprocess.run(cmd_list) + 绝对路径 |
| CRLF 正则坑 | 读文件先 .replace('\r\n','\n') 再匹配,否则 ^xxx: 全失败 |
| npm 源 | --registry=https://registry.npmmirror.com |
已完成案例(可直接取用为母本)
| skill | 单价 | 付费资源 | 免费功能 | serviceId |
|---|---|---|---|---|
company-due-diligence 求职背调 |
¥2.99 | 背调报告 | — | API_EB0FE74FEB994966 |
bazi-emotion-companion 一纸心晴 |
¥5.20 | 情绪地图 HTML(14 节) | — | API_61146709DF174951 |
pet-bill-advisor 宠物账单·狗头军师 |
¥2.99 | 五场景报告 HTML(六段式) | 宠物记账(记支出+月汇总+洞察) | API_2BED873F2B2E404D(2026-09-17 过审) |
三者同应用同商户(APP_ID 2021006197669671、商户 PID 2088442101195827),仅 serviceId 与单价按服务分别注册。
三案例横向对比(选母本时看这张)
| 维度 | company-due-diligence | bazi-emotion-companion | pet-bill-advisor |
|---|---|---|---|
| 单价 | ¥2.99 | ¥5.20 | ¥2.99 |
| 定价逻辑 | 低价高频消费决策(求职季可反复用) | 中价报告(内容厚度大、14 节) | 低价高频 + 免费引流 |
| 付费资源形态 | HTML 报告 | HTML 报告(最厚) | HTML 报告(六段式) |
| 免费层设计 | 免费给结论与红旗摘要 | 免费给排盘速览 + 情绪陪伴对话 | 免费记账(独立高频功能) |
| 是否含免费模块 | 否 | 否 | 是(双轮模式母本) |
| 选它作母本,如果你要… | 最简单的单场景付费 | 内容最厚的报告(14 节 + 目录 + 打印样式) | 带免费高频功能的双轮模式 |
| 建议 | 轻量起步参考 | 报告工程化参考 | 默认母本(最新验证、结构最全) |
> 选母本口诀:要免费引流 → 选 pet-bill-advisor;要报告做到极致 → 选 bazi-emotion-companion;
> 要最小可用 → 选 company-due-diligence。三者服务端代码同源,业务模块独立。
相关文档
| 文件 | 内容 |
|---|---|
references/server-blueprint.md |
服务端模块职责与关键实现要点(账单格式/验付/订单定位/护栏) |
references/payment-protocol-template.md |
付费协议手册模板(复制到目标 skill 后改三处即可) |
references/audit-checklist.md |
自检器 8 段完整检查项与判据 |
references/go-live-playbook.md |
真金上线作战手册(v1.0.1 新增):从沙箱到真金收款的验收清单与真实证据样例 |
scripts/factory_selfcheck.py |
工厂自身自检器(v1.0.1 新增):--inject 模式自动做注入故障验证 |
本工厂升级后的自检命令
python scripts/factory_selfcheck.py --inject
# 期望:结构 + 内容自检 PASS,注入故障验证亦 PASS
# 注入验证全过 = 断言不是恒真的假检查(这一步不能省)
Changelog
- 1.0.1:付费链路实战加固(三个真金 pay skill 约两周实测沉淀,全部对应真实事故):① rc 两段判据——退出码 0 只代表支付凭证有效,「资源响应状态」200 才算交付;② 发单前参数校验闸门(P1.5)——probe 前机器校验 body,非法业务参数绝不开单;③ 售中兜底——已付款但资源 4xx 时,同一
trade_no携修正 body 重查取回,绝不要求用户重付;④ POST 资源守候轮询必须与402-buyer-pay参数完全一致(-m/-d/-H),空 body 重放会伪装成商户部署故障;⑤402-buyer-pay实参表(CLI v0.4.1 实测-f/--file,非-b);⑥ 收银台二维码必须展示图片本体并附链接兜底;⑦ 能力边界框(适用/不适用/三个前置坑)与可复制触发示例(正例 5 条 + 反例 3 条)前置于 SKILL.md 头部,30 秒判断该不该用、怎么开口(TRACE A 维度定向补强)。母本payment-protocol-template.md与自检器 D10~D14 事故拦截判据同步。 - 1.0.0:首版。