[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69B830ASD0T86FZQ2SNXWKF":3,"skill-same:01M69B830ASD0T86FZQ2SNXWKF":56},{"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":23,"publishedAt":27,"linkOnly":28,"markdownContent":29,"markdownBody":30,"frontMatter":31,"refName":32,"commitSha":33,"skillDirectory":34,"forksCount":35,"repositoryHtmlUrl":36,"repositoryHomepageUrl":37,"ownerHtmlUrl":38,"ownerBlogUrl":39,"ownerDescription":40,"updatedAt":41,"install":42,"resources":55},"01M69B830ASD0T86FZQ2SNXWKF","accordant-overview",null,"What Accordant is, when to use model-based testing, and core concepts - use this skill when starting with Accordant or explaining its purpose","microsoft\u002Faccordant","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69B7QH8ZN957JJZVX9SAHW6",70,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faccordant\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Foverview\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[24,25,26],"accordant overview","testing","core","2026-11-10 10:12:30",false,"---\nname: accordant-overview\ndescription: What Accordant is, when to use model-based testing, and core concepts - use this skill when starting with Accordant or explaining its purpose\n---\n\n# Accordant Overview\n\nAccordant is a **model-based testing framework** for .NET. You write a *spec* — executable code that captures what your system should do — and Accordant generates tests, validates responses, and finds bugs.\n\n## When to Use Accordant\n\nAccordant excels when:\n- Your system is **stateful** (databases, caches, queues, sessions)\n- You have **many operations** that interact with shared state\n- You want to test **operation sequences** (not just individual calls)\n- You need to find **race conditions** in concurrent code\n- You want a **single source of truth** for behavior (not scattered assertions)\n\n## Core Concepts\n\n### The Spec\n\nA spec is executable code defining what your system should do:\n\n```csharp\nvar spec = new Spec\u003CBankState>();\n\nspec.Operation\u003Cstring, ApiResult\u003Cdecimal>>(\"CreateAccount\", (accountId, state) =>\n{\n    if (state.Accounts.ContainsKey(accountId))\n        return Expect.That\u003CApiResult\u003Cdecimal>>(r => r.IsConflict).SameState();\n\n    return Expect.That\u003CApiResult\u003Cdecimal>>(r => r.IsSuccess && r.Data == 0)\n           .ThenState\u003CBankState>(s => s.Accounts[accountId] = 0);\n});\n```\n\n### State\n\nState is what the system \"remembers\" between operations. Keep it minimal — only what's needed to define correct behavior:\n\n```csharp\n[State]\npublic partial class BankState\n{\n    public Dictionary\u003Cstring, decimal> Accounts { get; set; } = new();\n}\n```\n\n### Operations\n\nAn operation represents an atomic action — API call, method invocation, command. Each operation has:\n- **Apply**: What *should* happen (the spec logic)\n- **Execute**: What *actually* happens (calls the real system)\n\n### Test Generation\n\nAccordant explores operation sequences by simulating the spec, then runs generated tests against your real system:\n\n```csharp\nvar testCases = spec.GenerateTests(initialState, inputs, options);\nvar results = await spec.RunTests(context, initialState, testCases, executionOptions);\n```\n\n## The Typical Workflow\n\n1. **Define State** — What does the system track?\n2. **Define Operations** — What can happen to that state?\n3. **Bind to Real System** — Connect spec operations to actual API calls\n4. **Generate & Run Tests** — Let Accordant explore and validate\n\n## Example: BankAccount Spec\n\n```csharp\n[State]\npublic partial class BankState\n{\n    public Dictionary\u003Cstring, decimal> Accounts { get; set; } = new();\n}\n\nvar spec = new Spec\u003CBankState>();\n\n\u002F\u002F Create Account\nspec.Operation\u003Cstring, ApiResult\u003Cdecimal>>(\"CreateAccount\", (accountId, state) =>\n{\n    if (state.Accounts.ContainsKey(accountId))\n        return Expect.That\u003CApiResult\u003Cdecimal>>(r => r.IsConflict).SameState();\n\n    return Expect.That\u003CApiResult\u003Cdecimal>>(r => r.IsSuccess && r.Data == 0)\n           .ThenState\u003CBankState>(s => s.Accounts[accountId] = 0);\n});\n\n\u002F\u002F Withdraw\nspec.Operation\u003C(string AccountId, decimal Amount), ApiResult\u003Cdecimal>>(\"Withdraw\", (req, state) =>\n{\n    if (!state.Accounts.TryGetValue(req.AccountId, out var balance))\n        return Expect.That\u003CApiResult\u003Cdecimal>>(r => r.IsNotFound).SameState();\n\n    if (balance \u003C req.Amount)\n        return Expect.That\u003CApiResult\u003Cdecimal>>(r => r.IsBadRequest).SameState();\n\n    var newBalance = balance - req.Amount;\n    return Expect.That\u003CApiResult\u003Cdecimal>>(r => r.IsSuccess && r.Data == newBalance)\n           .ThenState\u003CBankState>(s => s.Accounts[req.AccountId] = newBalance);\n});\n```\n\n## Key Benefits\n\n| Benefit | Description |\n|---------|-------------|\n| **Single source of truth** | Business rules live in one place, not scattered across tests |\n| **Automatic test generation** | Cover operation sequences you'd never think to write manually |\n| **Concurrency testing** | Find race conditions with linearizability checking |\n| **Confidence through change** | Refactor freely; the spec validates correctness |\n\n## Next Steps\n\n- **State Design**: Learn to model state effectively\n- **Operations**: Master the Apply\u002FExecute pattern\n- **Test Generation**: Configure and run auto-generated tests\n","# Accordant Overview\n\nAccordant is a **model-based testing framework** for .NET. You write a *spec* — executable code that captures what your system should do — and Accordant generates tests, validates responses, and finds bugs.\n\n## When to Use Accordant\n\nAccordant excels when:\n- Your system is **stateful** (databases, caches, queues, sessions)\n- You have **many operations** that interact with shared state\n- You want to test **operation sequences** (not just individual calls)\n- You need to find **race conditions** in concurrent code\n- You want a **single source of truth** for behavior (not scattered assertions)\n\n## Core Concepts\n\n### The Spec\n\nA spec is executable code defining what your system should do:\n\n```csharp\nvar spec = new Spec\u003CBankState>();\n\nspec.Operation\u003Cstring, ApiResult\u003Cdecimal>>(\"CreateAccount\", (accountId, state) =>\n{\n    if (state.Accounts.ContainsKey(accountId))\n        return Expect.That\u003CApiResult\u003Cdecimal>>(r => r.IsConflict).SameState();\n\n    return Expect.That\u003CApiResult\u003Cdecimal>>(r => r.IsSuccess && r.Data == 0)\n           .ThenState\u003CBankState>(s => s.Accounts[accountId] = 0);\n});\n```\n\n### State\n\nState is what the system \"remembers\" between operations. Keep it minimal — only what's needed to define correct behavior:\n\n```csharp\n[State]\npublic partial class BankState\n{\n    public Dictionary\u003Cstring, decimal> Accounts { get; set; } = new();\n}\n```\n\n### Operations\n\nAn operation represents an atomic action — API call, method invocation, command. Each operation has:\n- **Apply**: What *should* happen (the spec logic)\n- **Execute**: What *actually* happens (calls the real system)\n\n### Test Generation\n\nAccordant explores operation sequences by simulating the spec, then runs generated tests against your real system:\n\n```csharp\nvar testCases = spec.GenerateTests(initialState, inputs, options);\nvar results = await spec.RunTests(context, initialState, testCases, executionOptions);\n```\n\n## The Typical Workflow\n\n1. **Define State** — What does the system track?\n2. **Define Operations** — What can happen to that state?\n3. **Bind to Real System** — Connect spec operations to actual API calls\n4. **Generate & Run Tests** — Let Accordant explore and validate\n\n## Example: BankAccount Spec\n\n```csharp\n[State]\npublic partial class BankState\n{\n    public Dictionary\u003Cstring, decimal> Accounts { get; set; } = new();\n}\n\nvar spec = new Spec\u003CBankState>();\n\n\u002F\u002F Create Account\nspec.Operation\u003Cstring, ApiResult\u003Cdecimal>>(\"CreateAccount\", (accountId, state) =>\n{\n    if (state.Accounts.ContainsKey(accountId))\n        return Expect.That\u003CApiResult\u003Cdecimal>>(r => r.IsConflict).SameState();\n\n    return Expect.That\u003CApiResult\u003Cdecimal>>(r => r.IsSuccess && r.Data == 0)\n           .ThenState\u003CBankState>(s => s.Accounts[accountId] = 0);\n});\n\n\u002F\u002F Withdraw\nspec.Operation\u003C(string AccountId, decimal Amount), ApiResult\u003Cdecimal>>(\"Withdraw\", (req, state) =>\n{\n    if (!state.Accounts.TryGetValue(req.AccountId, out var balance))\n        return Expect.That\u003CApiResult\u003Cdecimal>>(r => r.IsNotFound).SameState();\n\n    if (balance \u003C req.Amount)\n        return Expect.That\u003CApiResult\u003Cdecimal>>(r => r.IsBadRequest).SameState();\n\n    var newBalance = balance - req.Amount;\n    return Expect.That\u003CApiResult\u003Cdecimal>>(r => r.IsSuccess && r.Data == newBalance)\n           .ThenState\u003CBankState>(s => s.Accounts[req.AccountId] = newBalance);\n});\n```\n\n## Key Benefits\n\n| Benefit | Description |\n|---------|-------------|\n| **Single source of truth** | Business rules live in one place, not scattered across tests |\n| **Automatic test generation** | Cover operation sequences you'd never think to write manually |\n| **Concurrency testing** | Find race conditions with linearizability checking |\n| **Confidence through change** | Refactor freely; the spec validates correctness |\n\n## Next Steps\n\n- **State Design**: Learn to model state effectively\n- **Operations**: Master the Apply\u002FExecute pattern\n- **Test Generation**: Configure and run auto-generated tests\n",{"name":5,"description":7},"main","30a1dced713d0af39440662464a975471e5fd779","agent\u002Fskills\u002Foverview",9,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faccordant","https:\u002F\u002Fmicrosoft.github.io\u002Faccordant\u002F","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-10 01:14:01",{"source":8,"skillName":5,"commands":43,"prompt":53,"zipAvailable":54},[44,47,50],{"tool":45,"command":46},"npx","npx skills add microsoft\u002Faccordant --skill accordant-overview",{"tool":48,"command":49},"bunx","bunx skills add microsoft\u002Faccordant --skill accordant-overview",{"tool":51,"command":52},"pnpm","pnpm dlx skills add microsoft\u002Faccordant --skill accordant-overview","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faccordant\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Foverview\u002FSKILL.md",true,[],[57,67,78,90,100,110],{"skillNo":58,"name":59,"nameZh":6,"description":60,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":61,"categories":62,"keywords":64,"publishedAt":27},"01M69B8EEMW9QSCV3XPKH2D3T5","accordant-troubleshooting","Common mistakes and debugging tips for Accordant specs - use this skill when tests fail unexpectedly or specs don't behave as expected","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faccordant\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Ftroubleshooting\u002FSKILL.md",[63],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[65,66],"accordant troubleshooting","debugging",{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":74,"publishedAt":27},"01M69B8CHNWRMFG91HS42KMCA8","accordant-test-generation","How Accordant generates and runs tests - use this skill when configuring test generation, understanding state graphs, or running tests","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faccordant\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Ftest-generation\u002FSKILL.md",[73],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[75,76,77],"test","test generation","accordant test generation",{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":87,"publishedAt":27},"01M69B8A48NGKWDXWKE5WWJ0H6","accordant-state","How to design state models in Accordant - use this skill when defining what your system tracks between operations","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faccordant\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Fstate\u002FSKILL.md",[84],{"categoryNo":85,"categoryName":86,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",[88,89],"accordant state","design",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":97,"publishedAt":27},"01M69B87PRB888TD55KQC8N9QY","accordant-quickref","Quick reference and cheatsheet for Accordant API - use this skill for quick syntax lookup or code snippets","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faccordant\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Fquickref\u002FSKILL.md",[96],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[98,99],"accordant quickref","quick reference",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":107,"publishedAt":27},"01M69B85BBG2EBQJE2YFPYP88N","accordant-patterns","Common patterns in Accordant - response-dependent state, request derivations, error handling, and HTTP integration","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faccordant\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Fpatterns\u002FSKILL.md",[106],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[108,109],"accordant patterns","http",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":27},"01M69B80P9WNY5RS0EGKH0HM89","accordant-operations","How to define operations with Apply and Execute methods - use this skill when creating spec operations or understanding the Apply\u002FExecute pattern","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faccordant\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Foperations\u002FSKILL.md",[],[117,118],"accordant operations","spec"]