[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DNDG86RVDASNMBRMQXQPAR":3,"skill-same:01M6DNDG86RVDASNMBRMQXQPAR":80},{"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":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":59,"commitSha":60,"skillDirectory":61,"forksCount":62,"repositoryHtmlUrl":63,"repositoryHomepageUrl":6,"ownerHtmlUrl":64,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":65,"install":66,"resources":79},"01M6DNDG86RVDASNMBRMQXQPAR","adr",null,"Use to write, record, or supersede a confirmed significant or expensive-to-reverse architectural decision; if intent or alternatives are still unclear, use `shape-work` or `architect` first, and do not use this for implementation-plan or code review.","0xgleb\u002Fdotconfig","0xgleb","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F39841057?v=4","01M6DNDD83BRMM1SH4R4C6K8GY","01M6DNDDCPH33FEFB6JN6Y2GVD",3,"MIT","https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Fadr\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",[5,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"commit","supersede","alternatives","for","reverse","ls","work","record","review","log","code","git log","Bash","use","git commit","decision","code review","diff","do","2026-11-10 10:12:30",false,"---\nname: adr\ndescription: Use to write, record, or supersede a confirmed significant or expensive-to-reverse architectural decision; if intent or alternatives are still unclear, use `shape-work` or `architect` first, and do not use this for implementation-plan or code review.\nallowed-tools:\n  - \"Bash(ls adrs*)\"\n  - \"Bash(git add adrs\u002F*)\"\n  - \"Bash(git status *)\"\n  - \"Bash(git log *)\"\n  - \"Bash(git diff *)\"\n  - \"Bash(git commit *)\"\n  - \"Read\"\n  - \"Write\"\n  - \"Edit\"\n  - \"Glob\"\n  - \"Grep\"\n---\n\n# ADR\n\nRecords a significant architectural decision at `adrs\u002FNN-name.md`, surfaces it\nfor review, and keeps authorized work moving on a separate commit or child\nbranch. The ADR remains `Proposed` until a reviewer accepts it; drafting it\ncreates a review point, not an implicit pause.\n\n## When this applies\n\nWrite an ADR for decisions that are significant **and** expensive to reverse:\n\n- Settlement \u002F atomicity model, on-chain finality assumptions, reorg handling.\n- Contract upgrade strategy (proxy vs immutable), storage layout, trust\n  boundaries.\n- A type-level invariant that shapes a whole module (how invalid states are made\n  unrepresentable, which newtypes carry which guarantees).\n- Nix architecture: import-from-derivation, flake input pinning strategy, purity\n  tradeoffs, cross-platform (darwwwin vs nixxxos) split.\n- A dependency or external-contract assumption the rest of the system will lean\n  on.\n\nSkip the ADR for trivial, easily reversible choices (a local helper's shape, a\ntest fixture name, a lint config tweak). Those belong in the code and the commit\nmessage, not in `adrs\u002F`.\n\n## Core process\n\n1. **Locate `adrs\u002F` at the repo root** and read what is already there.\n   ```bash\n   ls adrs\n   ```\n   If the directory does not exist yet, create it by writing the first record at\n   `adrs\u002F01-name.md` (match whatever zero-padding width the team later settles\n   on; default to two digits).\n\n2. **Compute the next index** matching the existing files' zero-padded width.\n   Use `Glob` for `adrs\u002F*.md`, take the highest numeric prefix, add one, and\n   keep the same width (e.g. after `07-...` comes `08-...`, not `8-...`). Never\n   reuse or renumber an existing index.\n\n3. **Confirm it is not already settled and is genuinely significant.** `Grep`\n   `adrs\u002F` for the topic before drafting — if an Accepted ADR already covers it,\n   you are either following it (no new ADR) or superseding it (step 7).\n   Reversible, low-blast-radius choices do not get an ADR.\n\n4. **Scaffold the record** at `adrs\u002FNN-name.md` using the template below. Status\n   starts `Proposed`. Write the Context in domain terms — the actual constraints\n   (settlement atomicity, on-chain finality, nix purity \u002F\n   import-from-derivation, the type-level invariant at stake), not generic\n   platitudes.\n\n5. **Link the GitHub issue.** If no issue exists yet and the decision warrants\n   one, say so rather than inventing a link.\n\n6. **Surface the review point and preserve implementation authority.** Summarize\n   the decision and alternatives and link `adrs\u002FNN-name.md`. Use the current\n   native `openai-codex\u002Fgpt-6.1-sol` reviewer. Model selection does not grant\n   approval, publication or implementation authority.\n\n   Continue already-authorized reversible implementation under the owner's\n   standing advisory workflow, keeping it in a later commit or child branch. If\n   the decision itself remains genuinely unresolved and prevents safe work,\n   obtain that decision before building the new direction; do not infer it from\n   unrelated activity. The ADR remains `Proposed` until accepted. Follow the\n   repository's draft\u002Fready workflow rather than changing PR state by model.\n\n7. **On reversal, write a NEW ADR.** Never edit or delete an Accepted ADR.\n   Create `adrs\u002FMM-name.md` that references the old one, then flip only the old\n   record's `Status:` line to `Superseded by adrs\u002FMM-name.md`. The historical\n   rationale stays intact.\n\n8. **Commit as a small increment** on the active feature branch using the\n   verified repository workflow. Match the repo's commit style first. The\n   following example applies only to plain-Git checkouts:\n   ```bash\n   git log --oneline -10\n   git add adrs\u002FNN-name.md\n   git commit -m \"\u003Cmessage matching repo style>\"\n   ```\n   Prefer GitButler in an existing managed main worktree and plain Git\n   elsewhere, subject to explicit repository-local workflow instructions.\n\n## ADR template\n\n```markdown\n# NN. \u003CShort decision title>\n\n- Status: Proposed\n- Date: YYYY-MM-DD\n- Issue: \u003CGitHub issue link>\n\n## Context\n\n\u003CThe forces at play in domain terms: the invariant that must hold, the\nsettlement or finality constraint, the nix purity tradeoff, the type-level\nguarantee we need. State the problem and the desired end state — not the diff.>\n\n## Decision\n\n\u003CThe approach chosen, stated plainly. What we will do.>\n\n## Alternatives Considered\n\n### \u003CAlternative A>\n\n- Pros: \u003C...>\n- Cons: \u003C...>\n- Rejected because: \u003Cthe concrete reason this loses against the Decision>\n\n### \u003CAlternative B>\n\n- Pros: \u003C...>\n- Cons: \u003C...>\n- Rejected because: \u003C...>\n\n## Consequences\n\n\u003CWhat becomes easier and what becomes harder. New constraints the codebase now\ncarries, follow-up work, and the blast radius if this turns out wrong.>\n```\n\n## Common rationalizations\n\n| Excuse                                              | Reality                                                                                                                                 |\n| --------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |\n| \"An ADR is overhead, I'll just build it.\"           | A 15-minute record kills a 3-hour re-litigation of settlement model or proxy-vs-immutable months later, when no one remembers why.      |\n| \"The types are self-documenting.\"                   | The type system encodes _what_ is enforced; it cannot show which alternatives were rejected or why on-chain finality forced this shape. |\n| \"It's obvious, there's only one sane choice.\"       | If it is truly obvious it takes five minutes to write and proves it; if it isn't, you just found the decision that needed an ADR.       |\n| \"I'll write it once the design stabilizes.\"         | The ADR is how the design stabilizes — forcing the alternatives onto paper surfaces the flaw before it ships to mainnet.                |\n| \"Nobody reads `adrs\u002F`.\"                             | The next agent, the auditor, and your future self do — especially when debugging why the invariant was chosen this way.                 |\n| \"I'll just edit the old ADR to match the new plan.\" | That destroys the historical record. Reversals get a new ADR; the old one is marked Superseded, never rewritten.                        |\n\n## Red flags\n\n- Starting implementation of an expensive-to-reverse decision with no `adrs\u002F`\n  entry.\n- A significant settlement \u002F finality \u002F upgradeability \u002F nix-purity choice\n  landing with the rationale living only in a PR description or a chat message.\n- Editing the body of an already-Accepted ADR instead of superseding it.\n- An ADR whose Context is generic (\"we need it to be scalable\") instead of\n  naming the actual domain constraint.\n- \"Alternatives Considered\" with one entry, or alternatives missing a concrete\n  \"Rejected because\".\n- Numbered \"Phase 1 \u002F Phase 2\" framing anywhere in the record.\n- Bundling implementation into the ADR commit instead of leaving the proposed\n  decision independently reviewable.\n\n## Hard rules\n\n1. ADRs live at `adrs\u002FNN-name.md` at the repo root — never `docs\u002Fdecisions\u002F`,\n   never anywhere else.\n2. The next index is zero-padded to the existing files' width; never reuse or\n   renumber.\n3. Always surface the proposed ADR for review. Continue only within existing\n   implementation authority; a model name is not approval. Preserve the\n   distinction between an advisory review and a genuinely missing decision.\n4. Never rewrite or delete an Accepted ADR. Reversals are a new ADR that\n   references the old one; the old `Status:` flips to\n   `Superseded by adrs\u002FMM-name.md`.\n5. Every alternative carries Pros, Cons, and an explicit \"Rejected because\".\n6. No numbered \"Phase\" framing — describe the decision and its consequences, not\n   a rollout sequence.\n7. Commit on the active feature branch using the verified repository workflow;\n   never push to a protected branch without an explicit instruction.\n\n## Failure modes\n\n- **`adrs\u002F` does not exist** — the repo has never recorded a decision. Create it\n  by writing the first record; do not silently drop the ADR into `docs\u002F`\n  instead.\n- **Topic already has an Accepted ADR** (caught by the Grep in step 3) — you are\n  following it or superseding it, not writing a duplicate. Decide which and act.\n- **Decision is actually reversible\u002Ftrivial** — no ADR. Record the choice in the\n  code and commit message and move on.\n- **No tracker issue exists** — link nothing rather than fabricating an ID; tell\n  the user an issue may be warranted.\n\n## Verification\n\n- `ls adrs` shows the new `adrs\u002FNN-name.md` with the correct zero-padded index\n  and no gap or collision with existing records.\n- The record has every section: Status (`Proposed`), Date, Issue link, Context,\n  Decision, Alternatives Considered (each with Pros \u002F Cons \u002F Rejected because),\n  and Consequences.\n- For a supersession: the new ADR references the old one, and `git diff` shows\n  the old file changed on its `Status:` line only.\n- The user has been shown the summary; implementation is isolated in a later\n  commit or child branch. Authorized implementation may proceed with the ADR\n  still `Proposed`; unresolved safety\u002Fauthority decisions remain real gates.\n- `git log --oneline -1` shows the ADR committed as its own small increment on a\n  branch, not bundled into an implementation commit.\n","# ADR\n\nRecords a significant architectural decision at `adrs\u002FNN-name.md`, surfaces it\nfor review, and keeps authorized work moving on a separate commit or child\nbranch. The ADR remains `Proposed` until a reviewer accepts it; drafting it\ncreates a review point, not an implicit pause.\n\n## When this applies\n\nWrite an ADR for decisions that are significant **and** expensive to reverse:\n\n- Settlement \u002F atomicity model, on-chain finality assumptions, reorg handling.\n- Contract upgrade strategy (proxy vs immutable), storage layout, trust\n  boundaries.\n- A type-level invariant that shapes a whole module (how invalid states are made\n  unrepresentable, which newtypes carry which guarantees).\n- Nix architecture: import-from-derivation, flake input pinning strategy, purity\n  tradeoffs, cross-platform (darwwwin vs nixxxos) split.\n- A dependency or external-contract assumption the rest of the system will lean\n  on.\n\nSkip the ADR for trivial, easily reversible choices (a local helper's shape, a\ntest fixture name, a lint config tweak). Those belong in the code and the commit\nmessage, not in `adrs\u002F`.\n\n## Core process\n\n1. **Locate `adrs\u002F` at the repo root** and read what is already there.\n   ```bash\n   ls adrs\n   ```\n   If the directory does not exist yet, create it by writing the first record at\n   `adrs\u002F01-name.md` (match whatever zero-padding width the team later settles\n   on; default to two digits).\n\n2. **Compute the next index** matching the existing files' zero-padded width.\n   Use `Glob` for `adrs\u002F*.md`, take the highest numeric prefix, add one, and\n   keep the same width (e.g. after `07-...` comes `08-...`, not `8-...`). Never\n   reuse or renumber an existing index.\n\n3. **Confirm it is not already settled and is genuinely significant.** `Grep`\n   `adrs\u002F` for the topic before drafting — if an Accepted ADR already covers it,\n   you are either following it (no new ADR) or superseding it (step 7).\n   Reversible, low-blast-radius choices do not get an ADR.\n\n4. **Scaffold the record** at `adrs\u002FNN-name.md` using the template below. Status\n   starts `Proposed`. Write the Context in domain terms — the actual constraints\n   (settlement atomicity, on-chain finality, nix purity \u002F\n   import-from-derivation, the type-level invariant at stake), not generic\n   platitudes.\n\n5. **Link the GitHub issue.** If no issue exists yet and the decision warrants\n   one, say so rather than inventing a link.\n\n6. **Surface the review point and preserve implementation authority.** Summarize\n   the decision and alternatives and link `adrs\u002FNN-name.md`. Use the current\n   native `openai-codex\u002Fgpt-6.1-sol` reviewer. Model selection does not grant\n   approval, publication or implementation authority.\n\n   Continue already-authorized reversible implementation under the owner's\n   standing advisory workflow, keeping it in a later commit or child branch. If\n   the decision itself remains genuinely unresolved and prevents safe work,\n   obtain that decision before building the new direction; do not infer it from\n   unrelated activity. The ADR remains `Proposed` until accepted. Follow the\n   repository's draft\u002Fready workflow rather than changing PR state by model.\n\n7. **On reversal, write a NEW ADR.** Never edit or delete an Accepted ADR.\n   Create `adrs\u002FMM-name.md` that references the old one, then flip only the old\n   record's `Status:` line to `Superseded by adrs\u002FMM-name.md`. The historical\n   rationale stays intact.\n\n8. **Commit as a small increment** on the active feature branch using the\n   verified repository workflow. Match the repo's commit style first. The\n   following example applies only to plain-Git checkouts:\n   ```bash\n   git log --oneline -10\n   git add adrs\u002FNN-name.md\n   git commit -m \"\u003Cmessage matching repo style>\"\n   ```\n   Prefer GitButler in an existing managed main worktree and plain Git\n   elsewhere, subject to explicit repository-local workflow instructions.\n\n## ADR template\n\n```markdown\n# NN. \u003CShort decision title>\n\n- Status: Proposed\n- Date: YYYY-MM-DD\n- Issue: \u003CGitHub issue link>\n\n## Context\n\n\u003CThe forces at play in domain terms: the invariant that must hold, the\nsettlement or finality constraint, the nix purity tradeoff, the type-level\nguarantee we need. State the problem and the desired end state — not the diff.>\n\n## Decision\n\n\u003CThe approach chosen, stated plainly. What we will do.>\n\n## Alternatives Considered\n\n### \u003CAlternative A>\n\n- Pros: \u003C...>\n- Cons: \u003C...>\n- Rejected because: \u003Cthe concrete reason this loses against the Decision>\n\n### \u003CAlternative B>\n\n- Pros: \u003C...>\n- Cons: \u003C...>\n- Rejected because: \u003C...>\n\n## Consequences\n\n\u003CWhat becomes easier and what becomes harder. New constraints the codebase now\ncarries, follow-up work, and the blast radius if this turns out wrong.>\n```\n\n## Common rationalizations\n\n| Excuse                                              | Reality                                                                                                                                 |\n| --------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |\n| \"An ADR is overhead, I'll just build it.\"           | A 15-minute record kills a 3-hour re-litigation of settlement model or proxy-vs-immutable months later, when no one remembers why.      |\n| \"The types are self-documenting.\"                   | The type system encodes _what_ is enforced; it cannot show which alternatives were rejected or why on-chain finality forced this shape. |\n| \"It's obvious, there's only one sane choice.\"       | If it is truly obvious it takes five minutes to write and proves it; if it isn't, you just found the decision that needed an ADR.       |\n| \"I'll write it once the design stabilizes.\"         | The ADR is how the design stabilizes — forcing the alternatives onto paper surfaces the flaw before it ships to mainnet.                |\n| \"Nobody reads `adrs\u002F`.\"                             | The next agent, the auditor, and your future self do — especially when debugging why the invariant was chosen this way.                 |\n| \"I'll just edit the old ADR to match the new plan.\" | That destroys the historical record. Reversals get a new ADR; the old one is marked Superseded, never rewritten.                        |\n\n## Red flags\n\n- Starting implementation of an expensive-to-reverse decision with no `adrs\u002F`\n  entry.\n- A significant settlement \u002F finality \u002F upgradeability \u002F nix-purity choice\n  landing with the rationale living only in a PR description or a chat message.\n- Editing the body of an already-Accepted ADR instead of superseding it.\n- An ADR whose Context is generic (\"we need it to be scalable\") instead of\n  naming the actual domain constraint.\n- \"Alternatives Considered\" with one entry, or alternatives missing a concrete\n  \"Rejected because\".\n- Numbered \"Phase 1 \u002F Phase 2\" framing anywhere in the record.\n- Bundling implementation into the ADR commit instead of leaving the proposed\n  decision independently reviewable.\n\n## Hard rules\n\n1. ADRs live at `adrs\u002FNN-name.md` at the repo root — never `docs\u002Fdecisions\u002F`,\n   never anywhere else.\n2. The next index is zero-padded to the existing files' width; never reuse or\n   renumber.\n3. Always surface the proposed ADR for review. Continue only within existing\n   implementation authority; a model name is not approval. Preserve the\n   distinction between an advisory review and a genuinely missing decision.\n4. Never rewrite or delete an Accepted ADR. Reversals are a new ADR that\n   references the old one; the old `Status:` flips to\n   `Superseded by adrs\u002FMM-name.md`.\n5. Every alternative carries Pros, Cons, and an explicit \"Rejected because\".\n6. No numbered \"Phase\" framing — describe the decision and its consequences, not\n   a rollout sequence.\n7. Commit on the active feature branch using the verified repository workflow;\n   never push to a protected branch without an explicit instruction.\n\n## Failure modes\n\n- **`adrs\u002F` does not exist** — the repo has never recorded a decision. Create it\n  by writing the first record; do not silently drop the ADR into `docs\u002F`\n  instead.\n- **Topic already has an Accepted ADR** (caught by the Grep in step 3) — you are\n  following it or superseding it, not writing a duplicate. Decide which and act.\n- **Decision is actually reversible\u002Ftrivial** — no ADR. Record the choice in the\n  code and commit message and move on.\n- **No tracker issue exists** — link nothing rather than fabricating an ID; tell\n  the user an issue may be warranted.\n\n## Verification\n\n- `ls adrs` shows the new `adrs\u002FNN-name.md` with the correct zero-padded index\n  and no gap or collision with existing records.\n- The record has every section: Status (`Proposed`), Date, Issue link, Context,\n  Decision, Alternatives Considered (each with Pros \u002F Cons \u002F Rejected because),\n  and Consequences.\n- For a supersession: the new ADR references the old one, and `git diff` shows\n  the old file changed on its `Status:` line only.\n- The user has been shown the summary; implementation is isolated in a later\n  commit or child branch. Authorized implementation may proceed with the ADR\n  still `Proposed`; unresolved safety\u002Fauthority decisions remain real gates.\n- `git log --oneline -1` shows the ADR committed as its own small increment on a\n  branch, not bundled into an implementation commit.\n",{"name":5,"description":7,"allowed-tools":47},[48,49,50,51,52,53,54,55,56,57,58],"Bash(ls adrs*)","Bash(git add adrs\u002F*)","Bash(git status *)","Bash(git log *)","Bash(git diff *)","Bash(git commit *)","Read","Write","Edit","Glob","Grep","master","43de034413ae8878259e4a93be6aed03add6ddda","ai\u002Fskills\u002Fadr",0,"https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig","https:\u002F\u002Fgithub.com\u002F0xgleb","2026-11-13 14:58:56",{"source":8,"skillName":5,"commands":67,"prompt":77,"zipAvailable":78},[68,71,74],{"tool":69,"command":70},"npx","npx skills add 0xgleb\u002Fdotconfig --skill adr",{"tool":72,"command":73},"bunx","bunx skills add 0xgleb\u002Fdotconfig --skill adr",{"tool":75,"command":76},"pnpm","pnpm dlx skills add 0xgleb\u002Fdotconfig --skill adr","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Fadr\u002FSKILL.md",true,[],[81,102,126,151,174,191],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":42},"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",[],[83,88,29,89,90,91,92,93,94,95,96,97,98,35,99,28,26,100,101],"create","never","worktrees","manage","inventory","repository","fix","git","only","cleanup","cd","isolation","mkdir","true",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":42},"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",[],[104,109,89,110,111,112,113,114,115,116,33,117,118,119,120,121,122,123,124,125],"draft","pr","remove","trigger","tool","issues","auto","rewrite","tone","telegram","sources","links","authority","logs","facts","output","replies",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":132,"publishedAt":42},"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",[],[133,134,135,136,137,138,139,140,141,142,143,35,144,31,145,146,147,148,149,150],"model","threat model","threat","first","threat model first","chain","time","security-review","design","forge","access","cargo audit","change","audit","read","write","edit","modeling",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":160,"publishedAt":42},"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",[157],{"categoryNo":158,"categoryName":159,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量",[161,162,163,41,115,164,35,33,31,165,147,166,167,168,169,170,171,95,172,173],"test","test inspector","fixture","false","run","coverage","error","number","URL","mktemp","snapshot","but","path",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":180,"publishedAt":42},"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",[],[181,182,161,183,110,184,147,185,186,95,187,188,35,189,31,190],"strong typing inspector","type","missed","domain","flags","grep","usd","gh","primitives","newtype",{"skillNo":192,"name":193,"nameZh":6,"description":194,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":195,"categories":196,"keywords":198,"publishedAt":42},"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",[197],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[199,200,31,201,202,39,203,204,141,205,33,26,206,207,208,209,210,211,212,213],"spec review","spec","plan","critique","pi","refine","implementation","sequencing","specifications","proposals","scratch","Existing","author","From Scratch","adversarial"]