[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M70FV6Q08J70YVG1AVCSHYEM":3,"skill-same:01M70FV6Q08J70YVG1AVCSHYEM":58},{"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":18,"publishedAt":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":37,"commitSha":38,"skillDirectory":39,"forksCount":40,"repositoryHtmlUrl":41,"repositoryHomepageUrl":6,"ownerHtmlUrl":42,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":43,"install":44,"resources":57},"01M70FV6Q08J70YVG1AVCSHYEM","commit-lineage",null,"commit message 必带 lineage 锚点——若改动来自 spec \u002F lesson \u002F 决策原文，message 必须引用源路径。Use when 准备 git commit、用户说「提交」「commit」「频繁 commit」、或起草 commit message 时。","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\u002Fcommit-lineage\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30],"commit","lineage","commit lineage","spec","git commit","git","commit message","user","use","lesson","message","when","2026-11-10 10:12:30",false,"---\nname: commit-lineage\ndescription: commit message 必带 lineage 锚点——若改动来自 spec \u002F lesson \u002F 决策原文，message 必须引用源路径。Use when 准备 git commit、用户说「提交」「commit」「频繁 commit」、或起草 commit message 时。\nprovenance: user-authored\n---\n\n# Commit Lineage\n\n每次 commit 把代码改动反向锚定到 spec \u002F lesson \u002F 决策原文，长期可审计「为什么这行长这样」。\n\n借鉴 Yansu traceable lineage 原则：每行代码都该能追溯到引发它的需求或决策。\n\n## When to Use\n\n- 准备执行 `git commit` 时\n- 起草 commit message 时\n- 用户说「提交」「commit」「先 commit 一下」\n\n## 规则\n\ncommit message 末尾按需追加 lineage 行，使用以下锚点：\n\n| 锚点 | 何时用 | 例 |\n|------|--------|-----|\n| `Spec:` | 改动来自 `workspace\u002Fspecs\u002F*.md` 的实施 | `Spec: specs\u002Fdm-routing.md#实施步骤-3` |\n| `Lesson:` | 改动是为了规避某条踩坑复盘 | `Lesson: lessons\u002Fslack-stream-chunk-semantics.md` |\n| `Decision:` | 改动来自架构决策原文（CLAUDE.md \u002F soul \u002F spec 的 Decision Log） | `Decision: CLAUDE.md#Worker-IPC-Protocol` |\n| `Issue:` | 改动是为了修复一个 issue \u002F 用户报告的 bug | `Issue: 2026-04-25 Karry 反馈 cron 卡死` |\n| `Followup:` | 来自之前 commit 的遗留 TODO | `Followup: 40b358a` |\n\n**没有源头的改动**（探索性 \u002F 临时调试 \u002F 重构）不强制带 lineage，但 message 主体要写清「为什么」。\n\n## 模板\n\nconventional commits + lineage 行：\n\n```\n{type}({scope}): {简述}\n\n{可选 body}\n\nSpec: specs\u002Fxxx.md[#section]\nLesson: lessons\u002Fyyy.md\n```\n\n## 例子\n\n**好**：\n```\nfeat(execplan): 加 ## 验收场景 段\n\n借鉴 Yansu scenario-simulation，spec 草稿后增加 Karry 拍板 gate。\n\nSpec: specs\u002Fyansu-borrow.md\nDecision: CLAUDE.md#Surgical-Changes\n```\n\n**好**（无源头但 why 清晰）：\n```\nfix(worker): typo 导致 inject 失败\n\n变量名 `injectId` 写成 `injetId`。\n```\n\n**坏**（有 spec 来源但没引用）：\n```\nfeat: 新增场景段\n```\n\n## Gotchas\n\n- **不要**为了凑 lineage 编造来源——没源头的改动主体写清 why 即可\n- **不要**把 lineage 行写在 message 第一行（影响 oneline 可读性），只放末尾\n- 引用 lessons 时用相对路径 `lessons\u002Fxxx.md`，不要绝对路径（commit history 跨机器看也能 grep）\n- spec 引用最好带 `#anchor` 锚到具体段，否则 spec 长了找不到\n- 多源头时一个锚点一行，不要堆在同一行\n\n## 反模式\n\n- :x: 每个 commit 都硬塞 lineage（没源头就别加）\n- :x: `Spec: see above` \u002F `Lesson: 见之前讨论`（不可追溯）\n- :x: lineage 写在 message 主标题里\n","# Commit Lineage\n\n每次 commit 把代码改动反向锚定到 spec \u002F lesson \u002F 决策原文，长期可审计「为什么这行长这样」。\n\n借鉴 Yansu traceable lineage 原则：每行代码都该能追溯到引发它的需求或决策。\n\n## When to Use\n\n- 准备执行 `git commit` 时\n- 起草 commit message 时\n- 用户说「提交」「commit」「先 commit 一下」\n\n## 规则\n\ncommit message 末尾按需追加 lineage 行，使用以下锚点：\n\n| 锚点 | 何时用 | 例 |\n|------|--------|-----|\n| `Spec:` | 改动来自 `workspace\u002Fspecs\u002F*.md` 的实施 | `Spec: specs\u002Fdm-routing.md#实施步骤-3` |\n| `Lesson:` | 改动是为了规避某条踩坑复盘 | `Lesson: lessons\u002Fslack-stream-chunk-semantics.md` |\n| `Decision:` | 改动来自架构决策原文（CLAUDE.md \u002F soul \u002F spec 的 Decision Log） | `Decision: CLAUDE.md#Worker-IPC-Protocol` |\n| `Issue:` | 改动是为了修复一个 issue \u002F 用户报告的 bug | `Issue: 2026-04-25 Karry 反馈 cron 卡死` |\n| `Followup:` | 来自之前 commit 的遗留 TODO | `Followup: 40b358a` |\n\n**没有源头的改动**（探索性 \u002F 临时调试 \u002F 重构）不强制带 lineage，但 message 主体要写清「为什么」。\n\n## 模板\n\nconventional commits + lineage 行：\n\n```\n{type}({scope}): {简述}\n\n{可选 body}\n\nSpec: specs\u002Fxxx.md[#section]\nLesson: lessons\u002Fyyy.md\n```\n\n## 例子\n\n**好**：\n```\nfeat(execplan): 加 ## 验收场景 段\n\n借鉴 Yansu scenario-simulation，spec 草稿后增加 Karry 拍板 gate。\n\nSpec: specs\u002Fyansu-borrow.md\nDecision: CLAUDE.md#Surgical-Changes\n```\n\n**好**（无源头但 why 清晰）：\n```\nfix(worker): typo 导致 inject 失败\n\n变量名 `injectId` 写成 `injetId`。\n```\n\n**坏**（有 spec 来源但没引用）：\n```\nfeat: 新增场景段\n```\n\n## Gotchas\n\n- **不要**为了凑 lineage 编造来源——没源头的改动主体写清 why 即可\n- **不要**把 lineage 行写在 message 第一行（影响 oneline 可读性），只放末尾\n- 引用 lessons 时用相对路径 `lessons\u002Fxxx.md`，不要绝对路径（commit history 跨机器看也能 grep）\n- spec 引用最好带 `#anchor` 锚到具体段，否则 spec 长了找不到\n- 多源头时一个锚点一行，不要堆在同一行\n\n## 反模式\n\n- :x: 每个 commit 都硬塞 lineage（没源头就别加）\n- :x: `Spec: see above` \u002F `Lesson: 见之前讨论`（不可追溯）\n- :x: lineage 写在 message 主标题里\n",{"name":5,"provenance":36,"description":7},"user-authored","main","cb33813b8990e4602b7c2d501659f77ebba5999f","profiles\u002F.claude\u002Fskills\u002Fcommit-lineage",8,"https:\u002F\u002Fgithub.com\u002FKarryViber\u002FOrb","https:\u002F\u002Fgithub.com\u002FKarryViber","2026-05-14 18:44:03",{"source":8,"skillName":5,"commands":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add KarryViber\u002FOrb --skill commit-lineage",{"tool":50,"command":51},"bunx","bunx skills add KarryViber\u002FOrb --skill commit-lineage",{"tool":53,"command":54},"pnpm","pnpm dlx skills add KarryViber\u002FOrb --skill commit-lineage","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FKarryViber\u002FOrb\u002Fblob\u002Fmain\u002Fprofiles\u002F.claude\u002Fskills\u002Fcommit-lineage\u002FSKILL.md",true,[],[59,93,107,130,149,162],{"skillNo":60,"name":61,"nameZh":6,"description":62,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":63,"licenseFileUrl":64,"sourceHtmlUrl":65,"categories":66,"keywords":75,"publishedAt":31},"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",[67,72],{"categoryNo":68,"categoryName":69,"taxonomyType":70,"taxonomyTypeDesc":71},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":73,"categoryName":74,"taxonomyType":70,"taxonomyTypeDesc":71},"01JBSEEDCAT000000000000009","前端开发",[76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92],"webapp","testing","webapp testing","playwright","screenshots","ui","behavior","web","for","with","browser","logs","toolkit","debugging","frontend","local","applications",{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":31},"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",[],[100,101,102,103,104,27,105,30,106,26],"vendor","doc","vendor doc actionability","poc","文档","提案","URL",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":121,"publishedAt":31},"01M70FZARY5P7VRJKVFATTCVX9","vendor-api-param-validation","第三方 API \u002F SDK 集成开工前，强制先列参数 checklist 并对照官方文档逐项验证（名称 \u002F 类型 \u002F 必填 \u002F 默认 \u002F 上限），通过后再编码——不是「写完再调通」。Use when 新接 vendor API\u002FSDK（Slack \u002F LongPort \u002F freee \u002F LLM API 等）、既有集成追加新 endpoint 或新字段、用户说「调通某接口」「接入 X」「集成 X」。","https:\u002F\u002Fgithub.com\u002FKarryViber\u002FOrb\u002Fblob\u002Fmain\u002Fprofiles\u002F.claude\u002Fskills\u002Fvendor-api-param-validation\u002FSKILL.md",[113,116],{"categoryNo":114,"categoryName":115,"taxonomyType":70,"taxonomyTypeDesc":71},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":117,"categoryName":118,"taxonomyType":119,"taxonomyTypeDesc":120},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[122,123,100,124,125,126,127,104,128,27,30,26,129],"vendor api param validation","validation","api","slack","sdk","llm api","checklist","endpoint",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":137,"publishedAt":31},"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",[136],{"categoryNo":117,"categoryName":118,"taxonomyType":119,"taxonomyTypeDesc":120},[138,139,140,124,141,30,27,142,143,144,145,146,147,125,148],"ladder","truth ladder","ok","code","exit","true","status","报告","cron","project","project status",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":155,"publishedAt":31},"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",[],[156,157,158,125,159,26,160,30,161,27],"object","thread","thread object realignment","校验","slack thread","assistant",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":63,"licenseFileUrl":166,"sourceHtmlUrl":167,"categories":168,"keywords":172,"publishedAt":31},"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",[169],{"categoryNo":170,"categoryName":171,"taxonomyType":70,"taxonomyTypeDesc":71},"01JBSEEDCAT000000000000015","视觉设计",[173,174,175,176,177,178,179,180,85,181,182,88,183,184,185,186,187,84,188,189],"theme factory","factory","theme","apply","styling","fly","generate","artifact","fonts","can","artifacts","you","themes","pages","landing","slides","SET"]