[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M70FZARY5P7VRJKVFATTCVX9":3,"skill-same:01M70FZARY5P7VRJKVFATTCVX9":69},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":28,"publishedAt":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":54,"install":55,"resources":68},"01M70FZARY5P7VRJKVFATTCVX9","vendor-api-param-validation",null,"第三方 API \u002F SDK 集成开工前，强制先列参数 checklist 并对照官方文档逐项验证（名称 \u002F 类型 \u002F 必填 \u002F 默认 \u002F 上限），通过后再编码——不是「写完再调通」。Use when 新接 vendor API\u002FSDK（Slack \u002F LongPort \u002F freee \u002F LLM API 等）、既有集成追加新 endpoint 或新字段、用户说「调通某接口」「接入 X」「集成 X」。","KarryViber\u002FOrb","KarryViber","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F223777671?v=4","01M70FTGZ485AP97T3CJCYW1Z2","Karryz","01M70FTGZRWF3FEQBYZ3JWTSPR",66,"MIT","https:\u002F\u002Fgithub.com\u002FKarryViber\u002FOrb\u002Fblob\u002Fmain\u002Fprofiles\u002F.claude\u002Fskills\u002Fvendor-api-param-validation\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41],"validation","api","vendor","vendor api param validation","slack","sdk","endpoint","文档","user","use","checklist","llm api","when","2026-11-10 10:12:30",false,"---\nname: vendor-api-param-validation\ndescription: 第三方 API \u002F SDK 集成开工前，强制先列参数 checklist 并对照官方文档逐项验证（名称 \u002F 类型 \u002F 必填 \u002F 默认 \u002F 上限），通过后再编码——不是「写完再调通」。Use when 新接 vendor API\u002FSDK（Slack \u002F LongPort \u002F freee \u002F LLM API 等）、既有集成追加新 endpoint 或新字段、用户说「调通某接口」「接入 X」「集成 X」。\nprovenance: user-authored\n---\n\n# Vendor API 参数前置验证\n\n## When to Use（满足任一）\n\n- 新接 vendor API \u002F SDK：Slack \u002F LongPort \u002F freee \u002F Anthropic \u002F OpenAI \u002F AWS \u002F Google API 等\n- 既有集成追加新 endpoint \u002F 新字段\n- 用户说「调通 X 接口」「接入 X」「集成 X 服务」「这个接口怎么调」\n- 准备开始写第一行调用代码前\n\n## Workflow\n\n### 1. 列参数 checklist（编码前）\n\n按 endpoint 列表格：\n\n| 字段 | 位置 | 类型 | 必填 | 默认 | 上限 \u002F 取值 | 来源页 |\n|------|------|------|------|------|-------------|--------|\n| `channel` | body | string | Y | — | C\u002FD\u002FG prefix | \u003Cdoc URL> |\n| `text` | body | string | Y* | — | ≤4000 chars | \u003Cdoc URL> |\n\n`位置` = path \u002F query \u002F header \u002F body \u002F form。`必填` 标 Y\u002FN\u002Fconditional。`来源页` 必须是 vendor 官方文档 URL，不是 SDK README \u002F blog。\n\n### 2. 对照 source of truth\n\n- ✅ vendor 官方 API reference（developer portal \u002F docs.vendor.com）\n- ❌ Stack Overflow \u002F blog \u002F 第三方 SDK README \u002F 老 issue\n- 三方资源只能作辅助，最终以 vendor 官方页为准\n\n### 3. 发现歧义立刻问\n\n- 文档没说必填？→ 问，不要按经验填默认\n- 类型模糊（string vs enum）？→ 问 \u002F 翻 vendor changelog\n- 上限不明（max length \u002F rate limit）？→ 翻 docs，找不到就构造测试探测一次再记录\n\n### 4. checklist 完成才开始编码\n\n跳过 checklist 直接写代码 = 把 debug 时间从「编码前 5 分钟」推到「编码后 30 分钟 + 已 commit + 已被引用」。\n\n## 为什么\n\n编码后才发现参数差异 → 已经写了引用 \u002F 已经 debug 过 \u002F 已经 commit → 返工成本远高于前置验证。\n\nvendor 文档是唯一 source of truth：\n- SDK wrapper 有滞后（vendor 改了字段，SDK 没跟）\n- blog 容易过期（写于旧版本）\n- Stack Overflow 答案常基于错误前提\n\n## Gotchas\n\n- ❌ 用 SDK 类型定义当 source of truth——SDK 字段可能比 API 少 \u002F 字段名 snake_case vs camelCase 转换\n- ❌ 跳过「条件必填」验证——LongPort `replace_order` 的 `quantity` 在 ELO 单和 LO 单条件不同\n- ❌ Slack `filesUploadV2` 的 `channels` vs `channel_id` 历史改名，老文档还写 `channels`\n- ❌ 信任 vendor 错误码文档——很多 vendor 实际返回的 error 字段比 doc 列的多 \u002F 少；要拿真实 sandbox 探一次\n- ❌ 不验证 rate limit \u002F size limit → 上线后 burst 触发 429 \u002F 413 才发现\n\n## 与其他 skill 的关系\n\n- `truth-ladder` → 验证后说「checklist 已完成」是 attempted，调通一次拿到响应是 observed，跑过完整流程才是 confirmed\n- `execution-discipline` § Fail-fast \u002F 边界处悲观 → 本 skill 是「边界处悲观」在 vendor API 边界的具体落地\n- `slack-cli-api-reference` \u002F `longport-*` 等工具类 skill → 用本 skill 验证后的 checklist 落到对应 vendor 的工具类 skill 里沉淀\n","# Vendor API 参数前置验证\n\n## When to Use（满足任一）\n\n- 新接 vendor API \u002F SDK：Slack \u002F LongPort \u002F freee \u002F Anthropic \u002F OpenAI \u002F AWS \u002F Google API 等\n- 既有集成追加新 endpoint \u002F 新字段\n- 用户说「调通 X 接口」「接入 X」「集成 X 服务」「这个接口怎么调」\n- 准备开始写第一行调用代码前\n\n## Workflow\n\n### 1. 列参数 checklist（编码前）\n\n按 endpoint 列表格：\n\n| 字段 | 位置 | 类型 | 必填 | 默认 | 上限 \u002F 取值 | 来源页 |\n|------|------|------|------|------|-------------|--------|\n| `channel` | body | string | Y | — | C\u002FD\u002FG prefix | \u003Cdoc URL> |\n| `text` | body | string | Y* | — | ≤4000 chars | \u003Cdoc URL> |\n\n`位置` = path \u002F query \u002F header \u002F body \u002F form。`必填` 标 Y\u002FN\u002Fconditional。`来源页` 必须是 vendor 官方文档 URL，不是 SDK README \u002F blog。\n\n### 2. 对照 source of truth\n\n- ✅ vendor 官方 API reference（developer portal \u002F docs.vendor.com）\n- ❌ Stack Overflow \u002F blog \u002F 第三方 SDK README \u002F 老 issue\n- 三方资源只能作辅助，最终以 vendor 官方页为准\n\n### 3. 发现歧义立刻问\n\n- 文档没说必填？→ 问，不要按经验填默认\n- 类型模糊（string vs enum）？→ 问 \u002F 翻 vendor changelog\n- 上限不明（max length \u002F rate limit）？→ 翻 docs，找不到就构造测试探测一次再记录\n\n### 4. checklist 完成才开始编码\n\n跳过 checklist 直接写代码 = 把 debug 时间从「编码前 5 分钟」推到「编码后 30 分钟 + 已 commit + 已被引用」。\n\n## 为什么\n\n编码后才发现参数差异 → 已经写了引用 \u002F 已经 debug 过 \u002F 已经 commit → 返工成本远高于前置验证。\n\nvendor 文档是唯一 source of truth：\n- SDK wrapper 有滞后（vendor 改了字段，SDK 没跟）\n- blog 容易过期（写于旧版本）\n- Stack Overflow 答案常基于错误前提\n\n## Gotchas\n\n- ❌ 用 SDK 类型定义当 source of truth——SDK 字段可能比 API 少 \u002F 字段名 snake_case vs camelCase 转换\n- ❌ 跳过「条件必填」验证——LongPort `replace_order` 的 `quantity` 在 ELO 单和 LO 单条件不同\n- ❌ Slack `filesUploadV2` 的 `channels` vs `channel_id` 历史改名，老文档还写 `channels`\n- ❌ 信任 vendor 错误码文档——很多 vendor 实际返回的 error 字段比 doc 列的多 \u002F 少；要拿真实 sandbox 探一次\n- ❌ 不验证 rate limit \u002F size limit → 上线后 burst 触发 429 \u002F 413 才发现\n\n## 与其他 skill 的关系\n\n- `truth-ladder` → 验证后说「checklist 已完成」是 attempted，调通一次拿到响应是 observed，跑过完整流程才是 confirmed\n- `execution-discipline` § Fail-fast \u002F 边界处悲观 → 本 skill 是「边界处悲观」在 vendor API 边界的具体落地\n- `slack-cli-api-reference` \u002F `longport-*` 等工具类 skill → 用本 skill 验证后的 checklist 落到对应 vendor 的工具类 skill 里沉淀\n",{"name":5,"provenance":47,"description":7},"user-authored","main","cb33813b8990e4602b7c2d501659f77ebba5999f","profiles\u002F.claude\u002Fskills\u002Fvendor-api-param-validation",8,"https:\u002F\u002Fgithub.com\u002FKarryViber\u002FOrb","https:\u002F\u002Fgithub.com\u002FKarryViber","2026-05-14 18:44:03",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add KarryViber\u002FOrb --skill vendor-api-param-validation",{"tool":61,"command":62},"bunx","bunx skills add KarryViber\u002FOrb --skill vendor-api-param-validation",{"tool":64,"command":65},"pnpm","pnpm dlx skills add KarryViber\u002FOrb --skill vendor-api-param-validation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FKarryViber\u002FOrb\u002Fblob\u002Fmain\u002Fprofiles\u002F.claude\u002Fskills\u002Fvendor-api-param-validation\u002FSKILL.md",true,[],[70,102,114,133,146,174],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":74,"licenseFileUrl":75,"sourceHtmlUrl":76,"categories":77,"keywords":84,"publishedAt":42},"01M70G0637CFCHAY3DYTMYS07K","webapp-testing","Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.","Apache-2.0","https:\u002F\u002Fgithub.com\u002FKarryViber\u002FOrb\u002Fblob\u002Fmain\u002Fprofiles\u002F.claude\u002Fskills\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FKarryViber\u002FOrb\u002Fblob\u002Fmain\u002Fprofiles\u002F.claude\u002Fskills\u002Fwebapp-testing\u002FSKILL.md",[78,81],{"categoryNo":79,"categoryName":80,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":82,"categoryName":83,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101],"webapp","testing","webapp testing","ui","screenshots","with","behavior","web","playwright","for","applications","local","frontend","debugging","toolkit","logs","browser",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":42},"01M70FZXCJ5AHJ3JW2Q12F04TA","vendor-doc-actionability","对外合作文档（交付文档 \u002F POC 文档 \u002F Solution Doc \u002F 提案书）必须为每个「需对方执行」的动作写清具体操作入口（URL \u002F 工单系统 \u002F 脚本路径 \u002F 联系人 + 联系方式 \u002F 步骤编号）。Use when 给客户、vendor、合作方写交付文档、POC 文档、Solution Doc、提案书；或检视已有对外文档是否抽象到无法执行。","https:\u002F\u002Fgithub.com\u002FKarryViber\u002FOrb\u002Fblob\u002Fmain\u002Fprofiles\u002F.claude\u002Fskills\u002Fvendor-doc-actionability\u002FSKILL.md",[],[31,109,110,38,36,111,112,41,113,37],"doc","vendor doc actionability","poc","提案","URL",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":121,"publishedAt":42},"01M70FYW81TRN7VAS8WTN08STH","truth-ladder","状态放行三层阶梯（attempted \u002F observed \u002F confirmed）—— 汇报任务、API、命令、消息或外部动作状态时强制分层，避免把\"动作已发起\"误写成\"结果已达成\"。Use when 准备写「任务已完成」「API 返回成功」「exit code 0」「用户已收到」「ok:true」类状态汇报；或在 cron 报告 \u002F Slack 回报 \u002F project status \u002F receipt 中表达完成度时。","https:\u002F\u002Fgithub.com\u002FKarryViber\u002FOrb\u002Fblob\u002Fmain\u002Fprofiles\u002F.claude\u002Fskills\u002Ftruth-ladder\u002FSKILL.md",[120],{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[122,123,124,125,30,126,41,38,127,128,33,129,130,131,132],"ladder","truth ladder","exit","cron","code","true","project status","project","ok","报告","status",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":139,"publishedAt":42},"01M70FYTESF5WQYBVRX8BXYJQF","thread-object-realignment","长 thread 切题后的对象重定协议——thread 历史 ≥5 条且检测到切题信号时，回复前必做「用户最后显式问题对象 vs 待发回复对象」一致性校验，不一致则改写或反问。Use when Slack thread 历史 ≥5 条且当前用户消息出现切题信号（主题词突变、问句指向新实体、时间线跳跃、出现「另外」「话说」「回到 X」「换个话题」等切题语，或 ≥3 turn 后用户显式问题对象与最近 assistant 回复对象不同）。","https:\u002F\u002Fgithub.com\u002FKarryViber\u002FOrb\u002Fblob\u002Fmain\u002Fprofiles\u002F.claude\u002Fskills\u002Fthread-object-realignment\u002FSKILL.md",[],[140,141,142,33,143,38,144,41,145,37],"object","thread","thread object realignment","校验","assistant","slack thread",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":74,"licenseFileUrl":150,"sourceHtmlUrl":151,"categories":152,"keywords":156,"publishedAt":42},"01M70FYFC1Y2J16FJFEFQ5WYRE","theme-factory","Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors\u002Ffonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly.","https:\u002F\u002Fgithub.com\u002FKarryViber\u002FOrb\u002Fblob\u002Fmain\u002Fprofiles\u002F.claude\u002Fskills\u002Ftheme-factory\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FKarryViber\u002FOrb\u002Fblob\u002Fmain\u002Fprofiles\u002F.claude\u002Fskills\u002Ftheme-factory\u002FSKILL.md",[153],{"categoryNo":154,"categoryName":155,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",[157,158,159,160,161,90,162,163,99,164,165,166,167,168,169,94,170,171,172,173],"theme","theme factory","factory","themes","artifact","fonts","can","apply","artifacts","you","generate","pages","landing","slides","SET","fly","styling",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":180,"publishedAt":42},"01M70FXZ7DTCA3VKYZD1VJ1GKG","terse-intent-classifier","短指令作用层判定协议——对 ≤15 字、含指代词或动词型短指令（改\u002F删\u002F切\u002F跑\u002F停\u002F加）或元问句（更优雅\u002F更好\u002F有没有办法）的输入，先判层再动手。Use when 用户消息 ≤15 字且含「这个\u002F那个\u002F上面\u002F刚才\u002F它」指代，或形如「改一下」「删掉它」「跑一下」「有没有更优雅的方法」「切回 X」这类省略了对象或意图的短输入。","https:\u002F\u002Fgithub.com\u002FKarryViber\u002FOrb\u002Fblob\u002Fmain\u002Fprofiles\u002F.claude\u002Fskills\u002Fterse-intent-classifier\u002FSKILL.md",[],[181,182,183,184,41,38],"intent","classifier","terse","terse intent classifier"]