[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DNGJE3ASASM693PXSG2P87":3,"skill-same:01M6DNGJE3ASASM693PXSG2P87":88},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":62,"commitSha":63,"skillDirectory":64,"forksCount":65,"repositoryHtmlUrl":66,"repositoryHomepageUrl":6,"ownerHtmlUrl":67,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":68,"install":69,"resources":81},"01M6DNGJE3ASASM693PXSG2P87","interface-lifecycle",null,"Use when designing or changing a public surface others depend on (a Rust crate pub API or trait, a Solidity external or public function, event, or storage layout, or a module boundary between services), when judging whether a change is backward compatible, or when planning a safe incremental migration or removal of consumers, state, or on-chain liquidity.","0xgleb\u002Fdotconfig","0xgleb","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F39841057?v=4","01M6DNDD83BRMM1SH4R4C6K8GY","01M6DNDDCPH33FEFB6JN6Y2GVD",2,"MIT","https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Finterface-lifecycle\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"interface lifecycle","lifecycle","use","chain","cargo","cargo semver","module","liquidity","git log","log","diff","rust","Bash","api","boundary","forge","services","state","planning","change","2026-11-10 10:12:30",false,"---\nname: interface-lifecycle\ndescription: Use when designing or changing a public surface others depend on (a Rust crate pub API or trait, a Solidity external or public function, event, or storage layout, or a module boundary between services), when judging whether a change is backward compatible, or when planning a safe incremental migration or removal of consumers, state, or on-chain liquidity.\nuser-invocable: true\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - \"Bash(cargo semver-checks *)\"\n  - \"Bash(cargo public-api *)\"\n  - \"Bash(forge inspect *)\"\n  - \"Bash(rg *)\"\n  - \"Bash(git grep *)\"\n  - \"Bash(git log *)\"\n  - \"Bash(git diff *)\"\n  - Write\n  - Edit\n---\n\nA public surface is a promise. This skill governs the whole lifecycle of\nanything others depend on — a `pub` Rust item or trait, a Solidity\n`external`\u002F`public` function, an emitted event, a storage layout, or a module\nboundary between services — from first design through additive evolution to safe\nremoval.\n\nUse it for two questions that are really the same question: \"is this change\nbackward compatible?\" and \"how do I retire this without breaking a consumer or\nstranding liquidity?\"\n\n## Stability: designing and evolving the surface\n\n1. **Enumerate the surface before you touch it.** You cannot reason about\n   compatibility you have not listed.\n   - Rust: `cargo public-api` for the full exported set; `cargo semver-checks`\n     to diff against the published version.\n   - Solidity: `forge inspect \u003CContract> abi` for external functions and events,\n     `forge inspect \u003CContract> storageLayout` for slot assignments,\n     `forge\n     inspect \u003CContract> methods` for selectors. (Confirm subcommand\n     names with `forge inspect --help`.)\n   - Module boundaries: `rg`\u002F`git grep` for every import of the boundary type.\n\n2. **Contract-first: pin the signature, then write the failing test.** Define\n   the trait method, function signature, or ABI and write a test that compiles\n   and fails against it _before_ any implementation. The type is the spec; the\n   test is the proof. No impl logic until a compiled, failing test asserts the\n   contract.\n\n3. **Apply Hyrum's Law — list the behaviors the type signature does NOT\n   capture.** With enough consumers, every observable behavior gets depended on.\n   Write down each one and treat it as a binding commitment that tests of the\n   happy path do not protect:\n   - revert\u002Ferror strings and custom-error selectors,\n   - event field order and which fields are `indexed`,\n   - ABI encoding, tuple ordering, return-value packing,\n   - default\u002Fzero values, iteration order, rounding direction,\n   - gas costs that consumers may have hard-coded.\n\n4. **Evolve additively, never by retyping or removing.**\n   - Rust: mark public enums\u002Fstructs `#[non_exhaustive]` so variants\u002Ffields can\n     grow; seal traits you do not want implemented downstream; add new optional\n     fields or new methods with defaults rather than changing existing\n     signatures.\n   - Solidity: append new storage slots only — never reorder, retype, or remove\n     an existing slot (especially behind a proxy); never change a deployed\n     `external` signature; add a new function or event instead of mutating one.\n\n5. **One-Version Rule.** Keep a single workspace version and dedup dependencies\n   — one resolved version per crate in `Cargo.lock`, deduped Nix flake inputs —\n   so consumers never face a diamond-dependency choice. Forking into two live\n   versions multiplies maintenance and is the thing you are trying to avoid.\n\n## Removal and migration: retiring the surface\n\n6. **Run the 5-question removal decision, then write an ADR and STOP.** Before\n   deprecating anything, answer:\n   1. Is it still used (and by what traffic\u002Fcall volume)?\n   2. Who depends on it — which crates, contracts, services, or counterparties?\n   3. What replaces it?\n   4. Is the migration advisory or compulsory?\n   5. What is the concrete cutover mechanism and rollback?\n\n   Record the decision as an ADR at `adrs\u002FNN-name.md`, summarize it for the\n   user, and stop for review before proceeding. Removal of a depended-on surface\n   is a significant architectural decision.\n\n7. **Build the replacement first, and prove it in production.** Never deprecate\n   toward a surface that does not yet exist and carry real load. The new path\n   must be production-proven before the old one is even marked deprecated.\n\n8. **Enumerate consumers concretely — do not estimate.**\n   - Rust: `#[deprecated(note = \"use X\")]` so `cargo build` emits a warning at\n     every call site; `rg`\u002F`git grep` to count references across the workspace.\n   - Solidity: there is no compiler to ask — read on-chain events and state, and\n     `rg` the integrating repos, to find who actually calls the function or\n     holds the position.\n\n9. **Model advisory-vs-compulsory as a discriminated union, not a boolean.** A\n   raw `bool deprecated` is boolean blindness. Represent the policy as\n   `enum Deprecation { Advisory { since }, Compulsory { since, cutover_at,\n   replacement } }`\n   (or the Solidity equivalent) so the cutover deadline and replacement are\n   unrepresentable-when-absent for compulsory removals.\n\n10. **Migrate one consumer per commit\u002FPR, with test parity.** Follow the\n    repository's existing branch workflow, keeping each consumer's tests green\n    against the new surface. For on-chain or financial cutovers use the\n    strangler pattern: stand the new path up alongside the old, shift liquidity\n    or traffic in staged increments with reconciliation between each step, or\n    ship an adapter that wraps the old ABI so callers move without a flag day.\n\n11. **Remove only behind a verify-zero-usage gate.** The old surface comes out\n    only when:\n    - `cargo build` is clean with the deprecated item deleted (no remaining call\n      sites),\n    - `rg`\u002F`git grep` shows zero references in every dependent repo,\n    - on-chain events\u002Fstate show zero traffic and zero residual position.\n\n    Then delete the code, its tests, its docs, and the deprecation notice\n    together in one commit — leaving the notice behind is its own form of rot.\n\n## Common rationalizations\n\n| Excuse                                                         | Reality                                                                                                                                                                 |\n| -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| \"Nobody depends on that revert message \u002F event ordering.\"      | Hyrum's Law: if it is observable on-chain, an integrator already parses it. It is part of the contract whether you documented it or not.                                |\n| \"It is an internal crate, it does not need a stable contract.\" | Internal consumers are consumers. A pinned boundary is what lets two agents work the two sides in parallel without coupling.                                            |\n| \"We will bump the version when we actually break something.\"   | A `pub` field removal or storage-slot retype IS the break. Run `cargo semver-checks` and find out before consumers do.                                                  |\n| \"Just reorder the storage to make the new field fit.\"          | Reordering a deployed slot corrupts every existing value behind the proxy. Append only — there is no undo on-chain.                                                     |\n| \"Deprecate it now, build the replacement later.\"               | No-advisory-forever, no replacement-later. You own it, you migrate it (the Churn Rule). A deprecation without a live replacement is just rot with a label.              |\n| \"Leave the old function for safety, it still works.\"           | Unmaintained live code is attack surface and audit cost — doubly so for financial\u002Fonchain code holding value. If it is needed later it can be rebuilt from git history. |\n| \"We can run both ABIs indefinitely.\"                           | Two live surfaces double the test matrix, the audit scope, and the reconciliation burden. Pick the One-Version Rule and finish the cutover.                             |\n\n## Red flags\n\n- A `pub` field\u002Fvariant or `external` signature changed type or vanished with no\n  major-version bump and no ADR.\n- Storage slots reordered, retyped, or removed in a contract that is (or will\n  be) behind a proxy.\n- A new `enum`\u002F`struct` exposed publicly without `#[non_exhaustive]`.\n- A breaking change merged without `cargo semver-checks` output or an ADR\n  justifying it.\n- `#[deprecated]` added with no `note`, no replacement, and no cutover date.\n- A `bool` flag named `deprecated`\u002F`legacy`\u002F`use_new` standing in for a\n  migration policy.\n- Removal commit lands while `rg` still finds call sites, `cargo build` still\n  warns, or on-chain traffic is still nonzero.\n- A long-running \"soft\" deprecation with no consumer migrated in weeks.\n- New features bolted onto the surface that is supposedly being retired.\n- A financial\u002Fon-chain cutover with no parallel run and no state reconciliation\n  step.\n\n## Hard rules\n\n- **Never change a deployed Solidity `external` signature, and never reorder or\n  retype an existing storage slot.** Append only.\n- **Never remove or retype a `pub` field\u002Fvariant without a major version bump\n  and an ADR** at `adrs\u002FNN-name.md`.\n- **No breaking change ships without `cargo semver-checks` passing, or an ADR\n  that explicitly justifies the break.**\n- **Never deprecate without a production-proven replacement** (Churn Rule: you\n  own it, you migrate it).\n- **No advisory-forever.** A compulsory deprecation carries a cutover date in\n  the type; an advisory one still has an owner and a finish line.\n- **Parallel-run plus state reconciliation before any financial or on-chain\n  cutover.** No flag-day swap of code that holds value or liquidity.\n- **Removal is one commit:** code, tests, docs, and the deprecation notice all\n  deleted together, only after the verify-zero-usage gate is green.\n\n## Failure modes\n\n- **Silent ABI break:** changed return packing or event indexing; the type\n  \"looks the same\" but integrators decode garbage. Caught by step 3 +\n  `forge\n  inspect abi` diff, never by happy-path tests.\n- **Storage collision behind a proxy:** an inserted or reordered slot overlays\n  live balances. Irreversible. Caught by `forge inspect storageLayout` diff\n  before deploy.\n- **Diamond dependency:** two live versions of a crate force a consumer to pick;\n  `Cargo.lock` shows the duplicate. Resolve via the One-Version Rule, not a\n  feature flag.\n- **Stranded liquidity \u002F state:** old contract removed or frozen while it still\n  holds a position. The reconciliation step in the strangler migration exists to\n  prevent exactly this.\n- **Zombie deprecation:** `#[deprecated]` shipped, replacement never finished,\n  call sites multiply. The ADR + Churn Rule + no-advisory-forever exist to stop\n  this.\n\n## Verification\n\n\"Seems backward compatible\" is never acceptable. Show the evidence:\n\n- **Rust additive change:** `cargo semver-checks` reports no breaking changes\n  (or the ADR is linked); `cargo public-api` diff shows only additions; the\n  contract-first failing test now passes.\n- **Rust breaking change:** the major bump is in `Cargo.toml`, the ADR exists,\n  and `cargo build` across the workspace is clean.\n- **Solidity:** `forge inspect \u003CC> storageLayout` diff shows existing slots\n  unchanged (additions only at the tail); `forge inspect \u003CC> abi` diff shows no\n  mutated selectors; `forge test` green.\n- **Mid-migration:** every migrated consumer is a green commit with test parity;\n  `rg`\u002F`git grep` shows the remaining count shrinking per PR.\n- **Removal:** `cargo build` clean with the item gone, `rg` returns zero\n  references in all dependent repos, on-chain traffic\u002Fstate for the surface\n  reads zero — and only then the single delete commit lands.\n","A public surface is a promise. This skill governs the whole lifecycle of\nanything others depend on — a `pub` Rust item or trait, a Solidity\n`external`\u002F`public` function, an emitted event, a storage layout, or a module\nboundary between services — from first design through additive evolution to safe\nremoval.\n\nUse it for two questions that are really the same question: \"is this change\nbackward compatible?\" and \"how do I retire this without breaking a consumer or\nstranding liquidity?\"\n\n## Stability: designing and evolving the surface\n\n1. **Enumerate the surface before you touch it.** You cannot reason about\n   compatibility you have not listed.\n   - Rust: `cargo public-api` for the full exported set; `cargo semver-checks`\n     to diff against the published version.\n   - Solidity: `forge inspect \u003CContract> abi` for external functions and events,\n     `forge inspect \u003CContract> storageLayout` for slot assignments,\n     `forge\n     inspect \u003CContract> methods` for selectors. (Confirm subcommand\n     names with `forge inspect --help`.)\n   - Module boundaries: `rg`\u002F`git grep` for every import of the boundary type.\n\n2. **Contract-first: pin the signature, then write the failing test.** Define\n   the trait method, function signature, or ABI and write a test that compiles\n   and fails against it _before_ any implementation. The type is the spec; the\n   test is the proof. No impl logic until a compiled, failing test asserts the\n   contract.\n\n3. **Apply Hyrum's Law — list the behaviors the type signature does NOT\n   capture.** With enough consumers, every observable behavior gets depended on.\n   Write down each one and treat it as a binding commitment that tests of the\n   happy path do not protect:\n   - revert\u002Ferror strings and custom-error selectors,\n   - event field order and which fields are `indexed`,\n   - ABI encoding, tuple ordering, return-value packing,\n   - default\u002Fzero values, iteration order, rounding direction,\n   - gas costs that consumers may have hard-coded.\n\n4. **Evolve additively, never by retyping or removing.**\n   - Rust: mark public enums\u002Fstructs `#[non_exhaustive]` so variants\u002Ffields can\n     grow; seal traits you do not want implemented downstream; add new optional\n     fields or new methods with defaults rather than changing existing\n     signatures.\n   - Solidity: append new storage slots only — never reorder, retype, or remove\n     an existing slot (especially behind a proxy); never change a deployed\n     `external` signature; add a new function or event instead of mutating one.\n\n5. **One-Version Rule.** Keep a single workspace version and dedup dependencies\n   — one resolved version per crate in `Cargo.lock`, deduped Nix flake inputs —\n   so consumers never face a diamond-dependency choice. Forking into two live\n   versions multiplies maintenance and is the thing you are trying to avoid.\n\n## Removal and migration: retiring the surface\n\n6. **Run the 5-question removal decision, then write an ADR and STOP.** Before\n   deprecating anything, answer:\n   1. Is it still used (and by what traffic\u002Fcall volume)?\n   2. Who depends on it — which crates, contracts, services, or counterparties?\n   3. What replaces it?\n   4. Is the migration advisory or compulsory?\n   5. What is the concrete cutover mechanism and rollback?\n\n   Record the decision as an ADR at `adrs\u002FNN-name.md`, summarize it for the\n   user, and stop for review before proceeding. Removal of a depended-on surface\n   is a significant architectural decision.\n\n7. **Build the replacement first, and prove it in production.** Never deprecate\n   toward a surface that does not yet exist and carry real load. The new path\n   must be production-proven before the old one is even marked deprecated.\n\n8. **Enumerate consumers concretely — do not estimate.**\n   - Rust: `#[deprecated(note = \"use X\")]` so `cargo build` emits a warning at\n     every call site; `rg`\u002F`git grep` to count references across the workspace.\n   - Solidity: there is no compiler to ask — read on-chain events and state, and\n     `rg` the integrating repos, to find who actually calls the function or\n     holds the position.\n\n9. **Model advisory-vs-compulsory as a discriminated union, not a boolean.** A\n   raw `bool deprecated` is boolean blindness. Represent the policy as\n   `enum Deprecation { Advisory { since }, Compulsory { since, cutover_at,\n   replacement } }`\n   (or the Solidity equivalent) so the cutover deadline and replacement are\n   unrepresentable-when-absent for compulsory removals.\n\n10. **Migrate one consumer per commit\u002FPR, with test parity.** Follow the\n    repository's existing branch workflow, keeping each consumer's tests green\n    against the new surface. For on-chain or financial cutovers use the\n    strangler pattern: stand the new path up alongside the old, shift liquidity\n    or traffic in staged increments with reconciliation between each step, or\n    ship an adapter that wraps the old ABI so callers move without a flag day.\n\n11. **Remove only behind a verify-zero-usage gate.** The old surface comes out\n    only when:\n    - `cargo build` is clean with the deprecated item deleted (no remaining call\n      sites),\n    - `rg`\u002F`git grep` shows zero references in every dependent repo,\n    - on-chain events\u002Fstate show zero traffic and zero residual position.\n\n    Then delete the code, its tests, its docs, and the deprecation notice\n    together in one commit — leaving the notice behind is its own form of rot.\n\n## Common rationalizations\n\n| Excuse                                                         | Reality                                                                                                                                                                 |\n| -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| \"Nobody depends on that revert message \u002F event ordering.\"      | Hyrum's Law: if it is observable on-chain, an integrator already parses it. It is part of the contract whether you documented it or not.                                |\n| \"It is an internal crate, it does not need a stable contract.\" | Internal consumers are consumers. A pinned boundary is what lets two agents work the two sides in parallel without coupling.                                            |\n| \"We will bump the version when we actually break something.\"   | A `pub` field removal or storage-slot retype IS the break. Run `cargo semver-checks` and find out before consumers do.                                                  |\n| \"Just reorder the storage to make the new field fit.\"          | Reordering a deployed slot corrupts every existing value behind the proxy. Append only — there is no undo on-chain.                                                     |\n| \"Deprecate it now, build the replacement later.\"               | No-advisory-forever, no replacement-later. You own it, you migrate it (the Churn Rule). A deprecation without a live replacement is just rot with a label.              |\n| \"Leave the old function for safety, it still works.\"           | Unmaintained live code is attack surface and audit cost — doubly so for financial\u002Fonchain code holding value. If it is needed later it can be rebuilt from git history. |\n| \"We can run both ABIs indefinitely.\"                           | Two live surfaces double the test matrix, the audit scope, and the reconciliation burden. Pick the One-Version Rule and finish the cutover.                             |\n\n## Red flags\n\n- A `pub` field\u002Fvariant or `external` signature changed type or vanished with no\n  major-version bump and no ADR.\n- Storage slots reordered, retyped, or removed in a contract that is (or will\n  be) behind a proxy.\n- A new `enum`\u002F`struct` exposed publicly without `#[non_exhaustive]`.\n- A breaking change merged without `cargo semver-checks` output or an ADR\n  justifying it.\n- `#[deprecated]` added with no `note`, no replacement, and no cutover date.\n- A `bool` flag named `deprecated`\u002F`legacy`\u002F`use_new` standing in for a\n  migration policy.\n- Removal commit lands while `rg` still finds call sites, `cargo build` still\n  warns, or on-chain traffic is still nonzero.\n- A long-running \"soft\" deprecation with no consumer migrated in weeks.\n- New features bolted onto the surface that is supposedly being retired.\n- A financial\u002Fon-chain cutover with no parallel run and no state reconciliation\n  step.\n\n## Hard rules\n\n- **Never change a deployed Solidity `external` signature, and never reorder or\n  retype an existing storage slot.** Append only.\n- **Never remove or retype a `pub` field\u002Fvariant without a major version bump\n  and an ADR** at `adrs\u002FNN-name.md`.\n- **No breaking change ships without `cargo semver-checks` passing, or an ADR\n  that explicitly justifies the break.**\n- **Never deprecate without a production-proven replacement** (Churn Rule: you\n  own it, you migrate it).\n- **No advisory-forever.** A compulsory deprecation carries a cutover date in\n  the type; an advisory one still has an owner and a finish line.\n- **Parallel-run plus state reconciliation before any financial or on-chain\n  cutover.** No flag-day swap of code that holds value or liquidity.\n- **Removal is one commit:** code, tests, docs, and the deprecation notice all\n  deleted together, only after the verify-zero-usage gate is green.\n\n## Failure modes\n\n- **Silent ABI break:** changed return packing or event indexing; the type\n  \"looks the same\" but integrators decode garbage. Caught by step 3 +\n  `forge\n  inspect abi` diff, never by happy-path tests.\n- **Storage collision behind a proxy:** an inserted or reordered slot overlays\n  live balances. Irreversible. Caught by `forge inspect storageLayout` diff\n  before deploy.\n- **Diamond dependency:** two live versions of a crate force a consumer to pick;\n  `Cargo.lock` shows the duplicate. Resolve via the One-Version Rule, not a\n  feature flag.\n- **Stranded liquidity \u002F state:** old contract removed or frozen while it still\n  holds a position. The reconciliation step in the strangler migration exists to\n  prevent exactly this.\n- **Zombie deprecation:** `#[deprecated]` shipped, replacement never finished,\n  call sites multiply. The ADR + Churn Rule + no-advisory-forever exist to stop\n  this.\n\n## Verification\n\n\"Seems backward compatible\" is never acceptable. Show the evidence:\n\n- **Rust additive change:** `cargo semver-checks` reports no breaking changes\n  (or the ADR is linked); `cargo public-api` diff shows only additions; the\n  contract-first failing test now passes.\n- **Rust breaking change:** the major bump is in `Cargo.toml`, the ADR exists,\n  and `cargo build` across the workspace is clean.\n- **Solidity:** `forge inspect \u003CC> storageLayout` diff shows existing slots\n  unchanged (additions only at the tail); `forge inspect \u003CC> abi` diff shows no\n  mutated selectors; `forge test` green.\n- **Mid-migration:** every migrated consumer is a green commit with test parity;\n  `rg`\u002F`git grep` shows the remaining count shrinking per PR.\n- **Removal:** `cargo build` clean with the item gone, `rg` returns zero\n  references in all dependent repos, on-chain traffic\u002Fstate for the surface\n  reads zero — and only then the single delete commit lands.\n",{"name":5,"description":7,"allowed-tools":48,"user-invocable":61},[49,50,51,52,53,54,55,56,57,58,59,60],"Read","Grep","Glob","Bash(cargo semver-checks *)","Bash(cargo public-api *)","Bash(forge inspect *)","Bash(rg *)","Bash(git grep *)","Bash(git log *)","Bash(git diff *)","Write","Edit",true,"master","78a61ce3053fc3d49eefd21d7051baf0c300af2d","ai\u002Fskills\u002Finterface-lifecycle",0,"https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig","https:\u002F\u002Fgithub.com\u002F0xgleb","2026-11-10 07:35:39",{"source":8,"skillName":5,"commands":70,"prompt":80,"zipAvailable":61},[71,74,77],{"tool":72,"command":73},"npx","npx skills add 0xgleb\u002Fdotconfig --skill interface-lifecycle",{"tool":75,"command":76},"bunx","bunx skills add 0xgleb\u002Fdotconfig --skill interface-lifecycle",{"tool":78,"command":79},"pnpm","pnpm dlx skills add 0xgleb\u002Fdotconfig --skill interface-lifecycle","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Finterface-lifecycle\u002FSKILL.md",[82],{"path":83,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":86,"sourceHtmlUrl":87},"index.json","REFERENCE","参考文档",649,"https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Femail\u002Fphishing\u002Faitm\u002Fdetect\u002Findex.json",[89,113,138,161,185,202],{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":43},"01M6DNKHP7NV7KR552KFZ6EW3R","worktree","Manage worktrees only for concurrent work by the owner or agents launched by the owner on the same repository, or for explicitly requested inventory and cleanup; never create one for isolation alone.","https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Fworktree\u002FSKILL.md",[],[91,96,97,98,99,100,101,102,103,104,105,106,107,35,108,109,110,111,112],"create","work","never","worktrees","manage","inventory","repository","fix","git","only","cleanup","cd","isolation","ls","for","mkdir","true",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":43},"01M6DNKEGPR8F3BA95ZMWQ48V9","unslop","Rewrite draft prose before owner-facing replies, docs, issues, PR text, handoffs, or Telegram reports to remove AI tells while preserving facts, links, tone, and authority; auto-trigger on externally visible prose, but never on code, commands, logs, tool output, quoted sources, or user text.","https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Funslop\u002FSKILL.md",[],[115,120,98,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137],"draft","pr","remove","trigger","tool","issues","auto","rewrite","code","tone","telegram","sources","links","authority","logs","facts","output","replies",{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":144,"publishedAt":43},"01M6DNK9VFNJYKB6GMA15WJ3HZ","threat-model-first","Use at the START of a change that moves money, changes balances or custody, touches access control or signing, deserializes untrusted input, adds an external or on-chain integration, or wires an LLM tool. Design-time threat modeling that turns abuse cases into the first failing tests; it precedes the post-hoc security-review pass.","https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Fthreat-model-first\u002FSKILL.md",[],[145,146,147,148,149,26,150,151,152,38,153,35,154,155,42,156,157,158,159,160],"model","threat model","threat","first","threat model first","time","security-review","design","access","cargo audit","review","audit","read","write","edit","modeling",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":170,"publishedAt":43},"01M6DNK6M72QAMH2TYVMPYJGDM","test-inspector","Auto-run for new or changed retained behavior, even without test changes, and for test, fixture, snapshot or mock changes; verify real happy-path and error-path coverage, expose false-confidence assertions and over-mocking, but do not perform general production-code correctness review.","https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Ftest-inspector\u002FSKILL.md",[167],{"categoryNo":168,"categoryName":169,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量",[171,172,173,174,126,175,35,128,155,176,157,177,178,179,180,181,182,104,183,184],"test","test inspector","fixture","do","false","run","coverage","error","number","URL","mktemp","snapshot","but","path",{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":189,"categories":190,"keywords":191,"publishedAt":43},"01M6DNK3BPN73D003FFADEWJP5","strong-typing-inspector","Lightweight review — flags primitives used where a domain type already exists (e.g. String for a USD field when Usd exists) and missed newtype opportunities.","https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Fstrong-typing-inspector\u002FSKILL.md",[],[192,193,171,194,121,195,157,196,197,104,198,199,35,200,155,201],"strong typing inspector","type","missed","domain","flags","grep","usd","gh","primitives","newtype",{"skillNo":203,"name":204,"nameZh":6,"description":205,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":206,"categories":207,"keywords":211,"publishedAt":43},"01M6DNJZHG2RK3MC4VPB9KWPYF","spec-review","Critique existing specifications and design proposals, including whether their approach or addition is justified, and refine them through adversarial Pi review and authorized author revisions. Not for code review, implementation-plan sequencing, creating a design from scratch or minor copy edits.","https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Fspec-review\u002FSKILL.md",[208],{"categoryNo":209,"categoryName":210,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000007","代码审查",[212,213,155,214,215,216,217,218,152,219,128,110,220,221,222,223,224,225,226,227],"spec review","spec","plan","critique","code review","pi","refine","implementation","sequencing","specifications","proposals","scratch","Existing","author","From Scratch","adversarial"]